明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 689|回复: 3

[讨论] 怎么选择块及块内所有对象

[复制链接]
发表于 2021-9-10 20:06:34 | 显示全部楼层 |阅读模式
大家好!
       用ssget选择对象后、怎么取得选择集中的所有对象的图元列表,过滤掉动态块的可见性(可见性:隐藏的不在列表中)

发表于 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
)
回复 支持 1 反对 0

使用道具 举报

发表于 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))
  )
)

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

发表于 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))
  )
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 05:39 , Processed in 0.159198 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表