windbells888 发表于 2011-7-16 16:53:36

怎样将炸开后的对象和原选择集中无法炸开的对象一起放到某选择集中?

怎样将炸开后的对象和原选择集中无法炸开的对象一起放到某选择集中?
(ssget "p"))只能将炸开后的对象放到一个选择集里,但不包括原来不能炸开的对象,因为我用sslength查看选择集长度时发现只有炸开后的元素的个数。但若用删除命令,取可以将无法炸开的选择集一起删除,真是不解。

祥子 发表于 2011-7-16 21:58:57

如炸开前选集为SS
炸开后的选集为SS1
没有炸开和炸开后的SS2 如下
(command ".select" ss ss1 "") (setq ss2(sget "p"))

windbells888 发表于 2011-7-17 17:23:11

本帖最后由 windbells888 于 2011-7-17 17:36 编辑

试了下,输出SS2的长度的话,还是显示光有炸开后对象数目,并不包括不能炸开的对象。但用ERASE命令删除SS2又可以将所有对象都删除,不知道 啥原因。

mandala 发表于 2011-7-17 17:55:56

没遇到过楼主说的这种情况。刚才测试了一下,如果块中有不能炸开的对象,如形或文字,打散后(ssget “p”)包含有这些对象,总数是对的。

楼主所说的“不能炸开的对象”可能与众不同,建议上图看看。

windbells888 发表于 2011-7-17 18:07:39

像下面这样的程序。假如开始的对象是1个圆,1条直线,1个矩形,1个五边形。
那么开始SS的长度是4,炸开后得到的SS1长度应该是9。
执行:(vl-cmdf ".select" ss ss1 "") (setq ss2 (ssget "p"))
后,SS2仍然是9,并不是11

(DEFUN c:tt ()
(setvar "qaflags" 1)
(vl-cmdf ".explode" (setq ss (ssget)) "")
(vl-cmdf ".select" ss ss1 "")
(setq ss2 (ssget "p"))
(princ (strcat "\nss2长度为" (itoa (sslength ss2))))
;;(command ".erase" ss2 "")
(princ)
)

ahwx0814 发表于 2011-7-17 18:09:14

windbells888 发表于 2011-7-16 16:53 static/image/common/back.gif
怎样将炸开后的对象和原选择集中无法炸开的对象一起放到某选择集中?
(ssget "p"))只能将炸开后的对象放到 ...

同意祥子的观点
楼主可以按下面的代码试一下,我测试成功
(setq ss1 (ssget))
(command "explode" ss1"")
(setq ss2 (ssget "p"))
(command ".select" ss1 ss2 "")
(setq ss3 (ssget "p"))
(sssetfirst nil ss3)

windbells888 发表于 2011-7-17 18:17:36

按ahwx0814 的代码确实能够测试成功,正查找自己做错的原因,谢谢各位!
页: [1]
查看完整版本: 怎样将炸开后的对象和原选择集中无法炸开的对象一起放到某选择集中?