AQucsaiJr 发表于 2022-7-6 12:25:54

是否从图形中删除块?

我想写一个脚本,它将运行在一个图形列表中,并删除在所有图形中具有相同名称的块。脚本不是问题所在。有人知道我可以使用一个命令来调用块并将其从图形中删除吗?为了编写脚本,我需要一个可以在没有弹出窗口的情况下使用的命令。类似于Erase命令,但据我所知,Erase无法调用要擦除的特定块。有人知道我可以使用的命令吗?或者知道一个已经编写好的LISP,我可以使用?

Lee Mac 发表于 2022-7-6 12:29:49

您可以使用ObjectDBX代替脚本-速度快100倍

NBC 发表于 2022-7-6 12:35:08

这篇文章可能有一些用处-http://www.cadtutor.net/forum/showpost.php?p=159160&postcount=11
然而,它是VBA,而不是LISP

AQucsaiJr 发表于 2022-7-6 12:35:43

我对ObjectDBX的了解还不够,所以我坚持使用脚本,因为它们很容易编写。
 
我会看看NBC的这条帖子。

Lee Mac 发表于 2022-7-6 12:41:25

试一试:
 

;; 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))



AQucsaiJr 发表于 2022-7-6 12:44:54

李,我看到你终于在个人资料中添加了一个捐款按钮。。。我仍然认为这是一个非常好的主意。
我试试这段代码,让你知道它是怎么回事。

AQucsaiJr 发表于 2022-7-6 12:47:10

我一定错过了什么。。。。
这是Lisp程序,对吗?
在调用程序blkdel并给出块名PDP\u EP后,我得到了一个浏览文件夹窗口。我在这里选择什么?我选择了图纸所在的文件夹,报告处理了51张图纸,但没有从任何图纸中删除该块。

Lee Mac 发表于 2022-7-6 12:48:46

 
我很高兴你这么认为——民意调查已经开始了。

AQucsaiJr 发表于 2022-7-6 12:53:58

哈哈,在你发给我之前,我就找到了那个链接。

Lee Mac 发表于 2022-7-6 12:55:57

 
是的,这是Lisp程序
 
选择文件夹后,它将处理该文件夹中的所有图形。
 
我不明白为什么块没有被删除-当一个块由于某种原因无法删除时,它应该报告回来。你确定块名正确吗?
页: [1] 2
查看完整版本: 是否从图形中删除块?