可能需要调整蓝色部件以适合您的情况;只要确保所有层都未锁定。
;;; Replace Blocks By List (20-III-2014)
(defun c:RBBL( / blockOld blockNew ssetBlocks entBlock assocBlock )
(foreach blockOld '("B1" "B2" "B3") ;;;list of blocks to replace
(if (and (tblsearch "BLOCK" blockOld)
(tblsearch "BLOCK" (setq blockNew (strcat "modified_" blockOld))))
(if (setq ssetBlocks (ssget "_X" (list '(0 . "INSERT") (cons 2 blockOld))))
(while (> (sslength ssetBlocks) 0)
(entmod (subst (cons 2 blockNew)
(assoc 2 (setq assocBlock (entget (setq entBlock (ssname ssetBlocks 0)))))
assocBlock))
(ssdel entBlock ssetBlocks)
)
)
)
)
(princ)
)
顺便说一句,这并不考虑嵌套块。 你好,MSasu
只是礼貌地寻求帮助,我知道像你这样的大多数人都愿意帮助。
我试过你的Lisp程序,效果很好。但是,这个嵌套块问题确实是罪魁祸首,这也是发布此线程的主要原因。这能解决吗?
下面是我如何测试它的。捕捉前后。
你好
启动Vlisp之前的一些解释
是否要用具有相同块名但前缀为Modified\word的新块名列表替换块列表?
然后,在旧块(待替换)中嵌套块,以将其重新包含在新替换的块名称中,该名称已修改?
如果你能上传一个样品画一个例子之前和之后,这将是伟大的。 请特别注意,如果列表中块名称的顺序不合适,则替换嵌套块可能会出错!应该从最低级别的块(即嵌套较深的块)开始,然后继续到主级别。 塔尔瓦特。
我附上了前后两个文件。举个例子。在下面的方块上寻找红色的项目(这是我的目标)。
之前图纸
之后图纸
我明白你指的是什么。。。我认为我不需要替换所有级别的块。它要么是顶层(覆盖所有内部构件),要么是底层(单独)。最糟糕的情况是,我必须更换最底层的,除非将其分解到平坦的水平面,否则很难接近。
编辑:目前我正在寻找一种从图形中提取(或手动复制pase)块名的方法。我看到杰弗里·桑德斯·布莱克特里。lsp,但它不允许我从对话框中复制任何文本。仍在探索。 为什么你在上传之前和之后都进行了修改?
你说的修改是什么意思?
我们说的是一个嵌套块吗?
红色显示的modifid_u实际上是我的源块,我想将其中的一些块替换为我的目标较低的块。所以,我在单独的文件中显示了之前和之后的内容,以便您可以区分它们。我这样搞混了吗?是的,一个嵌套的大街区,里面有一棵大树。 你有这么多块在彼此之间,这看起来很复杂,这不是我提到的用一个嵌套块替换一个块的问题。很抱歉
是的,有这么多街区,但这不是全部街区。我必须创建一个大区块的较小版本才能在这里共享。你可以想象我的主文件大约有90到100MB,上面有这么大的块和它们的不同版本。
没问题。谢谢你调查这件事。
页:
1
[2]