如何用ssget过滤颜色
本帖最后由 13816600495 于 2018-7-15 17:52 编辑请问群里大能之人,在用SSGET过滤颜色时,随层的对象组码62均为隐藏状态,无法获取,导致(setq ss (ssget '((62 . "1"))))这样的语句失效,请问何解?
"1"应该是1吧? 自贡黄明儒 发表于 2018-7-15 18:42
"1"应该是1吧?
是的,但还是无效呢,其它随层的不显示62组码 对象颜色随层62组码值应为256,默认省略,随块62组码值为0,所以你想用ssget选择随层颜色为1的对象,无法直接做到!需要多步筛选才可以! Gu_xl 发表于 2018-7-16 09:36
对象颜色随层62组码值应为256,默认省略,随块62组码值为0,所以你想用ssget选择随层颜色为1的对象,无法直 ...
是的,用ssget筛选比较困难,我现在改用vlax-ename->vla-object方法筛选实现了,谢谢。 ssget可以做到,分二种情况,一种就是颜色就是1,一种就是颜色随层并且图层颜色为1
第一种简单了,62组码值为1,第二种提供思路,先获取所有图层中图层颜色为1的图层的字符串,形如"图层1,图层2",然后根据图层名及62组码值为256过滤即可。 坛内早有讨论 ;|code 6,62,370等因为随层不出现的组任意组合f"or"或"and"或者当code为nil时任意字符串,dxf当code为nil时可任意,否则不应含code里边组和-4组
(SELECTBYLAYER'((0 . "circle")) '((62 . 1)(370 . 100))"or")
(sslength(SELECTBYLAYER'((0 . "circle")) nil""))
|;
(defun Selectbylayer(dxf code f / ly)
(setq ly(mapcar'(lambda(x)(cons(assoc 370(entget(tblobjname"layer"(cdadr x))))x))(STB"Layer"nil)))
(ssget"X"(if code(append dxf(list(cons -4(strcat"<"f)))
(vl-remove'nil(apply'append(mapcar'(lambda(x)(list'(-4 . "<or")x
'(-4 . "<and")(assoc(car x)'((62 . 256)(6 . "Bylayer")))
(cons 8(apply'strcat(mapcar'(lambda(x)(strcat(cdaddr x)","))
(vl-remove-if-not'(lambda(y)(member x y))ly))))
'(-4 . "and>")'(-4 . "or>")))code)))
(list(cons -4(strcat f">"))))
dxf))) 说得太好了,学习了。 感谢 llsheng_73 分享程序!!!!!!
页:
[1]