ブロックを定義する(.NET)

新しいブロックを作成するには、新しい BlockTableRecord オブジェクトを作成し、Add メソッドを使用して BlockTable オブジェクトに追加します。BlockTableRecord オブジェクトを作成したら、Name プロパティを使用して、ブロックと、AppendEntity メソッドでブロックが図面に挿入されたときに表示されるオブジェクトに名前を割り当てます。

次に、新しく作成した BlockTableRecord オブジェクトに、ジオメトリ オブジェクト、つまり他のブロックを追加します。オブジェクトは、AppendEntity メソッドで BlockTableRecord オブジェクトに追加されます。次に、新しい BlockReference オブジェクトを作成し、それをモデル空間または Layout オブジェクトに関連付けられている BlockTableRecord オブジェクトに追加することによって、ブロックのインスタンスを図面に挿入することができます。挿入されるブロックはブロック参照と呼ばれるオブジェクトです。

WBlock メソッドを使って、オブジェクトを別の図面ファイルに書き出すことによって、ブロックを作成することもできます。図面ファイルを、他の図面のブロックの定義として使用することができます。AutoCAD では、図面を他の図面に挿入するとブロックとして処理されます。

ブロックの定義の詳細については、製品のヘルプ システムで「概要 - ブロックを定義する」を参照してください。

ブロックを定義する

次の例では、ブロックを定義し、その定義に円を追加します。その後で、ブロック参照としてブロックを図面に挿入します。

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry

<CommandMethod("CreatingABlock")> _
Public Sub CreatingABlock()
    ' Get the current database and start a transaction
    Dim acCurDb As Autodesk.AutoCAD.DatabaseServices.Database
    acCurDb = Application.DocumentManager.MdiActiveDocument.Database

    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
        ' Open the Block table for read
        Dim acBlkTbl As BlockTable
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

        If Not acBlkTbl.Has("CircleBlock") Then
            Using acBlkTblRec As New BlockTableRecord
                acBlkTblRec.Name = "CircleBlock"

                ' Set the insertion point for the block
                acBlkTblRec.Origin = New Point3d(0, 0, 0)

                ' Add a circle to the block
                Using acCirc As New Circle
                    acCirc.Center = New Point3d(0, 0, 0)
                    acCirc.Radius = 2

                    acBlkTblRec.AppendEntity(acCirc)

                    acBlkTbl.UpgradeOpen()
                    acBlkTbl.Add(acBlkTblRec)
                    acTrans.AddNewlyCreatedDBObject(acBlkTblRec, True)
                End Using
            End Using
        End If

        ' Save the new object to the database
        acTrans.Commit()

        ' Dispose of the transaction
    End Using
End Sub

C#

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

[CommandMethod("CreatingABlock")]
public void CreatingABlock()
{
    // Get the current database and start a transaction
    Database acCurDb;
    acCurDb = Application.DocumentManager.MdiActiveDocument.Database;

    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Open the Block table for read
        BlockTable acBlkTbl;
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;

        if (!acBlkTbl.Has("CircleBlock"))
        {
            using (BlockTableRecord acBlkTblRec = new BlockTableRecord())
            {
                acBlkTblRec.Name = "CircleBlock";

                // Set the insertion point for the block
                acBlkTblRec.Origin = new Point3d(0, 0, 0);

                // Add a circle to the block
                using (Circle acCirc = new Circle())
                {
                    acCirc.Center = new Point3d(0, 0, 0);
                    acCirc.Radius = 2;

                    acBlkTblRec.AppendEntity(acCirc);

                    acBlkTbl.UpgradeOpen();
                    acBlkTbl.Add(acBlkTblRec);
                    acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
                }
            }
        }

        // Save the new object to the database
        acTrans.Commit();

        // Dispose of the transaction
    }
}

VBA/ActiveX コード リファレンス

Sub CreatingABlock()
    ' Define the block
    Dim blockObj As AcadBlock
    Dim insertionPnt(0 To 2) As Double
    insertionPnt(0) = 0
    insertionPnt(1) = 0
    insertionPnt(2) = 0
    Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock")

    ' Add a circle to the block
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 0
    center(1) = 0
    center(2) = 0
    rad = 2
    blockObj.AddCircle(center, rad)
End Sub