news 2026/11/4 11:56:36

免安装的浏览器 CAD 五分钟上手:SolidCraft 改一个参数,整个零件跟着重建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
免安装的浏览器 CAD 五分钟上手:SolidCraft 改一个参数,整个零件跟着重建

免安装的浏览器 CAD 五分钟上手:SolidCraft 改一个参数,整个零件跟着重建

【免费下载链接】solidcraftSolidCraft: an open-source parametric 3D CAD application built in pure Rust. Desktop, web, and automation through MCP.项目地址: https://gitcode.com/gh_mirrors/so/solidcraft

SolidCraft 是一个纯 Rust 编写的开源参数化 3D CAD:桌面应用、浏览器 WASM 端和给 AI 代理用的 MCP 服务器共享同一套内核与同一套命令体系,不存在功能阉割。下文免安装跑一遍浏览器版,并拆解"改一个参数,整个模型重建"的机制。

先读懂分层:一个内核如何装进三种入口

动手之前先看 architecture.md 里的分层表:workspace 按层切分,crate 只能依赖更低的层,cargo xtask layers会强制校验。自底向上是geom(向量、平面、网格)→sketch/kernel/render(约束求解器、B-rep 内核边界、光栅化)→doc(参数、表达式、特征时间线及其增量求值)→io(设计文件与 STEP/3MF 等导入导出)→engine(会话与命令注册表,"用户能做的一切都是一条命令")→ui-egui/mcp(可替换的前端和 MCP 服务),最上面才是solidcraft与solidcraft-cli两个应用壳。

浏览器版的位置一句话:它不是重写版,而是桌面前端编译成 wasm 后换了个宿主。main.rs 的文件头注释写得直白——通过 eframe 的 web runner 运行与桌面版相同的solidcraft_ui_egui::SolveApp,WebGPU 可用则用 WebGPU,否则回退 WebGL2;本地构建命令是trunk build --release(building.md)。入口本身就一页 HTML:一个全屏<canvas>加一行加载提示,其余全在 wasm 里完成。首次访问后应用本身可离线运行,浏览器会留一份副本(getting-started)。

分层带来的直接后果:工具栏点击、JSON 脚本、solidcraft-cli、控制通道、MCP 工具,走的是同一份命令注册表,全量清单见 features.md。浏览器里每一次点击,本质上都是往这套 WASM CAD 内核里发一条命令。

实操一遍:把 thickness 从 8 mm 改成 12 mm,看时间线怎么重建

打开网页入口,URL 上带?sample,内置示例 Sample Plate 直接加载。它的构建脚本就在 sample.rs,共 24 条命令,主干是这样:

{"commands": [ {"command": "parameters.change", "params": {"name": "width", "expression": "80 mm"}}, {"command": "parameters.change", "params": {"name": "thickness", "expression": "8 mm"}}, {"command": "sketch.create", "params": {"plane": "XY", "name": "Base"}}, {"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [80, 50]}}, {"command": "sketch.constraint.coincident", "params": {"a": "p1", "b": "origin"}}, {"command": "sketch.dimension", "params": {"entities": ["l1"], "value": "width"}}, {"command": "sketch.finish", "params": {}}, {"command": "solid.extrude", "params": {"distance": "thickness", "body_name": "Plate"}}, {"command": "solid.fillet", "params": {"edges": [[0,0,4],[80,0,4],[80,50,4],[0,50,4]], "radius": "6 mm"}} ]}

省略的部分是两枚 Ø8 通孔、顶面 Ø24 凸台和 Ø12 底孔;它们的平面偏移量与拉伸距离全部引用thickness。注意sketch.dimension的 value 写的是width而不是80——尺寸值直接绑定用户参数,这就是参数化建模的最小闭环。

实操线四步:

  1. 加载内置示例:?sample相当于把上面脚本一次性跑完,命名 "Sample Plate"。
  2. 改一个参数:打开 Change Parameters(即parameters.change命令),把thickness的表达式改成12 mm回车。
  3. 观察增量重建:板厚、凸台平面、底孔平面全部跟随新值。规则写在 parameters.md——时间线从第一个引用该参数的特征起重建,而不是推倒全部;引擎在 eval.rs 里用last_recomputed记录每次求值实际重算了几个特征。sample.rs 里的测试断言了这件事:改成 12 mm 后模型无一处报错,零件顶面精确落在 26 mm(板厚 12 + 凸台 14),底孔依然打穿。
  4. 手动追加一条特征再回滚:选中顶面执行solid.fillet,时间线多一格;然后移动回滚标记timeline.rollback(features.md 里的 Move Timeline Marker),零件退回回滚点之前的状态,不必连按 Ctrl+Z。

仓库自带的演示动图记录了另一轮完整迭代:树莓派 4 外壳的参数化草图、圆角、抽壳、阵列支架,最后把高度从 24 mm 改成 32 mm,整个模型当场重建,6 倍速播放。

两个机制细节值得记住:表达式是单位感知的(README 的卖点清单原话 "unit-aware expressions"),2 * width + 5 mm这类写法合法;约束求解是自研的,草图里的尺寸由求解器驱动,参数改动的传播靠时间线而非全局刷新。

对一笔差异账:浏览器版到底舍掉了什么

"同一套代码"不等于零差异。差异的来源是浏览器沙箱,源码把每一项都交代得明白:

维度桌面版浏览器版
渲染管线wgpu 原生后端,MSAA 默认 4×,24 位深度 + 8 位模板(main.rs 的MSAA/STENCIL_BITS常量)eframe web runner,32 位浮点深度,模板缓冲为 0,注释直言 "eframe's web painter has no stencil buffer"(main.rs)
文件存储系统对话框直接读写磁盘虚拟/opfs/路径后接 OPFS(浏览器按源隔离的私有存储);未保存工作每 30 秒自动备份,离开页面时弹beforeunload确认;页面非 HTTPS/localhost 时降级 localStorage,容量"几 MB 顶天"(files.rs)
空间鼠标HID 直读六轴,Windows/macOS/Linux 三套驱动(space_mouse.rs)走浏览器 Gamepad API,Chrome/Edge 可用,Firefox 不枚举设备(getting-started)
外部自动化--control PORT控制端口,solidcraft-cli mcp --connect桥接驱动态 app(mcp.md)无控制端口,改由页内window.solidcraft.execute(...)驱动,命令 id 与撤销历史和桌面控制通道一致(browser-api.md)
崩溃恢复恢复文件写本地用户数据目录(recovery.rs)恢复文件存 OPFS,重开页面弹 "Recover unsaved work?" 询问
CJK 字体本地内置界面切到中日韩语言才按需拉取字体文件,拉取失败本次会话回退英文,避免拖慢首屏(main.rs 的tick_font)

收窄的原因其实只有一条:浏览器只通过沙箱化 API 暴露 GPU、文件与设备,读不到的要么降级要么去掉。但有一个反向收益:设计数据默认不出浏览器——保存的零件只存在于这个浏览器源头的 OPFS 里,换浏览器、换设备就互相不可见。对在意数据落点的场景,这种隔离反而是加分项;代价是设计想带回家,必须点下载把文件取出来。

按场景选入口:哪些活给浏览器,哪些活装桌面版

  • 快速验证想法、给学生做网页 3D 建模演示、单纯好奇内核怎么跑 → 浏览器版。免下载建模,要求只有 WebGPU 或 WebGL2,?sample直接给一个带参数、带时间线的零件;约束、尺寸、表达式、增量重建这些参数化 CAD 的核心一环不少。
  • 要本地文件管线、空间鼠标 HID、崩溃日志、--control自动化 → 桌面版。README 的 Download 一节有各平台安装包,源码构建只需 stable Rust。
  • 无头建模、批量出图 → CLI 与 MCP。solidcraft-cli run examples/bracket.json --out bracket.step一条命令把 JSON 脚本变成 STEP;solidcraft-cli mcp不开窗口独立跑一个设计会话,AI 代理通过 MCP 工具直接建模、测量、导出(mcp.md)。"无界面建模"这条线在 CLI 侧比浏览器版更完整。

一个可执行的下一步:在浏览器里把零件改到位后,打开文件面板点 "Download open design" 把.sc文件存到电脑,随后用桌面版打开继续编辑,或丢给solidcraft-cli批处理。两个入口共享同一设计格式、同一套命令——在网页里画到一半的零件,随时可以带走。

【免费下载链接】solidcraftSolidCraft: an open-source parametric 3D CAD application built in pure Rust. Desktop, web, and automation through MCP.项目地址: https://gitcode.com/gh_mirrors/so/solidcraft

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 11:55:51

使用python请求接口方式(可进行并发测试)

使用请求接口这个功能是可以支持多个线程的, 正因为它可以这样操作, 所以就能够利用它来对已经写好的那些接口进行并发性的测试工作。请求接口代码如下&#xff1a;#codingutf-8import requestsimport jsonimport threadingimport timeimport uuidclass postrequests():def __i…

作者头像 李华
网站建设 2026/11/4 11:30:34

Hermes Agent安全漏洞响应演练:模拟与改进流程

Hermes Agent安全漏洞响应演练&#xff1a;模拟与改进流程 在当今数字化时代&#xff0c;安全漏洞的及时响应和妥善处理对任何软件项目都至关重要。Hermes Agent作为一款功能强大的AI代理工具&#xff0c;不仅提供了丰富的功能&#xff0c;还在安全方面有着全面的考量。本文将…

作者头像 李华
网站建设 2026/11/4 11:28:45

Hermes Agent安全审计:终极漏洞扫描与合规检查工具指南

Hermes Agent安全审计&#xff1a;终极漏洞扫描与合规检查工具指南 Hermes Agent是一款功能强大的安全审计工具&#xff0c;集成了漏洞扫描与合规检查功能&#xff0c;帮助开发者和安全团队全面保障项目安全。通过自动化的安全检测流程&#xff0c;它能有效识别潜在风险&#…

作者头像 李华
网站建设 2026/11/4 11:25:37

Komikku终极指南:掌握开源漫画阅读器的架构设计与实战技巧

Komikku终极指南&#xff1a;掌握开源漫画阅读器的架构设计与实战技巧 在Android平台寻找一款功能全面、完全免费的开源漫画阅读器吗&#xff1f;Komikku正是您需要的解决方案。这款基于TachiyomiSY和Mihon项目开发的漫画阅读器&#xff0c;不仅继承了前者的优秀基因&#xff…

作者头像 李华