[求助]怎样用lisp获得编组中所有对象
请问各位大虾:选取编组中某一对象,如何用lisp获得编组中所有对象?
我用(ssget "X" (list (assoc 330 (entget (car (entsel)))))),好像不管用,结果选到其他对象了。 本帖最后由 ljttjl 于 2010-12-14 01:18 编辑
用(entget (car (entsel))) 查询编组对象时,同一编组中的对象都含有的330组码值相同,根据这个条件可进行判断,得到一个编组中的所有对象。
以下为一个编组对象中含有的组码:
(102 . "{ACAD_REACTORS") (330 . <图元名: 7ef8b8f0>) (102 . "}")
成功例子见以下演示:
感谢ljttjl!
但我想要的不是交互选择,而是用"X"方式自动选择。我用entsel选的肯定是编组中的一个对象,也使用了330组码,可还是选不到呀!
;;;测试 (getgroupss (car (entsel))) 有组的返回组全部选择集,否则返回选择的图元选择集
(defun getgroupss (ent / enl tn)
(setq enl (entget ent))
(setq en (cdr (assoc 330 (member '(102 . "{ACAD_REACTORS")enl))))
(if en
(progn
(setq enl (entget en))
(setq enl (member (assoc 340 enl) enl))
(setq enl (mapcar 'cdr enl))
(setq ss (ssadd))
(mapcar '(lambda (x) (ssadd x ss)) enl)
ss
)
(ssadd ent)
)
)
谢谢Gu_xl朋友,解决了我的问题。
我一直对mapcar与lambda的应用没掌握好,这次是个很好的例子,下来再仔细研究一下。若有不懂之处,还望Gu_xl不吝赐教。
另外,上面的代码选组没问题,非组就选不到了。我试着将第10行改到最前面,第14行改为(ssadd ent ss),就没问题了。
页:
[1]