可以使用 InsertBlock 方法将块或整个图形插入到当前图形中。InsertBlock 方法的输入值有六个:插入点、要插入的块或图形的名称、X 比例因子、Y 比例因子、Z 比例因子以及旋转角度。
将整个图形插入到另一个图形中时,AutoCAD 会将插入图形当作块参照处理。后续的插入操作会以不同的位置、不同的比例和不同的旋转设置来参照块定义(该块定义包含块的几何说明)。如果在插入后更改原始图形,这些更改将不影响插入的块。如果希望插入的块反映对原始图形所做的更改,则可以通过重新插入原始图形重定义块。此操作可以通过 InsertBlock 方法完成。
如果将图形作为块插入,将自动使用文件名作为块的名称。在创建块之后,可以使用 Name 特性更改块的名称。
默认情况下,AutoCAD 使用坐标 (0,0,0) 作为插入图形的基点。可以打开原始图形并使用 SetVariable 方法为 INSBASE 系统变量指定其他插入基点,从而更改图形的基点。下次插入图形时,AutoCAD 将使用新的基点。
如果插入的图形包含 PaperSpace 对象,当前图形的块定义中将不包含这些对象。要使用其他图形中的 PaperSpace 对象,可以打开原始图形,并使用 Add 方法将 PaperSpace 对象定义为块。可以将图形插入到其他图形的图纸空间或模型空间中。
不能通过遍历块参照的方式来查找组成它的原始对象。但是,可以遍历原始块定义,或者将块参照分解为其原始部件。
也可以使用 AddMInsertBlock 方法插入块阵列。此方法不会在图形中插入单一块(与 InsertBlock 一样),而是插入指定块的数组。此方法将返回 MInsertBlock 对象。
本例定义一个块并将一个圆添加到块定义中。然后,将块作为块参照插入图形。
Sub Ch10_InsertingABlock()
' 定义块
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")
' 向块中添加圆
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)
' 插入块
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