明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2880|回复: 12

[已解答] 多选删除扩展数据

[复制链接]
发表于 2015-1-26 11:02 | 显示全部楼层 |阅读模式
带扩展数据的图元一旦放进块中,很多时候会出现“参照丢失,无法编辑”的情况,很是恼火!

找了一个删除扩展数据的程序,能用,但是只能一个一个对象的选择,不能框选,多选,下面是我找到的程序,

尊敬的版主大人,还有路过的各位高手,能不能帮我改一下,使它能够框选多选直接删除呢!
  1. (defun c:DelXdata()
  2. (setq l (car (entsel "Pick object:")))
  3. (if l (progn
  4. (redraw l 3)
  5. (setq le (entget l '("*")) )
  6. (setq xdata (assoc '-3 le))
  7. (setq le
  8. (subst (cons (car xdata) (list (list (car (car (cdr xdata)))))) xdata le))
  9. (entmod le)
  10. (redraw l 4)
  11. le
  12. )
  13. )
  14. )
附件内是我需要删除扩展数元数据的样例图形!

大家帮帮我!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · excel|主题: 80, 订阅: 2
发表于 2015-1-26 15:19 | 显示全部楼层
;;版权申明: 本程序由 Gu_xl 开发,版权归属Gu_xl,请勿将本程序用于商业目的
;;*********************************************************************



(defun c:tt  (/ ss en enl xdl n)
  (princ "\n**选择要删除扩展数据的物体**")
  (while (setq ss (ssget))
    ;; 删除全部扩展数据
    (repeat (setq n (sslength ss))
      (setq en        (ssname ss (setq n (1- n)))
            enl        (entget en '("*"))
            xdl        (cdr (assoc -3 enl))
            )
      (if xdl
        (progn
          (setq        xdl
                 (cons -3 (mapcar '(lambda (x) (list (car x))) xdl)))
          (entmod (cons xdl (entget en)))
          )
        )
      )
    (princ "\n**继续选择要删除扩展数据的物体**")
    )
  (princ)
  )
回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-24 10:25 | 显示全部楼层
非常使用,感谢分享。
 楼主| 发表于 2015-1-26 11:06 | 显示全部楼层
这是一个国外的贴子,贴子中提到使用宏来删除,也给出了代码,但我没能成功加载,

惭愧!

贴子地址:
http://forums.autodesk.com/t5/vi ... ta-clean/m-p/812935
  1. ; thanks to Jurge Menzi and Tony Tanzillo
  2. ; Use:
  3. ; (DDP_del_all_prm '("MyApp1" "MyApp2")) ;delete by AppID's
  4. ; or
  5. ; (DDP_del_all_prm '("*")) ;delete all
  6. ; The argument of the function should be a list. This allows you to
  7. ; delete Xdata's with different AppID's.

  8. (defun DDP_del_all_prm (Apps / apps_str CurEnt CurSet EntCnt app_name)
  9. (setq apps_str "")
  10. (foreach app_name Apps
  11. (setq apps_str (strcat apps_str "," app_name))
  12. )
  13. (cond
  14. ( (setq CurSet (ssget (list (list -3 (list (substr apps_str 2))))))
  15. (repeat (setq EntCnt (sslength CurSet))
  16. (setq EntCnt (1- EntCnt)
  17. CurEnt (ssname CurSet EntCnt)
  18. )
  19. (DelXdata CurEnt Apps)
  20. (if (= "INSERT" (DXF 0 (entget CurEnt)))
  21. (while
  22. (= "ATTRIB" (DXF 0 (entget (setq CurEnt (entnext CurEnt)))))
  23. (DelXdata CurEnt Apps)
  24. )
  25. )
  26. );repeat
  27. (princ "\nEliminazione Xdata eseguita. ")
  28. )
  29. (T (princ "\nNessun oggetto con Xdata. ") )
  30. )
  31. )

  32. (defun DelXdata (Ent Apps / EntLst TmpLst)
  33. (setq EntLst (entget Ent Apps))
  34. (if
  35. (and
  36. (eq "DIMENSION" (DXF 0 EntLst))
  37. (not (DXF -3 (entget Ent '("ACAD"))))
  38. (= 14 (atoi (getvar "ACADVER")))
  39. )
  40. (entmod (list (cons -1 Ent) (cons -3 '(("ACAD" (1000 . "DSTYLE"))))))
  41. )
  42. (foreach memb (DXF -3 EntLst)
  43. (setq
  44. TmpLst (cons -3 (list (cons (car memb) nil)))
  45. EntLst (entmod (subst TmpLst (assoc -3 EntLst) EntLst))
  46. )
  47. )
  48. )
 楼主| 发表于 2015-1-26 11:25 | 显示全部楼层
在这个贴子里找到一个删除当前图的所有扩展图元的程序:

可以用,但是还是没有找到框选删除的!
  1. ;Delete all Xdata fom a object:
  2. ;delallxdata

  3. (defun DelXdata (ent app / entlst tmplst)
  4. (setq entlst (entget ent app))
  5. (foreach memb (cdr (assoc -3 entlst))
  6. (setq tmplst (cons -3 (list (cons (car memb) nil)))
  7. entlst (subst tmplst (assoc -3 entlst) entlst)
  8. entlst (entmod entlst)
  9. )
  10. )
  11. )

  12. (defun C:dss ( / curent)
  13. (if (setq curent (car (entsel "\nSelect object to remove Xdata: ")))
  14. (DelXdata curent '("*")) ;->see below
  15. )
  16. (princ)
  17. )
  18. (defun C:daa ( / curass countr)
  19. (setq curass (ssget "X" '((-3 ("*"))))
  20. countr 0
  21. )
  22. (if curass
  23. (repeat (sslength curass)
  24. (DelXdata (ssname curass countr) '("*"))
  25. (setq countr (1+ countr))
  26. )
  27. )
  28. (princ)
  29. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-1-26 11:26 | 显示全部楼层
 楼主| 发表于 2015-1-26 11:33 | 显示全部楼层
这个程序按它的描述,似乎就是我需要的,但不会用!
  1. ;; | ----------------------------------------------------------------------------
  2. ;; | XD_remxd
  3. ;; | ----------------------------------------------------------------------------
  4. ;; | Function : removes extended entity data from selection
  5. ;; | Arguments:
  6. ;; |            'ss'      - Selection set to process
  7. ;; |            'AppName' - Application Name to remove Xdata (cannot be * or
  8. ;; |                        wildcards)
  9. ;; |            'Verbose' - If T, a message is displayed while deleting
  10. ;; | Action   : Checks for extended entity data and removes them
  11. ;; | Returns  : The selection set and number of objects whose Xdata was removed,
  12. ;; |            as well as the number of objects ignored.
  13. ;; | Updated  : March 19, 1999
  14. ;; | e-mail   : rakesh.rao@4d-technologies.com
  15. ;; | Web      : www.4d-technologies.com
  16. ;; | ----------------------------------------------------------------------------


  17. (defun XD_RemXd (ss AppName Verbose / xd ssl cnt ename tmp NumProc NumNotProc RemSS)



  18. (setq
  19.         NumProc    0
  20.         NumNotProc 0
  21.         RemSS      (ssadd)
  22. )

  23. (if (= (type ss) 'ENAME)
  24. (progn
  25.         (setq tmp (ssadd))
  26.         (ssadd ss tmp)
  27.         (setq ss tmp)
  28. ))

  29. (if ss
  30. (progn
  31.         (setq
  32.                 cnt 0
  33.                 ssl (sslength ss)
  34.                 tmp (strcat " of " (itoa ssl))
  35.         )
  36.         (if Verbose (princ "\n"))
  37.         (repeat ssl
  38.                 (setq
  39.                         ename (ssname ss cnt)
  40.                         xd (assoc -3 (entget ename (list AppName)))
  41.                         cnt (1+ cnt)
  42.                 )
  43.                 (if xd
  44.                 (progn
  45.                         (entmod (list (cons -1 ename) (list -3 (list AppName))))
  46.                         (setq NumProc (1+ NumProc))
  47.                         (ssadd ename RemSS)
  48.                 )
  49.                 (setq NumNotProc (1+ NumNotProc))
  50.                 )

  51.                 (if Verbose
  52.                         (princ (strcat "\rRemoving extended entity data belonging to application " AppName "..." (itoa cnt) tmp))
  53.                 )
  54.         )
  55. ))
  56. (list (if (> (sslength RemSS) 0) RemSS nil) NumProc NumNotProc)
  57. )
 楼主| 发表于 2015-1-26 12:28 | 显示全部楼层
快过年了,大家都去采购年货去了吗?都没人理我的!
发表于 2015-1-26 14:20 | 显示全部楼层
panliang9 发表于 2015-1-26 11:25
在这个贴子里找到一个删除当前图的所有扩展图元的程序:

可以用,但是还是没有找到框选删除的!

这个代码里的daa不就是删除图里所有对象的扩展数据的吗?想框选的就把ssget后的X去掉就可以了啊。
 楼主| 发表于 2015-1-26 15:59 | 显示全部楼层
谢谢    “flytoday”!

太感谢了!这就是我需要的!

我前面也搜了一下版里,没想到G版已经写出我需要的东西了!

非常开心!
 楼主| 发表于 2015-1-26 16:00 | 显示全部楼层
也谢谢   “springwillow”!

谢谢你的指点!我真是什么都不懂呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 10:52 , Processed in 0.297410 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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