harilalmn 发表于 2022-7-6 08:57:21

按名称选择动态块

大家好,
有没有办法通过拾取一个实例来选择图形中动态块的所有实例?
 
这是一种“按名称选择”的尝试。但是动态块杀死了我下面的代码,因为它们有奇特的命名(如*U24)
 
到目前为止,我在这里。。。
 

(defun c:SB ()
(setq TargEnt (car (entsel "\nSelect block : ")))
(setq blkname (EffectiveName TargEnt))
(setq ss (ssget "_X" (list (cons 0 "insert")(cons 2 blkname))))
(sssetfirst nil ss)
(princ)
)

;Code below is the courtesy of 'irneb' on http://forums.augi.com/showthread.php?t=114752
(defun EffectiveName (en / ed d1 d2 d3 br)
(setq ed (entget en))
(setq d1 (entget (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") ed)))))
(setq d2 (entget (cdr (assoc 360 (member '(3 . "AcDbBlockRepresentation") d1)))))
(setq d3 (entget (cdr (assoc 360 (member '(3 . "AcDbRepData") d2)))))
(setq br (entget (cdr (assoc 340 d3))))
(cdr (assoc 2 br))
)

BlackBox 发表于 2022-7-6 09:16:09

选择单个块实例,提取块的名称,然后创建一个包含所有具有该名称或注释性名称的块的选择集。接下来迭代该选择集,并检查与原始块的EffectiveName和IsDynamicBlock属性的匹配。
 
示例:

...
(setq ss (ssget "x" (list (cons 2 "<BlockName>,`*U*"))))
...

 
HTH公司

Lee Mac 发表于 2022-7-6 09:30:09

本文演示了获取所需块的选择集的两种方法。这也可能有助于有效块名。

alanjt 发表于 2022-7-6 09:42:02

只是为了完整性。。。
 
http://www.theswamp.org/index.php?topic=39260.0

irneb 发表于 2022-7-6 09:55:42

或者看看我的“旧”SEL函数中的代码:http://www.augi.com/forums/showthread.php?p=827641

gilsoto13 发表于 2022-7-6 09:58:43

我很久以前问过同样的问题。。。我不记得是谁帮了我。。。
 


(defun c:sb    (/ e name n out ss x rjp-getblockname)
(vl-load-com)
(prompt "\n   Pick BLOCK to acquire its instances in the drawing...")
(defun rjp-getblockname (obj)
   (if    (vlax-property-available-p obj 'effectivename)
   (vla-get-effectivename obj)
   (vla-get-name obj)
   )
)
(if (setq x   (ssget '((0 . "INSERT")))
       x   (ssname x 0)
       name (rjp-getblockname (vlax-ename->vla-object x))
       ss   (ssget "_X" '((0 . "INSERT")))
       n   -1
       out   (ssadd)
   )
   (while (setq e (ssname ss (setq n (1+ n))))
   (if (= (rjp-getblockname (vlax-ename->vla-object e)) name)
   (ssadd e out)
   )
   )
)
(sssetfirst nil out)
(princ)
)

页: [1]
查看完整版本: 按名称选择动态块