天天看點

AutoCAD .Net 建立多段線Polyline

以下代碼展示:

往模型空間中添加一條多段線Polyline。多段線有三個頂點,分别為(0, 0) (100, 100) (100, 0)。

設定多段線的圖層、顔色、線型、線寬請參考文章AutoCAD .Net 建立直線Line

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Colors;

[CommandMethod("NewPolyline")]
public static void NewPolyline()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;

    using (Transaction tr = db.TransactionManager.StartTransaction())
    {
        //-------------------------------
        // 擷取模型空間
        //-------------------------------
        BlockTable blockTbl = tr.GetObject(
            db.BlockTableId, OpenMode.ForRead) as BlockTable;
        BlockTableRecord modelSpace = tr.GetObject(
            blockTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

        //-------------------------------
        // 建立多段線
        //-------------------------------
        Polyline polyline = new Polyline();
        polyline.AddVertexAt(, new Point2d(, ), , , );
        polyline.AddVertexAt(, new Point2d(, ), , , );
        polyline.AddVertexAt(, new Point2d(, ), , , );
        //polyline.Closed = true;

        //-------------------------------
        // 添加到模型空間并送出到資料庫
        //-------------------------------
        modelSpace.AppendEntity(polyline);
        tr.AddNewlyCreatedDBObject(polyline, true);
        tr.Commit();
    }
}
           

如果設定 Polyline.Closed 為 true,則多段線首尾自動閉合。

當往多段線中添加頂點時,多段線對象内部是動态配置設定記憶體的。是以,如果知道多段線的頂點數,可以在構造的時候指定以預先配置設定指定大小的記憶體。

public Polyline(int vertices);

以上代碼可以更改為:

Polyline polyline = new Polyline();
polyline.AddVertexAt(, new Point2d(, ), , , );
polyline.AddVertexAt(, new Point2d(, ), , , );
polyline.AddVertexAt(, new Point2d(, ), , , );
           

當頂點數量很大時,這種方法會提升程式的性能。

注意:vertices 并沒有指定多段線的頂點數,隻是預先配置設定了存儲 vertices 個頂點資料的記憶體。

當多段線對象不斷地通過 AddVertexAt 增加頂點或者 RemoveVertexAt 減少頂點時,内部的動态記憶體隻會不斷增加。當代碼完成增加或減少頂點時,有可能存在未被使用的動态記憶體,為了釋放這部分未使用的記憶體,請在最後使用 Polyline.MinimizeMemory()。