CAD vba 选择集使用过滤器dxf组码实现图层与颜色的筛选实例

本文介绍了一段VBA代码,用于在AutoCADdwg文件中筛选出图元颜色为100且图层颜色也为100,同时图层内图元颜色为200的图元。主要讲解了如何使用嵌套for循环和Ftype/Fdata数据结构进行高级筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本代码实现以下功能:

在dwg文件中,要求选中图元颜色是100的所有图元,并且选中图层颜色为100且此图层中图元颜色为200的所有图元。

编程思路:

一、

用dxf组码过滤器ftype fdata,第一层嵌套为<or  (图元颜色为100)    (第二层:图层颜色为100)    or>。

第二层嵌套为<and     图层颜色为100且图元颜色为200     and>。

二、

由于我们不知道有多少个这样的图层,因此需要用到for循环。图层颜色为100的图层数量for循环可以计算出来,我们用i来代替数量,图层名写入str中,通过for循环统计所有图层名:str=str & lay.name &"," 然后用split函数分割写入数组中,接下来写出完整代码:

(split函数及数组应用具体可参考本博主另一篇博文

  vba 中split函数及数组搭配for循环的应用-优快云博客  https://blog.youkuaiyun.com/yongshiqq/article/details/134861519?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134861519%22%2C%22source%22%3A%22yongshiqq%22%7D)

Ftype(0) = -4:  Fdata(0) = "<or"

Ftype(1) = 62:  Fdata(1) = 100

For j = 1 To i

 ftype(j * 4 - 2) = -4: Fdata(j * 4 - 2) = "<and"

   ftype(j * 4 - 1) = 8:Fdata(j * 4 - 1) = arr(i-1)

 ftype(j * 4) = 62:Fdata(j * 4) = 200

 ftype(j * 4 + 1) = -4:Fdata(j * 4 + 1) ="and>"

 Next j

 ftype(i) = -4: Fdata(i) = "or>"



  sel.Select acSelectionSetAll, , , ftype,fdata

搞定!本文重点为for循环的算法嵌套入过滤器当中,数学编程不分家,我们需要通过类举法找到规律后再实现算法。

下个例子,选择图中所有半径大于5 的圆

Sub FilterRelational()
    Dim sset As AcadSelectionSet
    Dim FilterType(2) As Integer
    Dim FilterData(2) As Variant
    Set sset = ThisDrawing.SelectionSets.Add("SS21")

    FilterType(0) = 0: FilterData(0) = "Circle"
    FilterType(1) = -4: FilterData(1) = ">="
    FilterType(2) = 40: FilterData(2) = 5#
 
    sset.SelectOnScreen FilterType, FilterData
 
    MsgBox "Number of objects selected: " & sset.Count
 
    ' 终止前删除选择集   Remove the selection set at the end
    sset.Delete
    
End Sub

一本非常好的CAD VBA学习教材 第 1 章、VBA入门 1 、了解嵌入和全局VBA工程 2、用VBA管理器织工程 3、处理宏 4、用VBA IDE编辑工程 5、更多的信息 6、回顾AutoCAD VBA 工程术语 7、回顾AutoCAD VBA 命令 第2 章、理解ActiveX自动操作基础 1、理解AutoCAD对象模型 2、访问对象层次 3、通过合对象操作 4、理解属性和方法 5、理解父对象 6、定位类型库 7、在数据库中返回第一个图元 8、在方法和属性中使用变体 9、使用其它程序语言 第三章 控制AutoCAD环境 1、打开、保存和关闭图形 2、设定AutoCAD参数 5、重置活动对象 6、设定和返回系统变量 7、精确制图 8、提示用户输入 9、访问AutoCAD命令行 第四章 创建和编辑AutoCAD图元 1、创建对象 2、编辑对象 3、使用图层颜色和线型 4、添加文本到图形中 第五章 标注公差 1、标注的概念 2、创建标注 3、编辑标注 4、利用标注样式 5、在模型空间和图纸空间中标注 6、创建引线及注解 7、创建形位公差 第六章 定义菜单和工具栏 1、理解MenuBar和MenuGroups合 2、加载菜单 3、改变菜单条 4、创建和编辑下拉菜单和快捷菜单 5、建立并编辑工具栏 7、对菜单项和工具栏项增加状态栏帮助 8、在右键菜单中增加条目 第七章 使用事件 1、了解AutoCAD中的事件 2、编写事件处理器的方法 3、处理应用程序级事件 4、处理文档级事件 5、处理对象级事件 第八章 在三维空间下工作 1、指定三维坐标 2、定义用户坐标系统 3、坐标转换 4、建立三维对象 5、在三维中编辑 6、编辑三维实体 第九章 定义布局及打印 1、了解模型空间和图纸空间 2、了解视口 3、打印图纸 第十章-高级绘图织技术 1、使用光栅图像 2、使用块和属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值