CAD VBA选择集工程化实战:从安全创建到高级复用技巧
在CAD二次开发领域,选择集(SelectionSet)就像建筑工地上的起重机——使用得当能大幅提升效率,操作不当则可能引发灾难性后果。许多开发者都经历过这样的困境:在复杂插件开发中,重复的选择集创建代码遍布各个模块,命名冲突导致程序崩溃,内存泄漏让CAD运行越来越慢。本文将彻底改变这种局面,通过一套工程化解决方案,让你的选择集操作既安全又优雅。
1. 为什么需要重构选择集创建逻辑?
当我们在VBA中处理CAD图纸时,选择集是最常用的对象之一。但原生API的 SelectionSets.Add 方法存在几个致命缺陷:
- 命名冲突风险 :CAD不允许同名选择集存在,即使大小写不同
- 内存管理黑洞 :未清理的选择集会持续占用资源
- 代码重复率高 :相同安全检查逻辑在项目中反复出现
典型的反模式代码如下:
' 危险示例:直接创建选择集
Set mySet = ThisDrawing.SelectionSets.Add("tempSet")
mySet.Select acSelectionSetAll
这种写法在简单脚本中或许能工作,但在大型项目中迟早会因命名冲突而崩溃。更糟的是,当异常发生时,选择集可能无法被正确释放。
2. 安全选择集工厂函数设计
2.1 基础安全版本
我们先实现一个带安全检查的创建函数:
Public Function CreateSafeSelectionSet(Optional setName As String = "SS_Default") As AcadSelectionSet
On Error Resume Next
' 检查并删除同名选择集
Dim existingSet As AcadSelectionSet
For Each existingSet In ThisDrawing.SelectionSets
If StrComp(existingSet.Name, setName, vbTextCompare) = 0 Then
existingSet.Delete
Exit For
End If
Next
' 创建新选择集
Set CreateSafeSelectionSet = ThisDrawing.SelectionSets.Add(setName)
' 错误处理
If Err.Number <> 0 Then
Err.Raise vbObjectError + 1, "Creat
371



被折叠的 条评论
为什么被折叠?



