h_mikke 发表于 2022-7-6 09:12:11

如何获取动态名称

我试图将块“fix\u a”的名称改为“bkname\u a”。
对于普通块,下面的A和B都有效,但不适用于动态块。
 
A:
(setq bkname_a (cdr (assoc 2 (entget (car fix_a)))))
 
B:
(setq fix_an (cdr (assoc '-1 (entget (car fix_a)))))
(setq bkname_a (vla-get-name (vlax-ename->vla-object fix_an)))
 
说到动态块,“bkname\u a”会得到一些以“*”开头的字符串,例如*U211、*U7。
这个stirng不是块名,而是与块名一一对应的。
我不明白发生了什么事。
如果你知道如何获得动态块的名称,请帮助我!!
 
 
此外,当我尝试使用下面的脚本时,我可以打赌blockname。
http://cadtips.cadalyst.com/content/block-quantify?print=1

Tyke 发表于 2022-7-6 09:18:55

对于动态块,块名称始终以*开头,但“有效名称”保留正常块中的块名称。
 
我不知道如何在LISP中处理这个问题,因为我只在VBA中做过,但毫无疑问,我们的一位LISP专家将向您展示如何做到这一点。您可以使用ENTSEL或ENTGET列出动态块的DXF代码,然后查看您要查找的名称与哪个代码关联吗?

Tharwat 发表于 2022-7-6 09:23:26

对于动态块,您应该这样使用它。
 

(vla-get-Effectivename (vlax-ename->vla-object (car (entsel "\n Select a Dynamic block :"))))

VVA 发表于 2022-7-6 09:25:37

有效块名(Visual LISP和Vanilla LISP)
获取真实的块名(普通/视觉)

BlackBox 发表于 2022-7-6 09:30:21

 
希望他们不要错过。

Tharwat 发表于 2022-7-6 09:34:58

 
Opps。。。。。。你可能是指变量

BlackBox 发表于 2022-7-6 09:38:47

 
嗯?什么变量?
 
不我的意思只是,如果用户未能选择一个对象,更不用说没有适用的EffectiveName属性的对象,就会返回一个错误。
 
李已经提供了解决方案(通过VVA发布的链接),他甚至还没有在这个线程中(还没有?)。英雄联盟

Tharwat 发表于 2022-7-6 09:42:28

 
变量为(setq ename。。。。。。。。
 
你说得对,因为OP已经知道如何处理这个问题,并且只需要寻找正确的函数,所以我把它留给了他们。
 
当做

BlackBox 发表于 2022-7-6 09:47:08

Meh-我不想插手这件事叹气:

Tyke 发表于 2022-7-6 09:52:40

 
不,他还不在这条线上,但你可以打赌他在看你的底牌
页: [1] 2
查看完整版本: 如何获取动态名称