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

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

本代码实现以下功能:

在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、使用块和属性
在Excel VBACAD交互场景中,DXF(Drawing Exchange Format)是非常重要的概念。DXF是一种用于CAD文件交换的文本格式,则是DXF文件中用于标识数据类型和含义的代。以下介绍一些关于Excel VBA选择DXF使用方法及相关信息: ### DXF的基本概念 DXF文件由一系列的构成,每个包含一个和对应的值。是一个整数,用于定义值的类型和含义。例如, 0 通常表示实体类型, 8 表示图层名称等。 ### 在Excel VBA使用DXF 在Excel VBACAD交互时,可以通过CADVBA接口来获取和设置DXF的值。以下是一个简单的示例,展示如何获取CAD实体的DXF信息: ```vba Sub GetDXFGroupCodes() ' 前提是已经正确引用CAD的库 Dim acadApp As Object Dim acadDoc As Object Dim acadSelSet As Object Dim acadEnt As Object ' 连接到CAD应用程序 On Error Resume Next Set acadApp = GetObject(, "AutoCAD.Application") If acadApp Is Nothing Then Set acadApp = CreateObject("AutoCAD.Application") End If On Error GoTo 0 ' 获取当前CAD文档 Set acadDoc = acadApp.ActiveDocument ' 创建一个选择 Set acadSelSet = acadDoc.SelectionSets.Add("MySelectionSet") acadSelSet.SelectOnScreen ' 遍历选择中的实体 For Each acadEnt In acadSelSet ' 获取实体的DXF信息 Dim dxfCodes As Variant dxfCodes = acadEnt.GetDXFValues ' 输出DXF信息 Dim i As Long For i = LBound(dxfCodes) To UBound(dxfCodes) Step 2 Debug.Print "Group Code: " & dxfCodes(i) & ", Value: " & dxfCodes(i + 1) Next i Next acadEnt ' 删除选择 acadSelSet.Delete End Sub ``` ### 代解释 1. **连接到CAD应用程序**:通过`GetObject`和`CreateObject`函数连接到CAD应用程序。 2. **创建选择**:使用`SelectionSets.Add`方法创建一个选择,并使用`SelectOnScreen`方法让用户在CAD选择实体。 3. **获取DXF信息**:使用`GetDXFValues`方法获取实体的DXF信息,返回一个数,数中偶数索引的元素是,奇数索引的元素是对应的值。 4. **输出DXF信息**:遍历数,输出每个和对应的值。 5. **删除选择**:使用`Delete`方法删除选择。 ### 注意事项 - 在使用前,需要确保已经正确引用CAD的库。可以通过“工具” -> “引用”菜单来添加引用。 - DXF的含义和使用方法可以参考CAD的官方文档,不同的CAD版本可能会有一些差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山水CAD插件定制

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

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

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

打赏作者

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

抵扣说明:

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

余额充值