明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2357|回复: 12

[提问] [已解决]如何用ssget "X"过滤选择不包含隐藏和冻结的对象

[复制链接]
发表于 2016-9-13 11:20 | 显示全部楼层 |阅读模式
本帖最后由 yhly555 于 2016-10-11 15:20 编辑

如题,如何用ssget "X"过滤选择不包含隐藏和冻结的对象,谢谢!
发表于 2016-10-29 21:47 | 显示全部楼层
楼主可能需要注意一个问题
比如判断出"图层1"、"图层2"..."图层n"是关闭的或者被冻结的,总之就是不想选择到的图层
那么怎么写最后的过滤表?
我们知道:类型为字符型的组通常可以这样写'(8 . "图层1,图层2...图层n"),这样作为过滤的时候只要是其中之一都会被选择,相当于(-4 . "<or")(8 . "图层1")(8 . "图层2")...(8 . "图层n")(-4 . "or>")
但是,如果这些图层名前边都加上一个~的时候,得到的结果很可能不是你所期望的
比如'(8 "~图层1,~图层2")实际上它根本不起作用了,原因在于那个逗号的作用实际上相当于or,最终就是图层2不是图层1,所以被选中,同样的,因为图层1不是图层2,也被选中,有点绕?但它实际上就是这么干的。。。
这个时候,如果用not来限定就不会有问题了(-4 ."<not")(8 . " "图层1,图层2...图层n")(-4 . "not>")
也就是说,不管是冻结的图层还是隐藏的图层甚至锁定的图层,只要先得到这个图层列表,然后用not进行限定就真正解决问题了
所设得到的需要排除的图层列表为lays,需要选择多段线(0 . "lwpolyline"),那么可以写成
(ssget"X"(list'(0 . "lwpolyline")'(-4 . "<not")(cons 8(apply'strcat(mapcar'(lambda(x)(strcat","x))lays)))'(-4 . "not>")))
发表于 2016-9-28 11:46 | 显示全部楼层
知识点1 : 反向过滤图层
(ssget '((8 . "~家具")))

知识点2 : 获取关闭图层列表
(setq
  *acad*      (vlax-get-acad-object)
  *doc*     (vla-get-ActiveDocument *acad*)
  *LAYERS*    (vla-get-Layers *doc*)
)
(setq layonlist '())
(vlax-for x *LAYERS*
(if (= (vlax-get-property x "LayerOn") :vlax-false)
  (setq layonlist (cons (vla-get-name x) layonlist))
)
)
(princ layonlist)
(princ)

知识点3 : 列表转文字
这个自己写
不要养成只伸手的习惯

知识点4 : 特殊字符处理
一般情况下用不上
但如果碰上程序结果不符合预期
就需要解决这个问题
提醒两点
学习wcmatch函数
图层名包括块名都是可以包含特殊字符的
发表于 2016-9-13 11:57 | 显示全部楼层
ssget 后跟mode 的部分理解(不断更新)
http://bbs.mjtd.com/forum.php?mo ... &fromuid=202795

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 神马都是浮云

查看全部评分

 楼主| 发表于 2016-9-13 15:08 | 显示全部楼层
llsheng_73 发表于 2016-9-13 11:57
ssget 后跟mode 的部分理解(不断更新)
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=84736&fromuid= ...

谢谢, 有不包含冻结的,但没有不包含隐藏的。
发表于 2016-9-14 19:05 | 显示全部楼层
建立隐藏图层列表
转化为反向过滤字符串
再配合"A"参数进行选择
发表于 2016-9-14 19:10 | 显示全部楼层
楼上的方法好
 楼主| 发表于 2016-9-23 23:14 | 显示全部楼层
masterlong 发表于 2016-9-14 19:05
建立隐藏图层列表
转化为反向过滤字符串
再配合"A"参数进行选择

可以写个例子来看看吗?谢谢!
发表于 2016-9-25 01:44 来自手机 | 显示全部楼层
楼主应该是懂编程的
思路有了
做到应该不难
 楼主| 发表于 2016-9-25 01:49 | 显示全部楼层
初学者,很多东西还是不理解,谢谢的指点!
 楼主| 发表于 2016-9-25 01:53 | 显示全部楼层
masterlong 发表于 2016-9-25 01:44
楼主应该是懂编程的
思路有了
做到应该不难


初学者,很多东西还是不理解,谢谢的指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 19:53 , Processed in 1.917188 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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