通信人家园
标题:
lisp如何获得属性块自定义的属性信息
[查看完整版帖子]
[打印本页]
时间:
2024-2-27 10:55
作者:
zxc001975cvb
标题:
lisp如何获得属性块自定义的属性信息
如何用autolisp代码获得属性块中自定义的属性信息,谢谢!
如下图块中的属性值:
2024-2-27 10:55 上传
下载附件
(5.6 KB)
附件:
无标题.png
(2024-2-27 10:55, 5.6 KB) / 下载次数 0
https://www.txrjy.com/forum.php?mod=attachment&aid=NjIxMTY1fDA5NmM1YzdjfDE3MTYxMDI0MTh8MHww
时间:
2024-2-27 11:17
作者:
laozhu
有点专业
时间:
2024-2-27 12:41
作者:
spring126
我不会,
时间:
2024-2-29 10:28
作者:
zytx222655
没看懂什么意思
时间:
2024-2-29 17:06
作者:
suyuan2004
在AutoLISP中,你可以使用entget函数来获取图元(包括块和属性)的数据列表,然后使用assoc函数来搜索特定的数据项。对于属性块中的自定义属性,你需要先找到块引用,然后找到与之关联的属性定义。
以下是一个简单的示例,该示例将搜索具有特定名称的属性块,并提取出自定义属性的值:
lisp
(defun c:GetAttrValue (/ ss i ent attr_ent attr_val block_name attr_name)
(setq block_name "你的块名") ; 替换为你的块名
(setq attr_name "你的属性名") ; 替换为你的属性名
(setq ss (ssget "x" '((0 . "INSERT") (2 . block_name)))) ; 搜索具有特定名称的块引用
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq attr_ent (entget ent))
(while (and attr_ent (not (= (type (car attr_ent)) 'LIST)))
(setq attr_ent (entnext attr_ent)))
(while attr_ent
(if (= (cdr (assoc 0 attr_ent)) "ATTRIB")
(if (= (cdr (assoc 2 attr_ent)) attr_name)
(progn
(setq attr_val (cdr (assoc 1 attr_ent)))
(princ "\n找到属性值: ")
(princ attr_val)
)
)
)
(setq attr_ent (entnext attr_ent))
)
(setq i (1+ i))
)
)
(princ "\n没有找到指定的块.")
)
(princ)
)
请注意,这个代码可能无法处理嵌套块中的属性。对于更复杂的情况,你可能需要使用递归搜索或其他更高级的技术。此外,这个代码也没有处理可能发生的错误,例如当块或属性不存在时。在实际使用中,你可能需要添加适当的错误处理代码。
另外,请注意将上述代码中的 "你的块名" 和 "你的属性名" 替换为你实际的块名和属性名。在AutoCAD中运行此代码后,你可以通过在命令行输入 GetAttrValue 来调用这个函数。
时间:
2024-3-2 17:29
作者:
qinghgao
感谢的分享
通信人家园 (https://www.txrjy.com/)
Powered by C114