⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 profile.cs

📁 剖面生成器
💻 CS
📖 第 1 页 / 共 3 页
字号:

		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 + -