本帖最后由 菜卷鱼 于 2018-5-28 17:12 编辑
对比的那里不能用单纯用If 去对比,用entget 看到的信息其实有部分精度未显示出来,表面上看数据一模一样,因为显示的精度只有4位小数,实际上可能不止,所以要用equal添加允许误差范围。注:该方法运行对象越多较慢,逐步变慢,超过1万个的时候,就会慢得像蜗牛 。
 - (defun c:cf (/ inforemove ss n i s a cf_info elist)
- (defun inforemove (info)
- (mapcar '(lambda (x)
- ;;匿名函数
- (setq info (vl-remove (assoc x info) info))
- )
- '(-1 330 5 360)
- )
- info
- )
- (setq elist (list 0))
- (setq ss (ssget))
- (setq n (sslength ss))
- (setq i 0)
- (setq s 0)
- (repeat n
- (setq a (ssname ss i))
- (setq cf_info (inforemove (entget a)))
- (if
- (apply 'or
- (mapcar '(lambda (x) (equal cf_info x 0.0001)) elist))
- (progn (entdel a) (setq s (1+ s)))
- (setq elist (cons cf_info elist))
- )
- (setq i (1+ i))
- )
- (mapcar 'princ (list "共删除" s "个重复对象"))
- (prin1)
- )
|