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

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐