Losinski 发表于 2022-7-5 18:01:47

提取属性数据(多行文字)

大家好,
 
 
我需要一个LISP,它可以查看一个块,提取其属性值,并将其设置为变量。这一切都是在幕后发生的(没有提示)。
 
 
陷阱:
该属性的值为多行文字(MTEXT)。
在块中,属性可能如下所示:
 
 
“这是一个演示
显示属性的外观“
______________________________________________________________________________________
 
 
假设以下名称:
BLK123(区块)
ATT123(属性)
VAR123(变量)
 
 
我需要存储在VAR123中的ATT123的值(来自BLK123)。
 
 
!然后,VAR123将读取“这是一个演示,显示了属性的外观。”
 
 
我已经研究和测试了大约一个小时的不同代码,似乎找不到一个适用于多行文字的代码。有什么想法吗?
 
 
谢谢
洛辛斯基

Lee Mac 发表于 2022-7-5 18:14:15

澄清一下:该属性是一个多行属性,还是指块定义中的多行文字?

Losinski 发表于 2022-7-5 18:18:29

嗨,李,
 
这是一个多行属性。
 
谢谢
洛辛斯基

BIGAL 发表于 2022-7-5 18:27:45

你能发布一个样例dwg吗。

Losinski 发表于 2022-7-5 18:28:31

当然,给你。
dwg123.dwg

Tharwat 发表于 2022-7-5 18:37:29

发挥一下:
 

(if (setq s (ssget "_+.:S:E" '((0 . "INSERT")(66 . 1))))
(vl-some '(lambda (x)
             (and (= (vla-get-tagstring x) "ATT123")
                  (setq ATT123 (vla-get-textstring x))
             )
         )
          (vlax-invoke (vlax-ename->vla-object (ssname s 0)) 'getattributes)
)
)

Losinski 发表于 2022-7-5 18:48:03

在那张测试图上表现得很好。我只是修改了它,去掉了手动选择:
如果我有两个同名的属性(两个不同的块),会发生什么搜索是否可以是块特定的(在BLK123中搜索ATT123)?

Tharwat 发表于 2022-7-5 18:49:59

在您的示例中,虽然已选择图形中的所有属性块,但编码只会检查一个块。
 
因此,您需要循环遍历每个块,并且可以将结果作为列表,因为您需要获得具有相同标记名的所有属性值。

Losinski 发表于 2022-7-5 19:01:19

没关系,明白了。我的lisp知识相当基础
 
 
谢谢

Tharwat 发表于 2022-7-5 19:07:06

 
没关系,我们都是从某个地方开始的
页: [1]
查看完整版本: 提取属性数据(多行文字)