cutrail—— 一个用 Rust 写的材料去除仿真核心正在悄悄补齐 CAM 开源工具链里最关键的那块拼图。先说一个老难题做数控加工的人都知道上机之前必须验证刀路。一段 NC 程序写错了轻则过切报废工件重则撞机伤设备。所以在真实切削之前先用软件把刀具怎么吃材料模拟一遍是制造业几十年的基本操作。但仿真这件事技术门槛极高。核心难点在于布尔运算要稳—— 刀具扫掠体和工件毛坯做求差每一次都是一次三角网格布尔运算真实刀路里大量共面、共边的情况稍不留神就失败多轴要扛得住—— 五轴加工中刀具姿态连续变化扫掠体包络面构造涉及复杂的曲面求交极易算崩要快—— 一个真实刀路动辄几十万段仿真必须能在分钟级跑完否则只是个玩具。市面上成熟的仿真能力大多锁在商用 CAM 里开源侧一直缺一个干净、可嵌入、能当库用的仿真内核。cutrail 想补的就是这个位。它是什么https://crates.io/crates/cutrailApache-2.0 许可是一个用纯 Rust编写的材料去除仿真核心当前版本0.1.1。一句话概括毛坯存成三角网格用鲁棒的网格布尔运算把刀具扫掠过的体积逐段减掉。它支持3 轴和 5 轴铣削可读写 STEP、STL、OBJ、glTF、3MF能拿加工结果和设计模型做比对校验还能编译成WebAssembly跑在浏览器里。项目地址GitHubhttps://github.com/botrail/cutrailcrates.iohttps://crates.io/crates/cutrail文档https://docs.rs/cutrail四个真正值得关注的点1️⃣ 布尔运算不崩靠的是 Manifold仿真的命门是布尔运算。cutrail 把毛坯交给manifold-rustManifold 3D 几何库的纯 Rust 移植来持有和管理。manifold-rust 有两套引擎一套追求与 C 参考实现逐位一致的精确布尔另一套基于精确有理数运算的鲁棒引擎专门吃真实产线里那些破网格——自相交、重复面片、非流形连接、内部空洞、内外翻转的通通能处理。cutrail 直接受益于此所以真实刀路必然产生的共面/共边情况从不会让一次切削失败。这对工程软件来说是刚需不是加分项。2️⃣ 五轴支持姿态可以段内旋转不只是 3 轴。cutrail 允许刀具轴线指向任意方向而且在一个运动段内部轴线本身还可以旋转——这正是五轴联动加工的数学特征。扫掠体用凸包构造并按弦高公差做细分保证精度可控。支持平底、球头、圆角牛鼻立铣刀以及直线、圆弧、螺旋三种运动。// 五轴运动只需给定段两端刀位刀尖 刀轴方向letsegMotionSegment::linear(Pose::tilted_about_y([2.0,5.0,7.0],-25.0),Pose::tilted_about_y([8.0,5.0,7.0],25.0),);3️⃣ 十万段也不掉速分块更新这是性能上最聪明的设计。毛坯被分块tiled每一刀只更新与扫掠体相交的块。官方给出的数据是10 万段之后每段耗时仍是几毫秒量级。代价是可控的规模是可预期的——这才是能用在产线上的算法。4️⃣ I/O 齐全 能当裁判读盒子、圆柱、STL 网格、STEP 文件做毛坯写STL / OBJ / glTF / 3MF三轴平底刀结果还能导出解析 B-rep平面圆柱的 STEP并用 FreeCAD、OpenCASCADE 校验过是合法实体校验和设计模型比体积、查过切/残留区域、检测刀柄/刀座碰撞、统计每段去除量和毛坯边界变化。最后这一点很有价值它让 cutrail 不只是看个动画而是能当质检员——输出一份可量化的加工误差报告这是数字孪生和 MES 工步流转真正吃得上的数据。一段能跑的示例代码# Cargo.toml cutrail 0.1usecutrail::{Engine,EngineOptions,ManifoldKernel,MotionSegment,Pose,StockShape,Tool};fnmain()-cutrail::Result(){// 60×40×20 mm 的方块毛坯按 10 mm 分块letstockStockShape::Box{min:[0.0,0.0,0.0],max:[60.0,40.0,20.0],};letoptionsEngineOptions::default().with_tile_size(10.0);letmutengineEngine::new(ManifoldKernel,[stock],options)?;// 一把 6 mm 平底立铣刀开槽 钻孔lettoolTool::flat_end_mill(6.0,20.0);letslotMotionSegment::linear(Pose::vertical([10.0,10.0,15.0]),Pose::vertical([50.0,10.0,15.0]),);letplungeMotionSegment::linear(Pose::vertical([30.0,30.0,20.0]),Pose::vertical([30.0,30.0,12.0]),);forsegin[slot,plunge]{letreportengine.cut(tool,seg)?;println!({:?}: 去除 {:.2} mm³耗时 {:?},report.outcome,report.removed_volume,report.elapsed);}// 导出结果engine.write_mesh_file(machined.glb)?;engine.write_step(std::fs::File::create(machined.step)?,machined,)?;Ok(())}接口设计得很克制Engine就是状态、切削、校验、历史的一站式入口cut失败返回带类型的错误且不动状态可以放心地一路?。它和同类比特别在哪维度常见做法cutrail几何内核自研体素 / Dexel / 离散面片纯 Rust Manifold 鲁棒布尔输出多停在 STL离散化三轴可出解析 STEP B-rep五轴很多只做 3 轴段内刀轴旋转真五轴性能全量更新分块增量十万段仍毫秒级部署桌面端为主WASM 可跑浏览器/Node有意思的是开源 CAM 领域已经出现一批 Rust 项目G-code 仿真器 https://crates.io/crates/gsim-rs、vcad 的 SDF 八叉树毛坯仿真 https://lib.rs/crates/vcad-kernel-stocksim、纯 Rust 的 STEP 读写 https://lib.rs/crates/monstertruck-io……一个纯 Rust 的 CAM 工具链正在成型而 cutrail 填的正是其中最硬核的材料去除 校验这一环。适合谁用CAM / 数控软件的开发者—— 想要一个可嵌入、可定制、不用绑死商用内核的仿真引擎数字孪生 / 产线数字化团队—— 需要工序模型连续演化、可量化过切残留数据Rust CAD 几何生态的贡献者—— 项目依赖都是纯 Rust 生态manifold-rust、truck无 FFI 负担是好上手的研究对象学术方向—— 材料去除算法、碰撞检测、加工精度检验这些老课题正需要可复现的开源实现。一点现实提醒0.1.1 意味着它仍是早期版本。文档里列出的功能已经相当完整但生产环境使用建议先在自有刀路上做充分回归同时纯 Rust 几何生态本身也在快速演进下游依赖manifold-rust、truck的 API 仍可能变动。不过反过来想早期也正是参与进来的最好时机——Star、提 Issue、开 PR都有机会真正影响一个基础库的走向。相关链接 GitHubhttps://github.com/botrail/cutrail crates.iohttps://crates.io/crates/cutrail 文档https://docs.rs/cutrail 几何内核https://crates.io/crates/manifold-rust CAD I/Ohttps://docs.rs/truck-stepio如果你也在做 CAM、几何内核或数控仿真相关的工作欢迎在评论区聊聊——开源这条路同行的人多了才好走。几点说明全文基于 cutrail 在 crates.io 的官方描述及公开的领域资料撰写文中的性能数据十万段、毫秒级为项目官方给出的表述未经本人实测复现示例中Cargo.toml写法与 API 调用均取自官方文档实际使用时请以最新版 docs.rs 为准。