明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: flyfox1047

[源码] 删除重复对象

    [复制链接]
发表于 2013-12-16 20:56 | 显示全部楼层
支持,正需要这个。
发表于 2013-12-17 17:46 | 显示全部楼层
果断顶起果断顶起果断顶起果断顶起
发表于 2013-12-17 18:14 | 显示全部楼层
支持一个
 楼主| 发表于 2013-12-23 21:41 | 显示全部楼层
再发删除重复线
  1. (defun unique ( linlst )
  2.   (if (car linlst) (cons (car linlst) (unique (_vl-remove (car linlst) (_vl-remove (list (cadar linlst) (caar linlst)) (cdr linlst) 1e-6) 1e-6))))
  3. )

  4. (defun _vl-remove ( el lst fuzz )
  5.   (vl-remove-if '(lambda ( x ) (and (equal (car x) (car el) fuzz) (equal (cadr x) (cadr el) fuzz))) lst)
  6. )

  7. (defun eraseduplin ( ss / i lin p1 p2 lay col62 col420 linlst linlsta linlstn )
  8.   (setq i -1)
  9.   (while (setq lin (ssname ss (setq i (1+ i))))
  10.     (setq p1 (cdr (assoc 10 (entget lin)))
  11.           p2 (cdr (assoc 11 (entget lin)))
  12.           lay (cdr (assoc 8 (entget lin)))
  13.           col62 (cdr (if (assoc 62 (entget lin)) (assoc 62 (entget lin)) nil))
  14.           col420 (cdr (if (assoc 420 (entget lin)) (assoc 420 (entget lin)) nil))
  15.     )
  16.     (setq linlsta (cons (list p1 p2 lay col62 col420) linlsta))
  17.     (setq linlst (cons (list p1 p2) linlst))
  18.     (entdel lin)
  19.   )
  20.   (setq linlstn (unique linlst))
  21.   (foreach lin linlsta
  22.     (if (vl-some '(lambda ( x ) (and (equal (car x) (car lin) 1e-8) (equal (cadr x) (cadr lin) 1e-8))) linlstn)
  23.       (setq linlstn (subst lin (list (car lin) (cadr lin)) linlstn))
  24.     )
  25.   )
  26.   (foreach lin linlstn
  27.     (entmake (vl-remove nil (list '(0 . "LINE") (cons 8 (caddr lin)) (if (cadddr lin) (cons 62 (cadddr lin))) (if (caddr (cddr lin)) (cons 420 (caddr (cddr lin)))) (cons 10 (car lin)) (cons 11 (cadr lin)))))
  28.   )
  29. )

  30. (defun c:eraseduplines-0lines ( / ss s i k lin )
  31.   (setq ss (ssget "_:L" '((0 . "LINE"))))
  32.   (setq s (ssadd))
  33.   (setq i -1)
  34.   (setq k 0)
  35.   (while (setq lin (ssname ss (setq i (1+ i))))
  36.     (if (equal (cdr (assoc 10 (entget lin))) (cdr (assoc 11 (entget lin))) 1e-4) (progn (setq k (1+ k)) (entdel lin)) (ssadd lin s))
  37.   )
  38.   (prompt "\nTotal : ")(princ (eraseduplin s))(prompt " duplicate-lines erased")
  39.   (prompt "\nTotal : ")(princ k)(prompt " zero-lines erased")
  40.   (princ)
  41. )

  42. (defun c:ed0l nil (c:eraseduplines-0lines))
发表于 2014-3-24 19:49 | 显示全部楼层
感谢分享。
发表于 2014-3-24 19:51 | 显示全部楼层
overkill好像清不完
发表于 2014-3-24 22:04 | 显示全部楼层
支持         
发表于 2014-3-31 16:31 | 显示全部楼层

支持楼主!
发表于 2014-4-16 15:43 | 显示全部楼层

支持楼主!
发表于 2014-5-16 22:36 | 显示全部楼层

支持楼主!路过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 04:51 , Processed in 0.147319 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表