明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1883|回复: 5

求助:如何选择

[复制链接]
发表于 2010-4-8 22:09:00 | 显示全部楼层 |阅读模式

如何在一个选择集中选择出多种符合要求的选择集?

比如在一个选择集中有多种不同图层的直线,我如何选择出符合要求(比如图层1)1的选择集放置在选择集1中

符合要求2的选择集(比如图层2)放置在选择集2中,符合要求3的选择集(比如图层3)放置在选择集3中,类推。谢谢!

发表于 2010-4-8 23:16:00 | 显示全部楼层

(ssget);;得到选择集

(setq SS2 (ssget "_P" '((8 . "图层1"))));;过滤条件参考ssget和wcmatch函数帮助

(setq SS3 (ssget "_P" '((8 . "图层3"))))

如果分组太多则建议不要太多的使用(ssget "p"),因为这样很慢。而采用遍历选集的方法。

发表于 2010-4-8 23:30:00 | 显示全部楼层
最好是遍历了,LISP遍历很快的。
 楼主| 发表于 2010-4-9 00:28:00 | 显示全部楼层
caoyin发表于2010-4-8 23:16:00(ssget);;得到选择集(setq SS2 (ssget \"_P\" '((8 . \"图层1\"))));;过滤条件参考ssget和wcmatch函数帮助(setq SS3 (ssget \"_P\" '((8 . \"图层3\"))))如果分组太多则建议不要太多的使用(ssg

setq SS3 (ssget "_P" '((8 . "图层3"))))好像不行."_P" 第一次使用可以,第二次就不行了!我估计是不是认为ss2是"_P" 了?

(defun c:xxx( /  )
   (setq ss (ssget '((0 . "line" ) (8 .  "dote,dote1,dote2"))));建立选择集
     (setq ss1(ssget "_P" '((8 . "dote")))) 

      (setq ss2(ssget "_P"    '((8 . "dote1")))) 

       (setq ss3(ssget "_P"  '((8 . "dote2"))))

     (command "CHANGE" ss3  "" "P"  "C" "white" "")
    (prin1)
)

以上是我的程序,不能实现。

另,如何遍历整个选择集?

发表于 2010-4-9 01:13:00 | 显示全部楼层

是不行了,因为第3次 ssget p,是过滤第二次选集。

遍历选集:

(setq SS (ssget)) ;;得到选集
(repeat (setq I (sslength SS));;循环次数=选集长度
  (setq I   (1- I)
        EN  (ssname SS I)
        LAY (cdr (assoc 8 (entget EN)))
  )
  (cond ((eq LAY "图层1")
       ;;下面两行取其一
         (setq LST1 (cons EN LST1))   ;;加入表 LST1
       ;;(or SS2 (setq SS2 (ssadd)) (ssadd EN SS2) ;;加入选集SS2
        )
        ((eq LAY "图层2")
         (setq LST2 (cons EN LST2))   ;;同上
        )
        ;;......
  )
)

 楼主| 发表于 2010-4-9 20:33:00 | 显示全部楼层
感谢斑竹的热心!我试试!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 23:35 , Processed in 0.178889 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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