替换选定块,remem
嗨。我正在寻找一个例程,取代选定的块。此外,我希望替换的块与旧块具有相同的attributevalue。这些块具有相同的属性。
我发现了许多替换选定块的例程,但它们都覆盖了原始属性值。 为什么不重新导入并重新定义块? 这些块是示意图的一部分。我只想更改块的选定实例,属性不应被覆盖。
我制作了一个视频来更好地说明我的意思:https://dl.dropboxusercontent.com/u/18606927/Replace.wmv
我希望块记住它的属性,这样我就不必再更改它了。 您可以发布一个要替换的块(带有您想要保留的属性)和将替换它的块的示例吗。视频中的信息太多,无法看到发生了什么。
通过以下步骤,我实现了与您相同的目标:
-选择要替换的所有所需块;
-键入ATTOUT(“Express Tools的导出属性”功能)仅导出选定块的属性;
-尝试加载这个LISP(归功于alanjt)并替换所选的块。属性可能会消失(不要恐慌)
仅供参考。正如alanjt所提到的,您也需要这个函数。
-[可选:]如果您觉得属性顺序或提示有任何差异,只需编辑包含以前导出的属性的文本文件。
-键入ATTIN(“Express Tools的导入属性”功能)并带回属性。
这对我来说很好 虽然我没有什么可以测试的,但它应该可以工作:
(defun c:rpb (/ rb ss i en ed)
(while (or (not rb)
(not (snvalid rb))
(or (not (tblsearch "BLOCK" rb))
(not (findfile (strcat rb ".DWG")))))
(setq rb (strcase (getstring "\nReplacement BLOCK Name: "))))
(if (not (tblsearch "BLOCK" rb))
(progn
(command "_.INSERT" rb)
(command)))
(if (/= (logand (cdr (assoc 70 (tblsearch "BLOCK" rb))) 2) 2)
(alert (strcat "Replacement BLOCK " rb " Must Have Attributes"))
(progn
(princ (strcat "\nSelect INSERTs To Replace With " rb))
(while (setq ss (ssget (list (cons 0 "INSERT")(cons 66 1)
(cons 2 (strcat "~" rb)))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en))
(entmod (subst (cons 2 rb) (assoc 2 ed) ed))
(setq i (1+ i))))))
(prin1))
-大卫 大卫,你不认为下面突出显示的几行是矛盾的吗?
(while (or (not rb)
(not (snvalid rb))
(or (not (tblsearch "BLOCK" rb))
(not (findfile (strcat rb ".DWG")))))
(setq rb (strcase (getstring "\nReplacement BLOCK Name: "))))
(if (not (tblsearch "BLOCK" rb))
(progn
(command "_.INSERT" rb)
(command)
)
)
如果替换块是外部dwg参照,则必须将其插入到当前图形中,以将定义记录到块表中。否则,(entmod)调用将失败-大卫
页:
[1]