📄 profile.cs
字号:
private void Profile_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
superWorkspace.Datasources[caption].Commit();
}
#endregion
#region 属性
public AxSuperMapLib.AxSuperWorkspace SuperWorkspace
{
get
{
return superWorkspace;
}
set
{
superWorkspace = value;
superMap.Connect(superWorkspace.CtlHandle);
superMap.Dock = DockStyle.Fill;
superMap.BorderStyle = 1; //固定单个边框
superMap.Appearance = 1; //三维窗口效果
objFill = superWorkspace.Resources.FillStyleLib;
}
}
public ArrayList ArrList
{
get
{
return arrList;
}
set
{
arrList = value;
zkCount = arrList.Count;
}
}
public bool IsSum
{
get
{
return isSum;
}
set
{
isSum = value;
}
}
public string ProfileName
{
get
{
return caption;
}
set
{
caption = value;
}
}
#endregion
#region 主调方法DrawProfile()
public bool DrawProfile()
{
if(!InitData()) return false; //初始化数据
if(superWorkspace.Datasources[caption] != null)
{
MessageBox.Show(caption + "数据源已经存在!请换名或删除以后重新生成");
return false;
}
soDataSource objDatSrc = superWorkspace.CreateDataSource(caption+".sdb",caption,seEngineType.sceSDB,true,true,false,"");
if(objDatSrc == null)
{
MessageBox.Show("创建数据源错误!");
return false;
}
objDatSrc.CoordinateUnits = seUnits.scuMeter;
soDataset objLabelDs = objDatSrc.CreateDataset("标注",seDatasetType.scdCAD,seDatasetOption.scoDefault,null);
soDatasetVector objDV= (soDatasetVector)objLabelDs;
soRecordset objLabelRs = objDV.Query("",true,null,"");
// this.DrawLabel(objRs);
Ruler ruler=new Ruler();//实例化一个标尺对象
ruler.Draw(objLabelRs,bore);//画出两个标尺
superMap.Layers.AddDataset(objLabelDs,false);
soDataset objColumnDs = objDatSrc.CreateDataset("柱状图",seDatasetType.scdCAD,seDatasetOption.scoDefault,null);
objDV= (soDatasetVector)objColumnDs;
soFieldInfo objFI = new soFieldInfo();
objFI.Name = "岩性";
objFI.Type = seFieldType.scfText;
objFI.Size = 30;
objDV.CreateField(objFI);
soRecordset objColumnRs = objDV.Query("",true,null,"");//柱状图记录集
soDataset objColumnLineDs = objDatSrc.CreateDataset("岩性线",seDatasetType.scdLine,seDatasetOption.scoDefault,null);
objDV= (soDatasetVector)objColumnLineDs;
objDV.CreateField(objFI);
objFI = new soFieldInfo();
objFI.Name = "Color";
objFI.Type = seFieldType.scfText;
objFI.Size = 20;
objDV.CreateField(objFI);
soRecordset objColumnLineRs = objDV.Query("",true,null,""); //岩性线记录集
Columns columns=new Columns(this.bore);//实例化探孔类对象
columns.Draw(objColumnRs,objColumnLineRs,objFill);//画出所有的探孔及其标注
superMap.Layers.AddDataset(objColumnDs,true);
superMap.Layers.AddDataset(objColumnLineDs,true);
soDataset objDs = objDatSrc.CreateDataset("剖面线",seDatasetType.scdLine,seDatasetOption.scoDefault,null);
objDV= (soDatasetVector)objDs;
soRecordset objRs = objDV.Query("",true,null,"");
// this.DrawTB(objRs); //地面线、孔底线
StratumLine stratumLine=new StratumLine(this.bore);//实例化地层线
stratumLine.Draw(objRs);
superMap.Layers.AddDataset(objDs,false);
//
// if(isSum)
// {
// superTopo.MergePseudoNodes = true;
// superTopo.CleanIdenticalVertices = true;
// superTopo.CleanRepeatedLines = true;
// superTopo.MergeRedundantNodes = true;
// superTopo.IntersectLines = false;
// DrawSumLine(objRs);
// superTopo.Clean(objDs);
// }
superMap.Layers["岩性线@"+caption].Snapable = true;
objFI = null;
superMap.Action = seAction.scaSelect;
superMap.ViewEntire();
return true;
}
#endregion
#region "初始化数据"
private bool InitData()
{
if(zkCount < 2)
{
MessageBox.Show("请传入至少两个钻孔的数据!");
return false;
}
//初始化选项对话框
FormOption frmOption = new FormOption();
if(frmOption.ShowDialog() == DialogResult.OK)
{
caption = PublicValue.caption;
scaleX = PublicValue.scaleX;
scaleY = PublicValue.scaleY;
frmOption.Dispose();
}
else
{
frmOption.Dispose();
return false;
}
//初始化钻孔数据
bore = new Bore[zkCount];
for(int i=0;i<zkCount;i++)
{
bore[i] = new Bore();
bool isSuccess = bore[i].InitData(arrList[i].ToString(),isSum);
if(!isSuccess)
{
return false;
}
}
//计算剖面图的钻孔相对横,剖面线以折线拉直,顺序以选取时的顺序
for(int i=1;i<zkCount;i++)
{
double dX,dY,d;
dX = bore[i].KKHZB - bore[i-1].KKHZB;
dY = bore[i].KKZZB - bore[i-1].KKZZB;
d = Math.Sqrt(dX*dX + dY*dY);
bore[i].X = bore[i-1].X + (float)d;
}
return true;
}
#endregion
#region 拓朴成剖面图
private void Topo()
{
superMap.Layers.DisableEdit();
superMap.Action = seAction.scaSelect;
superTopo.MergePseudoNodes = true;
superTopo.CleanIdenticalVertices = true;
superTopo.CleanOvershootDangles = true;
superTopo.CleanRepeatedLines = true;
superTopo.ExtendDangleLines = true;
superTopo.IntersectLines = true;
superTopo.MergeRedundantNodes = true;
soDataset objDs = superMap.Layers["剖面线@"+caption].Dataset;
soRecordset objRs = ((soDatasetVector)objDs).Query("",true,null,"");
float xCoor = -(float)space/scaleX;
//有问题要调试 2004.5.10 9:43
// AutoDraw autodraw=new AutoDraw(bore[0]);
// autodraw.DrawLine(objRs,xCoor,scaleY);
//
// xCoor = (bore[zkCount-1].X + space)/scaleX;
// autodraw=new AutoDraw(bore[zkCount-1]);
// autodraw.DrawLine(objRs,xCoor,scaleY);
superTopo.Clean(objDs);
if(!superWorkspace.Datasources[caption].IsAvailableDatasetName("剖面"))
{
superWorkspace.Datasources[caption].DeleteDataset("剖面");
}
soDataSource objDatSrc = superWorkspace.Datasources[caption];
try
{
superTopo.BuildPolygons(objDs,objDatSrc,"剖面");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
if(!superWorkspace.Datasources[caption].IsAvailableDatasetName("剖面图"))
{
superMap.Layers.RemoveAt("剖面图@"+caption);
superWorkspace.Datasources[caption].DeleteDataset("剖面图");
}
objDs = objDatSrc.CreateDataset("剖面图",seDatasetType.scdCAD,seDatasetOption.scoDefault,null);
soDatasetVector objDV= (soDatasetVector)objDs;
soFieldInfo objFI = new soFieldInfo();
objFI.Name = "岩性";
objFI.Type = seFieldType.scfText;
objFI.Size = 30;
objDV.CreateField(objFI);
objRs = objDV.Query("",true,null,"");
soDatasetVector objDvP = (soDatasetVector)objDatSrc.Datasets["剖面"]; //取出面集
soDatasetVector objDvYXX= (soDatasetVector)objDatSrc.Datasets["岩性线"]; //取出岩性线数据集
soRecordset objRsP = objDvP.Query("",true,null,"");
objRsP.MoveFirst();
soStyle objStyle = new soStyle();
soGeometry objGeometry;
for(int i=0;i<objRsP.RecordCount;i++)
{
objGeometry = objRsP.GetGeometry();
objRs.AddNew(objGeometry);
soRecordset objRsLine = objDvYXX.QueryEx(objGeometry,seSpatialQueryMode.scsContaining,"");
objRsLine.MoveFirst();
objRs.SetFieldValue("岩性",objRsLine.GetFieldValue("岩性"));
objStyle.BrushStyle = objFill.FindIndex(objFill.Find(objRsLine.GetFieldValue("岩性").ToString(),1));
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromName(objRsLine.GetFieldValue("Color").ToString())));
objGeometry.Style = objStyle;
objRs.Update();
objRsP.MoveNext();
}
objDatSrc.DeleteDataset("剖面");
superMap.Layers.RemoveAt("岩性线@"+caption);
objDatSrc.DeleteDataset("岩性线");
superMap.Layers.RemoveAt("剖面线@"+caption);
objDatSrc.DeleteDataset("剖面线");
// superMap.Layers.RemoveAt("柱状图@"+caption);
// objDatSrc.DeleteDataset("柱状图");
superMap.Layers.AddDataset(objDs,false);
superMap.Layers.SetEditableLayer("剖面图@"+caption);
superMap.CtlRefresh();
objStyle = null;
objFI = null;
bLegend.Enabled = true;
bRegionJoin.Enabled = true;
bTopo.Enabled = false;
bSmoothA.Enabled = false;
bSmoothC.Enabled = false;
bEditLine.Enabled = false;
this.EnableLineEdit(false);
}
#endregion
#region 图例
private void DrawLegend(float width, float height, int rowCount)
{
soDatasetVector objDV= (soDatasetVector)superWorkspace.Datasources[caption].Datasets["剖面图"];
soRecordset objRs = objDV.Query("",true,null,"");
if(objRs.RecordCount < 1) return; //没有记录返回
float top=0, left=0;
for(int i=0;i<zkCount;i++) //找出最深的钻孔
{
if(bore[i].GetCDBG()[bore[i].GetCDBG().Length-1] < top)
{
top = bore[i].GetCDBG()[bore[i].GetCDBG().Length-1];
}
}
top = top/scaleY - 0.02f; //距最深钻孔2cm下的地方开始画
soTextPart objText = new soTextPart();
soGeoText objGeoText = new soGeoText();
soGeoRect objGeoRect = new soGeoRect();
soGeoRegion objGeoRegion = new soGeoRegion();
objGeoText.TextStyle.FontHeight = objGeoText.TextStyle.FontWidth = scaleT;
// objGeoRect.Width = width;
// objGeoRect.Height = height;
int[] brushIndex = new int[objRs.RecordCount];
objRs.MoveFirst();
for(int i=0;i<objRs.RecordCount;i++)
{
brushIndex[i] = objRs.GetGeometry().Style.BrushStyle;
objRs.MoveNext();
}
for(int i=0;i<objRs.RecordCount-1;i++)
{
if(brushIndex[i]>0)
{
for(int j=i+1;j<objRs.RecordCount;j++)
{
if(brushIndex[j] == brushIndex[i])
brushIndex[j] = -2;
}
}
}
objDV= (soDatasetVector)superWorkspace.Datasources[caption].Datasets["标注"];
soRecordset objRsTarget = objDV.Query("",true,null,"");
int count = 0;
objRs.MoveFirst();
for(int i=0;i<objRs.RecordCount;i++)
{
if(brushIndex[i]>0)
{
objGeoRect.Left = left;
objGeoRect.Top = top;
objGeoRect.Right = left + width;
objGeoRect.Bottom = top - height;
objGeoRegion = objGeoRect.ConvertToRegion();
objGeoRegion.Style = objRs.GetGeometry().Style;
objRsTarget.AddNew((soGeometry)objGeoRegion);
objRsTarget.Update();
objText.x = left + width;
objText.y = top - height * 0.4;
objText.Text = objFill.get_StyleItemName(objFill.FindID(objGeoRegion.Style.BrushStyle));
objGeoText.AddPart(objText);
left += width + 20 * scaleT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -