;Trim all outside a closed poly - www.cadforum.cz
;(requires Express Tools!)

(vl-load-com)

(defun C:TrimOuter (  / cmde ent en el ss cbox ssall lst)
  (if (and ACET-ENT-GEOMEXTENTS ; ET?
           (setq ent (entsel "\nSelect the contour polyline: "))
           (setq en (car ent))
           (wcmatch (cdr (assoc 0 (entget en))) "*POLYLINE"))
    (progn
	  (setq cmde (getvar "CMDECHO"))
	  (setvar "CMDECHO" 0)
      (command "_UNDO" "_Group")
      (setq cbox (ACET-ENT-GEOMEXTENTS en))
      (setq cbox (mapcar '(lambda(x)(trans x 0 1)) cbox))
      (setq lst (ACET-GEOM-OBJECT-POINT-LIST en 1e-4))
      (ACET-SS-ZOOM-EXTENTS (ACET-LIST-TO-SS (list en)))
      (command "_.ZOOM" "0.95x")
      (if (null etrim)(load "extrim.lsp"))
      (etrim en (polar
                  (car cbox)
                  (angle (car cbox)(cadr cbox))
                  (* (distance (car cbox)(cadr cbox)) 1.1)))
      (if (and
            (setq ss (ssget "_CP" lst))
            (setq ssall (ssget "_X" (list (assoc 410 (entget en)))))
           )
        (progn
          (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
          (foreach e1 lst (ssdel e1 ssall))
          (ACET-SS-ENTDEL ssall)
        )
      )
      (command "_UNDO" "_End")
	  (setvar "CMDECHO" cmde)
    )
	(if (not ACET-ENT-GEOMEXTENTS)(princ "\nExpress Tools not installed!"))
  )
 (princ)
)

(princ "\nTrimOuter loaded. Type TRIMOUTER to start.")
(princ)
