chxj031 发表于 2017-10-16 16:01:20

cad图形复制平移与原图重叠了,求大神们帮忙想想处理方式,图大我发一部分上来

cad图形整体复制平移了,造成与原图重叠严重,求大神帮忙,图大,我弄一小块给大家看下,求帮忙!!!

vectra 发表于 2017-10-16 16:44:07

ET工具overkill
论坛里有消重工具,可以搜索一下

chxj031 发表于 2017-10-16 17:01:38

感谢,overkill处理不了,我看看其他消重能不能处理这种重复

evayleung 发表于 2017-10-17 09:49:20

高版本有CAD删重复功能的,超级强大。

逍遥天下 发表于 2017-10-17 10:49:30

路过,学习了

Gu_xl 发表于 2017-10-17 14:46:15

本帖最后由 Gu_xl 于 2017-10-17 14:48 编辑

;; 删除重复移动对象 By Gu_xl 2017.10.17
(defun C:DUMPENT (/         BLOCKS      DXF41DXF411 DXF42DXF421 DXF43
                  DXF431 DXF50      DXF501 DXF7   DXF71E2            EL
                  EN         ENAME      I      K      LEN    LEN1   LINES
                  N         NAME      NAME1NN   P0   P1            POLYS
                  PP0         PP1      SS   TEXTSVEC    VEC1   VEC2
               )
(if (setq ss (ssget))
    (progn
      (setq nn 0)
      (if (and
            (setq p0 (getpoint "\n基准点:"))
            (setq p1 (getpoint "\n平移点:"))
          )
      (progn
          (setq vec (mapcar '- p1 p0))
          (setq      lines nil
                polys nil
                blocks nil
                texts nil
          )
          (repeat (setq n (sslength ss))
            (setq en (ssname ss (setq n (1- n))))
            (setq el      (entget en)
                  ename      (cdr (assoc 0 el))
            )
            (cond
            ((= "LINE" ename) (setq lines (cons en lines)))
            ((or (WCMATCH ename "*POLYLINE") (= "ARC" ename))
               (setq polys (cons en polys))
            )
            ((= "INSERT" ename) (setq blocks (cons en blocks)))
            ((WCMATCH ename "*TEXT") (setq texts (cons en texts)))
            )
          )
          (if lines
            (progn
            (setq i 0)
            (foreach e1 lines
                (if (not (vlax-erased-p e1))
                  (progn
                  (setq k 0)
                  (setq p0 (vlax-curve-getStartPoint e1))
                  (setq pp0 (vlax-curve-getEndPoint e1))
                  (while (< k (length lines))
                      (setq e2 (nth k lines))
                      (setq p1 (vlax-curve-getStartPoint e2))
                      (setq vec1 (mapcar '- p1 p0))
                      (setq pp1 (vlax-curve-getEndPoint e2))
                      (setq vec2 (mapcar '- pp1 pp0))
                      (if (and
                            (equal vec vec1 1e-3)
                            (equal vec vec2 1e-3)
                        )
                        (progn
                        (entdel e2)
                        (setq nn (1+ nn))
                        (setq lines (vl-remove e2 lines))
                        )
                        (progn
                        (setq k (1+ k))
                        )
                      )
                  )
                  )
                )

            )
            )
          )
          (if polys
            (progn
            (setq i 0)
            (foreach e1 polys
                (if (not (vlax-erased-p e1))
                  (progn
                  (setq k 0)
                  (setq p0 (vlax-curve-getStartPoint e1))
                  (setq pp0 (vlax-curve-getEndPoint e1))
                  (setq len (vlax-curve-getDistAtParam
                              e1
                              (vlax-curve-getEndParam e1)
                              )
                  )
                  (while (< k (length polys))
                      (setq e2 (nth k polys))
                      (setq p1 (vlax-curve-getStartPoint e2))
                      (setq vec1 (mapcar '- p1 p0))
                      (setq pp1 (vlax-curve-getEndPoint e2))
                      (setq vec2 (mapcar '- pp1 pp0))
                      (setq len1 (vlax-curve-getDistAtParam
                                 e2
                                 (vlax-curve-getEndParam e2)
                                 )
                      )
                      (if (and
                            (equal vec vec1 1e-3)
                            (equal vec vec2 1e-3)
                            (equal len len1 1e-3)
                        )
                        (progn
                        (entdel e2)
                        (setq nn (1+ nn))
                        (setq polys (vl-remove e2 polys))
                        )
                        (progn
                        (setq k (1+ k))
                        )
                      )
                  )
                  )
                )
            )
            )
          )
          (if blocks
            (progn
            (setq i 0)
            (foreach e1 blocks
                (if (not (vlax-erased-p e1))
                  (progn
                  (setq k0
                        el (entget e1)
                  )
                  (setq p0      (cdr (assoc 10 el))
                        name      (cdr (assoc 2 el))
                        dxf41      (cdr (assoc 41 el))
                        dxf42      (cdr (assoc 42 el))
                        dxf43      (cdr (assoc 43 el))
                        dxf50      (cdr (assoc 50 el))
                  )

                  (while (< k (length blocks))
                      (setq e2 (nth k blocks)
                            el (entget e2)
                      )
                      (setq p1         (cdr (assoc 10 el))
                            name1(cdr (assoc 2 el))
                            dxf411 (cdr (assoc 41 el))
                            dxf421 (cdr (assoc 42 el))
                            dxf431 (cdr (assoc 43 el))
                            dxf501 (cdr (assoc 50 el))
                      )
                      (setq vec1 (mapcar '- p1 p0))
                      (if (and
                            (equal vec vec1 1e-3)
                            (= name name1)
                            (equal dxf41 dxf411 1e-3)
                            (equal dxf42 dxf421 1e-3)
                            (equal dxf43 dxf431 1e-3)
                            (equal dxf50 dxf501 1e-3)
                        )
                        (progn
                        (entdel e2)
                        (setq nn (1+ nn))
                        (setq blocks (vl-remove e2 blocks))
                        )
                        (progn
                        (setq k (1+ k))
                        )
                      )
                  )
                  )
                )
            )
            )
          )
          (if texts
            (progn
            (setq i 0)
            (foreach e1 texts
                (if (not (vlax-erased-p e1))
                  (progn
                  (setq k0
                        el (entget e1)
                  )
                  (setq p0      (cdr (assoc 10 el))
                        name      (cdr (assoc 1 el))
                        dxf7      (cdr (assoc 7 el))
                        dxf50      (cdr (assoc 50 el))
                  )

                  (while (< k (length texts))
                      (setq e2 (nth k texts)
                            el (entget e2)
                      )
                      (setq p1         (cdr (assoc 10 el))
                            name1(cdr (assoc 1 el))
                            dxf71(cdr (assoc 7 el))
                            dxf501 (cdr (assoc 50 el))
                      )
                      (setq vec1 (mapcar '- p1 p0))
                      (if (and
                            (equal vec vec1 1e-3)
                            (= name name1)
                            (= dxf7 dxf71)
                            (equal dxf50 dxf501 1e-3)
                        )
                        (progn
                        (entdel e2)
                        (setq nn (1+ nn))
                        (setq texts (vl-remove e2 texts))
                        )
                        (progn
                        (setq k (1+ k))
                        )
                      )
                  )
                  )
                )
            )
            )
          )
      )
      )
    )
)
(princ (strcat "\n共删除了 " (itoa nn) " 个对象..."))
(princ)
)

yoyoho 发表于 2017-10-17 16:22:17

感谢 G版 分享程序!!!!

lz123456 发表于 2017-10-17 20:41:54

效果棒,只是图大点速度稍微慢。对尺寸,填充那些不行。最好是常用物体都支持

Gu_xl 发表于 2017-10-18 11:36:29

本帖最后由 Gu_xl 于 2017-10-18 11:40 编辑

lz123456 发表于 2017-10-17 20:41
效果棒,只是图大点速度稍微慢。对尺寸,填充那些不行。最好是常用物体都支持
代码只是顺手而写,其他对象根据代码类似添加处理即可!效率没办法改进,可以在使用时一次性少选一些对象即可提高速度!如果说改成arx来实现,那效率绝对岗岗的!有空我会写到XLRX中去!

马甲 发表于 2017-10-19 20:22:29

感谢 G版 分享程序!!!!
页: [1] 2
查看完整版本: cad图形复制平移与原图重叠了,求大神们帮忙想想处理方式,图大我发一部分上来