明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1470|回复: 10

[提问] 图元颜色随图层,如何用ssget删选出来?

[复制链接]
发表于 2023-9-5 14:15:31 | 显示全部楼层 |阅读模式
用ssget函数,按颜色提取图元,发现一个问题,如果图元的颜色是
  1. ;;筛选删除程序
  2. (defun c:sxx ()
  3.   (initget 1 "y t d")
  4.   (setq a (getkword "\n请输入选择类型[颜色(y)/图层(t)/标注(d)]"))
  5.   (cond
  6.     ((= a "y")
  7.       (setq en (ssget ":E:S"))
  8.       (setq en ( ssname en 0))      
  9.       (setq ys (sk_dxf en 62))
  10.       (setq ent (ssget "A" (list(cons 62 ys))))
  11.       (dl ent)
  12.     )
  13.     ((= a "t")
  14.       (setq en (ssget ":E:S"))
  15.       (setq en (ssname en 0))
  16.       (setq tc (sk_dxf en 8))
  17.       (setq ent (ssget "A" (list(cons 8 tc))))
  18.       (dl ent)
  19.     )  
  20.     ((= a "d")
  21.       (setq ent (ssget "A" (list(cons 0 "DIMENSION"))))
  22.       (dl ent)
  23.     )      
  24.   )
  25.   (princ)
  26. )
  27. ;;删除选择集
  28. (defun dl(en_ss / n i en)
  29. (setq n (sslength en_ss))
  30.   (setq i 0)
  31.   (repeat n
  32.     (setq en (ssname en_ss i))
  33.     (entdel en)
  34.     (setq i (1+ i))   
  35.   )  
  36. )

  37. ;(sk_dxf 图元名 组码)
  38. (defun sk_dxf(en code)
  39.     (if(and(=(type en) 'ENAME)(= (type code) 'INT))
  40.       (cdr(assoc code (entget en))))
  41. )

随图层的,组码里面就没有62号点对,无法按颜色筛选。这个问题应该怎么样解决?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-9-5 14:25:45 | 显示全部楼层
(setq ss (ssget '((-4 . "<and") (-4 . "=")(62 . 256) (-4 . "and>"))))
发表于 2023-9-5 14:36:00 | 显示全部楼层
等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色
发表于 2023-9-5 14:58:21 | 显示全部楼层
本帖最后由 llsheng_73 于 2023-9-6 21:33 编辑

  1. ;|code 6,62,370三组任意组合f"or"或"and"或者当code为nil时任意字符串,dxf当code为nil时可任意,否则不应含code里边组和-4组
  2. (SELECTBYLAYER'((0 . "circle")) '((62 . 1)(370 . 100))"or")
  3. (sslength(SELECTBYLAYER'((0 . "circle")) nil""))|;

  4. (Defun STB(TAB f / d a)
  5.   (While(SetQ a(TblNext TAB(not d)))
  6.     (SetQ d(Cons a d)))
  7.   (if f(mapcar'cdadr d)d))
  8. (defun Selectbylayer(dxf code f / ly)
  9.   (setq ly(mapcar'(lambda(x)(cons(assoc 370(entget(tblobjname"layer"(cdadr x))))x))(STB"Layer"nil)))
  10.   (ssget"X"(if code(append dxf(list(cons -4(strcat"<"f)))
  11.                           (vl-remove'nil(apply'append(mapcar'(lambda(x)(list'(-4 . "<or")x
  12.                                                               '(-4 . "<and")(assoc(car x)'((62 . 256)(6 . "Bylayer")))
  13.                                                               (cons 8(apply'strcat(mapcar'(lambda(x)(strcat(cdaddr x)","))
  14.                                                                                          (vl-remove-if-not'(lambda(y)(member x y))ly))))
  15.                                                               '(-4 . "and>")'(-4 . "or>")))code)))
  16.                           (list(cons -4(strcat f">"))))
  17.             dxf)))

 楼主| 发表于 2023-9-5 15:05:36 | 显示全部楼层

谢谢长老,我学习下
发表于 2023-9-5 16:21:33 | 显示全部楼层
选取该颜色的图层再筛选出该图层里bylayer的图元,分两步走
 楼主| 发表于 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 | 显示全部楼层

STB函数方便贴出来吗,大佬
 楼主| 发表于 2023-9-6 22:32:22 来自手机 | 显示全部楼层
xiaocainiao 发表于 2023-9-5 14:36
等于空的时候可以用tblsearch 搜索你拾取那个图层的颜色

谢谢,是可以这样。然后把选择集中的图元一个个拿出来比较。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 04:32 , Processed in 0.177764 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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