ecustis 发表于 2022-7-5 15:50:33

按名称选择块,不带

大家好,
 
我需要选择两个块并自动删除它们,它们的名称是: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)
)

 
非常感谢您的帮助!谢谢

BIGAL 发表于 2022-7-5 16:01:03

你需要检查一下它是否是一个群组,这是我不经常使用的。一个想法可能是让所有组检查组中的块,列出所有对象,解组删除块,然后重新组合剩余部分。然后运行你必须摆脱的个人。真的需要一个样例dwg。
 
除我之外的其他人可能有一些有用的组码。

Roy_043 发表于 2022-7-5 16:08:18

可以临时更改选取样式。

BIGAL 发表于 2022-7-5 16:18:32

酷Roy_043试过了。

ecustis 发表于 2022-7-5 16:29:35

 
谢谢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)
)

 
有人对如何消除这个错误有什么建议吗?谢谢

ronjonp 发表于 2022-7-5 16:39:32

试试这个。。删除了命令调用。
(defun c:foo(/ps s);

ecustis 发表于 2022-7-5 16:42:50

 
罗恩,这太棒了,很有魅力!现在来看看并了解你做了什么,这样我可以让我的代码不那么基本。非常感谢你!

ronjonp 发表于 2022-7-5 16:52:07

 
很乐意帮忙
页: [1]
查看完整版本: 按名称选择块,不带