图元颜色随图层,如何用ssget删选出来?
用ssget函数,按颜色提取图元,发现一个问题,如果图元的颜色是;;筛选删除程序(defun c:sxx ()
(initget 1 "y t d")
(setq a (getkword "\n请输入选择类型[颜色(y)/图层(t)/标注(d)]"))
(cond
((= a "y")
(setq en (ssget ":E:S"))
(setq en ( ssname en 0))
(setq ys (sk_dxf en 62))
(setq ent (ssget "A" (list(cons 62 ys))))
(dl ent)
)
((= a "t")
(setq en (ssget ":E:S"))
(setq en (ssname en 0))
(setq tc (sk_dxf en 8))
(setq ent (ssget "A" (list(cons 8 tc))))
(dl ent)
)
((= a "d")
(setq ent (ssget "A" (list(cons 0 "DIMENSION"))))
(dl ent)
)
)
(princ)
)
;;删除选择集
(defun dl(en_ss / n i en)
(setq n (sslength en_ss))
(setq i 0)
(repeat n
(setq en (ssname en_ss i))
(entdel en)
(setq i (1+ i))
)
)
;(sk_dxf 图元名 组码)
(defun sk_dxf(en code)
(if(and(=(type en) 'ENAME)(= (type code) 'INT))
(cdr(assoc code (entget en))))
)
随图层的,组码里面就没有62号点对,无法按颜色筛选。这个问题应该怎么样解决?
(setq ss (ssget '((-4 . "<and") (-4 . "=")(62 . 256) (-4 . "and>")))) 等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色 本帖最后由 llsheng_73 于 2023-9-6 21:33 编辑
;|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 STB(TAB f / d a)
(While(SetQ a(TblNext TAB(not d)))
(SetQ d(Cons a d)))
(if f(mapcar'cdadr d)d))
(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 发表于 2023-9-5 14:58
谢谢长老,我学习下:victory::victory::victory: 选取该颜色的图层再筛选出该图层里bylayer的图元,分两步走 start4444 发表于 2023-9-5 16:21
选取该颜色的图层再筛选出该图层里bylayer的图元,分两步走
好的。谢谢。 哈哈 这个谜底就在谜面上啊,既然没有62,那就不允许选择62就可以啦
(progn
(setq num-color 0
lst-fi'()
)
(repeat 255
(setq num-color (1+ num-color))
(setq lst-fi (cons (cons 62 num-color) lst-fi))
)
(ssget
(append
'( (-4 . "<not") (-4 . "<or"))
lst-fi
'( (-4 . "or>") (-4 . "not>"))
)
;'((-4 . "<not") (-4 . "<or") (62 . 1)(62 . 2) (-4 . "or>") (-4 . "not>"))
)) llsheng_73 发表于 2023-9-5 14:58
STB函数方便贴出来吗,大佬 xiaocainiao 发表于 2023-9-5 14:36
等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色
谢谢,是可以这样。然后把选择集中的图元一个个拿出来比较。
页:
[1]
2