按名称选择块,不带
大家好,我需要选择两个块并自动删除它们,它们的名称是:FA\u DEVICE\u INIT\u BASE\u STANDARD和FA\u DEVICE\u INIT\u SMOKE\u DUCT\u HOUSING
我通常使用快速选择工具来删除它们,因为它们总是与实际的设备块分组。例如,我们会有一个烟雾探测器块,然后它下面会有一个“基本”块与它分组,所以当我们出口时,他们会在计数上。使用快速选择时,如果我说按名称选择块“FA\u DEVICE\u INIT\u BASE\u STANDARD”,它实际上只选择该块,而不是与之分组的“FA\u DEVICE\u INIT\u SMOKE”块。有没有办法复制quick select在autolisp中的功能?这是我到目前为止得到的,它当前选择了块,但也选择了任何相关的组,并将其删除:
(defun c:AutoBlkRepPrepare ()
(if (setq ss1 (ssget "_x" '((0 . "INSERT")(2 . "FA_DEVICE_INIT_BASE_STANDARD,FA_DEVICE_INIT_SMOKE_DUCT_HOUSING"))))
(progn
(command "_.erase" ss1)
)
(alert "No preparation necessary!")
)
(princ)
)
非常感谢您的帮助!谢谢 你需要检查一下它是否是一个群组,这是我不经常使用的。一个想法可能是让所有组检查组中的块,列出所有对象,解组删除块,然后重新组合剩余部分。然后运行你必须摆脱的个人。真的需要一个样例dwg。
除我之外的其他人可能有一些有用的组码。 可以临时更改选取样式。 酷Roy_043试过了。
谢谢Roy,我在代码中添加了pickstyle更改,现在可以使用了。
唯一发生的事情是它说“错误:函数被取消”。它不会影响过程,所有的一切都仍然有效,但令人恼火的是它不会打印我想要的文本。以下是更新的代码:
(defun c:AutoBlkRepPrepare ()
(command "pickstyle" "0")
(if (setq ss1 (ssget "_x" '((0 . "INSERT")(2 . "FA_DEVICE_INIT_BASE_STANDARD,FA_DEVICE_INIT_SMOKE_DUCT_HOUSING"))))
(progn
(command "_.erase" ss1)
)
(alert "No preparation necessary!")
)
(command "pickstyle" "1")
(princ "Preparation complete!")
(princ)
)
有人对如何消除这个错误有什么建议吗?谢谢 试试这个。。删除了命令调用。
(defun c:foo(/ps s);
罗恩,这太棒了,很有魅力!现在来看看并了解你做了什么,这样我可以让我的代码不那么基本。非常感谢你!
很乐意帮忙
页:
[1]