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

📄 ruler.cs

📁 剖面生成器
💻 CS
字号:
using System;
using SuperMapLib;
using System.Drawing;

namespace ProfileCtrl
{
	/// <summary>
	/// 标尺类:剖面图上左右两个垂直刻度尺
	/// </summary>
	public class Ruler
	{
        float scaleX, scaleY, scaleT=0.005f;//文本缩放比例因子
		string caption;
		private int interval=30, leng=5, space;//interval 刻度线间隔,leng刻度线的长度,space标尺距钻孔的距离
		/// <summary>
		/// 刻度线间隔
		/// </summary>
		public int Interval
		{
			get{return interval;}
			set{interval=value;}
		}
		/// <summary>
		/// 标尺刻度线的长度
		/// </summary>
		public int Leng
		{
			get{return leng;}
			set{leng=value;}
		}
//		/// <summary>
//		/// 标尺距钻孔的距离
//		/// </summary>
//		public int Space
//		{
//			get{return space;}
//			set{space=value;}
//		}
		/// <summary>
		/// 文本缩放比例因子
		/// </summary>
		public float ScaleT
		{
			get{return scaleT;}
			set{scaleT=value;}
		}
		public Ruler()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
			caption=PublicValue.caption;
			this.scaleX=PublicValue.scaleX;
			this.scaleY=PublicValue.scaleY;
			this.space=PublicValue.space;
		}
		
		
		/// <summary>
		/// 绘制标注层的标尺刻度线(左右两条标尺刻度线)
		/// </summary>
		/// <param name="objRs">标注层数据集</param>
		/// <param name="bore">钻孔</param>
		public void Draw(soRecordset objRs,Bore[] bore )	//标注层
		{
		  
			//两侧标高线
			float maxY,minY;	//取出钻孔的最大标高和最小标高
			int zkCount=bore.Length;
			maxY = bore[0].GetCDBG()[0];
			minY = bore[0].GetCDBG()[bore[0].GetCDBG().Length-1];
			for(int i=1;i<zkCount;i++)
			{
				if(maxY < bore[i].GetCDBG()[0])
				{
					maxY = bore[i].GetCDBG()[0];
				}
				if(minY > bore[i].GetCDBG()[bore[i].GetCDBG().Length-1])
				{
					minY = bore[i].GetCDBG()[bore[i].GetCDBG().Length-1];
				}				
			}
			
			int tCount,bCount,count;
			if(maxY > 0)
			{
				tCount = (int)Math.Ceiling(maxY/interval);
			}
			else
			{
				tCount = (int)Math.Floor(maxY/interval);
			}
			if(minY > 0)
			{
				bCount = (int)Math.Ceiling(minY/interval);
			}
			else
			{
				bCount = (int)Math.Floor(minY/interval);
			}
			count = tCount - bCount;
			int topY = tCount * interval;			//顶部点
			float x1 = (bore[0].X- space)/scaleX ;			//左边线
			soPoint objPoint = new soPoint();			
			soPoints objPoints = new soPoints();
			soGeoLine objGeoLine = new soGeoLine();
			objPoint.x = x1;
			objPoint.y = (float)topY/scaleY;
			objPoints.Add(objPoint);
			objPoint.y -= count * interval/scaleY;
			objPoints.Add(objPoint);
			objGeoLine.AddPart(objPoints);
			objRs.AddNew((soGeometry)objGeoLine);
			objRs.Update();
			float x2 = (bore[zkCount-1].X + space)/scaleX;	//右边线
			objPoints = new soPoints();
			objGeoLine = new soGeoLine();
			objPoint.x = x2;
			objPoint.y = (float)topY/scaleY;
			objPoints.Add(objPoint);
			objPoint.y -= count * interval/scaleY;
			objPoints.Add(objPoint);
			objGeoLine.AddPart(objPoints);
			objRs.AddNew((soGeometry)objGeoLine);
			objRs.Update();	
			soGeoText objGeoText = new soGeoText();		
			objGeoText.TextStyle.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.Black));
			objGeoText.TextStyle.FontName = "宋体";
			objGeoText.TextStyle.FontHeight = scaleT;
			objGeoText.TextStyle.FontWidth = scaleT;
			soTextPart objText = new soTextPart();
			for(int i=0;i<=count;i++)
			{
				objPoints = new soPoints();		//左边
				objGeoLine = new soGeoLine();
				objPoint.x = x1;
				objPoint.y = topY/scaleY;
				objPoints.Add(objPoint);
				objPoint.x = x1 - leng/scaleX;//leng 刻度线的长度
				objPoints.Add(objPoint);
				objGeoLine.AddPart(objPoints);
				objRs.AddNew((soGeometry)objGeoLine);
				objRs.Update();
				objText.x = objPoint.x - topY.ToString().Length * objGeoText.TextStyle.FontWidth;
				objText.y = objPoint.y + objGeoText.TextStyle.FontHeight * 0.5;
				objText.Text = topY.ToString();
				objGeoText.AddPart(objText);

				objPoints = new soPoints();		//右边
				objGeoLine = new soGeoLine();
				objPoint.x = x2;
				objPoints.Add(objPoint);
				objPoint.x = x2 + leng/scaleX;
				objPoints.Add(objPoint);
				objGeoLine.AddPart(objPoints);
				objRs.AddNew((soGeometry)objGeoLine);
				objRs.Update();
				objText.x = objPoint.x;
				objGeoText.AddPart(objText);
				
				topY -= interval;
			}				
			objRs.AddNew((soGeometry)objGeoText);
			objRs.Update();

			topY += (count+1) * interval;	//恢复原值

			//剖面图名称和比例尺
			objGeoText = new soGeoText();		
			objGeoText.TextStyle.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.Black));
			objGeoText.TextStyle.FontName = "黑体";
			objGeoText.TextStyle.FontHeight = 2 * scaleT;
			objGeoText.TextStyle.FontWidth = 2 * scaleT;
			objText = new soTextPart();
			objText.Text = caption;
			int cn = 0;					//字符串长度
			foreach(char ch in objText.Text)
			{
				cn = ch>=0x4e00&&ch<= 0x9fa5 ? cn+2 : cn+1;	
			}
			objText.x = (bore[zkCount-1].X/scaleX - cn * objGeoText.TextStyle.FontWidth)*0.5;
			objText.y = topY/scaleY + objGeoText.TextStyle.FontHeight * 2;
			objGeoText.AddPart(objText);
			objRs.AddNew((soGeometry)objGeoText);
			objRs.Update();
			objGeoText = new soGeoText();
			objGeoText.TextStyle.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.Blue));
			objGeoText.TextStyle.FontName = "宋体";
			objGeoText.TextStyle.FontHeight = scaleT;
			objGeoText.TextStyle.FontWidth = scaleT;
			objText.Text = "比例尺   横 1:" + scaleX.ToString() + "  纵 1:"  + scaleY.ToString();
			cn = 0;					//字符串长度
			foreach(char ch in objText.Text)
			{
				cn = ch>=0x4e00&&ch<= 0x9fa5 ? cn+2 : cn+1;	
			}
			objText.x = (bore[zkCount-1].X/scaleX - cn * objGeoText.TextStyle.FontWidth)*0.5;
			objText.y = topY/scaleY + objGeoText.TextStyle.FontHeight;
			objGeoText.AddPart(objText);
			objRs.AddNew((soGeometry)objGeoText);
			objRs.Update();

			objPoint = null;
			objPoints = null;
			objGeoLine = null;
			objText = null;	
			objGeoText = null;	
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -