通信人家园

标题: lisp如何获得属性块自定义的属性信息  [查看完整版帖子] [打印本页]

时间:  2024-2-27 10:55
作者: zxc001975cvb     标题: lisp如何获得属性块自定义的属性信息

如何用autolisp代码获得属性块中自定义的属性信息,谢谢!

如下图块中的属性值:

无标题.png



附件: 无标题.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