📄 ruler.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 + -