1pub mod arc;
2pub mod precision;
3pub mod dialect;
4pub mod models;
5pub mod gcode;
6
7pub use precision::Precision;
8pub use models::{Vertex, Polyline};
9pub use gcode::{GCodeBuilder, CoordinateMode};
10
11use wasm_bindgen::prelude::wasm_bindgen;
12
13#[wasm_bindgen]
14pub fn generate_gcode(
15 data: &[f64],
16 closed: bool,
17 absolute: bool,
18 places: Option<usize>,
19 scale: Option<f64>
20) -> Option<String> {
21 if data.len() % 3 != 0 { return None; }
22
23 let default = Precision::default();
24 let precision = Precision::new(
25 places.unwrap_or(default.places),
26 scale.unwrap_or(default.scale)
27 );
28
29 let mut pline = Polyline::new();
30 pline.closed = closed;
31
32 for chunk in data.chunks_exact(3) {
33 pline.add_vertex(Vertex::new(chunk[0], chunk[1], chunk[2]));
35 }
36
37 let mode = if absolute { CoordinateMode::Absolute } else { CoordinateMode::Relative };
38
39 GCodeBuilder::new(pline)
40 .with_mode(mode)
41 .with_precision(precision)
42 .build()
43}