AutoCAD LISP开发需求:复制块属性VISINA值至另一块属性RELATIVNA
AutoCAD LISP 属性值复制粘贴解决方案
以下是实现你需求的LISP代码,直接可用:
(defun c:CopyProp (/ srcBlk srcAtt destBlk destAtt propValue) ;; 选择带有VISINA属性的源块 (setq srcBlk (entsel "\n选择带有VISINA属性的块: ")) (if srcBlk (progn ;; 获取源块的所有属性对象 (setq srcAtt (vlax-invoke (vlax-ename->vla-object (car srcBlk)) 'GetAttributes)) (setq propValue nil) ;; 遍历属性,找到VISINA并读取值 (foreach att srcAtt (if (= (strcase (vla-get-TagString att)) "VISINA") (setq propValue (vla-get-TextString att)) ) ) (if propValue (progn ;; 选择要赋值的目标块 (setq destBlk (entsel "\n选择要粘贴RELATIVNA属性的块: ")) (if destBlk (progn ;; 获取目标块的所有属性对象 (setq destAtt (vlax-invoke (vlax-ename->vla-object (car destBlk)) 'GetAttributes)) ;; 遍历属性,找到RELATIVNA并设置值 (foreach att destAtt (if (= (strcase (vla-get-TagString att)) "RELATIVNA") (progn (vla-put-TextString att propValue) (princ (strcat "\n已将值 \"" propValue "\" 粘贴到RELATIVNA属性")) ) ) ) ) (princ "\n未选择目标块") ) ) (princ "\n所选块中未找到VISINA属性") ) ) (princ "\n未选择源块") ) (princ) )
使用说明
- 把代码复制到AutoCAD命令行回车,或者保存为
.lsp文件,通过APPLOAD命令加载。 - 在命令行输入
CopyProp,按提示依次选择带VISINA属性的块和要设置RELATIVNA属性的块即可。
代码关键点
- 用
entsel实现交互式选择块,确保用户能精准选择目标对象。 - 通过VLA对象操作属性,比传统LISP函数更稳定,支持所有带属性的块。
- 用
strcase统一属性名大小写,避免因属性名大小写不一致导致匹配失败。 - 每一步都加了错误提示,比如未选块、找不到对应属性时会给出明确反馈。
内容的提问来源于stack exchange,提问作者Zoran Lazic
相关产品推荐
相关产品推荐

