在非标自动化项目中,设计评审和项目收尾阶段,工程师常被一项极其枯燥的“体力活”所困:手动批量处理工程图纸。典型场景是,项目结束时,需要将数百张 SolidWorks 工程图或 AutoCAD 的 DWG 文件,逐一打开并另存为 PDF 或特定版本的 DWG,用于发外加工或客户归档。这个过程不仅耗时数小时,而且重复操作极易出错。

本文将分享一个基于 SolidWorks API 的实战自动化解决方案,其核心思路同样适用于 Creo 或 AutoCAD。我们将使用 Python 作为粘合剂,因为它语法简洁、生态丰富,非常适合快速构建此类效率工具。

痛点剖析:为什么必须自动化?

假设一个中型设备项目,包含 200 张工程图。手动操作流程如下:

  1. 打开 SolidWorks → 打开图纸 A → 另存为 PDF → 关闭。
  2. 重复步骤 1, 199 次。
  3. 过程中可能遇到图纸报错、软件卡顿,需要人工干预。

工程师成本:按每张图 1 分钟计,需 200 分钟,超过 3 小时。这消耗的是资深机械工程师的宝贵时间,其机会成本极高。质量风险:人工操作可能遗漏、覆盖错误文件。

技术选型:API 与 Python 接口原理

API (Application Programming Interface) 是软件预留的“控制通道”,允许外部程序指令软件执行特定操作,如打开文件、保存、修改尺寸等。

  • SolidWorks API: 一个庞大的 COM(组件对象模型)接口库。我们可以通过早期绑定(如 Python 的 win32com 库)来调用这些接口。
  • Python 接口 (pywin32 / win32com): win32com.client.Dispatch() 方法可以启动并获取 SolidWorks 的应用对象,从而完全控制软件。

关键逻辑:脚本模拟了人工操作的所有步骤,但以毫秒级速度执行,且不知疲倦。

核心实战代码:批量导出 PDF

以下代码片段展示了如何使用 Python 遍历文件夹,驱动 SolidWorks 批量将工程图(.slddrw)导出为 PDF。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import os
import win32com.client
import pythoncom

def batch_export_drawings_to_pdf(folder_path, output_folder):
"""
批量将指定文件夹内的 SolidWorks 工程图导出为 PDF。
:param folder_path: 包含 .slddrw 文件的根目录
:param output_folder: PDF 输出目录
"""
# 确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)

# 启动或连接到 SolidWorks 应用程序
sw_app = win32com.client.Dispatch("SldWorks.Application")
sw_app.Visible = False # 后台运行,不显示界面(速度更快)

# 遍历文件夹
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.lower().endswith('.slddrw'):
drawing_path = os.path.join(root, file)
try:
# 打开工程图文档
sw_doc = sw_app.OpenDoc(drawing_path, 3) # 3 代表工程图类型
if sw_doc is not None:
# 构建输出 PDF 路径
pdf_name = os.path.splitext(file)[0] + '.pdf'
pdf_path = os.path.join(output_folder, pdf_name)

# 核心:调用 SaveAs 方法导出为 PDF
# 参数说明: (文件名, 版本号, 选项, 错误信息)
# 版本号 0 通常表示当前版本,选项 0 表示使用默认设置
sw_doc.SaveAs(pdf_path, 0, 0, None)

print(f"成功导出: {file} -> {pdf_name}")
# 关闭文档,不保存更改
sw_app.CloseDoc(drawing_path)
else:
print(f"警告:无法打开文件 {file}")
except Exception as e:
print(f"处理文件 {file} 时出错: {e}")

# 退出 SolidWorks
sw_app.ExitApp()
print("批量导出任务完成。")

# 使用示例
if __name__ == "__main__":
source_dir = r"D:\Project_XYZ\Drawings" # 你的工程图文件夹路径
output_dir = r"D:\Project_XYZ\PDF_Output"
batch_export_drawings_to_pdf(source_dir, output_dir)

代码要点解析

  1. sw_app.Visible = False:设置软件后台运行,大幅提升处理速度,且不影响前端工作。
  2. OpenDoc(drawing_path, 3):以工程图模式打开文件。1 为零件,2 为装配体。
  3. SaveAs(pdf_path, 0, 0, None):执行另存为操作。对于 AutoCAD,类似的方法是 Document.SaveAsExport 到特定格式。
  4. 错误处理try-except 块至关重要,能确保单个文件出错时,整个流程不会中断。

对于 AutoCAD,思路完全一致,核心对象是 AutoCAD.Application,通过 acadDoc = acadApp.Documents.Open(dwg_path) 打开文件,再使用 acadDoc.ExportacadDoc.SaveAs 方法。

结论:将工程师从“操作员”角色中解放

通过约 50 行代码,我们构建了一个可靠的“数字劳动力”。它将原本需要数小时、高度重复的体力劳动,压缩为几分钟的自动执行任务,且保证 100% 的一致性。

这不仅是效率的提升,更是工程师角色的升级。机械工程师的核心价值在于设计、创新和解决复杂的工程问题,而非充当软件的“人肉点击器”。掌握基础的 API 自动化能力,是当代工程师将自身经验与数字化工具结合,从而构建强大竞争优势的典型体现。你可以将此脚本扩展为更复杂的工具,例如:自动更新图纸属性、批量打印、或与 PDM/ERP 系统交互,真正实现设计流程的端到端自动化。