OpenClaw 调用 SolidWorks 画图指南

1. 概述

本文档介绍如何通过 OpenClaw (Python) 调用 SolidWorks 进行自动化绘图。

当前状态:

  • ✅ 可以连接 SolidWorks
  • ✅ 可以创建草图、绘制圆
  • ⚠️ 拉伸(Extrusion)功能存在 API 调用问题

2. 环境准备

2.1 安装依赖

pip install pywin32

2.2 检查 SolidWorks

确认已安装 SolidWorks,版本信息:

  • 本机版本:SolidWorks 2024 (v32.3.1)
  • 模板路径:C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\templates\part.prtdot

3. Python 连接 SolidWorks

3.1 基本连接代码

import win32com.client
import pythoncom
import time

# 初始化 COM
pythoncom.CoInitialize()

# 连接 SolidWorks
sw = win32com.client.Dispatch('SldWorks.Application')
sw.Visible = True

# 获取活动文档
doc = sw.ActiveDoc
print('Connected! Document:', doc.GetTitle if doc else 'None')

3.2 完整示例代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
SolidWorks API Python 操作示例
"""

import win32com.client
import pythoncom
import time

def connect_solidworks():
    """连接 SolidWorks"""
    pythoncom.CoInitialize()
    sw = win32com.client.Dispatch('SldWorks.Application')
    sw.Visible = True
    return sw

def main():
    print('=== SolidWorks Python API Demo ===')
    
    # 连接
    sw = connect_solidworks()
    print(f'Connected to SolidWorks')
    
    # 获取活动文档
    doc = sw.ActiveDoc
    if not doc:
        print('No active document - please create one first')
        return
    
    print('Document:', doc.GetTitle)
    
    # ====== 基本操作 ======
    
    # 1. 开始草图
    doc.SketchManager.InsertSketch(True)
    
    # 2. 绘制圆 (圆心x, y, z, 圆周x, y, z)
    doc.SketchManager.CreateCircle(0, 0, 0, 0.03, 0, 0)  # 30mm半径
    
    # 3. 退出草图
    doc.InsertSketch2(False)
    
    print('Circle created')
    
    # 4. 拉伸 (当前存在问题,显示不出实体)
    doc.FeatureManager.FeatureExtrusion(
        True,   # bool 方向1
        False,  # bool 方向2
        False,  # bool 封口
        0,      # int 草图穿透
        0,      # int 拉伸方向
        0.04,   # double 深度 (40mm)
        0.001,  # double 拔模角度
        False, False, False, False,  # 薄壁参数
        0, 0, 0, 0, 0, 0, 0, 0,  # 扩展参数
        False   # bool 合并结果
    )
    
    print('Extrusion attempted')
    
    # 5. 重建视图
    doc.ForceRebuild3(True)
    doc.ViewZoomtofit2()
    
    print('Done!')

if __name__ == '__main__':
    main()

4. 可用 API 方法

4.1 SketchManager 方法

方法说明
InsertSketch(True)开始草图
CreateCircle(x1, y1, z1, x2, y2, z2)画圆
CreateLine(...)画直线
CreateRectangle(...)画矩形
CreateArc(...)画圆弧
InsertSketch2(False)退出草图

4.2 FeatureManager 方法

方法说明状态
FeatureExtrusion(...)拉伸凸台⚠️ 有问题
FeatureCut(...)拉伸切除⚠️ 有问题
FeatureRevolve(...)旋转未测试
FeatureFillet(...)圆角未测试
FeatureChamfer(...)倒角未测试

4.3 ModelDoc 常用方法

方法说明
GetTitle获取文档标题
ClearSelection2(True)清除选择
ForceRebuild3(True)重建模型
ViewZoomtofit2()缩放到适合

5. VBA 宏方法(推荐)

当 Python API 不稳定时,使用 SolidWorks VBA 宏是更可靠的选择。

5.1 创建 VBA 宏步骤

  1. 在 SolidWorks 中按 Alt + F8 打开宏
  2. 点击"新建"创建新宏
  3. 粘贴代码
  4. F5 运行

5.2 VBA 示例代码

Sub CreateWaterCup()
    Dim swApp As Object
    Dim Part As Object
    Dim boolstatus As Boolean
    
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    
    ' 1. 创建杯身
    boolstatus = Part.SelectByID2("Top Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    Part.SketchManager.InsertSketch True
    Part.SketchManager.CreateCircle 0, 0, 0, 0.03, 0, 0
    Part.InsertSketch2 True
    Part.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, _
        0.04, 0.001, False, False, False, False, _
        0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0, 0, True, 0
    
    ' 2. 创建底部切除
    boolstatus = Part.SelectByID2("Face@4", "FACE", 0, 0, 0.04, False, 0, Nothing, 0)
    Part.SketchManager.InsertSketch True
    Part.SketchManager.CreateCircle 0, 0, 0, 0.028, 0, 0
    Part.InsertSketch2 True
    Part.FeatureManager.FeatureCut2 True, False, False, 0, 0, _
        0.038, 0.001, False, False, False, False, _
        0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0, 0, True, 0
    
    Part.ForceRebuild3 True
    Part.ViewZoomtofit2
    
    MsgBox "水杯创建完成!" & vbCrLf & "高度: 40mm" & vbCrLf & "壁厚: 2mm"
End Sub

5.3 VBA 文件位置

已保存到:

  • C:\Cadence\16_6\Cadence\SPB_Data\.openclaw\workspace\cup.vbs
  • C:\Cadence\16_6\Cadence\SPB_Data\.openclaw\workspace\create_cup.vba

6. 已知问题

6.1 Python API 拉伸问题

问题描述: 使用 FeatureManager.FeatureExtrusion() 方法时,代码执行不报错,但 SolidWorks 中不显示实体。

可能原因:

  1. win32com 与 SolidWorks 2024 API 兼容性问题
  2. 参数传递方式不正确
  3. COM 接口调用方式差异

临时解决方案:

  • 使用 VBA 宏代替 Python
  • 或手动在 SolidWorks 中操作

6.2 错误排查

# 检查连接
doc = sw.ActiveDoc
if doc:
    print('Connected:', doc.GetTitle)
else:
    print('No document')

# 检查 SketchManager
skm = doc.SketchManager
print('SketchManager:', skm)

# 检查 FeatureManager  
fm = doc.FeatureManager
print('FeatureManager:', fm)

7. VBS 脚本方法

7.1 VBS 代码

' 创建水杯 - 双击运行
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True

WScript.Sleep 2000

Set Part = swApp.ActiveDoc
If Part Is Nothing Then
    WScript.Echo "请先在SolidWorks中打开一个零件文件"
    WScript.Quit
End If

' 步骤1: 创建杯身
Part.SelectByID2 "Top Plane", "PLANE", 0, 0, 0, False, 0, 0
Part.SketchManager.InsertSketch True
Part.SketchManager.CreateCircle 0, 0, 0, 0.03, 0, 0
Part.InsertSketch2 True
Part.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, 0.04, 0.001, False, False, False, False, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0, 0, True, 0

WScript.Sleep 500

' 步骤2: 创建底部
Part.SelectByID2 "Face@4", "FACE", 0, 0, 0.04, False, 0, 0
Part.SketchManager.InsertSketch True
Part.SketchManager.CreateCircle 0, 0, 0, 0.028, 0, 0
Part.InsertSketch2 True
Part.FeatureManager.FeatureCut2 True, False, False, 0, 0, 0.038, 0.001, False, False, False, False, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0, 0, True, 0

Part.ForceRebuild3 True
Part.ViewZoomtofit2

WScript.Echo "完成! 水杯已创建"

7.2 运行方式

cscript create_cup.vbs

8. 扩展阅读


9. 总结

方法优点缺点
Python + win32com自动化程度高API 兼容性问题
VBA 宏稳定可靠需要手动操作
VBS 脚本可双击运行功能有限

建议: 对于重要操作使用 VBA 宏,Python 用于快速测试和简单操作。


文档创建时间: 2026-03-01
作者: OpenClaw AI Assistant

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐