概要 - ブロックを挿入する(VBA/ActiveX)

InsertBlock メソッドを使用して、ブロックまたは図面全体を現在の図面に挿入することができます。

InsertBlock メソッドでは、挿入点、挿入するブロックまたは図面の名前、X 尺度係数、Y 尺度係数、Z 尺度係数、回転角度の 6 つの値を指定する必要があります。

図面全体を他の図面に挿入すると、AutoCAD では挿入された図面を他のブロック参照と同様に取り扱います。それ以降の挿入では、異なる位置、尺度、回転の設定を持つブロック定義(ブロック内部の図形の定義を含んだもの)を参照します。挿入した後で元の図面を変更しても、その変更は挿入されたブロックには影響しません。挿入したブロックに元の図面に加えた変更を反映させたい場合は、元の図面を再度挿入してブロックを再定義します。これは InsertBlock メソッドで行えます。

図面をブロックとして挿入した場合、ファイル名が自動的にブロックの名前として使用されます。ブロックを作成した後、Name プロパティを使用してブロックの名前を変更することができます。

既定では、AutoCAD は座標(0, 0, 0)を挿入された図面の基点として使用します。図面の基点は、元の図面を開き、SetVariable メソッドを使用して異なる挿入基点をシステム変数 INSBASE に指定することで変更できます。AutoCAD は、図面が次回挿入されたときに新しい基点を使用します。

挿入した図面に PaperSpace オブジェクトが含まれている場合は、これらのオブジェクトは現在の図面のブロック定義には含まれません。他の図面で PaperSpace オブジェクトを使用するには、元の図面を開き、Add メソッドを使用して一連の PaperSpace オブジェクトを 1 つのブロックとして定義します。ペーパー空間またはモデル空間のどちらでも、図面を他の図面に挿入することができます。

ブロック参照を繰り返して、そのブロック参照を構成する元のオブジェクトを検索することはできません。しかし、元のブロック定義を繰り返し使用したり、ブロック参照を元のコンポーネントに分解することは可能です。

また、AddMInsertBlock メソッドを使用してブロックの配列を挿入することもできます。このメソッドは、InsertBlock のように単独のブロックを図面に挿入する代わりに、指定されたブロックの配列を挿入します。このメソッドは MInsertBlock オブジェクトを返します。

ブロックを定義し、図面にブロックを挿入する

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

Sub Ch10_InsertingABlock()
 ' 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 circleObj As AcadCircle
 Dim center(0 To 2) As Double
 Dim radius As Double
 center(0) = 0
 center(1) = 0
 center(2) = 0
 radius = 1
 Set circleObj = blockObj.AddCircle(center, radius)

 ' Insert the block
 Dim blockRefObj As AcadBlockReference
 insertionPnt(0) = 2
 insertionPnt(1) = 2
 insertionPnt(2) = 0
 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
 (insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
 ZoomAll
 MsgBox "The circle belongs to " & blockRefObj.ObjectName
End Sub
注: 挿入後、外部ファイルの WCS は、現在の図面の現在のユーザ座標系(UCS)の XY 平面と並行に配置されます。したがって、外部ファイルから挿入したブロックは、挿入前に UCS を設定することで、空間内で任意の方向に挿入することができます。