如何点选获取多种颜色进行筛选
本帖最后由 xudongchu 于 2024-1-15 12:49 编辑此程序只能点选一种颜色进行筛选,请问如何连续点选获取多种颜色进行筛选?
;按颜色选择
(defun c:tt ()
(defun GetCo (s0 / a la co en)
(setq en (entget s0))
(if (setq a (assoc 62 en)) (cdr a) (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 en))))) )
)
(if
(progn (setq s0 (car (entsel "\n请选过滤颜色对象: "))) (redraw s0 3) (setq ss1 (ssget)) )
(progn
(setq co (GetCo s0) ss (ssadd) i-1)
(while (setq s1 (ssname ss1 (setq i (1+ i)))) (if (= (GetCo s1) co) (ssadd s1 ss)) )
(sssetfirst nil ss)
(princ (strcat "\n已选择" (itoa (sslength ss)) "个对象"))
)
)
(princ)
)
本帖最后由 ssyfeng 于 2024-1-16 10:32 编辑
应该是这个效果:
ssyfeng 发表于 2024-1-16 09:56
应该是这个效果:
谢谢分享!
这个满实用的… 特殊使用条件,收藏! ssyfeng 发表于 2024-1-16 09:56
应该是这个效果:
很不错的程序 谢谢ssyfeng共享 (defun c:tt6 (/ a b en len s0 ss ss1 tucys x ys yslst)
(defun tucys (en)
(setq tuc (vla-get-Layer (vlax-ename->vla-object en)));图层
(setq ys (vla-get-Color (vlax-ename->vla-object en)));颜色
)
(setq yslst nil ss1 (ssadd))
(while (setq s0 (car (entsel "\n请选过滤颜色对象: ")))
(redraw s0 3)
(tucys s0)
(setq yslst (cons(list tuc ys) yslst))
)
(setq ss (ssget))
(repeat (setq len (sslength ss))
(setq s0 (ssname ss (setq len (1- len))))
(tucys s0)
(foreach x yslst
(setq a (nth 0 x) b (nth 1 x))
(if(and(= a tuc)(= b ys))(ssadd s0 ss1))
)
)
(sssetfirst nil ss1)
(princ (strcat "\n已选择" (itoa (sslength ss1)) "个对象"))
(princ)
) 谢谢大师分享
页:
[1]