CAD Tip #5697 at cadforum offered a "wps utility" that would select inside a rectangular polygon or circle transparently which i modified to also work with curved polylines. I don't think they list an author besides xanadu.cz..Modifications were made when i was beginning to learn lisp so, as you can imagine, the added code is not that great and visual lisp free..
This modified code includes options to select inside SELI or outside SELO and both can be called transparently during a command.
Example: After initializing the erase command, type 'SELO at the selection prompt and select your closed polyline.
Note: If using either routine alone, objects will become the "previous" selection
;;Modified tip #5697 @ cadforum
(defun mass1042 (alist / x nlist);slight variation of massoc by Jaysen Long
(foreach x alist
(if
(member (car x) '(10 42))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
);defun
(defun tp ( pt / )(command (trans pt 0 1)))
(defun tracecirc ( elist / cen rad p1)
(setq cen (cdr (assoc 10 elist)) rad (cdr (assoc 40 elist)))
(repeat 90 ; 360/4 0.06981317=4*pi/180
(setq p1 (polar cen (* i 0.06981317) rad) i (1+ i))
(tp p1)))
(defun tracepline (elist / currpt nxt nxtpt p1 cen rad x2 x y2 y c s ang n cc a midp i)
(setq elist (mass1042 elist) i -1)
(repeat (length elist)
(setq currpt (nth (setq i (1+ i)) elist) nxt (nth (1+ i) elist))
(if (and (= (type currpt) 'LIST) (= (type nxt) 'REAL) (not (zerop nxt)))
(progn (setq nxtpt (if (setq nxtpt (nth (+ i 2) elist)) nxtpt (nth 0 elist))
y2 (cadr nxtpt)
y (cadr currpt)
x2 (car nxtpt)
x (car currpt)
c (distance currpt nxtpt)
s (abs (* (/ c 2) nxt))
rad (/ (+ (expt s 2)(expt (/ c 2) 2))(* s 2))
cc (/ c 2.0)
a (sqrt (- (expt rad 2.0) (expt cc 2.0)))
midp (polar currpt (angle currpt nxtpt) cc)
cen (polar midp (+ (angle currpt nxtpt)
(/ pi (cond ((> nxt 1) -2.0)
((< nxt -1) 2.0)
((>= nxt 0) 2.0)
((< nxt 0) -2.0)))) a)
ang (abs (cvunit (* 4 (atan nxt)) "radian" "degree"))
n (angle cen currpt))
(repeat (fix ang)
(setq p1 (polar cen n rad) n (+ n (if (< nxt 0) -0.0174532925 0.0174532925)))(tp p1))
)
(if (= (type currpt) 'LIST)(tp currpt))
);if
);repeat
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;SELECT OBJECTS COMPLETELY WITHIN A CIRCLE OR ANY POLYLINE
;(type 'seli inside an object selection prompt such as the selection prompt after erase)
(defun C:seli ( / i elist at cmde )
(setq cmde (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq elist (entget (car (entsel "\nPick a circle or polyline: "))))
(setvar "OSMODE" (boole 7 (getvar "OSMODE") 16384))
(if (zerop (getvar "CMDACTIVE")) (command "select"))
(command "_wp")
(if (= (cdr(assoc 0 elist)) "CIRCLE")(tracecirc elist)(tracepline elist))
(command "" "")
(setvar "OSMODE" (boole 2 (getvar "OSMODE") 16384))
(setvar "cmdecho" cmde)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;SELECT OBJECTS COMPLETELY OUTSIDE A CIRCLE OR ANY POLYLINE
;(type 'selo inside an object selection prompt such as the selection prompt after erase)
(defun C:selo ( / pick i elist at cmde )
(setq cmde (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq elist (entget (setq pick (car (entsel "\nPick a circle or polyline: ")))))
(setvar "OSMODE" (boole 7 (getvar "OSMODE") 16384))
(if (zerop (getvar "CMDACTIVE")) (command "_select"))
(command "_all" "_r" pick)
(command "_cp")
(if (= (cdr(assoc 0 elist)) "CIRCLE")(tracecirc elist)(tracepline elist))
(command "" "")
(setvar "OSMODE" (boole 2 (getvar "OSMODE") 16384))
(setvar "cmdecho" cmde)
(princ)
)