按名称选择动态块
大家好,有没有办法通过拾取一个实例来选择图形中动态块的所有实例?
这是一种“按名称选择”的尝试。但是动态块杀死了我下面的代码,因为它们有奇特的命名(如*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))
) 选择单个块实例,提取块的名称,然后创建一个包含所有具有该名称或注释性名称的块的选择集。接下来迭代该选择集,并检查与原始块的EffectiveName和IsDynamicBlock属性的匹配。
示例:
...
(setq ss (ssget "x" (list (cons 2 "<BlockName>,`*U*"))))
...
HTH公司 本文演示了获取所需块的选择集的两种方法。这也可能有助于有效块名。 只是为了完整性。。。
http://www.theswamp.org/index.php?topic=39260.0 或者看看我的“旧”SEL函数中的代码:http://www.augi.com/forums/showthread.php?p=827641 我很久以前问过同样的问题。。。我不记得是谁帮了我。。。
(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]