# sldprt_to_stl_converter.py import os import tkinter as tk from tkinter import filedialog, messagebox import win32com.client import sys def convert_sldprt_to_stl(sldprt_path, stl_path): """ 使用 SolidWorks API 将 .SLDPRT 文件转换为 .STL 文件 :param sldprt_path: 输入的 SLDPRT 文件路径 :param stl_path: 输出的 STL 文件路径 :return: 是否成功 """ try: # 检查输入文件是否存在 if not os.path.isfile(sldprt_path): raise FileNotFoundError(f"找不到文件: {sldprt_path}") # 启动 SolidWorks 应用(不显示界面) swApp = win32com.client.Dispatch("SldWorks.Application") if not swApp: raise RuntimeError("无法启动 SolidWorks。请确保已安装并注册。") # 打开 SLDPRT 文件(类型 1 = swDocumentTypes_e.swDocPART) errors = 0 warnings = 0 part = swApp.OpenDoc6(sldprt_path, 1, 0, "", errors, warnings) if not part: raise RuntimeError("SolidWorks 无法打开该文件。可能是格式不兼容或损坏。") # 设置保存选项(STL 选项) # 0 = 默认精度,1 = 快速,2 = 高精度 save_options = 0 # 可改为 2 提高 STL 精度 export_options = 0 # 保存为 STL result = part.SaveAs3(stl_path, save_options, export_options) # 关闭文档(不保存更改) swApp.CloseDoc(os.path.basename(sldprt_path)) if result != 0: return True, f"成功导出到: {stl_path}" else: return False, "SolidWorks 保存失败,可能是权限或路径问题。" except Exception as e: return False, f"转换失败: {str(e)}" def select_and_convert(): """选择文件并执行转换""" # 选择输入文件 sldprt_path = filedialog.askopenfilename( title="选择 .SLDPRT 文件", filetypes=[("SolidWorks Part Files", "*.SLDPRT"), ("All Files", "*.*")] ) if not sldprt_path: return # 用户取消 # 设置输出 STL 路径(默认同名,同目录) directory = os.path.dirname(sldprt_path) filename = os.path.splitext(os.path.basename(sldprt_path))[0] stl_path = os.path.join(directory, f"{filename}.STL") # 询问是否覆盖 if os.path.exists(stl_path): if not messagebox.askyesno("覆盖确认", f"{stl_path} 已存在,是否覆盖?"): return # 执行转换 success, message = convert_sldprt_to_stl(sldprt_path, stl_path) # 显示结果 if success: messagebox.showinfo("成功", message) else: messagebox.showerror("失败", message) def main(): """主函数:创建 GUI 界面""" root = tk.Tk() root.title("SLDPRT 转 STL 转换器") root.geometry("400x200") root.resizable(False, False) # 标题标签 label = tk.Label( root, text="SolidWorks SLDPRT 转 STL", font=("SimHei", 14, "bold"), pady=20 ) label.pack() # 说明 info = tk.Label( root, text="点击下方按钮选择 .SLDPRT 文件进行转换", font=("微软雅黑", 10), fg="gray" ) info.pack() # 转换按钮 convert_btn = tk.Button( root, text="选择文件并转换", font=("微软雅黑", 12), bg="#4CAF50", fg="white", padx=20, pady=10, command=select_and_convert ) convert_btn.pack(pady=20) # 启动主循环 root.mainloop() if __name__ == "__main__": # 检查是否安装了 pywin32 try: import win32com.client except ImportError: messagebox.showerror( "缺少依赖", "请先安装 pywin32:\n\npip install pywin32" ) sys.exit(1) main()