Lee Mac 发表于 2022-7-6 12:45:34

 
我认为这只适用于外部参照,不是吗?

Lee Mac 发表于 2022-7-6 12:46:49

也许是最简单的检查方法:
 

(defun purge (bNme)
(and (tblsearch "BLOCK" bNme)
      (setvar "CMDECHO" 0)
      (vl-cmdf "_.-purge" "_b" bNme "_n")
      (setvar "CMDECHO" 1)
      (not (tblsearch "BLOCK" bNme))))

wizman 发表于 2022-7-6 12:51:02

可能这就足够了,李,可能是清除可能已经有一个内置的捕捉错误,这就是为什么它只报告一条消息,这毕竟不是一个毫无意义的清除。

David Bethel 发表于 2022-7-6 12:54:27

 
看起来这是另一个多年来发生变化的1。它曾一度遵循标准的70组标志代码-大卫
 
来自R13帮助文件
 
70块类型位编码标志
1=这是通过图案填充、关联标注、其他内部操作或应用程序生成的匿名块
2=此块具有属性定义
4=此块是外部参照(xref)
8=此块是外部参照覆盖
16=该块依赖于外部
32=这是已解析的外部引用,或依赖于外部引用(在输入时忽略)
64=引用此定义(输入时忽略)
 
版权所有©1995 Autodesk,股份有限公司。

TimSpangler 发表于 2022-7-6 12:58:27

下面是我使用的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
)

wizman 发表于 2022-7-6 13:02:05

谢谢蒂姆,它的工作,但嵌套块它的失败。即使父块已清除,也无法清除子块。

Razoo 发表于 2022-7-6 13:06:38

嗨,谢谢你的建议。这不容易,是吗?
 
我想我将使用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),如果块仍然存在,我将得出它是嵌套的结论。
 
这听起来合理吗?
 
拉祖

Lee Mac 发表于 2022-7-6 13:09:38

没错,这不能解释嵌套,但我认为这可能是你最好的选择。
页: 1 [2]
查看完整版本: 检查是否可以删除块