chavlji 发表于 2022-7-6 14:53:52

动态块Ent的实名

你好
要获取选定块实体的块名称,我使用:
(setq Name (cdr (assoc 2 Ent)) )
它可以很好地工作,但不适用于动态块。若我试着用它来获得动态块的名称,我会得到一些奇怪的名称,比如*U126,*U123。
 
如何获得这些块的真实定义名称?

David Bethel 发表于 2022-7-6 15:05:58

“*U”块名有效。它们表明该区块是匿名的。您可以像查找任何其他块一样查找块表定义(tblsearch“BLOCK”*U123)
 
不能假设每次打开图形时名称都是相同的。这些名字因许多其他事情而改变-大卫

chavlji 发表于 2022-7-6 15:13:58

如果我知道*U的名字,我怎么能得到这个块定义的名字?
 
就像我定义动态块“门”。然后创建这个doors的实体,名称为“*U123”,我怎么知道“*U123”来自“doors”?

wizman 发表于 2022-7-6 15:22:51

请尝试:
 
(defun c:dynname (/ ed)
(prompt "\n....Select a Block...:")
(and
(assoc 360
   (setq ed
    (entget
   (ssname
      (ssget "_:E:S" '((0 . "INSERT")))0)))) ;_ {setq
       (repeat 3
      (setq ed
         (entget (cdr (assoc 360 ed)))
         ) ;_ {setq
       ) ;_ {repeat
       (setq ed (entget (cdr (assoc 340 ed))))
   ) ;_ {and
   (setq ed (cdr (assoc 2 ed)))
) ;_ {defun

chavlji 发表于 2022-7-6 15:26:41

是的,它工作得很好!!!谢谢

Lee Mac 发表于 2022-7-6 15:31:28

威兹曼,你是个天才

wizman 发表于 2022-7-6 15:44:34

 
李,谢谢,但我还在学习…-)

ASMI 发表于 2022-7-6 15:51:45


 
(vla-get-EffectiveName
   (vlax-ename->vla-object
   (car(entsel "\nSelect block: "))))
 
请勿foget(vl load com)。

Lee Mac 发表于 2022-7-6 16:00:39

哈哈^^^简单多了
页: [1]
查看完整版本: 动态块Ent的实名