Hi,
Here's one I wrote some times ago
Using : type SSUCS to select an grip objects or (ssucs) when the user is prompted to select objects within an edition command.
;; SSCU (gile) 31/03/07
;; Sélection mutiple par cible, fenêtre ou capture
;; Le cadre de la fenêtre est parallèle au plan du SCU courant
;; La sélection est terminée en faisant Entrée, Espace ou clic droit
(defun ssucs (/ *error* sel RedrawSelSet sst loop p1 gr p2 p3 p4 po ss n ent)
(defun *error* (msg)
(and msg
(/= msg "Function cancelled")
(princ (strcat "\nError: " msg))
)
(redraw)
(RedrawSelSet sst 4)
(princ)
)
;; Applique redraw avec le drapeau spécifié à un jeu de sélection
(defun RedrawSelSet (ss flag / n)
(repeat (setq n (sslength ss))
(redraw (ssname ss (setq n (1- n))) flag)
)
)
;; Retourne un jeu de sélection, un point ou nil
(defun sel (/ loop gr pt)
(setq loop T)
(while (and (setq gr (grread T 12 2)) (/= (car gr) 3) loop)
(cond
((= (car gr) 5)
(setq pt (cadr gr))
)
((or (member gr '((2 13) (2 32)))
(or (= (car gr) 11) (= (car gr) 25))
)
(setq loop nil
pt nil
)
)
)
)
(if pt
(cond
((ssget pt))
(pt)
)
)
)
(sssetfirst nil nil)
(setq sst (ssadd))
(while (and
(princ "\nSelect objects: ")
(setq p1 (sel))
)
(if (listp p1)
(progn
(princ "\nSpecify the opposite corner: ")
(setq p1 (list (car p1) (cadr p1)))
(while (and (setq gr (grread T 12 0)) (/= (car gr) 3))
(if (= 5 (car gr))
(progn
(redraw)
(setq p2 (list (caadr gr) (cadr p1))
p3 (list (caadr gr) (cadadr gr))
p4 (list (car p1) (cadadr gr))
)
(if (< (car p1) (car p2))
(progn
(setq po "_WP")
(grvecs (list 255 p1 p2 p2 p3 p3 p4 p4 p1)
)
)
(progn
(setq po "_CP")
(grvecs
(list -255 p1 p2 p2 p3 p3 p4 p4 p1)
)
)
)
)
)
)
(redraw)
(if (setq ss (ssget po (list p1 p2 p3 p4)))
(repeat (setq n (sslength ss))
(setq ent (ssname ss (setq n (1- n))))
(if (not (ssmemb ent sst))
(ssadd ent sst)
)
(redraw ent 3)
)
)
)
(progn
(ssadd (ssname p1 0) sst)
(redraw (ssname p1 0) 3)
)
)
)
(*error* nil)
sst
)
(defun c:ssucs ()
(sssetfirst nil (ssucs))
(princ)
)