?? columns.cs
字號:
using System;
using SuperMapLib;
using System.Drawing;
namespace ProfileCtrl
{
/// <summary>
/// 鉆孔柱狀圖類
/// </summary>
public class Columns
{
private Bore[] bores;//鉆孔數(shù)據(jù)的集合
private float scaleX, scaleY, scaleT=0.005f;//scaleT 文本縮放比例因子
private float width1=0.02f,width;//柱狀圖的寬度
private int zkCount;
private bool isSum=true;//是否是大層
/// <summary>
/// 是否是大層
/// </summary>
public bool IsSum
{
get{return isSum;}
set{isSum=value;}
}
/// <summary>
/// 文本縮放比例因子
/// </summary>
public float ScaleT
{
get{return scaleT;}
set{scaleT=value;}
}
/// <summary>
/// 柱狀圖的寬度
/// </summary>
public float Width
{
get{return width;}
set{width=value;}
}
public Columns(Bore[] bore1)
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
bores=bore1;
this.scaleX=PublicValue.scaleX;
this.scaleY=PublicValue.scaleY;
zkCount=bore1.Length;
}
public void Draw(soRecordset objColumnRs,soRecordset objColumnLineRs,soFillStyleLib objFill)
{
for(int i=0;i<zkCount;i++)
{
this.DrawColumn(objColumnRs,objFill,bores[i]);
this.DrawColumnLine(objColumnLineRs,bores[i]);
this.DrawText(objColumnRs,isSum,bores[i]);
}
}
/// <summary>
/// 畫出每個(gè)鉆孔
/// </summary>
/// <param name="objRs"></param>
/// <param name="xCoor"></param>
/// <param name="scaleY"></param>
public void DrawLine(soRecordset objRs,float xCoor,float scaleY,Bore bore)
{
soPoint objPoint = new soPoint();
soPoints objPoints = new soPoints();
soGeoLine objGeoLine = new soGeoLine();
// objPoint.x = bore..x/scaleX;
objPoint.x = xCoor;
objPoint.y = bore.GetCDBG()[0]/scaleY;
objPoints.Add(objPoint);
objPoint.y = bore.GetCDBG()[bore.GetCDBG().Length-1]/scaleY;
objPoints.Add(objPoint);
objGeoLine.AddPart(objPoints);
objRs.AddNew((soGeometry)objGeoLine);
objRs.Update();
objPoint = null;
objPoints = null;
objGeoLine = null;
}
/// <summary>
/// 畫出探孔的每段地層線(巖性線)
/// </summary>
/// <param name="objRs">巖性線層</param>
/// <param name="scaleX">剖面圖橫比例尺</param>
/// <param name="scaleY">剖面圖縱比例尺</param>
private void DrawColumnLine(soRecordset objRs,Bore bore)
{
soPoints objPoints;
soGeoLine objGeoLine;
soPoint objPoint = new soPoint();
for(int i=1;i<bore.GetCDBG().Length;i++)
{
objPoints = new soPoints();
objGeoLine = new soGeoLine();
objPoint.x = bore.X/scaleX;
objPoint.y = bore.GetCDBG()[i-1]/scaleY;
objPoints.Add(objPoint);
objPoint.y = bore.GetCDBG()[i]/scaleY;
objPoints.Add(objPoint);
objGeoLine.AddPart(objPoints);
objRs.AddNew((soGeometry)objGeoLine);
objRs.SetFieldValue("巖性",bore.GetYXBH()[i]);
objRs.SetFieldValue("Color",bore.GetDCYS()[i]);
objRs.Update();
objPoints = null;
objGeoLine = null;
}
objPoint = null;
}
/// <summary>
/// 畫出探孔柱狀圖
/// </summary>
/// <param name="objRs">存放柱狀圖的cad數(shù)據(jù)集</param>
/// <param name="objFill">每種巖性地層的圖例樣式</param>
/// <param name="scaleX">橫比例尺</param>
/// <param name="scaleY">縱比例尺</param>
/// <param name="width">柱狀圖的寬度</param>
private void DrawColumn(soRecordset objRs, soFillStyleLib objFill,Bore bore) //畫柱狀圖
{
width = width1/2; //巖性柱寬的一半
soPoints objPoints;
soGeoRegion objGeoRegion;
soStyle objStyle = new soStyle();
soPoint objPoint1 = new soPoint();
soPoint objPoint2 = new soPoint();
for(int i=1;i<bore.GetCDBG().Length;i++)
{
objPoints = new soPoints();
objGeoRegion = new soGeoRegion();
objPoint1.x = objPoint2.x = bore.X/scaleX - width;
objPoint1.y = bore.GetCDBG()[i-1]/scaleY;
objPoint2.y = bore.GetCDBG()[i]/scaleY;
objPoints.Add(objPoint2);
objPoints.Add(objPoint1);
objPoint1.x = objPoint2.x = bore.X/scaleX + width;
objPoints.Add(objPoint1);
objPoints.Add(objPoint2);
objGeoRegion.AddPart(objPoints);
// System.Windows.Forms.MessageBox.Show(bore.GetYXBH()[i].ToString()+"\r\n"+objFill.Find(bore.GetYXBH()[i],0).ToString());
objStyle.BrushStyle = objFill.FindIndex(objFill.Find(bore.GetYXBH()[i],0));
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromName(bore.GetDCYS()[i])));
objGeoRegion.Style = objStyle;
objRs.AddNew((soGeometry)objGeoRegion);
objRs.SetFieldValue("巖性",bore.GetYXBH()[i]);
objRs.Update();
objPoints = null;
}
objPoint1 = null;
objPoint2 = null;
objGeoRegion = null;
objStyle = null;
}
/// <summary>
/// 在對應(yīng)的位置標(biāo)注每個(gè)地層的底界深度
/// </summary>
/// <param name="objRs">存放柱狀圖的cad數(shù)據(jù)集</param>
/// <param name="scaleX">地圖橫比例尺</param>
/// <param name="scaleY">地圖縱比例尺</param>
/// <param name="scaleT">字體的大小</param>
/// <param name="isSum">是否概化</param>
private void DrawText(soRecordset objRs, bool isSum,Bore bore)
{
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();
objText.x = bore.X/scaleX + objGeoText.TextStyle.FontWidth;
soPoints objPoints;
soGeoLine objGeoLine;
soPoint objPoint1,objPoint2;
objPoint1 = new soPoint();
objPoint1.x = bore.X/scaleX;
objPoint2 = new soPoint();
objPoint2.x = bore.X/scaleX + objGeoText.TextStyle.FontWidth;
if(isSum)
{
for(int i=1;i<bore.GetCDBG().Length-1;i++)
{
objPoints = new soPoints();
objGeoLine = new soGeoLine();
objPoint1.y = objPoint2.y = bore.GetCDBG()[i]/scaleY;
objPoints.Add(objPoint1);
objPoints.Add(objPoint2);
objGeoLine.AddPart(objPoints);
objRs.AddNew((soGeometry)objGeoLine);
objRs.Update();
objText.y = objPoint1.y + objGeoText.TextStyle.FontWidth * 0.5;
objText.Text = bore.GetCDBG()[i].ToString();
objGeoText.AddPart(objText);
}
}
//孔口標(biāo)注
objText.x = bore.X/scaleX - bore.ZKYSBH.ToString().Length * objGeoText.TextStyle.FontWidth * 0.5;
objText.y = bore.DMBG/scaleY + objGeoText.TextStyle.FontHeight * 2;;
objText.Text = bore.ZKYSBH.ToString();
objGeoText.AddPart(objText);
objText.x = bore.X/scaleX - bore.DMBG.ToString().Length * objGeoText.TextStyle.FontWidth * 0.5;
objText.y -= objGeoText.TextStyle.FontHeight;
objText.Text = bore.DMBG.ToString();
objGeoText.AddPart(objText);
objPoints = new soPoints();
objGeoLine = new soGeoLine();
objPoint1.y = objText.y;
int leng = bore.ZKYSBH.Length>bore.DMBG.ToString().Length ? bore.ZKYSBH.Length : bore.DMBG.ToString().Length;
objPoint1.x = bore.X/scaleX - leng * objGeoText.TextStyle.FontWidth * 0.5;
objPoints.Add(objPoint1);
objPoint1.x += leng * objGeoText.TextStyle.FontWidth;
objPoints.Add(objPoint1);
objGeoLine.AddPart(objPoints);
objRs.AddNew((soGeometry)objGeoLine);
objRs.Update();
//孔底標(biāo)注
objText.x = bore.X/scaleX - bore.GetCDBG()[bore.GetCDBG().Length-1].ToString().Length * objGeoText.TextStyle.FontWidth * 0.5;
objText.y = bore.GetCDBG()[bore.GetCDBG().Length-1]/scaleY;
objText.Text = bore.GetCDBG()[bore.GetCDBG().Length-1].ToString();
objGeoText.AddPart(objText);
objRs.AddNew((soGeometry)objGeoText);
objRs.Update();
objPoint1 = null;
objPoint2 = null;
objPoints = null;
objGeoLine = null;
objText = null;
objGeoText = null;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -