Hacker News 中文摘要

RSS订阅

Show HN:SolidCraft——用 Rust 编写的开源参数化 CAD,支持 MCP -- Show HN: SolidCraft – Open-Source Parametric CAD in Rust (With MCP Support)

SolidCraft(SolidCraft)是用纯 Rust(Rust)编写的开源参数化 3D CAD 应用,沿参数化特征时间线绘制草图、添加约束并构建实体,改动尺寸即重新生成;可运行于桌面和浏览器,也能通过内置 MCP(Model Context Protocol)服务器让 AI 代理建模。演示从空白设计开始,按树莓派 4(Raspberry Pi 4)板卡参数绘出草图,经拉伸、倒圆角、抽壳、修圆边缘,在 58 × 49 mm 孔位矩形上阵列 M2.5 铜柱,开接口与通风槽,用 DejaVu Sans Bold 刻上 Pi 4 并定义 PETG 材料;随后在 Parameters 里把高度从 24 mm 改为 32 mm,模型重建。

正文

SolidCraft 参数化建模演示

SolidCraft 是一个用纯 Rust 编写的开源参数化 3D CAD 应用。它支持通过参数化特征时间线进行草图绘制、添加约束并构建实体:修改一个尺寸,模型就会重新构建。你可以在桌面端或浏览器中使用它,也可以让 AI 代理通过内置的 MCP 服务器进行建模。

从一个空白设计开始制作树莓派 4 外壳:先用电路板的参数对草图进行尺寸标注,然后拉伸、倒圆角、抽壳,一次选取就能把边缘修圆;在 58 × 49 mm 的孔位矩形上阵列 M2.5 铜柱,接着开端口切口和散热槽,用 DejaVu Sans Bold 字体刻上“Pi 4”,并在设计中定义 PETG 材料,其质量会显示在属性中。之后在参数里把高度从 24 改为 32 mm,整个模型都会重新构建。以上过程为 9 倍速播放,完整视频由演示脚本录制。

下载

目前下载文件尚未签名。在 Windows 上,如果 SmartScreen 发出警告,请选择“更多信息”,然后点击“仍要运行”。在 macOS 上,首次使用时请在“应用程序”中右键点击 SolidCraft 并选择“打开”。

旧版本、校验和及其他格式请见 releases 页面。安装细节、从早期版本升级以及从源码构建,请参阅 Getting started。

文档:SolidCraft 手册(包含用户指南、开发者指南和命令参考,源文件位于 docs/book)。

状态:早期阶段,但已可用于简单零件。76 个公开参考零件中有 75 个的体积、面积、质心和包围盒与解析值或 FreeCAD 计算值一致(见 docs/oracle.md),另一个是已知待修的 bug。这些检查并不代表几何或工作流上的完全等价。SolidCraft 支持的命令按领域列在 docs/features.md 中,现状和计划见 ROADMAP.md。未完成的工作和已知 bug 在 GitHub issues 中,欢迎提供帮助,详见 CONTRIBUTING.md。

使用 SolidCraft 制作

SELENE 是一辆完全通过 SolidCraft 的 MCP 服务器由 @0xlillith 构建的科学漫游车:包含 3,323 个可编辑的时间线步骤,重新构建时没有错误,此处以 2 倍速回放。完整视频 · 下载可编辑模型。

可用功能

草图可以在原点平面、偏移平面或平整面上绘制,支持直线、矩形、圆、圆弧、多边形、槽、椭圆、拟合/控制样条、圆锥曲线和文字;也支持构造几何、投影、修剪、倒圆角和倒角,包括原点处的角。新的面附着会保留受支持的构造标识和所选实例;如果来源缺失,会提供明确的平面修复工作流(见 face attachments)。显式闭合的拟合样条和闭合关联偏移使用周期性 C2 插值。受支持的凸直线和圆弧偏移在 inset 消耗角弧时保留其标识,关联的拉伸会跟随当前边界。断开关联会冻结边界,并使现有拉伸继续可用。曲线绘制和拾取会随缩放和显示比例自适应,包括 Fit 时的小圆和放置组件中的草图。

约束和尺寸由我们自己的求解器处理。对于约束相对于已知几何固定的点,会通过构造精确放置(轨迹交点和刚性簇分解,依据 Owen 1991 和 Fudos–Hoffmann 1997);其余部分由 Levenberg–Marquardt 求解,其雅可比矩阵的秩给出剩余的自由度。约束类型包括:重合、点在曲线上、水平/垂直、平行、垂直、相切、曲率(G2)、相等、同心、共线、中点、对称、固定;线性、对齐、水平、垂直、点到线、半径、直径、角度、圆弧扫掠、弧长和槽长等尺寸均由参数驱动。过度约束的编辑会被拒绝,完全约束的几何会变为黑色。拖动时每帧求解草图,并在拖动结束时重新构建模型一次。选择一条线或其两个端点,输入尺寸并按 Enter 键即可提交为一个撤销步骤;使用 Sketch Dimension 时按 D,点击,输入,Enter。Fit 功能使草图几何避开面板和导航控件。

轮廓会自动查找,包括被线分割的区域和外轮廓内部的孔。新捕获的完整自适应边界在样条跨段数变化时会保留其外部和孔的源标识。部分或模糊的边界不合格。

特征位于参数化时间线上:拉伸、旋转、扫掠、放样、倒圆角/倒角、抽壳、拔模、孔、螺纹、阵列、镜像、分割、组合、移动和构造几何。时间线增量式重新构建;特征可以编辑、抑制、重命名、重新排序和删除。受支持的几何和当前限制在 ROADMAP.md 中有说明。新的旋转在反向轴上保留对称和双向角度放置;旧设计在重新打开或编辑时保留其保存的约定。

参数和配置的表达式支持单位感知(如 2 * width + 5 mm、angle / 2),支持有序规则、特征抑制以及逐行的实体材料/外观。

装配体支持嵌套组件和实例、关节、运动研究、接触集、干涉检查以及考虑材料的质量属性。记录的实体传递会保留建模历史和世界位置;3D 草图线在编辑时保留其坐标系。

钣金功能包括法兰、卷边、折叠/展开/重新折叠、材料切除、展开图、保留的浅棱柱腔、精确的直线/圆弧/圆 DXF 轮廓以及折弯表;还支持塑料外壳特征和规则。腔深度和侧壁在展开/重新折叠后保留,并在展开预览和 DXF 中与通孔轮廓分开显示。

文件:设计容器(.solidcraft)包含无损二进制网格载荷;普通 JSON 仍支持打开、另存为和导出。桌面版在打开时可以先显示来自热几何缓存的临时图片,待编辑前重新构建;缓存永远不会取代参数化设计。可导出为 STEP(AP242,带实体名称、颜色和作为装配体的组件;旋转面为原生平面、圆柱、圆锥、球和圆环)、IGES 5.3(带名称和颜色的流形实体 B-rep)、3MF、STL(二进制/ASCII)和 OBJ;3MF、STL 和 OBJ 导入为网格实体(可渲染、测量、移动和导出;实体特征需要 B-rep 实体)。Convert Mesh 可将受支持的闭合等截面零件重建为带平面和圆柱面的参数化实体;STEP 导入(AP203/AP214/AP242 实体、装配体、单位、名称、颜色)和 IGES 导入(流形实体 B-rep,或修剪并缝合为实体的有界曲面)作为基础特征,后续特征在其上构建——可以打开 .step/.stp/.igs/.iges 文件,插入到设计中,或拖放到窗口上(见 docs/step-import.md)。

桌面应用(egui + wgpu):工具栏包含工作区标签、浏览器、时间线、带轴视图和导航栏的 3D 视口、草图工具、特征对话框、命令面板,以及一个 JSON-lines 控制通道,以便代理和测试能够驱动它。特征错误和帮助可以打开一个可编辑的 Create Issue 草稿,附带相关上下文和可选的审查截图;打开 GitHub 并不会提交报告。

无头 CLI(solidcraft-cli):运行命令脚本,测量(体积、面积、质心、面/边/顶点数),导出,渲染 PNG 快照并重放参考配方。MCP 服务器(solidcraft-cli mcp):AI 代理可以在无头模式或运行中的应用里建模、测量和查看零件(见下文)。

构建与运行

可以使用 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 运行脚本并输出 STEP 文件;cargo run --release -p solidcraft-cli -- snapshot examples/bracket.json --out bracket.png 渲染 PNG 快照;cargo run --release -p solidcraft -- part.step 将 STEP 文件作为新设计打开;cargo run --release -p solidcraft-cli -- eval part.step 测量导入的 STEP 文件;cargo xtask ci 则运行格式化、clippy、测试、资源、层和 wasm 构建。在 Windows 上,可使用 cargo xwin build --release --target x86_64-pc-windows-msvc -p solidcraft 进行构建。

在 Windows 和 Linux 上,SolidCraft 能通过多轴 HID 接口识别已连接的 3Dconnexion SpaceNavigator 或 SpaceMouse。移动旋钮可平移和缩放,倾斜或扭转则可旋转 3D 视图。编辑草图时,旋钮的平移和缩放不会改变草图视图。偏好设置中的 Navigation 页面提供了 3D 鼠标的开关和速度控制。

在 Linux 上,SolidCraft 直接读取 /dev/hidrawN,因此登录用户需要拥有该设备的访问权限。添加 uaccess 标签的 udev 规则即可实现,例如针对 3Dconnexion 厂商 ID 的设备,可创建 /etc/udev/rules.d/70-3d-mouse.rules:

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 report 1 中发送全部六个轴的设备(一些自制设备如此)可通过其报告描述符识别,因此也能工作。

在浏览器中:cd apps/solidcraft-web && trunk build --release --public-url ./(使用 WebGPU,或通过 ?webgl 使用 WebGL2;?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 启动的应用,这样你就能观看代理建模。可用工具包括:listcommands、execute、batch、inspectdesign、measure、bodytopology、setparameter、screenshot(返回图像)、export、undo、redo、new_design、open、save。Claude Code 可使用 claude mcp add solidcraft -- solidcraft-cli mcp 添加。详细信息、客户端配置和示例会话见 docs/mcp.md。

架构

架构分为多层: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 OR Apache-2.0(由你选择)。开发遵循清洁室贡献规则;第三方代码和资源保留其文档中的许可证和署名。

SolidCraft 是独立的。其行为根据公开文档、通用 CAD 惯例和用户反馈设计。参考测试使用解析值和开源工具。SolidCraft 与 Autodesk 无关联,也未受其赞助或认可。Autodesk 和 Fusion 是 Autodesk, Inc. 的商标。

评论

讨论以好奇和谨慎为主:较多人想试用 SolidCraft,把它看成 Fusion360 的开源替代和可被人工智能自动化的 *Craft 新入口;但少数人集中质疑它自研或采用 Truck 内核能否快速成熟、人工智能生成工作流是否真的好用,以及“用 Rust”标题是否只是吸引眼球,也有人提醒别忽视计算机辅助制造、三维打印和长期维护。

期待它成为 Fusion360 的开源替代与新的选择

  • 多位前 Fusion360 用户和业余建模者表示想试用,认为它看起来相当能干,也满足了人们对开源替代的长期期待;有人认为替代品多是好事,只是需要办法筛选出优秀的那个。(较多人)
  • 也有人比 FreeCAD 更喜欢它,但仍希望项目能持续维护并挺过 DMCA。(少数人) > 我曾重度使用 Fusion360,一直盼望出现一个开源替代;试做一些业余建模时感觉它相当能干。(@jpettersson)

认为人工智能自动控制 *Craft 工具有被低估的商业与反盗版价值

  • larodi 强调,让人工智能自动控制这类 *Craft 工具并不是噱头,而是能打通昂贵授权和自动化链条的关键,并顺带减少盗版风险。(少数人) > 这些 *Craft 包由人工智能自动控制的高价值常被低估:它能成为众多自动化链条里缺失的一环,尤其在商业代理推销昂贵授权时;同时也间接打击盗版及其风险。(@larodi)

质疑自研 Truck 内核、B-rep 硬骨头与项目成熟度

  • bruckie 指出 SolidCraft 似乎用 Truck 建模内核,而从头做 B-rep 内核工作量极大,因此怀疑它能多快成熟;wccrawford 则拿它和 FreeCAD 改参数时的老问题对比,问它是否一开始就能避免。(少数人)
  • phkahler 也不看好进展速度,认为他们仍有未解决的硬问题,并建议与其自研,不如用人工智能把 OCCT 转成 Rust 或直接包装 OpenCASCADE 使用。(少数人) > 我不认为这个项目会在他们仍未解决的硬骨头上走得很远,更好的做法是用人工智能把 OCCT 内核转成 Rust,或直接包装使用。(@phkahler)

怀疑人工智能生成或辅助 CAD 工作流的实用性和长期维护性

  • mijoharas 试过让代理生成 FreeCAD 和 OpenSCAD 模型,结果既不容易编辑,OpenSCAD 还缺乏视觉推理,整体比自己做还慢;InsidiousWombat 发现让大语言模型直接写 Python 生成 FreeCAD 文件可以绕开 MCP,但成品仍有经验不足者才会犯的装配问题。(少数人)
  • zamalek 担心计算机辅助设计文件生命周期极长,若软件主要由人工智能生成,五年后项目是否还活跃是个隐患。(少数人) > 我试过让代理生成 FreeCAD 和 OpenSCAD 模型,但它不会先画参数化草图再拉伸,OpenSCAD 也缺乏视觉推理,结果比我自己做还慢,而且不能编辑生成结果。(@mijoharas)

认为“用 Rust”标题是吸引关注的重要因素

  • brunoborges 直接怀疑,如果标题里没有“用 Rust”,这篇帖子不会获得现在这么多的关注。(少数人) > 如果标题里没有“用 Rust”,这篇帖子还会这么受关注吗?(@brunoborges)

对界面血统和命名仍有疑惑

  • carra 看图像觉得它可能仿 Autodesk Inventor,也可能因名字而像 Solid Edge;Fabricio20 原以为它是 *Craft 家族里的 CadCraft,但表示更喜欢用 Fusion 作为界面基础这个做法。(少数人) > 我原以为它是 *Craft 家族里的 CadCraft,不过我更喜欢用 Fusion 作为界面基础这个做法。(@Fabricio20)

呼吁补齐计算机辅助制造与三维打印等专业功能

  • androiddrew 表示计算机辅助设计已经不错,但真正想要的是计算机辅助制造;rts-gordon 则询问是否支持三维打印,认为这对专业用户很有用。(少数人) > 计算机辅助设计已经很好,但我真正想要的是计算机辅助制造。(@androiddrew)

有价值的补充

  • 据 bruckie 观察,SolidCraft 似乎使用 Truck 建模内核;此前 ttouch 已用 Truck 做过浏览器计算机辅助设计工具 CADmium,几个月后又用 OpenCASCADE 做了 CADara,而从头实现一个 B-rep 内核的工作量极大。
  • FreeCAD 过去多年在改参数时会出现某些功能问题;wccrawford 提到它最近已至少部分修复了剩余问题,因此新工具是否从一开始就避免这类参数化隐患值得关注。
  • phkahler 以 SolveSpace 的经验补充:Claude 曾提交大量修复 NURBS 布尔运算问题的代码,分析相当出色,但多数补丁仍要经过多位专家反复审查后才被接受;此前人类多次尝试将 SolveSpace 从 GTK3 迁移到 GTK4 都失败,后来有人用 Claude 做出了质量不错的 GTK4 分支,说明人工智能辅助开发进步明显,但关键修改仍离不开人类专家审查。(@phkahler)
  • phkahler 还提到,OCCT 是成熟的 C++ 计算机辅助设计内核,因此他认为与其在 Rust 里从头做 B-rep,不如用人工智能把 OCCT 转换或包装使用;他自己则优先给 SolveSpace 补做多次原型过的命名参数等功能。