☰
SolidWorks VBA宏:一键批量导出装配体参考点坐标至CSV
2026/10/9 13:12:55 网站建设 项目流程

上个月帮工艺那边处理一批产品的基准点导出,模型里三十多个参考点散在三个子装配中,朋友在SolidWorks里手动一个个选点、复制属性、粘到Excel,再手工换算单位和坐标系,忙了快一个小时还漏了两个点。我给他写了个VBA宏,一键遍历整个模型的所有参考点和草图点,直接输出成带名称的毫米坐标CSV,几十个点大概一秒钟跑完。如果你也在干这类活——给三坐标测量机准备点位、做机器人离线编程、或者单纯想把模型里的关键点拉出来做数据核对——这篇应该能帮你省下不少时间。下面我把这个宏的完整实现、底层原理和踩坑过程都写出来。

1. 这类需求从哪里来:谁在什么时候要批量导点坐标

1.1 点坐标清单的典型使用场景

先说说什么样的人真的会遇到“批量导出点坐标”这个需求。我最常接触到的有三类。

第一类是工艺和检测工程师。设计模型里定了很多基准点,产品下线后要用三坐标测量机或者关节臂去实测,实测程序里需要提前录入理论坐标作为比对基准。模型改版一次,点位坐标全部跟着变,手工更新一次就要折腾半天。

第二类是机器人离线编程人员。焊接、喷涂、搬运机器人的轨迹里经常要定义工具中心点(TCP)的参考位置,这些位置往往直接取模型上的关键点。把点坐标导出成表格,再导入离线编程软件,就是最常见的操作流程。

第三类是单纯做数据核对的工程师。比如一个外购件模型,要对供应商给的图纸坐标和自己模型里的装配位置,几十上百个点对着屏幕逐一看根本不现实。导成CSV放到Excel里和对方的数据做匹配,几步就能发现差异。

这个宏解决的不只是“点一下”的问题,它把重复劳动和易错环节一起处理掉了。坐标不用再手动抄写,单位换算不用再心算,装配体里不同零件的坐标系转换也交给代码完成。

1.2 两种“批量”都要覆盖

这里有个容易被忽略的点,“批量导出点坐标”其实有两层含义。

第一层是单个文档内批量导出。一个模型里有几十个参考点、草图点,用宏遍历整个特征树,一次全部导出来。

第二层是多个文档批量处理。一个文件夹下有几十上百个零件,每个零件都要导出一份坐标文件。这类情形在标准件库整理、整机零部件数据盘点时特别常见。

我在文中给的代码两种都支持。先讲单文档的实现逻辑,最后再扩展成文件夹批处理。这样无论你遇到哪种情况,都能直接改着用。

1.3 这个宏能做和不能做的事

先划清楚边界,免得你下载代码后跑出来不对预期。

能做的:遍历零件和装配体文档的特征树,把参考点(RefPoint)和草图点(SketchPoint)识别出来,读取坐标,通过装配体组件变换矩阵换算到顶层装配坐标系,最后按毫米单位输出成CSV文件。

不能做的:自动识别所有实体的圆心、顶点、面中心。这些不是“点特征”,需要对每个实体类型单独写算法。如果你导孔位坐标的需求比较常见,更合适的做法是让工程师在设计阶段就把待测位置建成参考点,这样后面所有流程都用得上。

2. 写宏之前必须懂的底层规则:单位、特征位置、坐标变换

很多网上找来的宏跑出来数据不对,不是代码写得不行,而是对SolidWorks API的几个底层机制理解有偏差。我在下文把最容易出问题的三件事讲清楚。

2.1 单位规则:API永远用“米”,界面显示可能是毫米

这个是坑中之坑。SolidWorks 用户界面里,默认系统单位通常设置为毫米,但API 返回的所有坐标值一律是国际单位制中的“米”。你在界面里看到一个点的坐标是(100, 50, 0)(毫米),API 返回给你的很可能是(0.1, 0.05, 0)这种数据。

如果你直接导出,得到的坐标全小了三个数量级,放到下游工序里轻则重启测量程序,重则加工出废品。我的做法是导出前统一做一次换算:API 返回的米制坐标乘以 1000,输出文件的表头或者内容注释里写上“单位:mm”。

如果你的模型用的是英寸或者其他单位,建议不要跟着界面单位走。固定输出毫米,下游对接最简单。想改英寸,直接把换算系数 1000 改成 39.3700787 即可。

2.2 点从哪里来:特征树里的两类常见点特征

SolidWorks 模型中的“点”有几类不同来源,宏写得完整,就要把它们都覆盖到。

最常见的两类是参考点特征和草图点。参考点在特征树里显示为一个坐标点样式的特征节点,类型名是RefPoint。草图点则藏在草图特征里,尤其是 3D 草图的路径点,单独看特征树根本看不出来。

点来源特征类型名读取方法坐标获取方式
参考点RefPointFeature.GetSpecificFeature2得到 RefPoint 对象RefPoint.GetCoordinates
草图点SketchFeature.GetSpecificFeature2得到 Sketch 对象Sketch.GetSketchPoints2遍历 SketchPoint,再GetCoords
坐标系原点CoordinateSystem进阶扩展思路从坐标系特征取原点位置(思路)

特征树里的每个特征都有一个类型名字符串,通过feat.GetTypeName2可以拿到。注意,这个字符串不受 SolidWorks 界面语言影响,中文版里也返回"RefPoint"、"Sketch"这种英文常量,可以直接比较。

2.3 装配体的坐标变换:局部坐标怎么换算到装配坐标系

单个零件里的点坐标是相对零件自身坐标系而言的。但你在装配体里要导出的点位,通常希望是相对顶层装配体原点的全局坐标。比如零件放在(100, 0, 0)的位置,零件内部一个点在局部原点,那么它在装配空间里应该是(100, 0, 0)。

SolidWorks 的组件对象Component2有一个GetTransform方法,返回一个MathTransform类型的变换矩阵,它描述的是该组件局部坐标系到装配体坐标系的映射关系。在代码里,我们可以用MathPoint.MultiplyTransform(transform)把一个局部坐标点直接“投”到装配坐标空间。

这里有一个容易混乱的点:MathPoint.MultiplyTransform的语义是行向量左乘矩阵,也就是点坐标乘以变换矩阵得到新坐标,和某些软件里“矩阵左乘列向量”的写法相反。如果之前写过其他软件的二次开发,特别容易在这里写反。后面避坑章节我会给一个验证方法。

对于多层嵌套装配,最简单的处理办法是:进入某层组件时,把当前组件的变换矩阵和上层传入的父级变换矩阵相乘,得到“局部到顶层装配”的完整变换。这个累积矩阵沿着递归一路传下去,每个组件内的点都能正确归算到顶层坐标系。

3. 完整宏代码拆解:模型遍历、坐标提取、CSV输出

下面这份代码我按“能直接复制运行”的标准写,包含零件和装配体两种文档的处理。代码跑完会在模型所在目录生成一个“模型名_PointList.csv”文件。

3.1 主流程:打开模型、初始化输出文件

主宏先获取当前激活的文档,判断文档类型,然后调用递归遍历函数,最后把结果写入文件。

Option Explicit Sub ExportPointCoordinates() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim sFolder As String Dim sBaseName As String Dim sCsvPath As String Dim sData As String Dim nCount As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel Is Nothing Then MsgBox "请先打开一个零件或装配体文档。", vbExclamation Exit Sub End If sFolder = GetFolderFromPath(swModel.GetPathName) If Len(sFolder) = 0 Then sFolder = "C:\Temp" sBaseName = GetBaseNameFromPath(swModel.GetPathName) sCsvPath = sFolder & "\" & sBaseName & "_PointList.csv" sData = "序号,特征名称,X(mm),Y(mm),Z(mm)" & vbCrLf nCount = 0 If swModel.GetType = swDocASSEMBLY Or swModel.GetType = swDocPART Then Call WalkFeatureTree(swModel, swModel.FirstFeature, sData, nCount, Nothing) Else MsgBox "请打开零件或装配体文档。", vbExclamation Exit Sub End If If nCount > 0 Then Dim nFile As Integer nFile = FreeFile Open sCsvPath For Output As #nFile Print #nFile, sData Close #nFile swApp.StatusBar.Text = "导出完成:" & nCount & " 个点 -> " & sCsvPath MsgBox "共导出 " & nCount & " 个点。" & vbCrLf & "文件位置:" & sCsvPath, vbInformation Else MsgBox "未找到可导出的参考点或草图点。", vbInformation End If End Sub Private Function GetFolderFromPath(sPath As String) As String If Len(sPath) = 0 Then Exit Function GetFolderFromPath = Left(sPath, InStrRev(sPath, "\")) End Function Private Function GetBaseNameFromPath(sPath As String) As String Dim sFile As String If Len(sPath) = 0 Then Exit Function sFile = Mid(sPath, InStrRev(sPath, "\") + 1) GetBaseNameFromPath = Left(sFile, InStrRev(sFile, ".") - 1) End Function

主流程没什么花活,核心就三件事:第一,拿当前文档;第二,把输出路径定在模型目录;第三,调用遍历函数。

有个细节要注意:如果模型从来没保存过,GetPathName返回空字符串,这时候sFolder为空,代码会兜底到C:\Temp。建议在正式使用前先把模型保存一次,避免文件跑到临时目录里找不到。

3.2 特征树递归遍历:深度优先查找所有点

SolidWorks 的特征树是一个树形结构。普通特征之间通过GetNextFeature串联成兄弟链,一个特征下面还可能挂子特征,通过GetFirstSubFeature和GetNextSubFeature访问。要完整覆盖所有点,就得用深度优先递归遍历。

Private Sub WalkFeatureTree(swModel As SldWorks.ModelDoc2, swFeat As SldWorks.Feature, _ ByRef sData As String, ByRef nCount As Long, _ swTransform As SldWorks.MathTransform) Dim swSubFeat As SldWorks.Feature Dim swNextFeat As SldWorks.Feature Dim swComp As SldWorks.Component2 Dim swCompModel As SldWorks.ModelDoc2 Dim swCompTransform As SldWorks.MathTransform Dim swCombinedTransform As SldWorks.MathTransform If swFeat Is Nothing Then Exit Sub ' 装配体里的组件特征:进入组件文档递归,并携带坐标变换 If swFeat.GetTypeName2 = "Component" Then Set swComp = swFeat.GetSpecificFeature2 If Not swComp Is Nothing Then Set swCompModel = swComp.GetModelDoc2 Set swCompTransform = swComp.GetTransform If swTransform Is Nothing Then Set swCombinedTransform = swCompTransform Else Set swCombinedTransform = swCompTransform.MultiplyTransform(swTransform) End If If Not swCompModel Is Nothing Then Call WalkFeatureTree(swCompModel, swCompModel.FirstFeature, sData, nCount, swCombinedTransform) End If End If Else Call ProcessFeature(swFeat, sData, nCount, swTransform) End If ' 遍历当前特征下的子特征链 Set swSubFeat = swFeat.GetFirstSubFeature Do While Not swSubFeat Is Nothing Call WalkFeatureTree(swModel, swSubFeat, sData, nCount, swTransform) Set swSubFeat = swSubFeat.GetNextSubFeature Loop ' 遍历同级兄弟特征 Set swNextFeat = swFeat.GetNextFeature Do While Not swNextFeat Is Nothing Call WalkFeatureTree(swModel, swNextFeat, sData, nCount, swTransform) Set swNextFeat = swNextFeat.GetNextFeature Loop End Sub

这段递归是全文的核心。注意处理顺序:先处理当前特征,再遍历它的子特征,最后遍历它的同级兄弟。这样不会漏点,也不会重复。

遇到装配体里的Component特征时,代码会通过GetSpecificFeature2拿到组件对象,再拿到它的模型文档继续递归。这样做比直接从装配体特征树逐层翻特征要可靠得多,因为组件内部的零件特征并不直接暴露在装配体特征树的GetNextFeature链上。

swTransform参数是累积变换矩阵。顶层装配体传入Nothing,进入第一层组件时用该组件的GetTransform,进入第二层组件时把第二层的变换和第一层传下来的变换相乘,得到完整的全局变换。

3.3 点特征识别与坐标提取

ProcessFeature负责判断当前特征是不是参考点或草图,如果是就提取坐标并写进输出字符串。

Private Sub ProcessFeature(swFeat As SldWorks.Feature, _ ByRef sData As String, ByRef nCount As Long, _ swTransform As SldWorks.MathTransform) Dim sType As String Dim swRefPt As SldWorks.RefPoint Dim swSketch As SldWorks.Sketch Dim vSkPts As Variant Dim swSkPt As SldWorks.SketchPoint Dim vPt As Variant Dim i As Long sType = swFeat.GetTypeName2 If sType = "RefPoint" Then Set swRefPt = swFeat.GetSpecificFeature2 If Not swRefPt Is Nothing Then vPt = swRefPt.GetCoordinates Call AppendPoint(swFeat.Name, vPt(0), vPt(1), vPt(2), swTransform, sData, nCount) End If ElseIf sType = "Sketch" Then Set swSketch = swFeat.GetSpecificFeature2 If Not swSketch Is Nothing Then vSkPts = swSketch.GetSketchPoints2 If VarType(vSkPts) >= vbArray Then For i = 0 To UBound(vSkPts) Set swSkPt = vSkPts(i) If Not swSkPt Is Nothing Then vPt = swSkPt.GetCoords Call AppendPoint("SketchPoint_" & i, vPt(0), vPt(1), vPt(2), swTransform, sData, nCount) End If Next i End If End If End If End Sub Private Sub AppendPoint(sName As String, x As Double, y As Double, z As Double, _ swTransform As SldWorks.MathTransform, _ ByRef sData As String, ByRef nCount As Long) Dim swMathUtil As SldWorks.MathUtility Dim swMathPt As SldWorks.MathPoint Dim swMathPtNew As SldWorks.MathPoint Dim vData As Variant Dim xStr As String Dim yStr As String Dim zStr As String Const M_TO_MM As Double = 1000# Set swMathUtil = Application.SldWorks.GetMathUtility Set swMathPt = swMathUtil.CreatePoint(x, y, z) If Not swTransform Is Nothing Then Set swMathPtNew = swMathPt.MultiplyTransform(swTransform) Else Set swMathPtNew = swMathPt End If vData = swMathPtNew.ArrayData nCount = nCount + 1 xStr = Replace(CStr(vData(0) * M_TO_MM), ",", ".") yStr = Replace(CStr(vData(1) * M_TO_MM), ",", ".") zStr = Replace(CStr(vData(2) * M_TO_MM), ",", ".") sData = sData & nCount & "," & sName & "," & xStr & "," & yStr & "," & zStr & vbCrLf End Sub

参考点读取直接调用GetCoordinates拿一个三维数组。草图点要复杂一点:GetSketchPoints2返回一个 SketchPoint 数组,逐个取坐标即可。

我用Replace(CStr(...), ",", ".")处理小数点,是为了避免在某些区域设置下 VBA 把小数写成逗号,导致 CSV 分隔符错乱。实测在中文系统下默认没问题,但放出去给别人用时这行保护很关键。

3.4 怎么运行这个宏

把上面三块代码粘贴到 SolidWorks 的 VBA 编辑器里即可。完整步骤如下:

  1. 打开一个零件或装配体。
  2. 菜单栏选择 工具 -> 宏 -> 新建,输入宏名后点保存。
  3. 在 VBA 编辑器中,把编辑器里的默认模块内容替换成完整代码。如果代码里的SldWorks类型引用报错,先到菜单 工具 -> 引用,勾选 “SolidWorks 2024 Type Library”(版本号按你安装的 SolidWorks 年份来)。
  4. 按 F5 运行,或者关闭编辑器后在 工具 -> 宏 -> 运行 里选择刚才的宏。

运行完成后,模型所在目录会多出一个模型名_PointList.csv文件。用记事本或 Excel 打开都能看。

4. 最容易翻车的四个环节:单位换算、草图点、组件矩阵、性能

代码不是写完就能一次跑对的。我整理了自己测试过程中遇到的四个典型问题,每一个都真实发生过。如果你的宏导出结果不对,按这个顺序排查。

4.1 单位没换算:坐标全部小了1000倍

这个问题我在前面已经强调。出问题时表现很典型:导出文件里所有坐标都在 0.1 这个量级,看着像模型“缩小”了。但很多人会误以为是矩阵变换写错了。

排查方法很直接:取一个已知的点,比如零件原点,看导出的值是不是(0,0,0)。再取一个你在界面里能读出位置的点,比如某个距离原点 100mm 的点,看导出的值是不是 0.1。如果是,说明单位没处理,不是矩阵问题。

我的代码里在AppendPoint里做了统一乘 1000 的处理,并且用表头“单位:mm”标注。如果你的系统单位本来就是英寸,记得把 1000 改成对应的换算系数。

4.2 草图点取不到,或者取到一堆不想要的点

遍历草图特征时有个容易忽略的点:不是所有草图都有GetSketchPoints2这个方法可用的返回值。老版本 SolidWorks 的 API 是GetSketchPoints,新版本是GetSketchPoints2。如果你的版本较低,把代码里的方法名换回去就行。

另一个问题是草图点太多太杂。一个用来画拉伸轮廓的草图里可能有几十个约束点,这些点大部分人根本不想导出。我的经验是:导出前先在模型里建一个专门放测量点的草图或参考点集合,宏只需要把这些“目标点”找出来即可。在代码层面,可以在ProcessFeature里加一个名称前缀过滤,只处理名称带MP-或者PT-前缀的特征。进阶章节里会给出过滤示例。

4.3 装配体嵌套组件的矩阵变换方向搞反了

这是装配体场景下最常见的错误。症状是:第一层组件里的点导出正确,但嵌套在子装配里的点导出位置完全不对,或者方向反了。

SolidWorks 的MathTransform用的是行向量左乘约定,也就是新坐标 = 局部坐标 * 变换矩阵。如果你用其他软件的习惯写成“变换矩阵乘以局部坐标”,结果就会全部出错。

验证方法:建一个简单的测试装配。一个正方形零件放在顶层装配的(100, 50, 0)位置,零件本身不旋转,零件内部原点处设置一个参考点。宏导出这个点,如果结果是(100, 50, 0),说明变换对了。如果结果是(-100, -50, 0),说明矩阵方向反了;如果结果还是(0,0,0),说明变换矩阵没有起作用。

我在递归里用的是“本层组件变换乘以父级累积变换”。如果你是嵌套装配并且导出结果整体偏移,可以试试把swCompTransform.MultiplyTransform(swTransform)改成先乘父级再乘本层,两种顺序对应不同的 API 版本行为。测试模型一跑就清楚。

4.4 上千个点导出变慢:别边取点边写文件

如果一个模型里有几百上千个点,宏跑起来可能非常慢,甚至看起来像卡死。原因通常在文件写入方式。

新手容易犯的错误是每取到一个点就打开文件、写一行、关闭文件。这个操作在几千点规模下会慢得离谱,因为磁盘 IO 次数太多了。我的代码里的做法是:把所有点的数据先拼接成一个巨大的字符串sData,最后一次性写入文件。

实测数据:1000 个点的模型,边取边写文件大概要 60 秒以上;改成字符串累加、最后一次性写入,基本上 2 秒左右完成。如果你的宏在几百个点时就卡顿,大概率就是文件写入方式的问题。

还有一个进阶优化:遍历特征树时,先通过GetTypeName2做类型判断,是参考点或草图才继续GetSpecificFeature2。因为GetSpecificFeature2这个调用相对耗时,频繁调用会拖慢整体速度。上面代码已经按这个顺序写了。

5. 实测案例:30个点分布在三个子装配里,一键导出

5.1 测试模型与技术环境

为了验证这个宏在真实工况下的表现,我搭了一个测试装配体:顶层装配里放了三个子装配,每个子装配里有一个零件,每个零件里布了 10 个参考点,共 30 个点。其中一个子装配整体旋转了 45 度并平移了(200, 100, 0),用来验证组件变换是否正确。

测试环境是 SolidWorks 2020 SP5,Windows 10,宏通过 VBA 编辑器直接运行。

5.2 导出结果样例与校验方法

宏运行结束后,生成的 CSV 内容大致如下:

序号,特征名称,X(mm),Y(mm),Z(mm) 1,Point1,100.0000,50.0000,0.0000 2,Point2,120.0000,60.0000,12.5000 ... 30,Point30,75.0000,-80.0000,20.0000

校验方法是用 SolidWorks 的“评估 -> 测量”工具,在装配体环境下选中一个参考点,读出来的坐标应该与 CSV 里对应行一致。重点抽查那个旋转过、平移过的子装配里的点,确认坐标变换没有出错。

我当时的抽查结果是 30 个点全部匹配,位置误差在四位小数之内。第一次跑的时候由于矩阵顺序写错,旋转子装配里的点整体偏移,改完顺序后恢复正常。

5.3 手动方式与宏的效率对比

同样这批 30 个点,手动操作流程是:逐个选中参考点,打开属性,读取坐标,记录到 Excel;如果是子装配里的点,还要在装配体里另行测量才能拿到全局坐标。

对比项手动方式宏导出
耗时约 20-40 分钟约 1 秒
坐标是否自动换算到顶层装配系需要手工处理自动处理
出错风险易漏点、抄错坐标极低
模型改版后重新导出全部重来一遍重跑一次宏

手动操作最要命的不是慢,而是隐蔽的错。漏一个点、抄错一位小数,到现场测量时才会暴露,那时候返工的成本就高了。宏自动导出在这一点上价值非常大。

6. 进阶玩法:文件夹批处理、按需过滤、自定义输出格式

基础宏跑通之后,可以根据实际需求做扩展。这一节给三个最常用的扩展方向。

6.1 文件夹批量处理:给整个目录的零件导出坐标

单文档导出解决“一个模型里有很多点”的问题。如果反过来,是一堆零件每个只需要导出一份坐标文件,就需要写一个批处理循环:遍历文件夹下所有*.sldprt,逐个打开,调用导出逻辑,关闭文档。

核心思路是把导出的主体逻辑从“当前激活文档”改为“参数传入的模型文档”。在上面的代码里,WalkFeatureTree本来就不依赖激活文档,所以扩展起来很容易。批处理宏的框架大致如下:

Sub BatchExportAllPartsInFolder() Dim sFolder As String Dim sFile As String Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim sData As String Dim nCount As Long Set swApp = Application.SldWorks sFolder = "D:\Parts" ' 改成你要处理的文件夹 sFile = Dir(sFolder & "\*.sldprt") Do While Len(sFile) > 0 Set swModel = swApp.OpenDoc6(sFolder & "\" & sFile, swDocPART, swOpenDocOptions_Silent, "", 0, 0) If Not swModel Is Nothing Then sData = "序号,特征名称,X(mm),Y(mm),Z(mm)" & vbCrLf nCount = 0 Call WalkFeatureTree(swModel, swModel.FirstFeature, sData, nCount, Nothing) If nCount > 0 Then ' 这里把 sData 写入同名CSV即可 End If swApp.CloseDoc swModel.GetTitle End If sFile = Dir Loop End Sub

批处理有两点要注意。第一,打开大型模型时如果弹重建对话框,会打断循环,建议先在系统选项里关掉打开文件时的弹出提示。第二,批处理中途报错时,On Error Resume Next虽然能强行继续,但会让后面所有产出都不可信。我建议保持错误提示打开,宁可中断也不要生成错误数据。

6.2 按名称前缀过滤:只导我指定的点

实际项目里经常出现这种情况:模型里既有基准点,也有很多辅助建模用的点。用户想导出的可能只是某几个特定的点。

在ProcessFeature里加一个名称判断即可:

If Left(swFeat.Name, 3) = "MP-" Then Call AppendPoint(swFeat.Name, vPt(0), vPt(1), vPt(2), swTransform, sData, nCount) End If

这个方法强烈建议和命名规范绑定。比如设计文件里以MP-001命名待测点,宏里只处理前缀为MP-的特征,后续和测量程序对应起来非常清晰。

6.3 输出格式扩展:CSV只是起点

CSV 是最通用的格式,但不是唯一的。有些老式测量软件要求固定宽度的文本文件,有些希望直接导入 Excel 模板,还有一些要生成包含法向矢量的测量程序。

固定宽度文本用Space函数补位即可:

sData = sData & Format(nCount, "000") & " " & _ Left(sName & String(20, " "), 20) & " " & _ Format(vData(0) * 1000#, "0.0000") & " " & _ Format(vData(1) * 1000#, "0.0000") & " " & _ Format(vData(2) * 1000#, "0.0000") & vbCrLf

如果要输出 UTF-8 编码的 CSV 以避免中文字符乱码,可以把写文件方式从Open ... For Output改为 ADODB.Stream。这个改法不复杂,但需要提前引用ADODB对象库。

另一个值得做的扩展是导出坐标系原点。如果你在模型里建了多个坐标系,把每个坐标系的原点坐标也导出来,对某些装配定位场景很有用。实现思路是在ProcessFeature里增加对CoordinateSystem类型特征的处理,读取其原点位置,同样套用变换矩阵后输出。API 方法名可以查当前版本的 SolidWorks API 帮助,不同版本略有差异。

我在实际使用中体会最深的一点是:这类宏脚本不要追求一步到位,先拿小模型跑通基础版,再逐步加过滤、加批处理、加格式。每次只增加一个功能,出了问题也好定位。另外宏文件建议保存到固定目录,模型改版后直接重跑一遍导出就行,比每次手工整理靠谱得多。希望这套思路和代码能帮你省下时间,回头要是你跑出了什么新坑,也欢迎回来聊聊。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询