用 Python + OpenCascade 自动生成 3D CAD 模型,并导出 SolidWorks 可打开的 STEP 文件
先说结论
这套流程的核心不是“直接手写 .SLDPRT”,而是:
- 用 Python 调 OpenCascade 建几何
- 导出 STEP
- 用 SolidWorks 打开 STEP
- 需要原生零件时,再在 SolidWorks 里另存为 SLDPRT
SLDPRT/SLDASM 是 SolidWorks 专有格式,最稳的工程路径还是 STEP -> SolidWorks。
一、环境准备
系统环境:
- Windows
- Python 3.12
- SolidWorks
项目目录我实际用的是:
- D:\solidworks\project\vscode\solidworks_ai_demo
二、依赖安装
一开始直接装 cadquery-ocp 很容易慢、超时、哈希报错,所以最终稳定方案是:
先装 OCP:
python -m pip install --user OCP
再用清华镜像装 cadquery-ocp:
python -m pip install --user --no-cache-dir --retries 50 --timeout 600 -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn cadquery-ocp
为什么要这两个都装:
- cadquery-ocp 提供 OCC 运行时依赖和 dll
- OCP 提供底层 pyd 二进制模块
三、为什么还要写一层兼容代码
安装后直接 import OCP 在这台机器上并不稳定,原因是包结构和模块路径有坑。
所以我在脚本里统一加了一个启动函数 ensure_ocp_available(),做三件事:
- 定位用户目录里的 ocp/OCP*.pyd
- 手动把 cadquery_ocp.libs 和 vtk.libs 加进 dll 搜索路径
- 动态构造 OCP 包,让后续代码可以正常 from OCP import ...
也就是说,这套脚本不是只在我这次会话里能跑,而是把运行时兼容逻辑也一起封进去了。
你可以看实际脚本,比如:
- rc_plane_ultra_detail_step_export.py
- detailed_castle_step_export.py
四、建模的核心思路
整个流程本质上就是 CAD 布尔建模。
常用模块:
- BRepPrimAPI
用来创建基础体,比如圆柱、圆锥、盒子 - BRepBuilderAPI
用来做多边形、拉伸、变换 - BRepAlgoAPI
用来做 Fuse 和 Cut - STEPControl
用来导出 STEP
最核心的几个操作:
- 先造基础体
BRepPrimAPI.BRepPrimAPI_MakeBox(...) BRepPrimAPI.BRepPrimAPI_MakeCylinder(...) BRepPrimAPI.BRepPrimAPI_MakeCone(...)
- 再做布尔运算
BRepAlgoAPI.BRepAlgoAPI_Fuse(base, tool).Shape() BRepAlgoAPI.BRepAlgoAPI_Cut(base, tool).Shape()
- 草图轮廓拉伸
polygon = BRepBuilderAPI.BRepBuilderAPI_MakePolygon() face = BRepBuilderAPI.BRepBuilderAPI_MakeFace(polygon.Wire()).Face() shape = BRepPrimAPI.BRepPrimAPI_MakePrism(face, gp.gp_Vec(...)).Shape()
- 最后导出 STEP
writer = STEPControl.STEPControl_Writer() writer.Transfer(shape, STEPControl.STEPControl_AsIs) writer.Write("model.step")
五、我这次实际做了哪些模型
已经生成的文件包括:
- 法兰盘
- flange_demo.step
- 概念航模
- rc_plane_concept.step
- 高细节航模
- rc_plane_ultra_detail.step
- 高细节城堡
- detailed_castle.step
对应导出脚本也都在同目录里。
六、以“高细节航模”为例,它是怎么堆出来的
不是一句提示词直接变模型,而是拆成可控几何部件:
- 机身
用多段圆柱和圆锥拼接,再切底部、加背脊和腹部整流 - 舱盖
独立生成透明罩形体和舱盖框 - 发动机区
加螺旋桨、桨毂、进气口、排气口 - 主翼
左右翼分开建,再补中翼和翼根整流 - 尾翼
水平尾翼、垂尾、舵面缝单独处理 - 起落架
主起落架、轮子、轮罩、尾轮单独做 - 附件
检修盖、天线、小整流件
这样做的优点:
- 稳定
- 细节可控
- 容易继续加细节
- 导出 STEP 成功率高
七、脚本如何运行
直接运行对应脚本即可:
python D:\solidworks\project\vscode\solidworks_ai_demo\rc_plane_ultra_detail_step_export.py
运行完成后,会在脚本同目录生成:
rc_plane_ultra_detail.step
城堡同理:
python D:\solidworks\project\vscode\solidworks_ai_demo\detailed_castle_step_export.py
八、如何导入 SolidWorks
- 打开 SolidWorks
- 文件 -> 打开
- 选择 .step
- 导入后检查实体
- 如需要,另存为 -> SLDPRT
注意:
- STEP 导入后通常是几何体,不是原生特征树
- 如果你要参数化特征树,最好直接走 SolidWorks API 或宏
九、部署中踩过的坑
-
pip 下载超慢
解决:换清华镜像 -
cadquery-ocp 下载超时
解决:加 --timeout 600 --retries 50 -
hash mismatch
解决:加 --no-cache-dir -
ModuleNotFoundError: OCP
解决:不要只靠裸 import OCP,用脚本里的 ensure_ocp_available() -
Windows 中文路径在 PowerShell 里偶尔编码翻车
解决:涉及复制和路径处理时,用 Python 处理更稳
十、这套方案适合做什么
适合:
- 机械零件
- 建筑体块和细节体
- 航模、载具、概念工业模型
- 参数化规则明显的 CAD 模型
不适合直接一步到位做:
- 可编辑的原生 SLDPRT 特征树
- 影视级贴图材质模型
- 复杂自由曲面角色模型
十一、最终建议
如果你的目标是“让 AI 帮你生成 SolidWorks 模型”,最实用的路线是:
- 简单机械件:直接生成 STEP
- 要原生零件:STEP 导入后另存 SLDPRT
- 要参数化:生成 SolidWorks 宏/API
- 要复杂模型:先拆构件,再布尔建模,不要指望一句话直接出完美高模
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)