;;; Select Similar
;;; Melanie (Stone) Perry
;;; (based on a command found in a few versions of AutoCAD-based products)
;;; written by Adam Wuellner <mailto:akw@gawab.com>
;;; modification by CAD Studio - www.cadstudio.cz
;;; all rights released
(defun C:SelSim (/ ss1 i ent filter_list type-layer filter sstemp) 

(defun ss:union (ss1 ss2 / ename ss-smaller ss-larger c)
(cond ((and ss1 ss2)
(setq c 0)
(if (< (sslength ss1) (sslength ss2))
(setq ss-smaller ss1
      ss-larger ss2)
(setq ss-larger ss1
      ss-smaller ss2))
(while (< c (sslength ss-smaller))
(setq ename (ssname ss-smaller c)
      c (1+ c))
(if (not (ssmemb ename ss-larger))
(ssadd ename ss-larger)))
  ss-larger)
(ss1 ss1)
(ss2 ss2)
(t nil)))

;--------------------
(if (not (setq ss1 (cadr (ssgetfirst)))) 
(setq ss1 (ssget))) 
(setq i 0 
      filter_list '()) 
(repeat (sslength ss1) 
(setq ent (entget (ssname ss1 i)) 
      i (1+ i)) 
(setq type-layer (list (assoc 0 ent) (assoc 8 ent))) ; type+layer filter  (e.g. 2=blockname, 62=color)
(if (not (member type-layer filter_list)) 
(setq filter_list (cons type-layer filter_list)))) 
(foreach filter filter_list 
 (princ (strcat "selecting all " (cdar filter) " entities on layer " (cdadr filter) "...\n")) 
(setq sstemp (ssget "_X" filter)) ; across layouts
(setq ss1 (ss:union ss1 sstemp) 
      sstemp nil)) 
(sssetfirst nil ss1) 
(princ)
)

(princ "\nSelSim command (select similar) loaded.")(princ)