SolidCraft:Rust 开源参数化 CAD 工具,内置 MCP 支持 AI 智能体建模
Show HN: SolidCraft – Open-Source Parametric CAD in Rust (With MCP Support)
SolidCraft 是用纯 Rust 编写的开源参数化 3D CAD 应用,由作者 bherbruck 在 GitHub 以 MIT/Apache-2.0 双许可发布。
把 CAD 建模能力通过 MCP 暴露给 AI 智能体,给出了可直接复用的命令接口和开源 CAD 替代。
一款用纯 Rust 编写的开源参数化三维 CAD 应用程序。
通过参数化特征时间线绘制草图、施加约束并构建实体。修改一个尺寸,即可看到模型重新构建。可以在桌面端运行,也可以在浏览器中运行,或者让 AI 智能体通过内置的 MCP 服务器进行建模。
从空白设计开始的树莓派 4 外壳:按照开发板参数标注尺寸的草图,再依次进行拉伸、倒圆角、抽壳,在 58 × 49 mm 螺孔矩形阵列上分布的 M2.5 支撑柱,端口开孔、通风槽以及一种颜色,然后在参数中将高度 24 → 32 mm,所有内容即会重新构建。6 倍回放。完整视频,使用 演示脚本录制。
下载
- Windows:下载并运行安装程序。同时提供 ARM64 和 32 位版本,也可以使用便携压缩包,无需安装即可运行。
- macOS:打开磁盘映像并将 SolidCraft 拖入应用程序文件夹(适用于 Apple 芯片和 Intel)。
- Linux:下载AppImage,允许其作为程序运行后打开。也可以安装.deb(Ubuntu、Debian、Mint)或.rpm(Fedora、openSUSE),或使用Flatpak。使用 Snap:
sudo snap install solidcraft(Snap Store,或.snap 文件)。ARM64 版本:AppImage、.deb、.rpm。 - Web:在浏览器中试用,无需安装。
下载文件尚未签名。在 Windows 上,如果 SmartScreen 发出警告,请选择更多信息,再选择仍要运行。在 macOS 上,首次打开时,请在应用程序中右键单击 SolidCraft 并选择打开。
旧版本、校验和以及其他格式可在发布页面找到。安装详情、从早期版本升级以及从源代码构建的方法详见入门指南。
文档:SolidCraft 手册(用户指南、开发指南和命令参考;源代码位于 docs/book)。
状态:尚处早期,但可用于简单零件。76 个公开参考零件中有 75 个的体积、面积、质心和包围盒与其解析值或 FreeCAD 计算值匹配(docs/oracle.md);另一个为已记录的 bug。这些检查并不能保证完全的几何或工作流等价性。SolidCraft 拥有的命令按类别列在 docs/features.md 中;状态和计划见 ROADMAP.md。未完成的工作和已知 bug 见 GitHub issues,欢迎贡献帮助:参见 CONTRIBUTING.md。
已实现的功能
- 草图位于原点平面、偏移平面或平面面上:直线、矩形、圆、圆弧、多边形、槽、椭圆、拟合/控制样条、圆锥曲线与文字;构造几何、投影、修剪、倒圆与倒角,包括原点处的拐角。新的面附着保留受支持的构造标识与所选实例;缺失的源会触发显式的平面修复流程。参见 面附着。显式闭合的拟合样条与闭合的关联偏移使用周期 C2 插值。当内嵌消耗拐角圆弧时,受支持的凸直线与圆弧偏移保留其标识,关联的拉伸会跟随当前边界。打断关联会冻结边界,并保留现有拉伸的可用性。曲线绘制与拾取共同适配缩放与显示比例,包括 Fit 处的小圆以及已放置组件中的草图。
- 约束与尺寸由我们自研的求解器求解。约束相对于已知几何所固定的点通过构造精确定位(轨迹交点与刚体聚类分解,参考 Owen 1991 与 Fudos–Hoffmann 1997);其余由 Levenberg–Marquardt 求解,其雅可比矩阵的秩给出剩余自由度。约束包括:重合、点位于曲线上、水平/垂直、平行、垂直、相切、曲率(G2)、相等、同心、共线、中点、对称、固定;线性、对齐、水平、垂直、点到线、半径、直径、角度、圆弧扫描角、弧长与槽长等由参数驱动的尺寸。过约束的编辑将被拒绝;完全约束的几何将变为黑色。拖拽过程每帧求解草图,并在拖拽结束时仅重建一次模型。选中一条直线或其两个端点,输入尺寸数值后按 Enter,即可提交为一步撤销操作。Fit 使草图几何避开调色板与导航控件的遮挡。
- 轮廓自动查找,包括由直线分割的区域以及轮廓内部的孔洞。新捕获的完整自适应边界在样条段数变化时保留其外轮廓与孔洞的来源标识。局部或存在歧义的边界不符合条件。
- 特征位于参数化时间轴上:拉伸、旋转、扫掠、放样、倒圆/倒角、抽壳、拔模、孔、螺纹、阵列、镜像、拆分、布尔运算、移动与构造几何。时间轴以增量方式重建;特征可以被编辑、抑制、重命名、重排序与删除。受支持的几何及当前的限制在 ROADMAP.md 中说明。新的旋转特征在轴向反转时保留对称与双侧角度放置方式;较早的设计在重新打开或编辑时保留其原先保存的约定。
- 参数与配置支持具备单位的表达式(
2 * width + 5 mm、angle / 2)、有序规则、特征抑制以及按行的实体材质/外观。 - 装配体支持嵌套组件与实例、关节、运动分析、接触集、干涉检测以及考虑材料的质量属性。已记录实体传递保留建模历史与全局位置;三维草图线框在编辑过程中保留其坐标系。
- 钣金,具有翻边、卷边、折弯/展开/重折、材料切口、展开图、 保留的浅棱柱凹坑、精确的直线/圆弧/圆 DXF 轮廓与折弯表; 塑料外壳特征与规则。凹坑深度与侧壁在展开/重折后保留, 并在展开预览和 DXF 中与通孔轮廓分开显示。
- 文件:设计容器(
.solidcraft),包含无损的二进制网格负载; 仍支持纯 JSON 用于打开、另存为与导出。桌面端"打开"可在编辑前检查几何边显体时, 显示已保存的实验性预览(显式的preview: true引擎保存)。导出为 STEP(AP242,包含体名、颜色和 组件形式的装配;旋转面作为原生平面、圆柱、圆锥、球体和圆环面), IGES 5.3(带名称与颜色的流形实体 B-rep),3MF、STL(二进制/ASCII)和 OBJ; 3MF、STL 与 OBJ 以网格体导入(可渲染、测量、移动与导出;实体特征需要 B-rep 体)。"网格转换"可将支持的闭合等截面零件 重建为参数化原体,包含平面与圆柱面; STEP 导入(AP203/AP214/AP242 实体、装配、单位、名称、颜色)以及 IGES 导入 (流形实体 B-rep,或被缝合为实体的修剪与有界曲面)作为后续特征构建所依赖的基础特征——打开一个.step/.stp/.igs/.iges文件, 将其插入设计,或拖到窗口中(docs/step-import.md)。 - 桌面应用(egui + wgpu):包含工作区标签、浏览器、时间轴、3D 视口(含坐标轴视图与导航栏)、 草图工具、特征对话框、命令面板的具栏,以及 JSON-lines 控制通道, 便于代理与测试驱动它。特征错误与帮助可打开一份可编辑的 创建 Issue 草稿, 其中包含相关上下文和可选的已审核截图;打开 GitHub 不会提交报告。
- 无头 CLI
solidcraft-cli:运行命令脚本、测量(体积、面积、质心、 面/边/顶点数)、导出、渲染 PNG 快照并重放参考配方。 - MCP 服务器
solidcraft-cli mcp:AI 代理可对零件进行建模、测量和查看, 无论是在无头模式下还是在运行的应用中(见下文)。
构建与运行
cargo run --release -p solidcraft -- --sample # desktop app with a sample part cargo run --release -p solidcraft-cli -- commands # the command registry 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 -- part.step # open a STEP file as a new design cargo run --release -p solidcraft-cli -- eval part.step # measure an imported STEP file cargo xtask ci # fmt, clippy, tests, assets, layers, wasm
Windows 版本:cargo xwin build --release --target x86_64-pc-windows-msvc -p solidcraft。
在 Windows 和 Linux 上,SolidCraft 通过其多轴 HID 接口检测已连接的 3Dconnexion SpaceNavigator 或 SpaceMouse。 推动旋钮可平移和缩放,倾斜或扭转则可旋转 3D 视图。 编辑草图时,旋钮可平移和缩放而不会改变草图视图。首选项中的"导航"页面 提供 3D 鼠标的开/关开关和速度控制。
在 Linux 上,SolidCraft 直接读取 /dev/hidrawN,因此登录用户需要拥有设备访问权限。
添加 uaccess 标签的 udev 规则可实现这一点,例如
/etc/udev/rules.d/70-3d-mouse.rules 针对具有 3Dconnexion 厂商 ID 的设备:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="256f", TAG+="uaccess"
较旧的 SpaceNavigator 使用 Logitech 的厂商 ID 046d;添加一条使用其产品 ID 的规则(参见 lsusb),
而不是匹配所有 Logitech 设备。使用 sudo udevadm control --reload && sudo udevadm trigger 重新加载,然后重新插拔设备。Flatpak
沙箱不暴露 hidraw 设备,因此目前 3D 鼠标只能在该平台上与原生版本配合使用。
在 HID 报告 1 中按全部六个轴发送数据的设备(某些自制设备如此)可通过其
报告描述符识别,因此它们也能正常工作。
在浏览器中:cd apps/solidcraft-web && trunk build --release --public-url ./(WebGPU,或
WebGL2 配合 ?webgl;?sample 打开示例零件)。
脚本
脚本是 JSON 格式的命令列表,与 UI 运行的命令相同:
{"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}}
]}AI 代理(MCP)
solidcraft-cli mcp 是一个基于 stdio 的 Model Context Protocol 服务器。无头模式下它运行自己的设计会话;与 --connect 127.0.0.1:PORT 配合时,它会驱动由 solidcraft --control PORT 启动的应用,使你可以观察代理建模过程。工具:list_commands、execute、batch、inspect_design、measure、body_topology、set_parameter、screenshot(返回图像)、export、undo、redo、new_design、open、save。Claude Code:claude mcp add solidcraft -- solidcraft-cli mcp。详细信息、客户端配置和示例会话:docs/mcp.md。
架构
| 层级 | Crate | 角色 |
|---|---|---|
| L0 | geom |
向量、平面、轮廓、网格及其度量 |
| L1 | sketch, kernel, render |
约束求解器与轮廓;B-rep 内核边界(truck);视图数学与 CPU 光栅化器 |
| L2 | doc |
参数、表达式、特征时间线及其增量求值 |
| L3 | io |
设计文件,STL/OBJ/STEP/3MF 导出,STEP 和 3MF/STL 导入功能 |
| L4 | engine |
会话与命令注册表(一切皆命令) |
| L5 | ui-egui, mcp |
可替换的桌面前端;MCP 服务器(无头模式或桥接到应用) |
| apps | solidcraft, solidcraft-cli |
桌面应用、无头 CLI |
贡献
之前使用 Autodesk Fusion?SolidCraft 使用熟悉的参数化 CAD 工作流:约束草图、实体特征、可编辑时间线、参数和装配。请参阅 路线图 了解支持的操作和当前的限制。
请参阅 CONTRIBUTING.md:如何构建和测试、代码导览、clean-room 与许可规则,以及最需要帮助的地方。
许可
MIT 或 Apache-2.0,由你选择。在 clean-room 贡献规则 下开发;第三方代码和资源保留其文档化的许可和署名。
SolidCraft 是独立的项目。其行为依据公开文档、通用 CAD 惯例和用户反馈进行设计。参考测试使用解析值和开源工具。SolidCraft 与 Autodesk 无关联,亦未获得其赞助或认可。Autodesk 和 Fusion 是 Autodesk, Inc. 的商标。
来源:Hacker News · github.com
