SolidCraft 项目解析:纯 Rust 写的开源参数化 3D CAD,桌面、浏览器、MCP 三端同引擎

SolidCraft 项目解析:纯 Rust 写的开源参数化 3D CAD,桌面、浏览器、MCP 三端同引擎

2周前
duguying
23 阅读
来源:GitHub

SolidCraft 用纯 Rust 实现参数化 CAD 全流程:自研约束求解器、水密显示网格与特征时间线,改一个参数整条链路重建;同一引擎跑桌面、浏览器与 MCP,AI Agent 可直接建模。开源十二天即获 5800+ star,最新版本 v0.16.2。

相关标签

#SolidCraft#Rust#CAD#3D建模#开源#MCP#参数化

项目概览

SolidCraft 是一个用纯 Rust 写的开源参数化 3D CAD:草图、约束、拉伸、圆角、抽壳、装配,改一个尺寸就看整个特征时间线重建。它同时提供桌面应用(egui + wgpu)、浏览器版本(WebGPU,可退回 WebGL2)和一套 MCP 服务器——AI Agent 可以直接建模、测量、截图。

仓库建于 2026 年 10 月 7 日,十二天时间已累积 5,815 star / 674 fork,最新发布版本 v0.16.2(2026-10-19,补丁版,修透视视图下绕拾取点旋转会漂移的问题)。README 对自身状态的描述很克制:“early but usable for simple parts”——76 个公开参考零件里有 75 个的解析解或 FreeCAD 计算值在体积、面积、质心、包围盒上完全对上,剩下一个是已记录的 bug。

它解决什么问题

参数化 CAD 长期是商业软件的领地,开源方案要么历史包袱重,要么是脚本层套在别人内核上。SolidCraft 走的是另一条路:自己的约束求解器 + 自己的显示网格生成器 + 自己的 iOS 式分层 crate 架构,几何内核边界用 truck,其余全自研,浏览器里跑的是同一套引擎编译成 WebAssembly。

它想解决的核心体验是改一个数,整条链路跟着重建:草图里的尺寸可以挂参数表达式(2 * width + 5 mm、angle / 2),参数一改,特征时间线增量重算,模型自己生长。README 的演示就是拿树莓派 4 的外壳做例子——从空设计开始画带参数的草图、拉伸、圆角、抽壳,M2.5 铜柱按板子的 58 × 49 mm 孔位矩形阵列,再开端口、开散热槽、刻 “Pi 4” 字样、指定 PETG 材料看质量,最后把高度从 24 改成 32 mm,全部重算。

核心机制

草图与约束:原点平面、偏移平面或实体平面上画线、矩形、圆、弧、多边形、槽、椭圆、样条、圆锥曲线和文字;约束由自研求解器处理——约束能确定相对已知几何的点直接按构造法精确放置(轨迹求交 + 刚性簇分解,参考文献是 Owen 1991 与 Fudos–Hoffmann 1997),剩下的交给 Levenberg–Marquardt,其雅可比矩阵的秩给出剩余自由度。过约束的编辑会被拒绝,完全约束的几何变黑。拖拽时每帧求解草图,松手才重建一次模型。

一切都是命令:引擎层是一个命令注册表,UI、脚本、CLI、MCP 用的是同一批命令。一个脚本就是 JSON 命令列表:

{"commands": [
  {"command": "sketch.create", "params": {"plane": "XY"}},
  {"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [40, 30]}},
  {"command": "solid.extrude", "params": {"distance": 20}},
  {"command": "solid.fillet", "params": {"edges": [[0, 0, 10]], "radius": 3}}
]}

显示网格不是黑箱:每个面被规划成一张 (u, v) 点与三角形的方案,边缘节点与相邻面共享,所以网格是水密的;被裁剪的面切成四边面片(孔洞周围是方块、圆面是”蝴蝶”、凹角处跑摩托车轨迹,参考 Lyon et al. 2019),每片按 Coons 网格细化。整场景的规划用 compute shader 一次派发评估,GPU 建不起来时回退 CPU。78 个参考体的规划与评估约 65 ms,比上一代网格器快 50–65 倍。

与同类方案的区别

维度 Fusion 360 FreeCAD SolidCraft
授权 商业、订阅制、云端 开源(LGPL) MIT 或 Apache-2.0 双许可
实现 商业闭源内核 C++ / Python,几何内核 OpenCASCADE 纯 Rust,自研求解器与网格器,内核边界 truck
形态 桌面 + 云 桌面 桌面 + 浏览器(同一引擎编到 WASM)+ 无头 CLI
自动化 脚本 / API Python 宏 命令注册表 + JSON 脚本 + MCP 服务器
成熟度 生产级 多年积累,功能广 early but usable for simple parts

SolidCraft 明确声明与 Autodesk 无任何关联,行为只从公开文档、通用 CAD 惯例和用户反馈中设计(clean-room 规则)。

设计取舍

  • 水密优先于快:宁可花力气做共享边缘节点的网格规划,也不出一堆”看着像实体、其实是散面片”的三角汤——因为后面 STEP 导出、布尔、测量都建立在这个基础上。
  • 命令优先于 GUI:UI 只是命令注册表的一个前端。好处是自动化天然完整(Agent 能做的和你能点的一样多),代价是 UI 层必须把交互状态也建模成命令。
  • 诚实的自评:README 不吹”完全等价”,只报 75⁄76 的参考零件对得上,并明确写”这些检查不构成完整的几何或工作流等价”。已知限制放在 ROADMAP 里,1,140 个 open issue 摆在明面上。

技术栈与边界

分层架构按 crate 划死(cargo xtask ci 里的 layers 检查会把关):

层 crates 职责
L0 geom 向量、平面、轮廓、网格与度量
L1 sketch、kernel、render 约束求解与轮廓;B-rep 内核边界(truck);视图数学与无头场景描述
L2 doc 参数、表达式、特征时间线与增量求值
L3 io 设计文件、STL/OBJ/STEP/3MF 导出与导入
L4 engine 会话与命令注册表(一切皆命令)
L5 gpu、ui-egui、mcp compute shader 评估网格、可替换桌面前端、MCP 服务器
apps solidcraft、solidcraft-cli 桌面应用、无头 CLI

几个值得一提的工程细节:

  • 3D 鼠标:Win/macOS/Linux 三端都认 3Dconnexion 的 HID 多轴设备(也认自称该协议的 DIY 设备),平移缩放、倾斜旋转;Linux 优先走 spacenavd,没有就直接读 /dev/hidrawN;浏览器版通过浏览器也能读。
  • 文件格式:.solidcraft 是设计容器(二进制网格负载无损),同时兼容纯 JSON;导出 STEP(AP242,带实体名、颜色、组件作为装配;旋转面还原为原生平面/圆柱/圆锥/球/环面)、IGES 5.3、3MF、STL、OBJ,装配带关节还能导出 URDF 给机器人仿真器。
  • 浏览器 API:window.solidcraft.execute(...) / request(...),Agent 可以直接控制网页标签页里打开的文档。
  • 渲染是预览级:不透明表面支持金属度、粗糙度、介质 IOR,但 HDRI、折射、贴图都没实现——README 自己写明了。

AI Agent 接入(MCP)

solidcraft-cli mcp 是一个 stdio 上的 MCP 服务器。无头模式自己开一个设计会话;加 --connect 127.0.0.1:PORT 就接管用 solidcraft --control PORT 启动的应用,你能亲眼看着 Agent 建模。工具包括 list_commands、execute、batch、inspect_design、measure、body_topology、set_parameter、screenshot(直接返回图像)、export、crash_reports、undo/redo、new_design、open、save。

文件访问有边界:只能碰当前设计所在目录(且必须在 home 之内,不能是 home 本身或隐藏目录)、恢复目录,以及 --allow-path DIR 显式给的路徑。

Claude Code 一行接上:

claude mcp add solidcraft -- solidcraft-cli mcp

社区已经用它跑出过东西:一个科学考察车 SELENE 完全通过 MCP 建出来,3,323 步可编辑的时间线,重建零报错,模型可以下载。

快速开始

cargo run --release -p solidcraft -- --sample          # 桌面应用,带一个示例零件
cargo run --release -p solidcraft-cli -- commands      # 命令注册表
cargo run --release -p solidcraft-cli -- run examples/bracket.json --out bracket.step
cargo run --release -p solidcraft-cli -- snapshot examples/bracket.json --out bracket.png
cargo run --release -p solidcraft-cli -- render examples/render-studio.json --out product.png
cargo run --release -p solidcraft -- part.step          # 直接打开 STEP 作为新设计
cargo run --release -p solidcraft-cli -- eval part.step # 量一个导入的 STEP
cargo xtask ci                                          # fmt、clippy、测试、图标、资源、分层、wasm

浏览器版:

cd apps/solidcraft-web && trunk build --release --public-url ./

不想编译也行:Windows(MSI / 便携 zip / WinGet winget install bherbruck.SolidCraft)、macOS(通用 DMG)、Linux(AppImage / deb / rpm / Snap / Flatpak)、以及直接开网页版。注意安装包目前未签名,Windows SmartScreen 会警告,macOS 首次要右键”打开”。

项目状态与许可

MIT 或 Apache-2.0 双许可,按 clean-room 贡献规则开发。0.11–0.14 的用户注意:内建的”立即更新”装不上 0.15.0 及以后(发布地址换了),需要先手动下载一次新版,之后自动更新恢复正常。

能力覆盖面已经很宽:草图与约束、特征时间线(拉伸/旋转/扫掠/放样/圆角/抽壳/拔模/孔/螺纹/阵列/镜像/分割/组合)、参数与配置、装配(关节、运动研究、接触集、干涉检查、材料质量属性)、钣金(翻边、折弯展开、展开图与折弯表)、DXF 视图导出、STEP/IGES/3MF/STL/OBJ/glTF 导入导出、URDF。但几何等价性、工作流等价性都还需要时间验证——它适合拿去试简单零件,而不是把生产线押上去。

获取与了解

返回列表

更多资讯

想看更多优质内容?

浏览所有资讯