SolidCraft:纯 Rust 的开源参数化 3D CAD
一句话结论:SolidCraft 是同名项目从 SolveCraft 改名并迁到 tangency-labs 之后的版本:纯 Rust 写的开源参数化 CAD(草图 → 约束 → 特征时间线 → 改一个尺寸就重建),同一套代码跑在 桌面(Windows / macOS / Linux)、浏览器(WebGPU,带 WebGL2 回退) 和 headless CLI,并且自带 MCP 服务器——Agent 可以和人一样,用同一批命令建模、测量、截图、导出。截至 2026-10-19:GitHub 6,549 star、36 次 release / 16 个 minor(v0.1.0 是 10-09,v0.16.2 是 10-19)、release 资产累计下载 112,847 次(含各类安装包,不等于用户数)、中文语言包 1,598 条键值全覆盖。它还很早期:官方标的是 "early but usable for simple parts",没有 CAM、没有仿真、没有工程图。
披露:本文编译自 SolidCraft 官方仓库的 README、docs/features.md、ROADMAP.md、docs/mcp.md、docs/oracle.md、兼容性说明与 v0.16.x 发布说明(均截至 2026-10-19),并只对"导出 STEP"这一步做了本地实测(见第六节,Windows 便携版 + 仓库自带 examples/bracket.json);其余流程与数字来自官方文档与仓库统计,未做逐项复现。项目由 Tangency Labs 维护,本站在其中没有任何利益关系。
一、它是什么:一个"三种入口、一套命令"的 CAD
| 项目 | 情况 |
|---|---|
| 仓库 | tangency-labs/solidcraft(原名 SolveCraft,旧文件与旧配置有兼容层) |
| 许可 | MIT OR Apache-2.0(双许可,任选其一) |
| 语言 | Rust(源码构建需 1.95+) |
| 桌面 | Windows(MSI / 便携 zip / WinGet)、macOS(universal dmg)、Linux(AppImage / deb / rpm / Flatpak / Snap) |
| 浏览器 | solidcraft.io/app,WebGPU;缺 WebGPU 或异常时用 ?webgl 切 WebGL2;设计存在浏览器私有文件存储(需 HTTPS 或 localhost) |
| 自动化 | solidcraft-cli:跑脚本、测量、导出、渲染 PNG,以及 solidcraft-cli mcp |
| 几何内核 | 自家 kernel crate,底层 B-rep 用 truck(Apache-2.0),混合(blend)与布尔重试/校验是自己写的 |
| 安装体积 | Windows 安装包 49.3 MB、便携 zip 64.1 MB(0.16.2) |
用户真正会碰到的三条入口,共用同一套引擎命令:
# 桌面:打开示例零件
solidcraft --sample
# 桌面:开控制通道,让 MCP 服务器接管当前窗口(能看到 Agent 在建模)
solidcraft --control 7878
# 别处:接上去
solidcraft-cli mcp --connect 127.0.0.1:7878
# 无窗口:跑脚本、导出
solidcraft-cli run examples/bracket.json --out bracket.step
二、三个值得注意的设计决定
1)"一切都是命令"(everything is a command)
这一条决定了它和大多数桌面 CAD 的根本差别:工具栏按钮、命令面板(按 S)、JSON 脚本、控制通道、MCP 工具,调用的都是同一张命令注册表。solidcraft-cli commands 打印整张表的 id、参数文档和当前是否可用;docs/features.md 就是由这张表生成的。
好处很实际:
- 你手点一遍的操作,可以原样录成 JSON,交给脚本或 Agent 重放;
- Agent 失败时读到的是引擎的结构化报错,不是"截图里看起来不对";
- 界面上有的能力,自动化里就有;反之,自动化能做的,人也能点出来。
代价也很清楚:命令粒度很细(草图约束就几十条命令),纯手写脚本前得先熟悉 id 与参数形状。
2)约束求解器不靠"拖到差不多就行"
官方说明了求解器的分工:能被约束唯一确定的点,用几何构造直接放准(轨迹求交 + 刚性簇分解,参考 Owen 1991、Fudos–Hoffmann 1997),其余交给 Levenberg–Marquardt,剩余自由度由 雅可比的秩给出。于是:
- 过约束的编辑会被拒绝,而不是悄悄变形;
- 完全约束的草图变黑;
- 拖动时每帧求解,松手才重建模型(不会每帧跑一次布尔)。
对实际绘图的意义是"改尺寸不会把草图搞乱"——这也是参数化 CAD 最容易被忽略的基本功。
3)文件与格式是开放的
设计文件是 .solidcraft 容器(网格载荷是无损二进制,纯 JSON 仍然支持);导出覆盖 STEP AP242(带实体名、颜色、装配体)、IGES 5.3、3MF / STL(二进制与 ASCII)/ OBJ、URDF(带关节的装配体给机器人仿真)和当前视图 DXF;导入支持 STEP(AP203/214/242)、IGES、3MF/STL/OBJ/glTF,桌面版还能通过 cadmpeg 读 FreeCAD .FCStd 与 Rhino .3dm 的实体。
对下游(切片、仿真、PLM、渲染)来说,STEP AP242 是那个"能交出去"的口子;对 Web/游戏一侧,glTF 与 OBJ 至少有路可走。
三、上手:一个树莓派 4 外壳的六步
官方演示是最能说明工作流的一段:从空设计到可打印的树莓派 4 外壳,每一步都留在时间线上,改一个参数整条链重建。
| 步骤 | 做什么 | 关键点 |
|---|---|---|
| 1 | 在基准面画草图,用板子参数(58 × 49 mm 孔距)定尺寸 | 尺寸写成表达式,后面改板子不用重画 |
| 2 | 拉伸成壳体毛坯 | 特征入时间线,可改、可抑制、可重排 |
| 3 | 圆角 + 抽壳(Shell) | 一次选中整圈边;抽壳内外/双侧可选 |
| 4 | M2.5 铜柱按孔位矩形阵列 | 阵列参数来源于同一组参数 |
| 5 | 侧面开 USB/网口缺口、顶部开散热槽 | 剖面自动识别,槽口可一次拉伸多轮廓 |
| 6 | 刻字(DejaVu Sans Bold)+ 定义 PETG 材料 | 属性面板里直接给出质量(体积 × 密度) |
然后回到参数表,把高度 24 → 32 mm,整条时间线重建,外壳、孔位、槽口、刻字全部跟着走——演示视频里这一步是连续的,不是"重新画一遍"。
上面这张是同一套软件的另一面:社区项目 SELENE 用 SolidCraft 的 MCP 服务器建模,时间线 3,323 步、重建零错误,模型可以下载回来继续改(来源:0xlillith/solidcraft-rover)。
四、中文与桌面体验
- 界面语言:
assets/locales/里 18 个语种,中文 1,598 条键值与英文一一对应(只有 4 条与英文相同,基本等于全覆盖);v0.16.0 又补了意大利语、波兰语与中/日/法/西的更新。 - 3D 鼠标:Windows / macOS / Linux 都能读 3Dconnexion SpaceMouse / SpaceNavigator(HID 多轴),浏览器侧走 Gamepad API(Firefox 需要先用 3DxWare 的配置文件把设备暴露成虚拟手柄)。
- 浏览器版能装成应用:Chromium 系有"安装应用…",首次访问后离线可用;团队要内网部署可以用官方镜像
ghcr.io/tangency-labs/solidcraft-web(nginx + 8080,设计存在访客浏览器里,服务器不存东西)。 - 崩溃与恢复:自动保存 + 崩溃恢复,报错对话框能直接生成 GitHub issue 草稿(带上下文,是否提交由你决定)。
五、MCP:让 Claude Code 直接画零件
这是 2026 年这类工具真正的新东西:不是"聊天框贴代码",而是 Agent 调 CAD 的命令。
启动
# headless:自带一个设计会话,没有窗口
solidcraft-cli mcp
# 从已有设计或脚本起步
solidcraft-cli mcp --in part.solidcraft
# 桥接到正在运行的 App:能看见 Agent 一步步建模
solidcraft --control 7878
solidcraft-cli mcp --connect 127.0.0.1:7878
Claude Code 一行接上:
claude mcp add solidcraft -- solidcraft-cli mcp
15 个工具
| 工具 | 作用 |
|---|---|
list_commands |
命令目录:id、标签、快捷键、参数文档、当前是否可用 |
execute / batch |
跑单条 / 一批命令;batch 默认遇错回滚到第一步之前的检查点 |
inspect_design |
参数、时间线(含每步耗时、错误、警告)、实体、草图(约束、自由度、求解状态) |
measure |
体积、面积、质心、包围盒、面/边/点计数;两两选取还能给最小/最大距离、轴线距、夹角 |
body_topology |
面/边的索引、面积、法向、圆柱面的轴与半径——给 Agent 一个能"指"的编号 |
set_parameter |
改用户参数并重算,回报重建/复用了多少特征 |
screenshot |
返回 PNG(可指定视角、相机、网格与坐标轴,headless 用 GPU 或 CPU 光栅) |
export |
STEP / 3MF / STL / OBJ / URDF |
undo / redo / new_design / open / save |
文档操作 |
crash_reports |
读本机崩溃报告(回溯、命令、最近命令、设计路径) |
磁贴之外还有两个资源:solidcraft://design(带测量的 inspection JSON)与 solidcraft://commands(命令目录)。
文件访问是被关起来的
Agent 只能碰:当前设计所在目录(且必须严格在 home 之下、不能是隐藏目录)、SolidCraft 自己的恢复目录、服务器私有暂存目录,以及显式 --allow-path DIR 给的目录。~/.ssh、~/.aws、.env 默认不可达;Windows 上 UNC、设备名、短文件名(PROGRA~1)等在落盘前就被拒。这个设计比"给 Agent 一个 shell"安全得多——但也意味着你要主动把工作目录划给它。
配套的四个 Skill
仓库 skills/ 下有四个 Agent Skill(Agent Skills 格式):solidcraft-modeling(新建零件)、solidcraft-editing(改已有设计)、solidcraft-checking(补 SolidCraft 不报的检查、回归与移植)、solidcraft-mechanisms(装配:关节、运动链接、接触集、运动研究)。它们把"命令怎么摆、怎么用 measure 自检、已知的坑"写成了可加载的说明书——这正是 Agent 建模能不能稳住的关键,而不是模型本身有多强。
边界(官方的说法,也是我的建议)
- Agent 建模必须人复核:几何对不对,看体积/面积/质心这些客观量,再看剖面与配合,别只看渲染图;
- headless 截图在无 GPU 时会退到 CPU 光栅(回复里
renderer会写cpu,并带 warning),颜色分析类信息会缺失; - MCP 里没有"运行/停止"这类危险语义,但
execute/batch/export/open/save都能读写文件,客户端的自动批准策略要自己收(官方把它们的destructiveHint/openWorldHint标成了 true)。
六、把模型交出去:STEP 导出(本地实测)
只说"能导出"没意义,我拿 0.16.2 的 Windows 便携版跑了一遍仓库自带的 examples/bracket.json:
solidcraft-cli run examples/bracket.json --out bracket.step
结果:
| 项 | 实测值 |
|---|---|
| CLI 版本 | solidcraft-cli 0.16.2 |
| 输出 | bracket.step,8,871 字节 |
| STEP 协议 | 文件头 FILE_SCHEMA 为 AP242(managed model based 3D engineering) |
| 几何 | 实体 1 个,9 面 / 21 边 / 14 点(8 平面 + 1 圆柱面) |
| 体积 / 表面积 | 22,988.46 mm³ / 9,114.77 mm² |
这一步只证明"脚本 → 内核 → STEP 写出"是通的。没有验证复杂件、装配、颜色与名称是否在别的 CAD 里保真——那需要你在自己的零件上过一遍。收到 STEP 之后的检查项,可以照着 CAD STEP 到网格的拓扑验收 那篇的六步走。
导出物想快速看一眼(不装 CAD),直接把 STEP / IGES 丢进 在线三维 CAD 查看器;只有 STL / OBJ / GLB 的话用 3D 模型查看器 更省事。
七、现状与限制:先看清它"还不是什么"
官方 README 自己写的是 "early but usable for simple parts"。几个必须知道的点:
验证口径:参考测试 83/83 通过(62 个解析解 + 21 个 FreeCAD 1.1.4 独立算出的期望值),比的是体积、面积、质心、包围盒、面数与采样 Hausdorff 距离,且每个件都导出 STEP 再读回。官方明确写了:这些检查不构成完整的几何或工作流等价性证明。
没有的东西(ROADMAP 的"暂缓"清单):MESH、FORM(T-Spline)、超出实体需要的 SURFACE、PCB / 3D PCB、Render(只有简单的 PBR 预览)、Animation、Simulation、Manufacture / CAM、Drawings(工程图)。也就是说:能做零件,不能出图、不能仿真、不能生成刀路。
已知的技术限制(摘几条对交付有影响的):
- STEP 导入的装配体被拍平成实体,自由曲面 offset 与只有 pcurve 的边还没读;
- 布尔在"同半径轴线相交"等特殊相切情形会明确拒绝,而不是给一个坏结果(官方立场是"能拒就拒");
- G2 圆角只覆盖"平面之间直边"的组合,曲面边、斜端、角接头还不支持;
- 下载尚未代码签名:Windows SmartScreen 会拦,macOS 首次要右键"打开";
- 0.11–0.14 的"应用内更新"装不上 0.15+(仓库搬家),得手动下一次新版。
换代速度快 ≠ 稳定:11 天 16 个 minor,意味着接口、设计文件格式(0.16 是 format 27)和行为的变动都很快。生产件要用,先钉版本、留 STEP 作为交换物,别把 .solidcraft 当唯一存档。
八、和现有方案怎么比
| 方案 | 形态 | 许可 / 成本 | 强项 | 短板 |
|---|---|---|---|---|
| SolidCraft | 桌面 + 浏览器 + CLI/MCP | 开源(MIT/Apache-2.0) | 参数化时间线、装配/钣金、Agent 可驱动、文件开放 | 早期;无工程图/仿真/CAM;生态小 |
| Fusion 360 | 桌面 + 云 | 商业订阅 | 建模 + CAM + 仿真 + 出图一体 | 成本、云依赖、许可以外 |
| Onshape | 纯云 | 商业订阅 | 协同与版本管理 | 云依赖、订阅 |
| FreeCAD | 桌面 | 开源(LGPL) | 模块全(含 FEM/CAM/TechDraw) | 参数化与稳定性口碑分化 |
| CadQuery / build123d | Python 代码建模 | 开源(Apache-2.0) | 可进 CI、可版本化 | 无交互建模,学习曲线陡 |
| SolidCraft 的差异 | — | — | 交互建模 + 同一套命令可被 Agent/CI 调用 + 浏览器可跑 | 只适合简单件与早期采用者 |
九、该不该试:三条判断
适合马上试:① 想把"建模"接进脚本/CI/Agent 流水线;② 需要浏览器里打开就改、不想装 CAD 的轻量场景;③ 想给团队找一个可自托管、数据不外发的参数化建模工具(浏览器设计存在本地,桌面版天然本地)。
再等等:① 要出工程图、做 FEA、生成刀路;② 交付对象只认 .sldprt/.f3d,且不接受 STEP 作为中间格式;③ 需要成熟曲面(Class-A)、T-Spline 造型。
上手三步:① 浏览器直接开,用 ?sample 看示例件,确认操作习惯;② 桌面装 0.16.2,跟着演示把一个你自己的小件(板 + 孔 + 圆角 + 抽壳)走完参数化;③ 导出 STEP,用 在线 CAD 查看器 或你现有的 CAD 复核尺寸与颜色,再决定要不要接进流程。
Sources
- 仓库与 README:https://github.com/tangency-labs/solidcraft
- 功能清单(命令注册表):https://github.com/tangency-labs/solidcraft/blob/main/docs/features.md
- 路线图与限制:https://github.com/tangency-labs/solidcraft/blob/main/ROADMAP.md
- 参考测试口径:https://github.com/tangency-labs/solidcraft/blob/main/docs/oracle.md
- MCP 服务器与文件访问规则:https://github.com/tangency-labs/solidcraft/blob/main/docs/mcp.md
- 兼容性(SolveCraft → SolidCraft):https://github.com/tangency-labs/solidcraft/blob/main/docs/compatibility.md
- 发布说明 v0.16.0 / v0.16.2:https://github.com/tangency-labs/solidcraft/releases
- 官网与文档:https://solidcraft.io/ | https://docs.solidcraft.io/
- SELENE 火星车(MCP 建模示例):https://github.com/0xlillith/solidcraft-rover
同主题阅读
- Text-to-CAD:让 coding agent 写参数化 Python 产 STEP
- STL 转可编辑 CAD:mesh2cad 的平面/圆柱拟合
- CAD STEP 到网格的拓扑验收:缝合公差与六步检查
本文属于「CAD / 制造 / G-Code」专题。BimAnt 编译整理,转载请注明出处。文中版本与统计数字截至 2026-10-19;实测仅覆盖示例脚本的 STEP 导出,其余请以你自己的零件复测为准。
本文属于「CAD / 制造」专题。查看专题全部文章 →