Ruli 发表于 2022-7-5 23:36:07

替换选定块,remem

嗨。
我正在寻找一个例程,取代选定的块。此外,我希望替换的块与旧块具有相同的attributevalue。这些块具有相同的属性。
 
我发现了许多替换选定块的例程,但它们都覆盖了原始属性值。

resullins 发表于 2022-7-5 23:49:36

为什么不重新导入并重新定义块?

Ruli 发表于 2022-7-6 00:01:13

这些块是示意图的一部分。我只想更改块的选定实例,属性不应被覆盖。
 
我制作了一个视频来更好地说明我的意思:https://dl.dropboxusercontent.com/u/18606927/Replace.wmv
 
 
我希望块记住它的属性,这样我就不必再更改它了。

steven-g 发表于 2022-7-6 00:02:45

您可以发布一个要替换的块(带有您想要保留的属性)和将替换它的块的示例吗。视频中的信息太多,无法看到发生了什么。

bababarghi 发表于 2022-7-6 00:14:32

 
通过以下步骤,我实现了与您相同的目标:
 
-选择要替换的所有所需块;
-键入ATTOUT(“Express Tools的导出属性”功能)仅导出选定块的属性;
-尝试加载这个LISP(归功于alanjt)并替换所选的块。属性可能会消失(不要恐慌)
仅供参考。正如alanjt所提到的,您也需要这个函数。
-[可选:]如果您觉得属性顺序或提示有任何差异,只需编辑包含以前导出的属性的文本文件。
-键入ATTIN(“Express Tools的导入属性”功能)并带回属性。
 
这对我来说很好

David Bethel 发表于 2022-7-6 00:24:15

虽然我没有什么可以测试的,但它应该可以工作:
 

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

 
 
-大卫

bababarghi 发表于 2022-7-6 00:31:46

大卫,你不认为下面突出显示的几行是矛盾的吗?
 
(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)
   )
)

 
 
 
 

David Bethel 发表于 2022-7-6 00:38:57

如果替换块是外部dwg参照,则必须将其插入到当前图形中,以将定义记录到块表中。否则,(entmod)调用将失败-大卫
页: [1]
查看完整版本: 替换选定块,remem