Skip to main content

brep_kernel/abi/
primitives.rs

1use super::*;
2
3#[wasm_bindgen]
4pub fn box_brep_json(
5    corner_x: f64,
6    corner_y: f64,
7    corner_z: f64,
8    size_x: f64,
9    size_y: f64,
10    size_z: f64,
11) -> Result<String, JsValue> {
12    let solid = make_box_brep(
13        Vec3::new(corner_x, corner_y, corner_z),
14        size_x,
15        size_y,
16        size_z,
17    )
18    .map_err(javascript_error)?;
19    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
20}
21
22#[wasm_bindgen]
23pub fn pyramid_brep_json(
24    corner_x: f64,
25    corner_y: f64,
26    corner_z: f64,
27    side_length: f64,
28    height: f64,
29    sides: u32,
30) -> Result<String, JsValue> {
31    let solid = make_pyramid_brep(
32        Vec3::new(corner_x, corner_y, corner_z),
33        side_length,
34        height,
35        sides as usize,
36    )
37    .map_err(javascript_error)?;
38    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
39}
40
41#[wasm_bindgen]
42pub fn cylinder_brep_json(
43    base_x: f64,
44    base_y: f64,
45    base_z: f64,
46    axis_x: f64,
47    axis_y: f64,
48    axis_z: f64,
49    radius: f64,
50    height: f64,
51) -> Result<String, JsValue> {
52    let solid = make_cylinder_brep(
53        Vec3::new(base_x, base_y, base_z),
54        Vec3::new(axis_x, axis_y, axis_z),
55        radius,
56        height,
57    )
58    .map_err(javascript_error)?;
59    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
60}
61
62#[wasm_bindgen]
63pub fn cone_brep_json(radius_bottom: f64, radius_top: f64, height: f64) -> Result<String, JsValue> {
64    let solid = make_cone_brep(
65        Vec3::default(),
66        Vec3::new(0.0, 1.0, 0.0),
67        radius_bottom,
68        radius_top,
69        height,
70    )
71    .map_err(javascript_error)?;
72    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
73}
74
75#[wasm_bindgen]
76pub fn sphere_brep_json(radius: f64) -> Result<String, JsValue> {
77    let solid = make_sphere_brep(Vec3::default(), radius, Vec3::new(0.0, 1.0, 0.0))
78        .map_err(javascript_error)?;
79    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
80}
81
82/// Import an ISO-10303-21 (STEP Part 21) document and return the reconstructed
83/// kernel solids as a JSON array of `BrepSolid` records. Round-trips exactly
84/// what `export_step` writes; unsupported entities yield a clear error string.
85#[wasm_bindgen]
86pub fn import_step_json(step_text: &str) -> Result<String, JsValue> {
87    let solids = import_step(step_text).map_err(javascript_error)?;
88    serde_json::to_string(&solids).map_err(|error| javascript_error(error.to_string()))
89}
90
91#[wasm_bindgen]
92pub fn torus_brep_json(major_radius: f64, minor_radius: f64) -> Result<String, JsValue> {
93    let solid = make_torus_brep(
94        Vec3::default(),
95        Vec3::new(0.0, 1.0, 0.0),
96        major_radius,
97        minor_radius,
98    )
99    .map_err(javascript_error)?;
100    serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
101}