明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 906|回复: 2

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

[复制链接]
发表于 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炸开再删除的方法。

  1. Sub Example_InsertBlock()
  2.     ' This example creates a block containing a circle.
  3.     ' It then inserts the block.

  4.     ' Create the block
  5.     Dim blockObj As AcadBlock
  6.     Dim insertionPnt(0 To 2) As Double
  7.     insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0#
  8.     Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock")
  9.    
  10.     ' Add a circle to the block
  11.     Dim circleObj As AcadCircle
  12.     Dim center(0 To 2) As Double
  13.     Dim radius As Double
  14.     center(0) = 0: center(1) = 0: center(2) = 0
  15.     radius = 1
  16.     Set circleObj = blockObj.AddCircle(center, radius)
  17.    
  18.     ' Insert the block
  19.     Dim blockRefObj As AcadBlockReference
  20.     insertionPnt(0) = 2#: insertionPnt(1) = 2#: insertionPnt(2) = 0
  21.     Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
  22.    
  23.     ZoomAll
  24.    
  25. End Sub

发表于 2019-5-11 12:29:14 | 显示全部楼层
首先  thisdrawing.blocks是当前文件中所有块定义的集合,你的代码:
for each blockobj in thisdrawing.blocks
     blockobj.delete
next block
是用于删除当前文件中所有的块定义的,当某一个块插入到了当前模型空间,就会在模型空间存在一个块实例,这时就是提示所说的“对象被参考”,所以必须找到当前模型中的块实例并删除,才能删除blocks中的块定义。
而你前面提到的删除半径为1的圆的问题,是删除已定义块内的图元对象的问题,这可不是删除文件中块定义的问题。要删除一个对象可以用.delete方法,circleObj代表这个圆的对象,对其使用.delete方法,试试行不行。
 楼主| 发表于 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,这样我插入块时通过名称调用就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 23:45 , Processed in 0.165884 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表