邓超0203 发表于 2018-3-10 09:46:48

关于删除重复实体重复线的提问

在社区逛了好久发现社区里关于删除重复线重复实体的lisp都是把两个完全重复的实体删除其中一个!现在求一个能把两个对完全重叠在一个的两个圆都删除的lisp !图面只保留没有重复的对象!

邓超0203 发表于 2018-3-10 09:49:31

我的思路是判断两个圆的圆心坐标如果一致就删除该圆心坐标上所有的圆!求各位大神帮忙!

前生 发表于 2018-3-10 12:28:31

搜索论坛,有

namezg 发表于 2018-3-10 13:13:55

本帖最后由 namezg 于 2018-3-10 13:28 编辑

;删除重复圆
(defun c:DelOverlapCircle ( / *error* ss i j n m en en_dxf ss1)
(defun *error* (msg)
    (setvar "nomutt" 0)
    (or (not msg)
      (wcmatch (strcase msg) "*BREAK,*中断,*CANCEL*,*取消,*EXIT*")
      (princ (strcat "\n** Error: " msg " **"))
    )
    (if msg
      (command ".undo" "")
    )
    (setvar "cmdecho" 1)
    (princ)
)
(setvar "cmdecho" 0)
(command "_undo" "be")
(princ "\n请选择圆: ")
(setvar "nomutt" 1)
(setq ss (ssget '((0 . "CIRCLE"))))
(setvar "nomutt" 0)
(setq i 0
      j 0
      n -1
)
(if ss
    (progn
      (repeat (setq i (sslength ss))
      (setq en (ssname ss (setq n (1+ n))))
      (command "_.select" ss "")
      (if (and (setq en_dxf (entget en))
            (setq ss1 (ssget "p" (list '(0 . "CIRCLE") (assoc 10 en_dxf) (assoc 40 en_dxf))))
            (> (setq m (sslength ss1)) 1)
          )
          (progn
            (command "_.erase" ss1 "r" en "")
            (setq j (+ j (1- m)))
          )
      )
      )
    )
)
(princ (strcat "共选择" (itoa i) "个圆,删除重复圆" (itoa j) "个。"))
(*error* nil)
)

pengfei2010 发表于 2018-3-12 11:03:04

论坛 有很多 类似的 程序,不过具体还需要根据自己的需求进一步 细化

fangmin723 发表于 2018-3-12 16:12:12

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=168981&highlight=%CF%FB%B3%FD%D6%D8%B8%B4

不谢!

mikewolf2k 发表于 2018-3-13 09:41:37

什么叫“重复实体”?要根据你的具体情况才能确定。有完全满足你需要的、现成的程序的几率不大。
如楼主的要求,圆心相同的就全部删除,这种要求就更罕见了。当然这样明确规则的,可以做。

tudou121 发表于 2019-11-5 08:54:15

棒棒哒,感谢分享
页: [1]
查看完整版本: 关于删除重复实体重复线的提问