Polyline3d: 3D polyline的類型由PolyType屬性存儲, 它是由Poly3dType枚舉定義的整數值。PolyType屬性是一種繪製三維折線的近似方法 Polyline3d polyline = new Polyline3d(Poly3dType.SimplePoly, p3 ...
Polyline3d:
3D polyline的類型由PolyType屬性存儲,
它是由Poly3dType枚舉定義的整數值。PolyType屬性是一種繪製三維折線的近似方法
Polyline3d polyline = new Polyline3d(Poly3dType.SimplePoly, p3dc, false);
是否閉合:
polyline.Closed = false;
PolyType屬性可用於設置和返回折線的類型。
使用非預設構造函數Polyline3d()創建3D polyline實體時,可以指定類型
polyline.PolyType = Poly3dType.QuadSplinePoly;
polyline.ConvertToPolyType(Poly3dType.QuadSplinePoly);
ConvertToPolyType()方法使用SplineFit()方法進行轉換。如果需要其他設置,請使用此方法。
將當前三維折線轉換為特定類型的三維折線。
線段參數設置為每個樣條擬合折線生成的線段數量。大量的線段使折線更平滑。
polyline.SplineFit(Poly3dType.CubicSplinePoly, 3);
將當前3D折線轉換為預設類型的3D折線,並使用預設的插值線段數量。
資料庫對象的Splinetype和Splinesegs屬性相應地設置預設樣條類型和段數。
註意,當前Polyline3D對象必須是資料庫的常駐對象
polyline.SplineFit();
Polyline3D對象具有拉直(Straighten())方法,
用於去除樣條擬合,將樣條擬合的三維折線轉換為簡單的三維折線:
polyline.Straighten();
Polyline3D對象包含用於在polyline中添加和插入頂點的方法。
若要向3D折線添加頂點,請使用AppendVertex()方法:
該方法將新的頂點實體附加到三維折線實體的頂點列表中,並使該折線成為其所有者。
如果折線是資料庫駐留符,則必須在返回AppendVertex()方法後顯式關閉附加的頂點實體。
PolylineVertex3d vrtx = new PolylineVertex3d(new Point3d(0, 0, 0));
polyline.AppendVertex(vrtx);
polyline.Dispose();
要將頂點插入到3D折線,使用InsertVertexAt()方法:
將指定的頂點實體插入到指定頂點之後的3D折線實體中,並使折線成為其所有者。
如果折線是資料庫駐留,則必須在返回InsertVertexAt()方法後顯式關閉插入的頂點實體。
insert new vertex after the fourth vertex //在第四個頂點之後插入新頂點
polyline.InsertVertexAt(verticesID[3], vrtx1);
insert new vertex at the beginig of the polyline 在折線的起始點插入新的頂點
polyline.InsertVertexAt(ObjectId.Null, vrtx2);
讀取線段
foreach (ObjectId obj in polyline)
{
using (DBObject dbObj = trans.GetObject(obj, OpenMode.ForRead))
{
if (dbObj is PolylineVertex3d)
{
PolylineVertex3d poly3D = (PolylineVertex3d)dbObj;
}
}
}
Polyline3D對象具有隻讀長度屬性,該屬性返回以繪圖單元測量的所有段長度的和。
MessageBox.Show(polyline.Length.ToString());
Arcs:
圓弧是由一個圓創建的,使用起始角和結束角、中心點和半徑來定義。
起始角設置圓弧將從何處繪製的起始點。
結束角設置將繪製圓弧的結束點。這兩個角都是用弧度(0到2 *)測量的,
並以逆向時針方計演算法向量的原點。
如果起點和終點相同,則實體被畫成一個圓。
public Arc(Point3d center, double radius, double startAngle, double endAngle);
-
這個構造函數需要四個參數:
center —圓弧中心點的三維WCS坐標。
radius —弧的半徑。
startAngle —以弧度表示的弧的起始角。這個角的正方向是逆時針的。
endAngle —以弧度表示的弧的結束角。這個角的正方向是逆時針的。
Arc arc1 = new Arc(new Point3d(100, 50, 0), 50, 0, 45);
public Arc(Point3d center, Vector3d normal, double radius, double startAngle, double endAngle);
This constructor requires five parameters:
center — Three-dimensional WCS coordinates of the arc's center point.
normal — Three-dimensional vector of the arc’s normal.
radius — Radius of the arc.
startAngle — Start angle of the arc in radians.The positive direction for the angle is counter-clockwise.
endAngle — End angle of the arc in radians.The positive direction for the angle is counter-clockwise.
Arc arc2 = new Arc(new Point3d(100, 50, 0), new Vector3d(0, 0, 1), 150, 0, 90);
public Arc();
預設構造函數,它創建的弧的起始角和結束角為0.0,
半徑為0.0,圓心為(0, 0, 0),法向量為(0, 0, 1)。
using (var trans = F1Show.database.TransactionManager.StartTransaction())
{
using (BlockTableRecord btr = (BlockTableRecord)F1Show.database.CurrentSpaceId.GetObject(OpenMode.ForWrite))
{
btr.AppendEntity(arc1);
btr.AppendEntity(arc2);
trans.AddNewlyCreatedDBObject(arc1, true);
trans.AddNewlyCreatedDBObject(arc2, true);
}
trans.Commit();
}
圓弧的中心、半徑、起始角、結束角、法線和厚度屬性用於設置和獲取圓弧的中心、半徑、起始角和結束角、法線和厚度參數。
起始角和結束角屬性定義弧的起始角和結束角。角的正方向是逆時針方向,指向法向量的原點。
Arc對象還具有隻讀的TotalAngle和Length屬性。TotalAngle屬性獲取結束角和開始角之間的差(以弧度為單位)。Length屬性獲取弧的長度。
if (helperDevice != null)
{
helperDevice.Update();
}
Invalidate();
}
Ellipse:
可以使用下麵的Ellipse()構造函數之一創建Ellipse對象。
public Ellipse(Point3d center, Vector3d unitNormal, Vector3d majorAxis, double radiusRatio, double startAngle, double endAngle);
公共橢圓(Point3d中心,Vector3d單位法線,Vector3d主軸,雙半徑比,雙起始角,雙結束角);
這個構造函數需要6個參數:
中心 - 中心點的三維WCS坐標。
單位法向量——法向量的三維向量。
主軸 - 指定主軸(中心點到起點)的三維向量。
半徑比 - 橢圓的半徑比,即小半徑(小矢量的長度)與大半徑(大矢量的長度)之比。半徑比必須在0.000001到1.000000(小半徑<大半徑)之間。
起始角 - 橢圓的起始角,單位為弧度。這個角的正方向是逆時針方向,指向法向量的原點。
端角 - 橢圓的端角,單位為弧度。這個角的正方向是逆時針方向,指向法向量的原點。
如果起始角為0,結束角為2,則創建一個閉合橢圓,否則構造函數將生成橢圓弧。
創建一個閉合橢圓
Ellipse el1 = new Ellipse(new Point3d(100, 50, 0), new Vector3d(0, 0, 1), new Vector3d(10, 0, 0), 0.7, 0.0, 6.283185);
創建一個橢圓弧,起始角0.0,結束角3.141592弧度
Ellipse el2 = new Ellipse(new Point3d(100, 50, 0), new Vector3d(0, 0, 1), new Vector3d(10, 0, 0), 0.9, 0.0, 3.141592);
預設構造函數,它創建一個半徑為1的圓(半徑比為1的閉合橢圓),圓心為(0, 0, 0),法向量為(0, 0, 1)。
Ellipse el1 = new Ellipse();
Center屬性用於設置和獲取橢圓的中心。創建橢圓對象後,
設置Center屬性來更改橢圓中心的位置。
el1.Center = new Point3d(10, 0, 0);
起始角和結束角屬性
StartAngle和EndAngle屬性用於設置和獲取橢圓的起始角和結束角。
角的正方向是逆時針方向,指向法向量的原點。
如果將StartAngle設置為0,EndAngle設置為2,則創建一個閉合橢圓,否則橢圓將轉換為橢圓弧。註意,起始角和結束角必須相差大於1E - 6。
el1.StartAngle = 0;
el1.EndAngle = 1.571;
(MajorAxis and MinorAxis)主軸和小軸的性質是用來得到代表橢圓的主軸和小軸的向量。這兩個性質都是從橢圓中心點出發的
(MajorRadius and MinorRadius)大半徑和小半徑性質分別得到大半徑和小半徑。大半徑是主軸矢量的長度,小半徑是主軸矢量的長度。
Normal 法向量性質得到橢圓平面的法向量。
半徑比特性用於設置和得到小半徑與大半徑的比值。大半徑必須大於小半徑 ,
這意味著半徑比必須在0到1之間。如果輻射比大於1.0或小於1E - 6
el1.RadiusRatio = 0.5;
StartParam和EndParam屬性相應地獲取橢圓的開始和結束參數。用參數定義橢圓圓弧,用矢量參數方程:
p(u) = c + a* cos(u) + b* sin(u)
c 橢圓的中心。
a 橢圓的主軸。
b - 橢圓的小軸。
獲取指定角度的參數
要獲取與指定角度對應的參數值,可以使用GetParameterAtAngle()
public double GetParameterAtAngle(double angle);
參數求角
要獲得與指定參數值對應的角度,使用GetAngleAtParameter()方法:
public double GetAngleAtParameter(double value);
設置橢圓的參數
要設置橢圓的屬性,還可以使用set()方法:
public void Set(Point3d center, Vector3d unitNormal, Vector3d majorAxis, double radiusRatio, double startAngle, double endAngle);
具體示例:
Ellipse ellipse = new Ellipse();
ellipse.Set(new Point3d(0, 0, 0), new Vector3d(0, 0, 1), new Vector3d(10, 0, 0), 0.5, 0, 6.2830);
using (var trans = F1Show.database.TransactionManager.StartTransaction())
{
using (BlockTableRecord btr = (BlockTableRecord)F1Show.database.CurrentSpaceId.GetObject(OpenMode.ForWrite))
{
btr.AppendEntity(el1);
btr.AppendEntity(ellipse);
trans.AddNewlyCreatedDBObject(ellipse, true);
}
trans.Commit();
}
if (helperDevice != null)
{
helperDevice.Update();
}
Invalidate();
未完待續。。