是否从图形中删除块?
我想写一个脚本,它将运行在一个图形列表中,并删除在所有图形中具有相同名称的块。脚本不是问题所在。有人知道我可以使用一个命令来调用块并将其从图形中删除吗?为了编写脚本,我需要一个可以在没有弹出窗口的情况下使用的命令。类似于Erase命令,但据我所知,Erase无法调用要擦除的特定块。有人知道我可以使用的命令吗?或者知道一个已经编写好的LISP,我可以使用? 您可以使用ObjectDBX代替脚本-速度快100倍 这篇文章可能有一些用处-http://www.cadtutor.net/forum/showpost.php?p=159160&postcount=11然而,它是VBA,而不是LISP 我对ObjectDBX的了解还不够,所以我坚持使用脚本,因为它们很容易编写。
我会看看NBC的这条帖子。 试一试:
;; ObjectDBX Example, by Lee McDonnell
;; Credit to Tony Tanzillo, Tim Willey
(defun c:blkdel (/ *error* bNme *acad Shell fDir Dir dwLst dbx)
(vl-load-com)
;; Error Handler
(defun *error* (e)
(ObjRel (list Shell dbx *acad))
(if (not (wcmatch (strcase e) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n<< Error: " e " >>")))
(princ))
;; Get Block Name
(while
(progn
(setq bNme (getstring t "\nSpecify Block Name: "))
(cond ((not (snvalid bNme))
(princ "\n** Invalid Block Name **"))
(t (setq bNme (strcase bNme)) nil))))
;; Get Directory
(setq *acad (vlax-get-acad-object)
Shell (vla-getInterfaceObject *acad "Shell.Application")
fDir (vlax-invoke-method Shell 'BrowseForFolder
(vla-get-HWND *acad) "Select Directory: " 80))
(and (eq (type Shell) 'VLA-OBJECT)
(not (vlax-object-released-p Shell))
(vl-catch-all-apply 'vlax-release-object (list Shell)))
(if fDir
(progn
(setq Dir
(vlax-get-property
(vlax-get-property fDir 'Self) 'Path))
(if (not (eq "\\" (substr Dir (strlen Dir))))
(setq Dir (strcat Dir "\\")))
(princ "\nProcessing...")
;; Iterate Drawings
(foreach dwg (setq dwLst
(mapcar
(function
(lambda (x)
(strcat Dir x)))
(vl-directory-files Dir "*.dwg" 1)))
(vlax-for doc (vla-get-Documents *acad)
(and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
(setq dbx doc)))
(and (not dbx)
(setq dbx
(vlax-create-object
(if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
"ObjectDBX.AxDbDocument"
(strcat "ObjectDBX.AxDbDocument." (itoa acVer))))))
(if (not (vl-catch-all-error-p
(vl-catch-all-apply 'vla-open (list dbx dwg))))
(progn
(vlax-for lay (vla-get-Layouts dbx)
(vlax-for Obj (vla-get-Block lay)
(if (and (eq (vla-get-ObjectName Obj) "AcDbBlockReference")
(eq (strcase (vla-get-Name Obj)) BNme))
(if (vl-catch-all-error-p
(vl-catch-all-apply 'vla-delete (list Obj)))
(princ
(strcat "\n** Error Deleting Block in: "
(vl-filename-base dwg) " **"))))))
(vla-saveas dbx dwg))
(princ (strcat "\n** Error Opening File: " (vl-filename-base dwg) " **")))
(princ (chr 46)))
;; Ending Messages
(princ (strcat "\n<< " (rtos (length dwLst) 2 0) " Drawings Processed >>")))
(princ "*Cancel*"))
;; Garbage Collection
(gc) (ObjRel (list Shell dbx *acad))
(princ))
;; Release Objects ~ Requires List of Variables
(defun ObjRel (lst)
(mapcar
(function
(lambda (x)
(if (and (eq (type x) 'VLA-OBJECT)
(not (vlax-object-released-p x)))
(vl-catch-all-apply
'vlax-release-object (list x))))) lst))
李,我看到你终于在个人资料中添加了一个捐款按钮。。。我仍然认为这是一个非常好的主意。
我试试这段代码,让你知道它是怎么回事。 我一定错过了什么。。。。
这是Lisp程序,对吗?
在调用程序blkdel并给出块名PDP\u EP后,我得到了一个浏览文件夹窗口。我在这里选择什么?我选择了图纸所在的文件夹,报告处理了51张图纸,但没有从任何图纸中删除该块。
我很高兴你这么认为——民意调查已经开始了。 哈哈,在你发给我之前,我就找到了那个链接。
是的,这是Lisp程序
选择文件夹后,它将处理该文件夹中的所有图形。
我不明白为什么块没有被删除-当一个块由于某种原因无法删除时,它应该报告回来。你确定块名正确吗?
页:
[1]
2