我认为这只适用于外部参照,不是吗? 也许是最简单的检查方法:
(defun purge (bNme)
(and (tblsearch "BLOCK" bNme)
(setvar "CMDECHO" 0)
(vl-cmdf "_.-purge" "_b" bNme "_n")
(setvar "CMDECHO" 1)
(not (tblsearch "BLOCK" bNme))))
可能这就足够了,李,可能是清除可能已经有一个内置的捕捉错误,这就是为什么它只报告一条消息,这毕竟不是一个毫无意义的清除。
看起来这是另一个多年来发生变化的1。它曾一度遵循标准的70组标志代码-大卫
来自R13帮助文件
70块类型位编码标志
1=这是通过图案填充、关联标注、其他内部操作或应用程序生成的匿名块
2=此块具有属性定义
4=此块是外部参照(xref)
8=此块是外部参照覆盖
16=该块依赖于外部
32=这是已解析的外部引用,或依赖于外部引用(在输入时忽略)
64=引用此定义(输入时忽略)
版权所有©1995 Autodesk,股份有限公司。 下面是我使用的JimmyB的一个:
;; Check to see if the block is used and purge it
;; Method Thanks to Jimmy Bergmark
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-delete
(list (vl-catch-all-apply
'vla-item
(list (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) X)
)
)
)
)
nil ; name cannot be purged or doesn't exist
)
谢谢蒂姆,它的工作,但嵌套块它的失败。即使父块已清除,也无法清除子块。 嗨,谢谢你的建议。这不容易,是吗?
我想我将使用vanilla lisp返回一些基本逻辑,以使其与AutoCAD14兼容。
我将使用:
(if (and (tblsearch "BLOCK" bname)
(not (ssget "X" (cons '(0 . "INSERT") (list (cons 2 bname)))))
)
这将检查块是否存在,以及它是否未直接插入到图形中。
然后,我将检查assoc 70代码,以确保块不是外部参照、外部相关等。
然后,如果块存在、未直接插入、不是外部参照等,我将发出purge命令。
(command "PURGE" "B" bname)
然后我将再次使用:(tblsearch“BLOCK”bname),如果块仍然存在,我将得出它是嵌套的结论。
这听起来合理吗?
拉祖 没错,这不能解释嵌套,但我认为这可能是你最好的选择。
页:
1
[2]