Pure MoonBit 3D solid modeling kernel: signed distance primitives, exact CSG booleans, marching tetrahedra meshing, STL/OBJ export, no FFI.
moon test # 31 个测试(native / js / wasm-gc 都要跑)
moon run examples/demo # 盒减球,打印体积/面积/拓扑
moon run examples/bench --release # 网格化耗时基线
moon check --deny-warn
moon fmt --check
# 浏览器验收壳
node tools/build_web.mjs # 编译 wasm 并复制到 examples/web/
node tools/serve.mjs # 打开 http://localhost:8000/?selftest=1
node tools/wasm_check.mjs # 不开浏览器,在 Node 里跑同一份 wasm
# 一次跑完全部验收项(check/fmt/三后端测试/package/demo/web/oracle)
node tools/acceptance.mjstriangles: 126484
vertices: 63242
volume: 17058.878927955866
watertight: true
euler: 0 (genus 1)| 用例 | 三角形 | wasm-gc | js |
|---|---|---|---|
| 球 r=10,32³ | 26280 | 13.1 ms | 37.6 ms |
| 球 r=10,64³ | 104688 | 64.1 ms | 165.1 ms |
| 立方体 40³ 挖球 r=24,48³ | 107280 | 87.5 ms | 220.1 ms |
| 环面 R=8 r=3,48³ | 36172 | 20.3 ms | 40.5 ms |
| 判据 | 测试 |
|---|---|
| 4 个原语在 1000 个随机点上与解析距离误差 < 1e-12 | sdf_test.mbt |
| 布尔与 min / max / 取负逐点一致 | sdf_test.mbt |
| 球体积误差 < 0.5%(128 分辨率)、盒 < 1%(40 分辨率) | mesh_test.mbt |
| 环面亏格 = 1、欧拉示性数 = 0 | mesh_test.mbt |
| 盒挖两个贯通孔后亏格 = 2、欧拉示性数 = -2、体积误差 < 0.5% | mesh_test.mbt |
| 盒减球体积与球带公式误差 < 1% | mesh_test.mbt |
| 完全被挖空时输出空网格 | mesh_test.mbt |
| 相切球、零厚度板、空交集、贴面格点、退化包围盒、超低分辨率都不崩 | mesh_test.mbt |
| 等值面正好落在格点上时仍水密、体积误差 < 1% | mesh_test.mbt |
| 每条无向边恰好 2 个面(水密) | mesh_test.mbt |
| 同输入两次网格化逐位相同 | mesh_test.mbt |
| 网格指纹等于常量 7885752854646016839(js / wasm-gc 本地跑,native 在 CI 跑,三后端同值) | mesh_test.mbt |
| 分辨率或朝向变化时指纹必然改变(指纹确实覆盖几何与拓扑) | mesh_test.mbt |
| OBJ/ASCII STL 行数与索引范围、字节级确定性 | export_test.mbt |
| 二进制 STL 往返后三角数/顶点数/欧拉示性数不变、体积相对误差 < 1e-6 | export_test.mbt |
| 截断的二进制 STL 返回 None 而不是越界 | export_test.mbt |
| wasm 验收壳 4/4 通过(Node 与浏览器同一份 wasm) | tools/wasm_check.mjs |
| 全部验收项一条命令跑完(check/fmt/三后端测试/package/demo/web/oracle) | tools/acceptance.mjs |
pub(all) struct MeshOptions {
resolution : Int
project : Bool
iterations : Int
}pub(all) struct Vec3 {
x : Double
y : Double
z : Double
}Install
Download zipPure MoonBit 3D solid modeling kernel: signed distance primitives, exact CSG booleans, marching tetrahedra meshing, STL/OBJ export, no FFI.