Teigha.net實體屬性註釋

Polyline3d: 算法

3D polyline的類型由PolyType屬性存儲,數據庫

它是由Poly3dType枚舉定義的整數值。PolyType屬性是一種繪製三維折線的近似方法函數

Polyline3d polyline = new Polyline3d(Poly3dType.SimplePoly, p3dc, false);ui

是否閉合:spa

polyline.Closed = false;3d

 

PolyType屬性可用於設置和返回折線的類型。orm

使用非默認構造函數Polyline3d()建立3D polyline實體時,能夠指定類型對象

polyline.PolyType = Poly3dType.QuadSplinePoly;ip

polyline.ConvertToPolyType(Poly3dType.QuadSplinePoly);it

 

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();

 

未完待續。。

相關文章
相關標籤/搜索