谢谢
最新版本:
- ; clear.lsp: Delete duplicate entities, tested on polylines, circles,
- ; mtexts texts, lines, splines, arcs, ellipses, ellipse arcs.
- ;
- ; Core routine by Lee Mac 04-08-2013
- ; Output results refined by Luigi Calderone and Costinbos77 04-11-2013
- ;
- (defun c:clear (/ old a b ent enx i lst s)
- (setq xmin (car (getvar "EXTMIN"))
- xmax (car (getvar "EXTMAX"))
- ymin (car (cdr (getvar "EXTMIN")))
- ymax (car (cdr (getvar "EXTMAX")))
- old (ssget "_X")
- N 10
- J 0
- )
- (command "zoom" "e")
- (prompt "\n")
- (while (< J N)
- (setq lst nil
- s nil
- pt1 (list xmin (+ ymin (/ (* (- ymax ymin) J) N)))
- pt2 (list xmax (+ ymin (/ (* (- ymax ymin) (+ J 1)) N)))
- J (+ J 1)
- )
- (if (setq s (ssget "_C" pt2 pt1))
- (repeat (setq i (sslength s))
- (foreach dx (entget (setq ent (ssname s (setq i (1- i)))))
- (setq a (car dx)
- b (cdr dx)
- )
- (cond
- ((or (= 'ename (type b)) (= a 5)))
- ((listp b)
- (setq
- enx (cons
- (cons
- a
- (mapcar (function (lambda (x) (rtos x 2 )) b)
- )
- enx
- )
- )
- )
- ((numberp b)
- (setq enx (cons (cons a (rtos b 2 ) enx))
- )
- ((setq enx (cons dx enx)))
- )
- )
- (if (member enx lst)
- (entdel ent)
- (setq lst (cons enx lst))
- )
- (setq enx nil)
- (princ "\r\")
- (princ (strcat "\r/ " (itoa J) "/" (itoa N)) )
- )
- )
- )
- (if (setq trap old)
- (prompt (strcat "\nNumber of elements before clearing- "
- (itoa (sslength old))
- )
- )
- (prompt (strcat "\nNumber of elements before clearing- 0"))
- )
- (if (setq trap (ssget "_X"))
- (prompt (strcat "\nNumber of elements after clearing- "
- (itoa (sslength (ssget "_X")))
- )
- )
- (prompt (strcat "\nNumber of elements after clearing- 0"))
- )
- (if (setq trap (ssget "_X"))
- (prompt (strcat "\nNumber of elements cleared- "
- (itoa (- (sslength old) (sslength (ssget "_X"))))
- )
- )
- (prompt (strcat "\nNumber of elements cleared- 0"))
- )
- (princ)
- );end file
- (prompt "\nLoaded new command CLEAR. ")
- (princ)
|