找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 864|回复: 2

[原创]:按点选图块或文字删除相同实体

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-11-1 01:50:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[PHP]
;;以前写过一个点选图块删除的程序,这次将文字加了进来,做设计难免用到电子版地形图
;;里面无用的信息比较多,典型的就是图块和单个文字
;;适用 AutoCAD 2000+
;;作者: eachy [www.xdcad.net 2005.11.1
(vl-load-com)
(defun c:Del_blk_txt (/            blklst txtlst e         el        typ    bn     str
             filter ss           e          ssl         txt        n      thisdrawing
             myerr  fl           fltxt  flblk         s1
            )
  (defun myerr (msg)
    (if        (/= msg "Cancel")
      (princ "\n*取消*")
    )
    (vla-endundomark thisdrawing)
    (setq *error* olderr)
    (princ)
  )
  (while
    (and (progn
           (if blklst
             (progn
               (princ "\n已选择图块")
               (princ (vl-princ-to-string blklst))
             )
           )
           (if txtlst
             (progn
               (princ "\n已选择文字: ")
               (princ (vl-princ-to-string
                        (mapcar        '(lambda (x) (vl-string-trim "*" x))
                                txtlst
                        )
                      )
               )
             )
           )
           t
         )
         (setq e (car (entsel "\n点选样本图块或文字: ")))
         (setq el (entget e))
         (wcmatch (setq typ (cdr (assoc 0 el))) "INSERT,*TEXT")
    )
     (if (= typ "INSERT")
       (if blklst
         (if (member (setq bn (cdr (assoc 2 el))) blklst)
           (setq blklst (vl-remove bn blklst))
           (setq blklst (cons bn blklst))
         )
         (setq blklst (cons (cdr (assoc 2 el)) blklst))
       )
       (progn
         (setq str (cdr (assoc 1 el)))
         (if (/= (strlen str) (strlen (vl-string-trim " " str)))
           (setq str (strcat "*" (vl-string-trim " " str) "*"))
         )
         (if txtlst
           (if (member str txtlst)
             (setq txtlst (vl-remove str txtlst))
             (setq txtlst (cons str txtlst))
           )
           (setq txtlst (cons str txtlst))
         )
       )
     )
  )
  (setq        olderr        *error*
        *error*        myerr
  )
  (vla-startundomark
    (setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
  )
  (if (or blklst txtlst)
    (progn
      (if blklst
        (setq flblk (vl-string-translate
                      " "
                      ","
                      (vl-princ-to-string
                        (mapcar        '(lambda (x)
                                   (if (= (substr x 1 1) "*")
                                     (strcat "`" x)
                                     x
                                   )
                                 )
                                blklst
                        )
                      )
                    )
              flblk (vl-string-trim "()" flblk)
        )
      )
      (if txtlst
        (setq fltxt  (vl-string-translate
                       " "
                       ","
                       (vl-princ-to-string txtlst)
                     )
              fltxt  (vl-string-trim "()" fltxt)
              txtlst (mapcar '(lambda (x) (vl-string-trim "*" x)) txtlst)
        )
      )
      (cond
        ((and fltxt flblk)
         (setq fl (list        '(-4 . "<or")
                        (cons 2 flblk)
                        (cons 1 fltxt)
                        '(-4 . "or>")
                  )
         )
        )
        (fltxt
         (setq fl (list (cons 1 fltxt)))
        )
        (flblk
         (setq fl (list (cons 2 flblk)))
        )
        (t)
      )
      (princ "\n选择删除范围<回车全选>....")
      (if (not (setq ss (ssget fl)))
        (setq ss (ssget "x" fl))
      )
      (if ss
        (progn
          (if blklst
            (progn
              (if (setq s1 (ssget "_p" (list (cons 2 flblk))))
                (vl-cmdf ".erase" s1 "")
              )
            )
          )
          (if txtlst
            (progn
              (command ".select" ss "")
              (if (setq s1 (ssget "_P" (list (cons 1 fltxt))))
                (progn
                  (setq        ssl (sslength s1)
                        n   0
                  )
                  (repeat ssl
                    (setq e   (ssname s1 n)
                          n   (1+ n)
                          txt (cdr (assoc 1 (entget e)))
                    )
                    (if        (vl-position (vl-string-trim " " txt) txtlst)
                      (entdel e)
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
  (vla-endundomark thisdrawing)
  (setq *error* olderr)
  (princ)
)
(princ "\nStart Command with Del_blk_txt. eachy[www.xdcad.net]")
(princ)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 137个

财富等级: 日进斗金

发表于 2020-1-17 18:22:16 | 显示全部楼层
学习学习学习学习学习学习学习学习学习学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 137个

财富等级: 日进斗金

发表于 2020-1-17 18:33:49 | 显示全部楼层
对文字有效
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:28 , Processed in 0.193125 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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