Hi ,
Here's my way to quickly select objects .
You can add the other conditions , such as color , angle ... and so on.
;;;Layer Select Filiter
;;;Support the transparent use
;;;by GSLS(SS)
(defun C:SS (/ ss1 i lst s1 layer_fili ss2 filiter pt)
(if ss-filiter-old-ss ;_(setq ss-filiter-old-ss nil)
(progn
(prompt "Existing layer filters, if need to be rebuilt type 'N':")
(ss-sel-grread)
)
(progn
(prompt "Select characteristical Entities :")
(setq ss1 (ssget))
)
)
(if ss1
(progn
(setq
i -1
lst '()
)
(while (setq s1 (ssname ss1 (setq i (1+ i))))
(setq lst (append lst (list (cdr (assoc 8 (entget s1))))))
)
(setq
layer_fili
(vl-string-right-trim
","
(apply 'strcat
(mapcar '(lambda (x) (strcat x ",")) lst)
)
)
filiter (list (cons 8 layer_fili))
ss-filiter-old-ss filiter
);_ss-filiter-old-ss the Global variables
)
(setq filiter ss-filiter-old-ss)
)
(if filiter
(progn
(setq pt (cadr pt))
(if (and pt (listp pt))
(SendKeys (ss-pt->str pt))
)
(setq ss2 (ssget filiter))
)
(c:ss)
)
(princ
(strcat "Total Selected " (rtos (sslength ss2) 2 0) " Entities.")
)
ss2
)
;;;Layer & Entity-type Select Filiter
;;;Support the transparent use
;;;by GSLS(SS)
(defun C:S1 (/ ss1 i lst lst1 s1 ent layer_fili TYPE_fili filiter ss2 pt)
(if ss-filiter-old-s1
(progn
(prompt "Existing layer & entity-type filters, if need to be rebuilt type 'N':")
(ss-sel-grread)
)
(progn
(prompt "Select characteristical Entities :")
(setq ss1 (ssget))
)
)
(if ss1
(progn
(setq
i -1
lst '()
lst1 '()
)
(while (setq s1 (ssname ss1 (setq i (1+ i))))
(setq ent (entget s1)
lst (append lst (list (cdr (assoc 8 ent))))
lst1 (append lst1 (list (cdr (assoc 0 ent))))
)
)
(setq lst (vl-remove-doubles lst)
lst1 (vl-remove-doubles lst1)
)
(setq
layer_fili
(vl-string-right-trim
","
(apply 'strcat
(mapcar '(lambda (x) (strcat x ",")) lst)
)
)
TYPE_fili
(vl-string-right-trim
","
(apply 'strcat
(mapcar '(lambda (x) (strcat x ",")) lst1)
)
)
filiter (list (cons 0 TYPE_fili)
(cons 8 layer_fili)
)
ss-filiter-old-s1 filiter
);_ss-filiter-old-s1 the Global variables
)
(setq filiter ss-filiter-old-s1)
)
(if filiter
(progn
(setq pt (cadr pt))
(if (and pt (listp pt))
(SendKeys (ss-pt->str pt))
)
(setq ss2 (ssget filiter))
)
(c:s1)
)
(princ
(strcat "Total Selected " (rtos (sslength ss2) 2 0) " Entities.")
)
ss2
)
(defun ss-sel-grread ()
(setq is_go_on T)
(while (and
is_go_on
(setq pt (grread t 4 2))
(/= 3 (car pt))
(/= 25 (car pt))
)
(cond
((and (= 2 (car pt))
(or (eq (strcase (chr (cadr pt))) "N")
(eq (strcase (chr (cadr pt)) T) "n")
)
)
(prompt "Select characteristical Entities :")
(setq ss1 (ssget))
(setq is_go_on nil)
)
(t
(if (= (car PT) 5)
(setq id_go_on nil)
)
)
)
)
)
(defun SendKeys (keys / ws)
(setq ws (vlax-create-object "WScript.Shell"))
(vlax-invoke-method ws 'sendkeys keys)
(vlax-release-object ws)
(princ)
)
(defun ss-pt->str (pts / str)
(if (numberp (car pts))
(progn
(setq str "")
(foreach a pts
(setq str (strcat str (strcat (rtos a 2 6) ",")))
)
(setq str (vl-string-right-trim "," str))
(strcat str " ")
)
(mapcar 'ss-pt->str pts)
)
)
(defun vl-remove-doubles (lst)
(if lst
(cons (car lst)
(vl-remove-doubles (vl-remove (car lst) lst))
)
)
)