Nico 发表于 2021-9-10 20:06:34

怎么选择块及块内所有对象

大家好!
       用ssget选择对象后、怎么取得选择集中的所有对象的图元列表,过滤掉动态块的可见性(可见性:隐藏的不在列表中)

wzg356 发表于 2021-9-11 16:42:16

;;选择集图元列表 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
)

gaics 发表于 2021-9-11 08:52:40

;;;选择集->图元列表
(defun ss->lst (ss / i L)
(repeat (setq i (sslength ss))
    (setq L (cons (ssname ss (setq i (1- i))) L))
)
)

这是论坛里发过的选择集转图元列表功能函数。

gaics 发表于 2021-9-13 16:14:29

(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]
查看完整版本: 怎么选择块及块内所有对象