C#/AutoCAD API

[C#/AutoCAD] Entity 추가

Watertight 2023. 7. 15. 07:44

1. 현재 활성화 되어있는 문서를 가져와 Transaction을 시작하고 Entity를 생성한 후 Commit을 한다. (Winform으로 생성시에는 DocumentLock 필요)

2. 아래의 기본 코드에 'Write code here'에 Entity를 생성하는 코드를 작성하면 된다.

Document doc = Application.DocumentManager.MdiActiveDocument;
using (DocumentLock docLock = doc.LockDocument())
{
    Database db = doc.Database;
    using (Transaction tr = db.TransactionManager.StartTransaction())
    {
        BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
        BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
        
        // Write code here.
        
        tr.Commit()
    }
}

- Line 생성

        Line line = new Line(new Point3d(0,0,0), new Point3d(100,0,0));
        btr.AppendEntity(line);
        tr.AddNewlyCreatedDBObject(line, true);

- Polyline 생성

        using (Polyline poly = new Polyline())
        {
            poly.AddVertexAt(0, new Point2d(2, 4), 0, 0, 0);
            poly.AddVertexAt(1, new Point2d(4, 2), 0, 0, 0);
            poly.AddVertexAt(2, new Point2d(6, 4), 0, 0, 0);
            // Add the new object to the block table record and the transaction
            btr.AppendEntity(poly);
            tr.AddNewlyCreatedDBObject(poly, true);
        }

- Arc 생성

        // (center pos, radius, start radian, end radian)
        Arc arc = new Arc(new Point3d(0,0,0), 1000, Math.PI / 180 * 180, Math.PI / 180 * 270);
        btr.AppendEntity(arc);
        tr.AddNewlyCreatedDBObject(arc, true);

- MText 생성

        using (MText mText = new MText())
        {
            mText.Location = new Point3d(0,0,0);
            mText.TextHeight = 500;
            mText.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
            mText.Attachment = AttachmentPoint.TopRight;
            mText.Contents = "Hello World";
            btr.AppendEntity(mText);
            tr.AddNewlyCreatedDBObject(mText, true);
        }

- Hatch 생성

        ObjectIdCollection lines = new ObjectIdCollection();
        lines.Add(lineObjId1);
        lines.Add(lineObjId2);
        lines.Add(lineObjId3);
        lines.Add(lineObjId4);
        using (Hatch hatch = new Hatch())
        {
            hatch.SetDatabaseDefaults();
            hatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
            hatch.AppendLoop(HatchLoopTypes.Outermost, lines);
            hatch.Layer = "0";
            hatch.Color = Color.FromColorIndex(ColorMethod.ByAci, 7);
            // Transparency(127) => 50%
            hatch.Transparency = new Transparency(127);
            hatch.EvaluateHatch(true);
            btr.AppendEntity(hatch);
            tr.AddNewlyCreatedDBObject(hatch, true);
        }