简介:这份文档面向使用Solidworks进行三维建模、又需要与AutoCAD团队协作的工程师与设计人员,聚焦工程图转DWG/DXF格式时字体错乱、图层混乱、线型丢失等常见痛点,提供从基础转换到进阶映射再到宏自动化的完整解决思路。资源包内仅含1个docx文件,约946KB,以图文步骤形式组织内容,便于对照操作与查阅。文档依次讲解注解字体设置与drawfontmap.txt字体映射文件的修改方法、自定义映射Solidworks到DXF的图层与颜色线型配置、映射文件的保存复用,以及利用VBA宏实现一键批量转换的代码与调试要点,并附有对宏代码各部分的解释。已有553人学习下载,适合希望减少重复劳动、保证转换后图纸在AutoCAD中图层与样式一致的跨软件工作者参考。
1. Solidworks 工程图转 CAD 图纸:为什么你导出的 DWG 总是“看着像、改起来废”
如果你在机械设计岗待过,大概率遇到过这个场景:Solidworks 里画好的工程图,标注、公差、粗糙度、焊接符号一应俱全,另存为 DWG 发给供应商或者外协厂,对方打开一看——尺寸线全散了,图层乱成一锅粥,标题栏文字变成了问号,原本对齐的剖视图跑偏了。这不是玄学,是 Solidworks 到 DWG 这条转换链路上,映射规则没配对。
这个标题讲的就是这件事:把 Solidworks 工程图(.slddrw)转成 AutoCAD 能正常编辑的 DWG/DXF。它解决的核心问题是“转换后图纸还能不能改、还能不能看”。适合两类人:一是每天要出图给下游的机械工程师,二是需要批量处理历史图纸的工艺或文控人员。热搜里 solidworks、DWG、AutoCAD、VBA 这几个词反复出现,说明大家卡的点很集中——不是不会点“另存为”,而是转出来不能用。
我自己的血泪经验是:默认设置直接另存,十次有八次要被下游打回来。真正能用的转换,得先把映射规则、图层、字体、线型这几件事在导出前定死。下面按“先搞懂映射逻辑 → 再动手配 → 再批量跑 → 再排错”的顺序拆开讲。
2. 先搞懂 Solidworks 到 DWG 的映射逻辑:图层、线型、字体到底谁说了算
2.1 映射不是“翻译”,是“按规则重建”
很多人以为 Solidworks 导出 DWG 是把图形“复制”过去,其实不是。Solidworks 工程图内部用的是自己的实体模型和注解体系,导出时是通过一套映射表,把 Solidworks 的线型、图层、字体、颜色逐项对应到 DWG 的对应属性上。映射表没配好,导出的 DWG 就是“图形在、属性丢”。
具体来说,Solidworks 导出 DWG 时处理这几类对象:
- 几何线条:可见边、隐藏边、切线边、剖面线,分别对应 DWG 的不同线型。
- 注解:尺寸、公差、基准、粗糙度、焊接符号、形位公差,对应 DWG 的标注样式和文字样式。
- 图层:Solidworks 本身图层概念很弱,导出时靠映射文件把不同对象分配到 DWG 图层。
- 字体:Solidworks 用的字体和 AutoCAD 的 SHX/TTF 字体不是一回事,映射不对就出问号。
所以核心动作是:在 Solidworks 里打开“另存为 DWG”的选项对话框,把“选项”里的映射文件、字体、线型、图层逐项确认。默认映射文件是swmap.ini之类的,但默认值往往不适合国内出图习惯。
2.2 图层映射:把 Solidworks 的“类别”翻译成 DWG 的“图层”
Solidworks 导出 DWG 时,图层映射靠一个映射文件控制。常见做法是自定义一个映射文件,把 Solidworks 的对象类别映射到公司标准图层。比如:
| Solidworks 对象类别 | 映射到 DWG 图层 | 线型 | 颜色 |
|---|---|---|---|
| 可见边 | 轮廓线 | Continuous | 白/黑 |
| 隐藏边 | 虚线 | Hidden | 黄 |
| 切线边 | 细实线 | Continuous | 灰 |
| 尺寸标注 | 标注 | Continuous | 绿 |
| 剖面线 | 剖面 | Continuous | 青 |
| 文字注释 | 文字 | Continuous | 白 |
这个表不是固定的,得按你们公司的图层标准来。关键是:映射文件里每一行对应一个类别,导出时 Solidworks 按这个表分配图层。如果映射文件里没定义的类别,导出时会落到默认图层,通常就是“0”层,下游一看全在 0 层,没法关图层、没法改颜色。
我一般会先导出一张测试图,用 AutoCAD 打开后看每个对象在哪个图层,再反推映射文件该怎么改。这个“导出 → 检查 → 改映射 → 再导出”的循环,跑两三遍就能把映射表定下来。
2.3 字体映射:问号问题的根源
DWG 里文字变问号,99% 是字体映射没配。Solidworks 工程图里用的字体(比如宋体、仿宋、Arial)在导出时,如果映射文件里没指定对应的 AutoCAD 字体,AutoCAD 打开时就找不到字体,显示成问号或方框。
解决方式有两种:
- 在 Solidworks 导出选项里,把“字体”映射到 AutoCAD 的 SHX 字体或 TTF 字体。国内机械图纸常用
gbcbig.shx(仿宋)和gbenor.shx(西文),映射到这两个基本不会出问题。 - 如果下游用的是 TTF 字体(比如宋体),就在映射里指定
simsun.ttc或simfang.ttf。
注意:映射文件里字体名要写 AutoCAD 能识别的字体文件名,不是字体显示名。比如“仿宋”要写simfang.ttf或gbcbig.shx,写“仿宋”两个字没用。
2.4 线型映射:虚线变实线的坑
Solidworks 里的隐藏边导出后变成实线,通常是线型映射没配。DWG 的线型是靠acad.lin或acadiso.lin定义的,Solidworks 导出时如果没指定线型文件,隐藏边可能就按默认实线走。
常见做法是:在导出选项里指定线型映射,把“隐藏边”映射到HIDDEN或DASHED线型。如果下游图纸标准用的是自定义线型,就把自定义线型文件放到 AutoCAD 支持路径下,映射文件里写对应的线型名。
这里有个细节:Solidworks 导出 DWG 时,线型比例可能和 AutoCAD 默认比例不一致,导致虚线看起来像实线。解决办法是在导出选项里设置“线型比例”,或者在 AutoCAD 里用LTSCALE命令统一调整。
3. 手动导出一次能用的 DWG:从另存为到映射文件配置的完整步骤
3.1 打开导出选项,别直接点保存
在 Solidworks 里打开工程图,点“文件 → 另存为”,文件类型选 DWG(*.dwg),然后不要直接点“保存”,先点右下角的“选项”按钮。这个选项对话框才是决定导出质量的地方。
对话框里几个关键页签:
- “常规”:设置导出比例、是否导出图纸格式、是否导出注解。
- “图层”:指定映射文件,或者手动编辑映射。
- “线型”:指定线型映射。
- “字体”:指定字体映射。
- “注解”:控制尺寸、公差、注释的导出方式。
我一般会先把“常规”里的“导出比例”设为 1:1,除非下游明确要求按比例缩放。“导出图纸格式”勾上,这样标题栏和边框会一起导出。
3.2 配置映射文件:从默认到自定义
在“图层”页签里,点“映射文件”旁边的浏览按钮,选一个映射文件。Solidworks 自带几个默认映射文件,但国内用的话,建议自己改一个。
映射文件本质是一个文本文件,格式大致是:
[Layer Mapping] Visible Edges=轮廓线 Hidden Edges=虚线 Tangent Edges=细实线 Dimensions=标注 Section Lines=剖面 Notes=文字实际格式可能更复杂,但逻辑就是这个。你可以用记事本打开默认映射文件,另存为自己的,然后按公司标准改。
改完后,在导出选项里加载这个自定义映射文件。加载后,对话框里会显示映射结果,可以逐项检查。
3.3 字体映射的具体设置
在“字体”页签里,把 Solidworks 字体映射到 AutoCAD 字体。常见映射:
| Solidworks 字体 | AutoCAD 字体 | 说明 |
|---|---|---|
| 仿宋 | gbcbig.shx | 国内机械图常用 |
| 宋体 | simsun.ttc | TTF 字体 |
| Arial | gbenor.shx | 西文字体 |
| Times New Roman | times.ttf | 可选 |
如果映射文件里没列出的字体,导出时会用默认字体,通常就是问号。所以最好把工程图里用到的字体都列进去。
3.4 导出后的检查清单
导出 DWG 后,用 AutoCAD 打开,按这个清单检查:
- 图层是否按映射分配,有没有全在 0 层。
- 文字是否正常显示,有没有问号。
- 虚线是否显示为虚线,线型比例是否合适。
- 尺寸标注是否可编辑,标注样式是否正常。
- 标题栏和边框是否完整。
- 剖视图和局部视图位置是否正确。
如果某一项不对,回到 Solidworks 改映射,重新导出。这个循环跑几次,就能把映射表调稳。
4. 用 VBA 批量转 DWG:几十张工程图一次跑完的脚本与参数
4.1 为什么用 VBA 而不是手动一张张导
手动导出适合调映射阶段,但一旦映射表定下来,批量导出就是刚需。比如一个项目几十张工程图,一张张另存为太慢,而且容易漏。Solidworks 支持 VBA 宏,可以遍历文件夹里的.slddrw文件,批量导出 DWG。
热搜里 VBA 出现频率很高,说明很多人已经在用 VBA 做 Solidworks 二次开发。批量转 DWG 是 VBA 在 Solidworks 里最实用的场景之一。
4.2 批量导出脚本的核心逻辑
下面是一个批量导出 DWG 的 VBA 脚本框架,逻辑是:遍历指定文件夹里的所有.slddrw文件,逐个打开,按指定映射导出 DWG,然后关闭。
' Solidworks 批量导出 DWG 宏 ' 遍历文件夹,将 .slddrw 导出为 .dwg Dim swApp As Object Dim swModel As Object Dim swExport As Object Dim swDraw As Object Dim fileName As String Dim folderPath As String Dim exportPath As String Dim fileExt As String Sub main() Set swApp = Application.SldWorks folderPath = "D:\Projects\Drawings\" ' 工程图所在文件夹 exportPath = "D:\Projects\DWG\" ' 导出目标文件夹 fileName = Dir(folderPath & "*.slddrw") Do While fileName <> "" ' 打开工程图,只读模式加快速度 Set swModel = swApp.OpenDoc6(folderPath & fileName, 3, 1, "", 0, 0) If Not swModel Is Nothing Then ' 设置导出选项,加载映射文件 Set swExport = swModel ' 导出 DWG,参数:目标路径、映射文件、输出选项 swModel.Extension.SaveAs exportPath & Replace(fileName, ".slddrw", ".dwg"), 0, 1, Nothing, 0, 0 ' 关闭工程图,不保存 swApp.CloseDoc swModel.GetTitle End If fileName = Dir Loop MsgBox "批量导出完成" End Sub这段代码的关键点:
OpenDoc6的第二个参数3表示工程图类型,1表示只读模式,加快打开速度。SaveAs的第二个参数0表示 DWG 格式,具体值可能因 Solidworks 版本不同而有差异,需要查对应版本的 API 文档。- 映射文件需要在
SaveAs之前通过导出选项设置,或者用swExport对象单独配置。
实际使用时,映射文件的加载方式可能需要在SaveAs前调用swModel.Extension.SetUserPreference或类似接口。不同版本 API 有差异,建议先用录制宏的方式生成基础代码,再改成批量循环。
4.3 参数怎么调:导出选项的 API 对应
在 VBA 里控制导出选项,主要靠swExport相关接口。常见参数:
| 参数 | 含义 | 常用值 |
|---|---|---|
| ExportFormat | 导出格式 | DWG/DXF |
| MappingFile | 映射文件路径 | 自定义 .ini |
| ExportAnnotations | 是否导出注解 | True |
| ExportSheetFormat | 是否导出图纸格式 | True |
| ExportScale | 导出比例 | 1:1 |
| LineStyleFile | 线型文件 | acadiso.lin |
这些参数在 API 里可能对应不同的方法或属性,具体要看 Solidworks 版本。我一般会先用“录制宏”功能,手动导出一次,看录下来的代码里怎么设置这些参数,然后改成循环。
4.4 批量导出的性能与稳定性
批量导出几十张图时,注意几点:
- 用只读模式打开,减少内存占用。
- 每导出一张后关闭文档,避免内存泄漏。
- 如果某张图导出失败,记录文件名,继续下一张,不要中断整个循环。
- 导出前确保目标文件夹存在,否则
SaveAs会报错。
如果图纸特别多(上百张),可以考虑分批跑,或者用 Solidworks Task Scheduler(如果版本支持)。但 VBA 的好处是灵活,可以按自己的规则筛选文件、命名、分类。
5. 避坑与排查:转换后图纸出问题的 5 个高频场景
5.1 现象:DWG 打开后文字全是问号
原因:字体映射没配,或者映射文件里字体名写错。AutoCAD 找不到对应字体,用默认字体替代,显示为问号。
解决:在导出选项的“字体”页签里,把工程图用到的字体逐个映射到 AutoCAD 字体。国内图纸优先映射到gbcbig.shx和gbenor.shx。如果下游用 TTF,映射到simfang.ttf或simsun.ttc。映射文件里字体名要写文件名,不是显示名。
5.2 现象:所有线条都在 0 层,没法关图层
原因:图层映射文件没加载,或者映射文件里没定义对应类别。Solidworks 导出时,未映射的对象默认落到 0 层。
解决:在导出选项里加载自定义映射文件,确保每个对象类别都有对应图层。导出后检查图层分配,如果还有遗漏,补充映射文件后重新导出。
5.3 现象:虚线显示为实线
原因:线型映射没配,或者线型比例不对。Solidworks 导出时隐藏边没映射到虚线线型,或者 AutoCAD 的LTSCALE值太大/太小,导致虚线看起来像实线。
解决:在导出选项里指定线型映射,把隐藏边映射到HIDDEN或DASHED。导出后在 AutoCAD 里用LTSCALE调整线型比例,通常设为 0.5 到 2 之间,具体看图纸尺寸。
5.4 现象:尺寸标注变成炸开的线条,不能编辑
原因:导出时注解没有作为标注对象导出,而是被炸开成线条和文字。这通常是因为导出选项里“注解”设置不对,或者映射文件里尺寸标注没有映射到标注样式。
解决:在导出选项的“注解”页签里,确保“导出注解”勾选,并且尺寸标注映射到 DWG 的标注样式。如果还是炸开,检查 Solidworks 工程图里的尺寸是不是用“输入尺寸”而非“参考尺寸”,输入尺寸导出时可能被炸开。
5.5 现象:批量导出时程序崩溃或卡死
原因:内存泄漏、文件句柄未释放、某张图纸损坏。Solidworks 批量打开文档时,如果不及时关闭,内存会持续增长,最终崩溃。
解决:每导出一张后调用CloseDoc关闭文档,并释放对象引用(Set swModel = Nothing)。如果某张图导致崩溃,先单独打开检查,修复后再批量跑。另外,确保 Solidworks 版本和 VBA 环境稳定,避免在导出过程中进行其他操作。
6. 进阶:用映射文件模板 + 脚本参数化,把转换做成可复用的出图流水线
前面讲的是一次性配置和批量脚本,但真正省事的做法是把映射文件模板化和脚本参数化,让不同项目、不同标准都能快速切换。
我自己的习惯是维护一套映射文件模板,按图层标准分类:国标模板、企标模板、供应商专用模板。每个模板对应一个.ini映射文件,放在固定目录。VBA 脚本里加一个参数,指定用哪个模板,导出时自动加载对应映射文件。
具体做法:
' 根据项目参数选择映射文件 Dim mappingFile As String Select Case projectStandard Case "GB" mappingFile = "D:\Mappings\GB_Mapping.ini" Case "Company" mappingFile = "D:\Mappings\Company_Mapping.ini" Case Else mappingFile = "D:\Mappings\Default_Mapping.ini" End Select ' 在 SaveAs 前加载 mappingFile这样切换项目时,只需要改一个参数,不用重新配置导出选项。
另一个技巧是导出后自动检查。在 VBA 里加一段逻辑,导出 DWG 后用 AutoCAD 的 COM 接口打开,检查图层数量、文字是否正常、线型是否正确。如果检查不通过,记录日志并标记该文件需要人工复查。这样批量导出后,不用一张张打开看,直接看日志就知道哪些有问题。
验证方法:拿一张典型工程图,用不同映射模板各导一次,对比 DWG 的图层、字体、线型、标注。选最符合下游要求的模板作为默认。然后跑一次批量导出,检查日志,确认没有异常。
我踩过的最大坑是:映射文件改好后没有备份,换电脑后丢了,重新配了一遍。所以现在映射文件和脚本都放在版本控制里,改之前先提交,改坏了能回滚。这个习惯帮我省了不少后悔药。
希望帮到你。
本文还有配套的精品资源,点击获取