明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1743|回复: 4

[求助]怎样用lisp获得编组中所有对象

[复制链接]
发表于 2010-12-14 00:21:04 | 显示全部楼层 |阅读模式
请问各位大虾:
选取编组中某一对象,如何用lisp获得编组中所有对象?
我用(ssget "X" (list (assoc 330 (entget (car (entsel)))))),好像不管用,结果选到其他对象了。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-12-14 01:17:30 | 显示全部楼层
本帖最后由 ljttjl 于 2010-12-14 01:18 编辑

用(entget (car (entsel))) 查询编组对象时,同一编组中的对象都含有的330组码值相同,根据这个条件可进行判断,得到一个编组中的所有对象。
以下为一个编组对象中含有的组码:
(102 . "{ACAD_REACTORS") (330 . <图元名: 7ef8b8f0>) (102 . "}")

成功例子见以下演示:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-12-14 20:05:55 | 显示全部楼层
感谢ljttjl!
但我想要的不是交互选择,而是用"X"方式自动选择。我用entsel选的肯定是编组中的一个对象,也使用了330组码,可还是选不到呀!
发表于 2010-12-16 20:01:49 | 显示全部楼层

  1. ;;;测试 (getgroupss (car (entsel))) 有组的返回组全部选择集,否则返回选择的图元选择集
  2. (defun getgroupss (ent / enl tn)
  3.   (setq enl (entget ent))
  4.   (setq en (cdr (assoc 330 (member '(102 . "{ACAD_REACTORS")  enl))))
  5.   (if en
  6.     (progn
  7.   (setq enl (entget en))
  8.   (setq enl (member (assoc 340 enl) enl))
  9.   (setq enl (mapcar 'cdr enl))
  10.   (setq ss (ssadd))
  11.   (mapcar '(lambda (x) (ssadd x ss)) enl)
  12.   ss
  13.   )
  14.     (ssadd ent)
  15.     )
  16.   )
 楼主| 发表于 2010-12-20 12:40:21 | 显示全部楼层
谢谢Gu_xl朋友,解决了我的问题。
我一直对mapcar与lambda的应用没掌握好,这次是个很好的例子,下来再仔细研究一下。若有不懂之处,还望Gu_xl不吝赐教。
另外,上面的代码选组没问题,非组就选不到了。我试着将第10行改到最前面,第14行改为(ssadd ent ss),就没问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 18:31 , Processed in 0.175476 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表