探索选择选项:
- (defun c:EIO (/ _p2ss o ent ssIn ssOut)
- ;; Erase Inside/Outside of selected LWPolyline (objects touching LWPolyline are deleted)
- ;; Alan J. Thompson, 04.02.10
- (or *EIO:Opt* (setq *EIO:Opt* "Inside"))
- (setq _p2ss (lambda (ename)
- (ssget "_CP"
- ((lambda (e / l)
- (foreach x e (and (eq 10 (car x)) (setq l (cons (cdr x) l))))
- (reverse l)
- ) ;_ lambda
- (entget ename)
- )
- ) ;_ ssget
- ) ;_ lambda
- ) ;_ setq
- (and (setq o (car (entsel "\nSelect LWPolyline: ")))
- (or (eq "LWPOLYLINE" (cdr (assoc 0 (setq ent (entget o)))))
- (alert "Invalid object!")
- ) ;_ or
- (not (initget 0 "Inside Outside"))
- (setq *EIO:Opt*
- (cond
- ((getkword (strcat "\nSpecify erase option [inside/Outside] <" *EIO:Opt* ">: ")))
- (*EIO:Opt*)
- ) ;_ cond
- ) ;_ setq
- (cond
- ((and (eq *EIO:Opt* "Inside") (setq ssIn (_p2ss o)))
- ((lambda (i)
- (while (setq e (ssname ssIn (setq i (1+ i))))
- (or (eq o e) (vl-catch-all-apply (function entdel) (list e)))
- ) ;_ while
- ) ;_ lambda
- -1
- )
- )
- ((eq *EIO:Opt* "Outside")
- (setq ssIn (_p2ss o)
- ssOut (ssget "_X" (list (cons 410 (getvar 'ctab))))
- ) ;_ setq
- ((lambda (i)
- (while (setq e (ssname ssOut (setq i (1+ i))))
- (if ssIn
- (or (ssmemb e ssIn) (eq o e) (vl-catch-all-apply (function entdel) (list e)))
- (or (eq o e) (vl-catch-all-apply (function entdel) (list e)))
- ) ;_ if
- ) ;_ while
- ) ;_ lambda
- -1
- )
- )
- ) ;_ cond
- ) ;_ and
- (princ)
- ) ;_ defun
见鬼,我们为你提供了三个独立的例程。 |