hellomoshi 发表于 2019-4-13 19:25:12

【求助】删除块时提示“对象被参照”

本帖最后由 hellomoshi 于 2019-4-13 19:25 编辑

大家好!我在用《vb参考》中的Example_InsertBlock()示例的时候,当radius=1时运行没有问题,当改为radius=2再次运行,发现radius=1的circle还在创建的参考块中。我尝试用for each blockobj in thisdrawing.blocks
    blockobj.delete
next block
删除的时候,提示“对象被参考”,无法被删除。
请问这种问题怎么解决呢?我要让输出的结果是acadblockref对象,所以不考虑用explode炸开再删除的方法。Sub Example_InsertBlock()
    ' This example creates a block containing a circle.
    ' It then inserts the block.

    ' Create 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
   
End Sub

renhaitao_nice 发表于 2019-5-11 12:29:14

首先thisdrawing.blocks是当前文件中所有块定义的集合,你的代码:
for each blockobj in thisdrawing.blocks
   blockobj.delete
next block
是用于删除当前文件中所有的块定义的,当某一个块插入到了当前模型空间,就会在模型空间存在一个块实例,这时就是提示所说的“对象被参考”,所以必须找到当前模型中的块实例并删除,才能删除blocks中的块定义。
而你前面提到的删除半径为1的圆的问题,是删除已定义块内的图元对象的问题,这可不是删除文件中块定义的问题。要删除一个对象可以用.delete方法,circleObj代表这个圆的对象,对其使用.delete方法,试试行不行。

hellomoshi 发表于 2019-5-13 12:01:18

renhaitao_nice 发表于 2019-5-11 12:29
首先thisdrawing.blocks是当前文件中所有块定义的集合,你的代码:
for each blockobj in thisdrawing.b ...

谢谢大哥指导。
我最初是想让程序按我的要求插入radius=1还是radius=2的块。实例代码会将这两个圆都插入块中,因为我对块的理解有误,忽略了块定义和块实例的问题,所以才有了想删除块中某个图元的问题。后来我是通过更改块名称的方式解决了这个问题。如定义块时,radius=1的圆定义的块名为radius1,radius=2的为radius2,这样我插入块时通过名称调用就可以了。
页: [1]
查看完整版本: 【求助】删除块时提示“对象被参照”