[原创]ssget过滤动态块的方式
Autocad在2006增加了新的动态块功能,方便了对块的动态修改,但是修改动态块后,块名会变成一个匿名块,导致无法通过块名来快速过滤。
明经论坛上有人通过全选块后再来遍历筛选,我通过研究简化了这个问题。采用同时改过的和没改过的块,减少了选择对象的数量,甚至可以说是直接过滤块名的效果。
方法就是在过滤块名的增加一个匿名块的功能。
(ssget '((2 . "`*U*,图框")))
这样可以同时过滤到 图框和修改后的动态图框,这时候我们再来遍历验证一下选择的块是否正确,再来筛选一下,如果图中没有什么匿名块,几乎和过滤块名是一样的。

再此基础之上,可以再更进一步,预先获取该块名的所有动态块的匿名名称,加入到当前选择过滤名称表中。这样就会比较精准的过滤到指定块名的对象,下面是个简单的例子.
(vl-load-com)
(defun c:tt(/ BLKNAME EN ENT LST OBJ SS SS2 TMPBLKNAME TMPOBJ)
(if(setq ent(car(entsel "\n请选择需要过滤的参考图块: ")))
(progn
(setq obj(vlax-ename->vla-object ent))
;;先获取参考块的真实块名
(setq blkName(vla-get-EffectiveName obj))
;;如果是动态块执行添加动态块的匿名块名进行过滤
(if (= (vla-get-IsDynamicBlock obj) :vlax-true)
(progn
;;全选所有匿名块
(if (setq ss(ssget "x" '((0 . "insert")(2 . "`*U*"))))
(progn
(setq lst '())
;;循环判定匿名块的块名是否是参考块的块名
(while (setq en(ssname ss 0))
(setq Tmpobj(vlax-ename->vla-object en))
(setq TmpblkName(vla-get-EffectiveName Tmpobj))
(if (= TmpblkName blkName)
(progn
;;添加到lst表中
(setq lst (cons (vla-get-Name Tmpobj) lst))
)
)
(ssdel en ss)
)
;;反转表,可省略
(setq lst(reverse lst))
(if lst
(progn
;;将匿名块的块名表连接为一个字符串,并处理*问题.
(setq blkName(strcat (apply 'strcat (mapcar '(lambda(x)(strcat "`" x ",")) lst)) blkName))
)
)
)
)
)
)
;;执行过滤选择
(setq ss2(ssget (list '(0 . "insert") (cons 2 blkName))))
(if (and ss2 (= 0 (getvar "cmdactive"))) (command "._select" ss2 "" "._pselect" ss2 ""))
)
)
)
后记:感谢LTools 指出的一个错误,2019-4-3 15:01:10。
[原创]ssget过滤动态块的方式的更多相关文章
- cad开发动态块对应的界面
为了使设计人员更加容易的操作动态块, 应经可能对动态块的制作制定相关的规范, 如动态块的属性 => 类的属性 动态块操作名称(作为变量名,后台数据库的字段) 动态块操作描述 (作为注释,后台数 ...
- Java EE开发平台随手记5——Mybatis动态代理接口方式的原生用法
为了说明后续的Mybatis扩展,插播一篇广告,先来简要说明一下Mybatis的一种原生用法,不过先声明:下面说的只是Mybatis的其中一种用法,如需要更深入了解Mybatis,请参考官方文档,或者 ...
- C#主要支持 5 种动态创建对象的方式
C#主要支持 5 种动态创建对象的方式: 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) ...
- Cglib动态代理实现方式
Cglib动态代理实现方式 我们先通过一个demo看一下Cglib是如何实现动态代理的. 首先定义个服务类,有两个方法并且其中一个方法用final来修饰. public class PersonSer ...
- iOS 播放gif动态图的方式探讨
原文链接:http://my.oschina.net/u/2340880/blog/608560 摘要iOS中没有现成的接口来展示gif动态图,但可以通过其他的方式来处理gif图的展示.iOS中播放g ...
- 按“块”的方式写dom以及代码注释
前言 首先这个文档中主要记述了自己在编写html代码时如何构建良好的dom结构的一些所思所想,在这一部分主要说明按“块”构建dom结构的思路.同时在这篇文档中也记述了自己对代码注释的理解,在这一部分主 ...
- Java动态代理实现方式一
Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Ja ...
- 基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式
在基于Vue的工作流项目模块中,我们在查看表单明细的时候,需要包含公用表单信息,特定表单信息两部分内容.前者表单数据可以统一呈现,而后者则是不同业务的表单数据不同.为了实现更好的维护性,把它们分开作为 ...
- C#动态创建Xml-LinQ方式
C#创建Xml-LinQ方式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
随机推荐
- (15)IO流之File
File类用封装了一个文件夹或者文件的所有属性. File类的构造方法: File(String pathname) 指定文件或者文件夹的路径创建一个File文件 File(File parent, ...
- JDK中日期和时间的几个常用类浅析(二)
java.util.Calendar JDK中的java.util.Calendar类主要是用来处理日期和时间相关的算法运算.当你需要做一些关于日期和时间的高级算数操作时,此类可能就是你的最好选择 ...
- cuda线程/线程块索引小结
内建变量: threadIdx(.x/.y/.z代表几维索引):线程所在block中各个维度上的线程号 blockIdx(.x/.y/.z代表几维索引):块所在grid中各个维度上的块号 blockD ...
- 前端学PHP之自定义模板引擎
前面的话 在大多数的项目组中,开发一个Web程序都会出现这样的流程:计划文档提交之后,前端工程师制作了网站的外观模型,然后把它交给后端工程师,它们使用后端代码实现程序逻辑,同时使用外观模型做成基本架构 ...
- virtualenv 安装不同版本的虚拟环境的办法
废话不多说直接上代码 virtualenv -p C:\Python27\python2.exe env 上面的*.exe是你要使用的python版本的exe文件的绝对路径. 官方文档参考:http: ...
- js放大镜
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js的eval函数
今天在看代码的时候发现了一个eval函数,不解其意,通过查询之后,终于知道了,下面是我的总结. eval函数可以将字符串生成语句执行,格式为:eval(coding),类似于sql语句里面的exec( ...
- 添加网站QQ客服链接
http://wpa.qq.com/msgrd?v=3&uin=3475432549&site=qq&menu=yes 将其中的uin值改为客服QQ即可
- 微信小程序支付简单小结与梳理
前言 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点. 当然在开发之前,我们需要有下面这些东 ...
- 性能测试培训:WebSocket协议的接口性能之Jmeter
性能测试培训:WebSocket协议的接口性能之Jmeter poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开 ...