hubeiwdlue 发表于 2023-9-5 14:15:31

图元颜色随图层,如何用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号点对,无法按颜色筛选。这个问题应该怎么样解决?

Dea25 发表于 2023-9-5 14:25:45

(setq ss (ssget '((-4 . "<and") (-4 . "=")(62 . 256) (-4 . "and>"))))

xiaocainiao 发表于 2023-9-5 14:36:00

等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色

llsheng_73 发表于 2023-9-5 14:58:21

本帖最后由 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)))

hubeiwdlue 发表于 2023-9-5 15:05:36

llsheng_73 发表于 2023-9-5 14:58


谢谢长老,我学习下:victory::victory::victory:

start4444 发表于 2023-9-5 16:21:33

选取该颜色的图层再筛选出该图层里bylayer的图元,分两步走

hubeiwdlue 发表于 2023-9-5 17:57:26

start4444 发表于 2023-9-5 16:21
选取该颜色的图层再筛选出该图层里bylayer的图元,分两步走

好的。谢谢。

花开富贵 发表于 2023-9-5 21:45:03

哈哈 这个谜底就在谜面上啊,既然没有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>"))
        ))

花开富贵 发表于 2023-9-5 21:55:26

llsheng_73 发表于 2023-9-5 14:58


STB函数方便贴出来吗,大佬

hubeiwdlue 发表于 2023-9-6 22:32:22

xiaocainiao 发表于 2023-9-5 14:36
等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色

谢谢,是可以这样。然后把选择集中的图元一个个拿出来比较。
页: [1] 2
查看完整版本: 图元颜色随图层,如何用ssget删选出来?