怎么选择块及块内所有对象
大家好!用ssget选择对象后、怎么取得选择集中的所有对象的图元列表,过滤掉动态块的可见性(可见性:隐藏的不在列表中)
;;选择集图元列表 2个
(vl-remove-if '(lambda(x)(/= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)));相对通用
(vl-remove-if'listp (mapcar 'cadr (ssnamex ss)))
;;块图元列表
(defun _BlockEle (Name / E LST)
(setq e (TBLOBJNAME "block" Name))
(while (setq e (entnext e))(setq Lst (cons e Lst)) )
Lst
) ;;;选择集->图元列表
(defun ss->lst (ss / i L)
(repeat (setq i (sslength ss))
(setq L (cons (ssname ss (setq i (1- i))) L))
)
)
这是论坛里发过的选择集转图元列表功能函数。
(defun entlst (ss / lst i obj)
(setq lst (ss->lst ss))
(setq i 0)
(repeat (sslength ss)
(setq obj (vlax-ename->vla-object (ssname ss i)))
(if (wcmatch (vla-get-objectname obj) "AcDbBlockReference")
(vlax-for x
(vla-item
(vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
(vla-get-effectivename obj)
)
(if (= (vla-get-visible x) :vlax-true)
(setq lst (cons (vlax-vla-object->ename x) lst))
)
)
)
(setq i (1+ i))
)
lst
)
(defun ss->lst (ss / i L)
(repeat (setq i (sslength ss))
(setq L (cons (ssname ss (setq i (1- i))) L))
)
)
页:
[1]