1. 理解SelectionMgr.GetSelectedObjectType3方法的核心作用在SolidWorks二次开发中SelectionMgr对象是处理用户选择的门户。GetSelectedObjectType3方法作为其关键成员专门用于识别当前选中对象的类型。与早期版本相比这个带3后缀的方法提供了更精确的类型识别能力。我经常在工程图自动化处理中用到这个方法。比如开发批量标注工具时需要判断用户当前选中的是视图、尺寸还是注释。这时候GetSelectedObjectType3就能准确返回对应的枚举值避免出现误操作。注意该方法索引从1开始与常规编程习惯不同容易导致off-by-one错误。我在第一个项目中就踩过这个坑。2. 方法参数深度解析2.1 参数定义与使用规范方法签名如下Function GetSelectedObjectType3(index As Long, mark As Long) As Longindex参数表示选择集中对象的序号1-basedmark参数通常设为-1表示获取当前选择标记下的对象类型实际开发中我建议先用GetSelectedObjectCount获取选择总数再遍历处理Dim swSelMgr As SldWorks.SelectionMgr Set swSelMgr swModel.SelectionManager Dim count As Long count swSelMgr.GetSelectedObjectCount2(-1) For i 1 To count Dim objType As Long objType swSelMgr.GetSelectedObjectType3(i, -1) 处理不同类型对象... Next2.2 返回值枚举详解方法返回的是swSelectType_e枚举值常见的有swSelNOTHING 0swSelEDGES 6swSelFACES 7swSelDIMENSIONS 44swSelDRAWINGVIEWS 59在工程图处理中这几个返回值特别重要Select Case objType Case swSelDIMENSIONS 尺寸对象处理逻辑 Case swSelDRAWINGVIEWS 视图对象处理逻辑 Case swSelNOTES 注释对象处理逻辑 End Select3. 工程图中的典型应用场景3.1 批量修改选中元素最近给客户开发工程图批处理工具时就用这个方法实现了智能识别Public Sub ProcessSelectedItems() Dim selCount As Long selCount swSelMgr.GetSelectedObjectCount2(-1) If selCount 0 Then swApp.SendMsgToUser 请先选择工程图元素 Exit Sub End If For i 1 To selCount Dim objType As Long objType swSelMgr.GetSelectedObjectType3(i, -1) Select Case objType Case swSelDIMENSIONS OptimizeDimension i Case swSelNOTES FormatNote i Case Else 其他类型跳过 End Select Next End Sub3.2 选择过滤器的实现结合这个方法可以创建智能选择过滤器Function GetSelectedFaces() As Variant Dim faceArray() As Object ReDim faceArray(0) Dim selCount As Long selCount swSelMgr.GetSelectedObjectCount2(-1) For i 1 To selCount If swSelMgr.GetSelectedObjectType3(i, -1) swSelFACES Then Dim face As Object Set face swSelMgr.GetSelectedObject6(i, -1) 动态扩容数组 If Not faceArray(0) Is Nothing Then ReDim Preserve faceArray(UBound(faceArray) 1) End If Set faceArray(UBound(faceArray)) face End If Next GetSelectedFaces faceArray End Function4. 实战中的问题排查4.1 常见错误代码错误代码1返回swSelNOTHING(0)可能原因索引超出范围或对象已被删除解决方案检查GetSelectedObjectCount2的返回值错误代码2类型判断不准确可能原因未考虑子类型如swSelSKETCHSEGS包含多种线段类型解决方案结合GetSelectedObject6方法进一步判断4.2 性能优化技巧在处理大量选择时我总结出几个优化点先获取选择总数避免重复调用GetSelectedObjectCount2对需要多次访问的对象先用变量缓存复杂判断逻辑尽量放在Select Case外层典型优化案例 优化前每次循环都获取总数 For i 1 To swSelMgr.GetSelectedObjectCount2(-1) ... Next 优化后 Dim total As Long total swSelMgr.GetSelectedObjectCount2(-1) For i 1 To total ... Next5. 高级应用技巧5.1 与其它API方法配合使用我经常将GetSelectedObjectType3与这些方法组合使用GetSelectedObject6获取具体对象实例GetSelectedObjectsDrawingView获取关联的工程图视图GetSelectedObjectComponent获取装配体组件例如获取尺寸的关联视图Dim dimObj As Object Set dimObj swSelMgr.GetSelectedObject6(index, -1) Dim view As DrawingView Set view swSelMgr.GetSelectedObjectsDrawingView(index)5.2 处理特殊选择集当遇到以下特殊情况时需要特别注意跨文档选择如同时选择零件和工程图元素隐藏元素的选择临时选择集如框选产生的选择处理方案示例 检查是否来自工程图 If Not swModel.GetType swDocumentTypes_e.swDocDRAWING Then Err.Raise vbError, , 该方法仅适用于工程图文档 End If 处理隐藏元素 If swSelMgr.GetSelectedObjectVisibility(index, -1) swSelectionVisibilityOption_e.swSelectionVisibilityOptionHidden Then 特殊处理逻辑 End If6. 实际项目经验分享在最近的一个汽车零部件项目中我们需要自动检查工程图上的尺寸标注完整性。通过GetSelectedObjectType3实现了智能识别Public Function CheckDimensions() As Boolean Dim swDraw As DrawingDoc Set swDraw swApp.ActiveDoc Dim swSelMgr As SelectionMgr Set swSelMgr swDraw.SelectionManager Dim hasError As Boolean hasError False 获取所有选择项 Dim selCount As Long selCount swSelMgr.GetSelectedObjectCount2(-1) For i 1 To selCount Dim objType As Long objType swSelMgr.GetSelectedObjectType3(i, -1) If objType swSelDIMENSIONS Then Dim dimObj As DisplayDimension Set dimObj swSelMgr.GetSelectedObject6(i, -1) 检查尺寸值是否在合理范围内 If Not ValidateDimension(dimObj) Then hasError True HighlightProblemItem dimObj End If End If Next CheckDimensions Not hasError End Function这个实现的关键点在于准确识别尺寸对象获取尺寸值进行业务逻辑验证对问题尺寸进行可视化标记7. 调试与测试建议7.1 即时反馈调试法我习惯在开发过程中添加即时反馈Sub DebugSelection() Dim objType As Long objType swSelMgr.GetSelectedObjectType3(1, -1) Dim typeName As String Select Case objType Case swSelDIMENSIONS: typeName 尺寸 Case swSelFACES: typeName 面 ...其他类型 Case Else: typeName 未知类型 End Select swApp.SendMsgToUser 当前选择类型: typeName End Sub7.2 单元测试方案为关键功能编写测试用例Sub Test_GetSelectedObjectType3() 准备测试环境 CreateTestDrawing 测试1: 空选择 If swSelMgr.GetSelectedObjectType3(1, -1) swSelNOTHING Then LogError 空选择测试失败 End If 测试2: 尺寸选择 SelectDimension D1 If swSelMgr.GetSelectedObjectType3(1, -1) swSelDIMENSIONS Then LogError 尺寸选择测试失败 End If 清理 ClearSelection End Sub8. 版本兼容性处理不同SolidWorks版本间有些细微差别需要注意版本变化点适配方案2015-2017方法名为GetSelectedObjectType2条件编译或版本检测2018新增swSelTABLES等类型添加新类型处理分支2023性能优化无需特殊处理典型版本适配代码#If SW_VERSION 2018 Then objType swSelMgr.GetSelectedObjectType3(i, -1) #Else objType swSelMgr.GetSelectedObjectType2(i, -1) #End If9. 扩展应用思路9.1 自定义选择过滤器基于这个方法可以实现更智能的选择过滤Function GetSpecificSelections(selType As Long) As Variant Dim result() As Object ReDim result(0) Dim count As Long count swSelMgr.GetSelectedObjectCount2(-1) For i 1 To count If swSelMgr.GetSelectedObjectType3(i, -1) selType Then Dim obj As Object Set obj swSelMgr.GetSelectedObject6(i, -1) If Not result(0) Is Nothing Then ReDim Preserve result(UBound(result) 1) End If Set result(UBound(result)) obj End If Next GetSpecificSelections result End Function9.2 工程图自动化检查结合这个方法可以实现尺寸标注完整性检查视图比例一致性验证注释内容合规性检查示例检查函数Public Sub CheckDrawingCompliance() Dim violations As Collection Set violations New Collection Dim selCount As Long selCount swSelMgr.GetSelectedObjectCount2(-1) For i 1 To selCount Dim objType As Long objType swSelMgr.GetSelectedObjectType3(i, -1) Select Case objType Case swSelDIMENSIONS CheckDimensionCompliance i, violations Case swSelNOTES CheckNoteContent i, violations Case swSelDRAWINGVIEWS CheckViewScale i, violations End Select Next GenerateReport violations End Sub10. 最佳实践总结经过多个项目的实战检验我总结了以下最佳实践防御性编程始终检查返回值处理异常情况If swSelMgr Is Nothing Then Err.Raise vbError, , 选择管理器未初始化 End If性能优先避免在循环中重复获取相同信息 不好 For i 1 To swSelMgr.GetSelectedObjectCount2(-1) ... Next 推荐 Dim total As Long total swSelMgr.GetSelectedObjectCount2(-1) For i 1 To total ... Next明确类型处理为每种对象类型编写专用处理函数Select Case objType Case swSelDIMENSIONS ProcessDimension selectionIndex Case swSelFACES ProcessFace selectionIndex End Select完善的错误处理为用户提供明确的操作指引On Error GoTo ErrorHandler 主逻辑... Exit Sub ErrorHandler: swApp.SendMsgToUser 操作失败: Err.Description vbCrLf _ 请确保已选择正确的工程图元素 End Sub文档注释为关键参数添加详细注释 参数说明 index - 选择集中对象的索引(1-based) mark - 选择标记(-1表示当前选择) Function GetSelectedObjectInfo(index As Long, mark As Long) As String ... End Function
企业数字化 ERP 产品动态
相关推荐
5个不依赖软件的思维结构体:提升判断力与表达力的核心方法 1. 这不是“工具清单”,而是一套思维操作系统升级方案“提升思维品质,不可不知的5个工具”——看到这个标题,很多人第一反应是:又要被塞一堆APP、网站、模板了?点开收藏,三天后在手机里吃灰。但我想先说清楚… · 2026/11/6 13:07:18
ponytail插件深度解析:浏览器内容聚合与跨标签页管理实战指南 1. 从“ponytail”这个标题说起:它到底是什么 第一次看到“ponytail”这个词,大多数人脑子里蹦出来的画面是扎起来的马尾辫。但在技术圈和效率工具圈里,ponytail 早就不是发型的意思了。它是一类 轻量级浏览器增强插件 的代号,核… · 2026/11/6 11:31:39
具身智能在物流分拣中的技术架构与优化策略 1. 具身智能物流分拣的核心价值与行业痛点 物流分拣环节长期存在三大核心痛点:人工成本占比高达40%、错分率徘徊在3%-5%、峰值吞吐量受限于工人体能。传统自动化方案如交叉带分拣机虽能提升效率,但面临三个无解难题:无法处理非标件࿰… · 2026/11/6 13:07:27
电工证换新证好吗 网上查询教你避开中介陷阱 电工证换新证好吗 网上查询教你避开中介陷阱 你是不是也遇到过这种情况?手头有个老电工证,听说要换新证了,但又不知道从哪儿开始,生怕一不小心被中介坑了钱,还拿不到证?别急,我来帮你理清楚流程,教你 电工证换新证好吗 ,以及怎么通过 网上查询… · 2026/11/12 0:36:05
2026河南最新政策下西安昆明路培训电工证和本地报考哪个更靠谱 2026河南最新政策下西安昆明路培训电工证和本地报考哪个更靠谱 你是不是也担心自己去哪报名电工证,怕被中介骗钱?尤其是2026河南最新政策出台后,很多人对西安昆明路培训电工证和本地报考的流程、要求、考试内容都摸不着头脑。今天就从驻马店公路工… · 2026/11/12 0:36:05
高压电工证到哪里年审官方回应来了,实操考试心里没底怕挂科 高压电工证到哪里年审官方回应来了,实操考试心里没底怕挂科 实操考试心里没底怕挂科,是很多准备考高压电工证的朋友共同的烦恼。尤其是在河南这样的建筑大省,电工证几乎是从事建筑、电力施工的基础门槛,而高压电工证又比低压电工证要求更高,考试难度更大… · 2026/11/12 0:36:05
肥西电工证在哪里办通过率揭秘:证书过期了不知道怎么复审延期?一文讲透 肥西电工证在哪里办通过率揭秘:证书过期了不知道怎么复审延期?一文讲透 证书过期了不知道怎么复审延期?别急,这可能是你最不想遇到的“燃眉之急”,但偏偏又是最现实的问题。特别是像电工证这种关系到作业安全、企业合规的关键证书,一旦过期,不仅影响工… · 2026/11/12 0:36:05
电工作业证英语怎么说?含金量高不高?实操考试心里没底怕挂科 电工作业证英语怎么说?含金量高不高?实操考试心里没底怕挂科 实操考试心里没底怕挂科?电工作业证英语怎么说,是不是听上去就让人有点懵?其实这个证,不仅关系到你能不能上岗,也直接影响你未来的薪资和职业发展。别急,咱们一步步来,把这事儿说清楚。… · 2026/11/12 0:36:05
深圳电工证年审过期怎么处理?考前押题能帮你稳过实操 深圳电工证年审过期怎么处理?考前押题能帮你稳过实操 实操考试心里没底怕挂科,尤其是像你这样已经拿到电工证但面临年审过期的人,怕的是耽误工作、影响收入。别急,今天就从【深圳电工证年审过期】这个关键词入手,讲清楚怎么处理、怎么补救,还能顺便帮你… · 2026/11/12 0:35:05
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/11 19:07:25
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/11 17:14:54
电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 电工证设年审有效期多久官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工、焊工、高处作业人员的真实写照。尤其是像你这样刚毕业的鹤壁工程类毕业生,一边要找工作,一边要考证,时间紧张,复习效率低。但你可能不知… · 2026/11/12 0:00:56
新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 新乡电工证实操怕挂科?电工作业动漫图+报考避坑全解析 实操考试心里没底怕挂科?你不是一个人。新乡的水利工程从业者,很多在报考电工证的时候都担心自己操作不熟练、考试不通过, 千万别踩坑 ,选对资料和方法真的能提高通过率。… · 2026/11/12 0:00:56
网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 网电工证千万别踩坑:实操考试心里没底怕挂科怎么破? 实操考试心里没底怕挂科,这是很多准备报考【网电工证】的学员最真实的感受。尤其是在高压电工、低压电工等工种上,操作环节的容错率极低,一旦失误就可能直接被判定不合格。很多人因为担心挂科而放弃考… · 2026/11/12 0:00:56
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/11 17:15:20