Pure MoonBit 3D printing slicer: STL slicing, polygon offsetting, infill generation & G-code synthesis
+---------------------------------------------------------------+
| 输入:3D 模型文件 (Binary / ASCII STL) |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 1. STL 解码与热床居中对齐 (center_to_bed) |
| 流式解析三角面,计算 AABB 包围盒并平移至热床中心 (0,0,0) |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 2. 截面解析求交 (slice_mesh_at_z) |
| 各三角面与平面 Z = z_i 线性求交,引入 epsilon 微扰消奇异 |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 3. 拓扑线段闭环缝合 (stitch_segments_into_loops) |
| 基于首尾 epsilon 距离贪心重组封闭多边形环 Polygon2 |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 4. ExPolygon 拓扑层级树构建 (build_expolygons) |
| Jordan 奇偶深度判定:外岛 CCW (正面积) vs 内孔 CW (负面积) |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 5. 间隙感知偏置与碰撞消解 (generate_expolygon_perimeters) |
| 距离场分析、自适应截断、薄壁抑制与后置相交校验 |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 6. 跨层表面分类与多元填充 (infill.mbt / surface.mbt) |
| 顶底实心识别、4 种填充几何 (Rectilinear/Grid/Triangles/ |
| Concentric) 与搭桥风扇增强 |
+---------------------------------------------------------------+
|
v
+---------------------------------------------------------------+
| 7. 跑道截面挤出量微积分与 G-code 合成 (generate_gcode) |
| 体积积分计算 E 轴进给量,注入温控、回抽、接缝与分层 G-code |
+---------------------------------------------------------------+moonslicer/
├── types.mbt # 切片配置参数、表面枚举、填充几何模式、材料密度库与接缝策略
├── geom.mbt # 2D/3D 几何向量、线段求交、Polygon2、RDP 化简、ExPolygon 拓扑树
├── stl.mbt # IEEE 754 float32 解码、Binary/ASCII STL 流式解析器
├── slice.mbt # 三角形截面求交与拓扑线段链式闭环重构
├── offset.mbt # 角平分线偏置算法、多孔间隙分析与碰撞消解引擎
├── surface.mbt # 跨层表面分类引擎 (TopSolid / BottomSolid / InternalSparse)
├── infill.mbt # 多元填充生成器 (Rectilinear / Grid / Triangles / Concentric)
├── gcode.mbt # 跑道截面微积分、起针接缝排布、搭桥风控与 G-code 合成器
├── pipeline.mbt # 端到端切片流程编排器与模型统计评估
├── cmd/main/ # 独立命令行工具 CLI (slice / info / help)
├── fixtures/ # 标准测试模型库 (校准立方体、薄壁双孔干涉构件等)
├── examples/ # HTML5 Canvas 交互式刀路可视化工具
├── *wbtest.mbt # 47 项白盒与极限边界测试套件 (覆盖碰撞消解、多元填充、RDP化简等)
└── docs/ # 技术设计与量化基准白皮书
├── architecture.md # 详细算法推导与工程设计文档
└── BENCHMARKS.md # 真实量化基准数据与极限边界测试报告# 执行静态类型推导与语法检查
moon check
# 验证 WebAssembly 目标架构兼容性
moon check --target wasm
moon check --target wasm-gc
# 运行全套 47 项白盒、集成与性能基准测试
moon test
# 代码格式化规范检查
moon fmt --checkmoon run cmd/main -- info -i fixtures/dual_holes_collision.stlReading STL file: fixtures/dual_holes_collision.stl (5597 bytes)...
----------------------------------------
Mesh Inspection Report:
Triangle Facets: 44
Bounding Width (X):30 mm
Bounding Depth (Y):15 mm
Bounding Height (Z):4 mm
Z Range: [0, 4] mm
Estimated Layers: 19 (at 0.2mm)
----------------------------------------moon run cmd/main -- slice -i fixtures/dual_holes_collision.stl -o output.gcode \
--layer-height 0.2 \
--initial-height 0.28 \
--line-width 0.4 \
--walls 2 \
--bottom-solid 3 \
--top-solid 3 \
--density 0.2 \
--pattern grid \
--seam sharpest \
--material pla \
--cost-per-kg 120.0 \
--speed 50.0Loading model from: fixtures/dual_holes_collision.stl...
Parsing mesh (5597 bytes)...
Mesh: 44 facets, 30x15x4 mm
Slicing layers (height: 0.2 mm, pattern: Grid, seam: SharpestCorner)...
Synthesizing G-code (19 layers)...
----------------------------------------
Slicing Completed Successfully!
Output File: output.gcode
Total Layers: 19
Collisions Resolved:38
Filament Extruded: 317.24 mm
Filament Mass: 0.95 g
Estimated Cost: ¥0.11
Est. Print Time: 5.87 min
----------------------------------------| 评测模块 | 基准指标 / 极限场景 | 实测表现 |
|---|---|---|
| 偏置碰撞消解 | 密集 6 孔阵列(间隙 1.2mm) | 100% 杜绝孔间干涉,交叉相交数为 0 |
| 轮廓 RDP 化简 | 40 个共线冗余顶点闭合多边形 | 顶点压缩率 90.0%,截面积偏差严格为 0.000% |
| 多元填充生成 | Rectilinear, Grid, Triangles, Concentric | 4 种工业填充拓扑自动避空,线性缩放 |
| 物理微积分 | PLA/PETG/ABS/TPU 耗材质量与成本推算 | 扁平跑道截面连续积分,误差 < 0.05% |
| 极限边界防线 | 退化三角面、0.25mm 薄壁、0% 与 100% 填充、负坐标居中 | 47 项自动化白盒与黑盒测试 100% 通过 |
| 维度 | 当前功能支持 |
|---|---|
| 输入模型格式 | 严格 2-流形闭合三角形网格(Binary IEEE 754 与 ASCII 格式 STL) |
| 拓扑几何支持 | 任意平面封闭多边形、单层多独立岛屿、多层嵌套内孔、RDP 几何轮廓自适应化简 |
| 轮廓偏置机制 | 双向角平分线法向量偏置,支持间隙场分析、自适应截断与薄壁多层壁抑制 |
| 接缝起针策略 | 最锐角隐藏(SharpestCorner)、最短空程(Nearest)、几何对齐(Aligned)、随机(Random) |
| 内部填充样式 | Rectilinear (线性交替)、Grid (双向正交)、Triangles (三角晶格)、Concentric (同心环) |
| 挤出微积分模型 | 扁平跑道截面(Stadium Cross-section)物理微积分,绝对坐标 E 轴推进 |
| 材料质量建模 | 内建 PLA、PETG、ABS、TPU 材料密度与成型成本实时推算 |
| 搭桥风扇控制 | 悬垂搭桥表面自动触发满速冷却风扇(M106 S255)与自适应流量修正 |
| 固件格式输出 | 标准 Marlin / RepRap / Klipper 兼容 G-code |
impl Show for FilamentMaterialpub(all) struct GCodeResult {
gcode : String
total_filament_mm : Double
total_filament_grams : Double
estimated_cost : Double
total_layers : Int
estimated_print_time_sec : Double
travel_time_sec : Double
extrusion_time_sec : Double
total_collisions_resolved : Int
} derive(Debug)impl Show for InfillPatternpub(all) struct MeshSliceStats {
triangle_count : Int
width : Double
depth : Double
height : Double
estimated_layers : Int
min_z : Double
max_z : Double
} derive(Debug)fn SliceLayer::new(z : Double, polygons : Array[Polygon2], expolygons? : Array[ExPolygon]) -> SliceLayerpub(all) struct SlicerConfig {
layer_height : Double
initial_layer_height : Double
line_width : Double
wall_count : Int
bottom_solid_layers : Int
top_solid_layers : Int
infill_density : Double
infill_angle : Double
infill_pattern : InfillPattern
seam_mode : SeamMode
material : FilamentMaterial
filament_cost_per_kg : Double
filament_diameter : Double
nozzle_temp : Int
bed_temp : Int
fan_speed : Int
bridge_fan_speed : Int
bridge_speed : Double
bridge_flow_ratio : Double
print_speed : Double
solid_infill_speed : Double
travel_speed : Double
retract_distance : Double
retract_speed : Double
} derive(Debug)impl Show for SurfaceTypefn calculate_delta_e(move_length : Double, line_width : Double, layer_height : Double, filament_diameter : Double) -> Doublefn calculate_extrusion_area(line_width : Double, layer_height : Double) -> Doublefn classify_infill_segment(seg : Segment2, layer_idx : Int, layers : Array[SliceLayer], config : SlicerConfig) -> SurfaceTypefn classify_island_surface(island : ExPolygon, layer_idx : Int, layers : Array[SliceLayer], config : SlicerConfig) -> SurfaceTypefn format_f3(val : Double) -> Stringfn generate_expolygon_infill(expoly : ExPolygon, pattern : InfillPattern, density : Double, line_width : Double, layer_idx : Int, base_angle : Double) -> Array[Segment2]fn generate_expolygon_perimeters(expoly : ExPolygon, wall_count : Int, line_width : Double) -> ExPolygonPerimetersfn generate_gcode(layers : Array[SliceLayer], config : SlicerConfig, bed_center_x? : Double, bed_center_y? : Double) -> GCodeResultfn math_sin(rad : Double) -> Doublefn read_f32_le(data : Bytes, offset : Int) -> Doublefn slice_mesh_to_gcode(mesh : Mesh3, config? : SlicerConfig, bed_center_x? : Double, bed_center_y? : Double) -> GCodeResultfn slice_stl_bytes_to_gcode(bytes : Bytes, config? : SlicerConfig, bed_center_x? : Double, bed_center_y? : Double) -> Result[GCodeResult, SlicerError]Install
Download zipPure MoonBit 3D printing slicer: STL slicing, polygon offsetting, infill generation & G-code synthesis