TYGERTY 发表于 2022-7-5 16:07:56

删除多个dra中的块

嘿,大家好,我是一个新的海报,因为大多数时候我可以找到我需要的只是搜索网站。但是,我找不到任何关于删除多个图形中的块的内容。
 
我有一个特定的块,我想从大约400个图形中删除该块的所有实例。
 
外面有这样的事吗?
 
我知道李已经删除了BLOCKSV1-0。lsp,但我需要的东西,将在一批这样做。我知道它应该能够与ObjectDBXWrapperV1-2一起使用。lsp,但我不知道如何组合。
 
谢谢
史提夫

Lee Mac 发表于 2022-7-5 16:14:05

嗨,史蒂夫,欢迎来到CADTutor
 
 
关于LM:DeleteBlocks函数与ObjectDBXWrapper函数的结合使用,请考虑以下示例:
上述代码将提示用户选择要处理的图形目录,并且在有效选择后,该功能将尝试从所选目录中的每个图形文件中删除Block1、Block2和Block3(当然可以更改以满足您的要求)。
 
当然,在运行上述代码之前,您需要确保我的ObjectDBX包装函数和Delete Blocks程序都已加载。

Lee Mac 发表于 2022-7-5 16:16:01

如果需要对处理的图形进行更多控制,也可以使用“获取文件”对话框功能-确保加载此程序、删除块程序和ObjectDBX包装程序,然后尝试以下代码:
(defun c:dbtest ( / lst )
   (if (setq lst (LM:getfiles "Select Drawings to Process" nil "dwg;dws;dwt"))
       (LM:odbx '(lambda ( doc ) (LM:deleteblocks doc '("Block1" "Block2" "Block3"))) lst t)
       (princ "\n*Cancel*")
   )
   (princ)
)

TYGERTY 发表于 2022-7-5 16:17:36

这太棒了谢谢!!!

Lee Mac 发表于 2022-7-5 16:23:00

不客气!

vernonlee 发表于 2022-7-5 16:25:18

 
嗨,李,我测试过了&它成功了,但是如果块是基于外卡的,Lisp程序怎么办?
 
我试过“BLOCK 1”,但不起作用

rlx 发表于 2022-7-5 16:27:33

李的程序对一个程序可以做什么有一些限制。你可以在他的网站上阅读
 
 
http://www.lee-mac.com/odbxbase.html
 
 
提供的函数应采用单个参数(处理的每个图形的VLA文档对象),并遵循ObjectDBX的“规则”,即:
 
[列表]
[*]无选择集(使用ssget、ssname、ssdel等)
[*]无命令调用(命令“_.line”…等)
[*]无ent*方法(entmod、entupd等)
[*]无法访问系统变量(getvar、setvar、vla getvariable、vla setvariable等
[/列表]
 
您可以使用wildcharacters搜索多个块,但这将涉及“ssget”,并且当您使用此方法打开图形时,这是不允许的。在这种情况下,请使用easy script pro或编写自己的脚本。您可以在acad中放置自己的特殊块替换例程。lsp,以便每次打开图形(使用脚本)时,都会选择并终止所有这些块。。。
gr.R。

Lee Mac 发表于 2022-7-5 16:30:23

 
尝试加载以下(未测试)代码来代替我的删除块程序:
 
;;--------------------=={ Delete Blocks }==-------------------;;
;;                                                            ;;
;;Deletes all references of a list of blocks from a drawing ;;
;;(including nested references, nested to any level).       ;;
;;Proceeds to delete the associated block definitions from;;
;;the drawing, if possible.                                 ;;
;;                                                            ;;
;;This function is compatible with ObjectDBX.               ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2012 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;doc - VLA Document Object                                 ;;
;;lst - List of blocks to be deleted (case insensitive)   ;;
;;------------------------------------------------------------;;
;;Returns:List of blocks that were successfully deleted.;;
;;------------------------------------------------------------;;

(defun LM:deleteblocks ( doc lst / blc bln lck rtn )
   (setq blc (vla-get-blocks doc)
         lst (mapcar 'strcase lst)
   )
   (vlax-for lay (vla-get-layers doc)
       (if (= :vlax-true (vla-get-lock lay))
         (progn(setq lck (cons lay lck)) (vla-put-lock lay :vlax-false))
       )
   )
   (vlax-for def blc
       (vlax-for obj def
         (if
               (and (= "AcDbBlockReference" (vla-get-objectname obj))
                   (or
                     (and (vlax-property-available-p obj 'effectivename)
                            (setq bln (strcase (vla-get-effectivename obj)))
                     )
                     (setq bln (strcase (vla-get-name obj)))
                   )
                   (vl-some '(lambda ( x ) (wcmatch bln x)) lst)
               )
               (progn
                   (vl-catch-all-apply 'vla-delete (list obj))
                   (or (member bln rtn)(setq rtn (cons bln rtn)))
               )
         )
       )
   )
   (foreach lay lck (vla-put-lock lay :vlax-true))
   (vl-remove-if '(lambda ( x ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list (vla-item blc x))))) rtn)
)
 
我会在适当的时候更新我网站上的程序。

rlx 发表于 2022-7-5 16:33:26

这也许管用,布莱尔詹特·李,就像往常一样
 
 
gr.R。

Lee Mac 发表于 2022-7-5 16:36:29

........
页: [1] 2
查看完整版本: 删除多个dra中的块