插入块

AutoCAD ActiveX/VBA

 
插入块
 
 
 

可以使用 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
注意插入后,当前图形中外部文件的 WCS 会平行对齐当前用户坐标系 (UCS) 的 XY 平面。因此,在插入块之前设置 UCS,可以按任何方向插入外部文件中的块。