明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1238|回复: 4

[提问] 求助:修改删除重复图元程序,改成默认框选

[复制链接]
发表于 2022-8-19 17:02:58 | 显示全部楼层 |阅读模式
Gu_xl 的源码,简洁实用,能删除图纸中的重叠图元,只是需要每次都选择Set/Limits/All,想修改成不用选择,直接运行程序就是框选清理,求修改。

  1. (defun C:TT (/ F1 SLE SA CA TA LA LB ENTA EA TYPA A1 A2 A3 A4 SC LTEST
  2.                    TES
  3.                 )
  4.   (setq F1 NIL
  5.         F1 0
  6.   )
  7.   (or
  8.     :GCHOICE
  9.     (setq :GCHOICE "Set")
  10.   )
  11.   (initget "Set Limits All")
  12.   (setq SLE (getkword (strcat "\n选择集类型 [Set/Limits/All] <" :GCHOICE
  13.                               ">: "
  14.                       )
  15.             )
  16.   )
  17.   (if (not SLE)
  18.     (setq SLE :GCHOICE)
  19.     (setq :GCHOICE SLE)
  20.   )
  21.   (cond
  22.     ((= SLE "Set")
  23.       (setq SA (ssget))
  24.     )
  25.     ((= SLE "Limits")
  26.       (setq SA (ssget "c" (getvar "extmin") (getvar "extmax")))
  27.     )
  28.     ((= SLE "All")
  29.       (setq SA (ssget "X"))
  30.     )
  31.   )
  32.   (if (and
  33.         SA
  34.         (= (type SA) 'PICKSET)
  35.         (not (zerop (sslength SA)))
  36.       )
  37.     (progn
  38.       (setq CA 0
  39.             TA (sslength SA)
  40.             LA NIL
  41.             LB NIL
  42.       )
  43.       (while (< CA TA)
  44.         (setq ENTA (ssname SA CA)
  45.               EA (cdr (entget ENTA))
  46.               TYPA (cdr (assoc 0 EA))
  47.         )
  48.         (setq A1 (assoc 5 EA))
  49.         (setq A2 (cons 5 ""))
  50.         (setq EA (subst
  51.                    A2
  52.                    A1
  53.                    EA
  54.                  )
  55.         )
  56.         (if (wcmatch (getvar "ACADVER") "*15*")
  57.           (progn
  58.             (setq A3 (assoc 330 EA))
  59.             (setq A4 (cons 330 ""))
  60.             (setq EA (subst
  61.                        A4
  62.                        A3
  63.                        EA
  64.                      )
  65.             )
  66.           )
  67.         )
  68.         (setq LA (cons ENTA LA)
  69.               LB (cons EA LB)
  70.               CA (+ CA 1)
  71.         )
  72.       )
  73.       (setq SC NIL
  74.             SC (ssadd)
  75.             LTEST LB
  76.       )
  77.       (setq CA 0)
  78.       (setq TES (car LTEST)
  79.             LTEST (cdr LTEST)
  80.             TA NIL
  81.             TA (length LTEST)
  82.       )
  83.       (while (/= TA 0)
  84.         (if (member TES LTEST)
  85.           (progn
  86.             (setq SC (ssadd (nth CA LA) SC))
  87.             (setq F1 (+ F1 1))
  88.           )
  89.         )
  90.         (setq CA (+ CA 1))
  91.         (setq TES (car LTEST)
  92.               LTEST (cdr LTEST)
  93.               TA (length LTEST)
  94.         )
  95.       )
  96.       (command "erase" SC "")
  97.       (redraw)
  98.       (prompt "\n")
  99.       (prin1 F1)
  100.       (prompt " 个物体被删除.")
  101.     )
  102.   )
  103.   (princ)
  104. )





发表于 2022-8-19 17:56:06 | 显示全部楼层
(defun C:TT (/ F1 SLE SA CA TA LA LB ENTA EA TYPA A1 A2 A3 A4 SC LTEST   TES)
  (setq F1 NIL
                F1 0
  )
  (if (and
                                (setq SA (ssget))
        (= (type SA) 'PICKSET)
        (not (zerop (sslength SA)))
      )
    (progn
      (setq CA 0
                                TA (sslength SA)
                                LA NIL
                                LB NIL
      )
      (while (< CA TA)
        (setq ENTA (ssname SA CA)
                                        EA (cdr (entget ENTA))
                                        TYPA (cdr (assoc 0 EA))
        )
        (setq A1 (assoc 5 EA))
        (setq A2 (cons 5 ""))
        (setq EA (subst
                   A2
                   A1
                   EA
                 )
        )
        (if (wcmatch (getvar "ACADVER") "*15*")
          (progn
            (setq A3 (assoc 330 EA))
            (setq A4 (cons 330 ""))
            (setq EA (subst
                       A4
                       A3
                       EA
                     )
            )
          )
        )
        (setq LA (cons ENTA LA)
                                        LB (cons EA LB)
                                        CA (+ CA 1)
        )
      )
      (setq SC NIL
                                SC (ssadd)
                                LTEST LB
      )
      (setq CA 0)
      (setq TES (car LTEST)
                                LTEST (cdr LTEST)
                                TA NIL
                                TA (length LTEST)
      )
      (while (/= TA 0)
        (if (member TES LTEST)
          (progn
            (setq SC (ssadd (nth CA LA) SC))
            (setq F1 (+ F1 1))
          )
        )
        (setq CA (+ CA 1))
        (setq TES (car LTEST)
                                        LTEST (cdr LTEST)
                                        TA (length LTEST)
        )
      )
      (command "erase" SC "")
      (redraw)
      (prompt "\n")
      (prin1 F1)
      (prompt " 个物体被删除.")
    )
  )
  (princ)
)
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-19 18:33:19 | 显示全部楼层
本帖最后由 hhh454 于 2022-8-19 18:36 编辑
  1. ;;只能删除重合一起的属性相同的图元,长度不一样的线,重合在一起是删除不了的
复制代码
  1. (defun C:TT (/ F1 SLE SA CA TA LA LB ENTA EA TYPA A1 A2 A3 A4 SC LTEST
  2.                    TES
  3.                 )
  4.   (setq F1 NIL
  5.         F1 0
  6.   )

  7.   (setq SA (ssget))

  8.   (if (and
  9.         SA
  10.         (= (type SA) 'PICKSET)
  11.         (not (zerop (sslength SA)))
  12.       )
  13.     (progn
  14.       (setq CA 0
  15.             TA (sslength SA)
  16.             LA NIL
  17.             LB NIL
  18.       )
  19.       (while (< CA TA)
  20.         (setq ENTA (ssname SA CA)
  21.               EA (cdr (entget ENTA))
  22.               TYPA (cdr (assoc 0 EA))
  23.         )
  24.         (setq A1 (assoc 5 EA))
  25.         (setq A2 (cons 5 ""))
  26.         (setq EA (subst
  27.                    A2
  28.                    A1
  29.                    EA
  30.                  )
  31.         )
  32.         (if (wcmatch (getvar "ACADVER") "*15*")
  33.           (progn
  34.             (setq A3 (assoc 330 EA))
  35.             (setq A4 (cons 330 ""))
  36.             (setq EA (subst
  37.                        A4
  38.                        A3
  39.                        EA
  40.                      )
  41.             )
  42.           )
  43.         )
  44.         (setq LA (cons ENTA LA)
  45.               LB (cons EA LB)
  46.               CA (+ CA 1)
  47.         )
  48.       )
  49.       (setq SC NIL
  50.             SC (ssadd)
  51.             LTEST LB
  52.       )
  53.       (setq CA 0)
  54.       (setq TES (car LTEST)
  55.             LTEST (cdr LTEST)
  56.             TA NIL
  57.             TA (length LTEST)
  58.       )
  59.       (while (/= TA 0)
  60.         (if (member TES LTEST)
  61.           (progn
  62.             (setq SC (ssadd (nth CA LA) SC))
  63.             (setq F1 (+ F1 1))
  64.           )
  65.         )
  66.         (setq CA (+ CA 1))
  67.         (setq TES (car LTEST)
  68.               LTEST (cdr LTEST)
  69.               TA (length LTEST)
  70.         )
  71.       )
  72.       (command "erase" SC "")
  73.       (redraw)
  74.       (prompt "\n")
  75.       (prin1 F1)
  76.       (prompt " 个物体被删除.")
  77.     )
  78.   )
  79.   (princ)
  80. )

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-19 18:47:20 | 显示全部楼层

能删除重合在一起的图元就可以,测试过了,只有重合且属性完全相同的才删除,这就足够用了。
发表于 2023-6-26 17:56:01 | 显示全部楼层

这个程序很实用,您能帮忙改一下吗?把重合一起的属性相同的图元(原图元和重合图元全部删除),只留下属性不同的图元。这个想法好实现吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 22:29 , Processed in 0.173242 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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