算了自力更生 (defun c:da () (setvar "cmdecho" 0) (setq ss (ssget '((0 . "circle")))) (setq n 0) (while (< n (sslength ss)) (setq ssa (cdr (assoc 10 (entget (ssname ss n))))) (setq m (+ n 1)) (while (< m (sslength ss)) (setq ssb (cdr (assoc 10 (entget (ssname ss m))))) (setq de (cdr (assoc -1 (entget (ssname ss m))))) (if (and (= (car ssa) (car ssb))(= (cadr ssa) (cadr ssb))) (if de (command "ERASE" de ""))) (setq m (+ 1 m)) )(setq n (+ 1 n)) )(princ) ) 记得好像不能依赖command的返回来做一件事情, 因为command执行起来比较慢,而lisp的循环执行的快时会不会有的圆被跳过? 应该不会有这种事情发生吧。 另外这个算法也比较烂,如果有1000个圆, 循环的次数将是1000的阶乘,对于5000多个圆来说岂不是天文数字? 应该有更好的解决办法,希望高手的关注。 |