;;試試這個擦除重复物件 (defun c:duprem (/ f1 sle sa ca ta la lb enta ea typa a1 a2 a3 a4 sc ltest tes) (setvar "cmdecho" 0) (setq f1 nil f1 0 ) (or :gchoice (setq :gchoice "Set") ) (initget "Set Limits All") ; (setq sle (getkword "\nSelect objects by election set, imits, or ntire database: ")) (setq sle (getkword (strcat "\nType of selection [Set/Limits/All] <" :gchoice ">: " ) ) ) (if (not sle) (setq sle :gchoice) (setq :gchoice sle) ) (cond ((= sle "Set") (setq sa (ssget)) ) ((= sle "Limits") (setq sa (ssget "c" (getvar "extmin") (getvar "extmax"))) ) ((= sle "All") (setq sa (ssget "X")) ) ) (if (and sa (= (type sa) 'pickset) (not (zerop (sslength sa))) ) (progn (setq ca 0 ta (sslength sa) la nil lb nil ) (while (< ca ta) (setq enta (ssname sa ca) ea (cdr (entget enta)) typa (cdr (assoc 0 ea)) ) ; (if (= typa "POLYLINE") (progn (setq entb (entnext enta) ea (cdr (entget entb)) ) ) )
(setq a1 (assoc 5 ea)) (setq a2 (cons 5 "")) (setq ea (subst a2 a1 ea ) ) (if (wcmatch (getvar "ACADVER") "*15*") (progn (setq a3 (assoc 330 ea)) (setq a4 (cons 330 "")) (setq ea (subst a4 a3 ea ) ) ) ) (setq la (cons enta la) lb (cons ea lb) ca (+ ca 1) ) ) (setq sc nil sc (ssadd) ltest lb ) (setq ca 0) (setq tes (car ltest) ltest (cdr ltest) ta nil ta (length ltest) ) (while (/= ta 0) (if (member tes ltest) (progn (setq sc (ssadd (nth ca la) sc)) (prompt "\nFound duplicate entity.") (setq f1 (+ f1 1)) ) ) (setq ca (+ ca 1)) (setq tes (car ltest) ltest (cdr ltest) ta (length ltest) ) ) (command "erase" sc "") (redraw) (prompt "\n") (prin1 f1) (prompt " duplicate entities erased.") ) ) (princ) (prompt "\nType DUPREM to run. Delete duplicate entity routine Ver 2.0 loaded." ) (princ) ) |