乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 28|回复: 19

[编程交流] 是否从图形中删除块?

[复制链接]

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:25:54 | 显示全部楼层 |阅读模式
我想写一个脚本,它将运行在一个图形列表中,并删除在所有图形中具有相同名称的块。脚本不是问题所在。有人知道我可以使用一个命令来调用块并将其从图形中删除吗?为了编写脚本,我需要一个可以在没有弹出窗口的情况下使用的命令。类似于Erase命令,但据我所知,Erase无法调用要擦除的特定块。有人知道我可以使用的命令吗?或者知道一个已经编写好的LISP,我可以使用?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:29:49 | 显示全部楼层
您可以使用ObjectDBX代替脚本-速度快100倍
回复

使用道具 举报

NBC

4

主题

182

帖子

178

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:35:08 | 显示全部楼层
这篇文章可能有一些用处-http://www.cadtutor.net/forum/showpost.php?p=159160&postcount=11
然而,它是VBA,而不是LISP
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:35:43 | 显示全部楼层
我对ObjectDBX的了解还不够,所以我坚持使用脚本,因为它们很容易编写。
 
我会看看NBC的这条帖子。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:41:25 | 显示全部楼层
试一试:
 
  1. ;; ObjectDBX Example, by Lee McDonnell
  2. ;; Credit to Tony Tanzillo, Tim Willey
  3.   
  4. (defun c:blkdel (/ *error* bNme *acad Shell fDir Dir dwLst dbx)
  5. (vl-load-com)
  6. ;; Error Handler
  7. (defun *error* (e)
  8.    (ObjRel (list Shell dbx *acad))
  9.    (if (not (wcmatch (strcase e) "*BREAK,*CANCEL*,*EXIT*"))
  10.      (princ (strcat "\n<< Error: " e " >>")))
  11.    (princ))
  12. ;; Get Block Name
  13. (while
  14.    (progn
  15.      (setq bNme (getstring t "\nSpecify Block Name: "))
  16.      (cond ((not (snvalid bNme))
  17.             (princ "\n** Invalid Block Name **"))
  18.            (t (setq bNme (strcase bNme)) nil))))     
  19. ;; Get Directory
  20. (setq *acad (vlax-get-acad-object)
  21.        Shell (vla-getInterfaceObject *acad "Shell.Application")
  22.        fDir (vlax-invoke-method Shell 'BrowseForFolder
  23.               (vla-get-HWND *acad) "Select Directory: " 80))
  24. (and (eq (type Shell) 'VLA-OBJECT)
  25.       (not (vlax-object-released-p Shell))
  26.       (vl-catch-all-apply 'vlax-release-object (list Shell)))
  27. (if fDir
  28.    (progn
  29.      (setq Dir
  30.        (vlax-get-property
  31.          (vlax-get-property fDir 'Self) 'Path))
  32.      (if (not (eq "\" (substr Dir (strlen Dir))))
  33.        (setq Dir (strcat Dir "\")))
  34.      (princ "\nProcessing...")
  35.      ;; Iterate Drawings
  36.      
  37.      (foreach dwg (setq dwLst
  38.                     (mapcar
  39.                       (function
  40.                         (lambda (x)
  41.                           (strcat Dir x)))
  42.                       (vl-directory-files Dir "*.dwg" 1)))
  43.        (vlax-for doc (vla-get-Documents *acad)
  44.          (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
  45.               (setq dbx doc)))
  46.        (and (not dbx)
  47.             (setq dbx
  48.               (vlax-create-object
  49.                 (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
  50.                   "ObjectDBX.AxDbDocument"
  51.                   (strcat "ObjectDBX.AxDbDocument." (itoa acVer))))))         
  52.        (if (not (vl-catch-all-error-p
  53.                    (vl-catch-all-apply 'vla-open (list dbx dwg))))
  54.          (progn
  55.            (vlax-for lay (vla-get-Layouts dbx)
  56.              (vlax-for Obj (vla-get-Block lay)
  57.                (if (and (eq (vla-get-ObjectName Obj) "AcDbBlockReference")
  58.                         (eq (strcase (vla-get-Name Obj)) BNme))
  59.                  (if (vl-catch-all-error-p
  60.                        (vl-catch-all-apply 'vla-delete (list Obj)))
  61.                    (princ
  62.                      (strcat "\n** Error Deleting Block in: "
  63.                              (vl-filename-base dwg) " **"))))))
  64.            (vla-saveas dbx dwg))
  65.          (princ (strcat "\n** Error Opening File: " (vl-filename-base dwg) " **")))
  66.        (princ (chr 46)))     
  67.             
  68.      ;; Ending Messages
  69.      
  70.      (princ (strcat "\n<< " (rtos (length dwLst) 2 0) " Drawings Processed >>")))
  71.    (princ "*Cancel*"))
  72. ;; Garbage Collection
  73. (gc) (ObjRel (list Shell dbx *acad))
  74. (princ))
  75. ;; Release Objects ~ Requires List of Variables
  76.            
  77. (defun ObjRel (lst)
  78. (mapcar
  79.    (function
  80.      (lambda (x)
  81.        (if (and (eq (type x) 'VLA-OBJECT)
  82.                 (not (vlax-object-released-p x)))
  83.          (vl-catch-all-apply
  84.            'vlax-release-object (list x))))) lst))
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:44:54 | 显示全部楼层
李,我看到你终于在个人资料中添加了一个捐款按钮。。。我仍然认为这是一个非常好的主意。
我试试这段代码,让你知道它是怎么回事。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:47:10 | 显示全部楼层
我一定错过了什么。。。。
这是Lisp程序,对吗?
在调用程序blkdel并给出块名PDP\u EP后,我得到了一个浏览文件夹窗口。我在这里选择什么?我选择了图纸所在的文件夹,报告处理了51张图纸,但没有从任何图纸中删除该块。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:48:46 | 显示全部楼层
 
我很高兴你这么认为——民意调查已经开始了。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 12:53:58 | 显示全部楼层
哈哈,在你发给我之前,我就找到了那个链接。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:55:57 | 显示全部楼层
 
是的,这是Lisp程序
 
选择文件夹后,它将处理该文件夹中的所有图形。
 
我不明白为什么块没有被删除-当一个块由于某种原因无法删除时,它应该报告回来。你确定块名正确吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 06:20 , Processed in 0.636641 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表