删除多个dra中的块
嘿,大家好,我是一个新的海报,因为大多数时候我可以找到我需要的只是搜索网站。但是,我找不到任何关于删除多个图形中的块的内容。我有一个特定的块,我想从大约400个图形中删除该块的所有实例。
外面有这样的事吗?
我知道李已经删除了BLOCKSV1-0。lsp,但我需要的东西,将在一批这样做。我知道它应该能够与ObjectDBXWrapperV1-2一起使用。lsp,但我不知道如何组合。
谢谢
史提夫 嗨,史蒂夫,欢迎来到CADTutor
关于LM:DeleteBlocks函数与ObjectDBXWrapper函数的结合使用,请考虑以下示例:
上述代码将提示用户选择要处理的图形目录,并且在有效选择后,该功能将尝试从所选目录中的每个图形文件中删除Block1、Block2和Block3(当然可以更改以满足您的要求)。
当然,在运行上述代码之前,您需要确保我的ObjectDBX包装函数和Delete Blocks程序都已加载。 如果需要对处理的图形进行更多控制,也可以使用“获取文件”对话框功能-确保加载此程序、删除块程序和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)
) 这太棒了谢谢!!! 不客气!
嗨,李,我测试过了&它成功了,但是如果块是基于外卡的,Lisp程序怎么办?
我试过“BLOCK 1”,但不起作用 李的程序对一个程序可以做什么有一些限制。你可以在他的网站上阅读
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。
尝试加载以下(未测试)代码来代替我的删除块程序:
;;--------------------=={ 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)
)
我会在适当的时候更新我网站上的程序。 这也许管用,布莱尔詹特·李,就像往常一样
gr.R。 ........
页:
[1]
2