mandala 发表于 2013-11-24 16:17:48

如何最快速地清理指定的块?

本帖最后由 mandala 于 2013-11-24 16:22 编辑

是这样的,有一个块“a”已定义,但图纸中无块实体。要清理它可以用
(command "._purge" "b" “a” "n" )

但如果多次要清理这类指定名称的块定义,比如说一个重复1000次的repeat中,每次repeat一开始都生成这个块,最后又得删除这个块,这样用command就很慢,而且每次都提示“正在删除块“a”。已删除 1 个块。”很麻烦。

有更快速的办法吗?需要注意的是要删除(清理)的只是一个块定义,而非块实体。

llsheng_73 发表于 2013-11-24 19:19:21

首先可以在repeat前生成块,repeat后去清除它,repeat里边只去insert就行了
当然如果确实有必要在repeat里边来做这件事,那好象没什么太好的办法

mandala 发表于 2013-11-24 20:18:59

repeat里需要生成这个块定义。

llsheng_73 发表于 2013-11-24 22:23:28

那就只有想想能不能不用purge而做到清理它了,不然估计没辙

llsheng_73 发表于 2013-11-24 22:27:38

本帖最后由 llsheng_73 于 2013-11-24 22:30 编辑

疑惑的一点是,在REPEAT里边生成了块,经过一系列处理后又要清理掉这个块定义,也就是说生成的块最终被删了或者炸开了,总之没有实体依赖于这个块定义而存在了,不然也不用清理它,那么就可以不需要清理掉这个块定义而对这个块它重新定义....repeat后再清理它不就结了?

Gu_xl 发表于 2013-11-24 22:27:39

本帖最后由 Gu_xl 于 2013-11-24 22:29 编辑

;;删除指定块定义
(defun delBlkdef (name)
(if (not
      (VL-CATCH-ALL-ERROR-P
          (setq
            obj
             (VL-CATCH-ALL-APPLY
               'vla-item
               (list (vla-get-blocks
                     (vla-get-ActiveDocument (vlax-get-acad-object))
                     )
                     name
               )
             )
          )
      )
      )
    (VL-CATCH-ALL-APPLY 'vla-delete (list obj))
)
)

llsheng_73 发表于 2013-11-24 22:35:57

本帖最后由 llsheng_73 于 2013-11-24 22:41 编辑

Gu_xl 发表于 2013-11-24 22:27 static/image/common/back.gif


G版又出手了,高效,刚才我调用的时候用错了参数,差点以为没能清理掉。。。
好象G版这办法可以删除图层等其它非图元数据
比如(vla-get-blocks改成layers。。。学习了
页: [1]
查看完整版本: 如何最快速地清理指定的块?