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过滤动态块的方式的更多相关文章

  1. cad开发动态块对应的界面

    为了使设计人员更加容易的操作动态块, 应经可能对动态块的制作制定相关的规范, 如动态块的属性 => 类的属性 动态块操作名称(作为变量名,后台数据库的字段) 动态块操作描述  (作为注释,后台数 ...

  2. Java EE开发平台随手记5——Mybatis动态代理接口方式的原生用法

    为了说明后续的Mybatis扩展,插播一篇广告,先来简要说明一下Mybatis的一种原生用法,不过先声明:下面说的只是Mybatis的其中一种用法,如需要更深入了解Mybatis,请参考官方文档,或者 ...

  3. C#主要支持 5 种动态创建对象的方式

    C#主要支持 5 种动态创建对象的方式: 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) ...

  4. Cglib动态代理实现方式

    Cglib动态代理实现方式 我们先通过一个demo看一下Cglib是如何实现动态代理的. 首先定义个服务类,有两个方法并且其中一个方法用final来修饰. public class PersonSer ...

  5. iOS 播放gif动态图的方式探讨

    原文链接:http://my.oschina.net/u/2340880/blog/608560 摘要iOS中没有现成的接口来展示gif动态图,但可以通过其他的方式来处理gif图的展示.iOS中播放g ...

  6. 按“块”的方式写dom以及代码注释

    前言 首先这个文档中主要记述了自己在编写html代码时如何构建良好的dom结构的一些所思所想,在这一部分主要说明按“块”构建dom结构的思路.同时在这篇文档中也记述了自己对代码注释的理解,在这一部分主 ...

  7. Java动态代理实现方式一

    Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Ja ...

  8. 基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式

    在基于Vue的工作流项目模块中,我们在查看表单明细的时候,需要包含公用表单信息,特定表单信息两部分内容.前者表单数据可以统一呈现,而后者则是不同业务的表单数据不同.为了实现更好的维护性,把它们分开作为 ...

  9. C#动态创建Xml-LinQ方式

    C#创建Xml-LinQ方式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

随机推荐

  1. 解决使用JavaScriptConvert转换对象为Json时,中文和&符号被转码的问题

    描述:比如 对象为var data=new {url="http://www.baidu.com?a=b&c=d"} 使用JavaScriptConvert序列化为JSON ...

  2. redux核心思路和代码解析

    最近在公司内部培训的时候,发现很多小伙伴只是会用redux.react-redux.redux-thunk的api,对于其中的实现原理和数据真正的流向不是特别的清楚,知其然,也要知其所以然,其实red ...

  3. iOS用户行为追踪——无侵入埋点

    本文章系作者原创文章,如需转载学习,请注明该文章的原始出处和网址链接.  在阅读的过程中,如若对该文章有不懂或值得优化的建议,欢迎大家加QQ:690091622 进行技术交流和探讨. 前言:  前几日 ...

  4. SSH相关小应用

    1.隐藏值:<s:hidden name="bbsTopic.id" value="%{bbsTopic.id}"></s:hidden> ...

  5. oracle备份脚本

    利用EXP导出全库,必须用SYSTEM或者DBA用户来导出. 具体脚本实现如下 全库导出(fullbackup): #!/bin/bash bname=`date +%Y%m%d` cd /backu ...

  6. 2017年要学习的JavaScript的顶级框架和主题

    JavaScript的流行促进了一个非常活跃的由相关技术,框架和库组成的生态圈的发展.整个生态圈的多样性和活跃性越来越强,这让许多人变得越来越困惑. 你应该了解些什么技术呢?   我们应该将时间花费在 ...

  7. 生成 HTMLTestRunner 测试报告学习总结

    HTMLTestRunner 的安装与使用 HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展. 在使用之前,我们需要先安装他.下载地址:https://pyp ...

  8. 数据结构(三) 用java实现七种排序算法。

    很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排 ...

  9. as3中textField输入字符时,一次性过长后自动换行

    txt_show.text = showStr; var str:String = txt_show.text; var strlen:int = str.length; var len:int = ...

  10. zookeeper的安装与部署-集群

    1.Zookeeper的下载与解压     通过后面的链接下载Zookeeper:    Zookeeper下载在此我们下载zookeeper-3.4.5下载后解压至安装目录下,本文我们解压到目录:/ ...