Skip to main content

brep_kernel/abi/
curves.rs

1use super::*;
2
3#[wasm_bindgen]
4pub fn line_curve_json(request_json: &str) -> Result<String, JsValue> {
5    let request: LineRequest = json_in(request_json)?;
6    json_out(&make_line(request.start, request.end).map_err(javascript_error)?)
7}
8
9#[wasm_bindgen]
10pub fn arc_curve_json(request_json: &str) -> Result<String, JsValue> {
11    let request: ArcRequest = json_in(request_json)?;
12    json_out(
13        &make_arc(
14            request.center,
15            request.x_axis,
16            request.y_axis,
17            request.radius,
18            request.start_angle,
19            request.end_angle,
20        )
21        .map_err(javascript_error)?,
22    )
23}
24
25#[wasm_bindgen]
26pub fn circle_curve_json(request_json: &str) -> Result<String, JsValue> {
27    let request: CircleRequest = json_in(request_json)?;
28    json_out(
29        &make_circle(request.center, request.normal, request.radius).map_err(javascript_error)?,
30    )
31}
32
33#[wasm_bindgen]
34pub fn parabola_curve_json(request_json: &str) -> Result<String, JsValue> {
35    let request: ParabolaRequest = json_in(request_json)?;
36    json_out(
37        &make_parabola(
38            request.vertex,
39            request.axis,
40            request.latus_direction,
41            request.focal,
42            request.t0,
43            request.t1,
44        )
45        .map_err(javascript_error)?,
46    )
47}
48
49#[wasm_bindgen]
50pub fn hyperbola_curve_json(request_json: &str) -> Result<String, JsValue> {
51    let request: HyperbolaRequest = json_in(request_json)?;
52    json_out(
53        &make_hyperbola(
54            request.center,
55            request.major_axis,
56            request.minor_axis,
57            request.a,
58            request.b,
59            request.t0,
60            request.t1,
61        )
62        .map_err(javascript_error)?,
63    )
64}
65
66#[wasm_bindgen]
67pub fn uniform_clamped_knots_json(
68    control_point_count: usize,
69    degree: usize,
70) -> Result<String, JsValue> {
71    json_out(
72        &uniform_clamped_knots(control_point_count, degree).map_err(javascript_error)?,
73    )
74}
75
76#[wasm_bindgen]
77pub fn solve_banded_json(request_json: &str) -> Result<String, JsValue> {
78    let request: BandedSolveRequest = json_in(request_json)?;
79    json_out(
80        &solve_banded(&request.matrix, &request.rhs, request.bandwidth)
81            .map_err(javascript_error)?,
82    )
83}
84
85#[wasm_bindgen]
86pub fn solve_dense_json(request_json: &str) -> Result<String, JsValue> {
87    let request: DenseSolveRequest = json_in(request_json)?;
88    json_out(&solve_dense(request.matrix, request.rhs).map_err(javascript_error)?)
89}
90
91#[wasm_bindgen]
92pub fn segment_intersection_json(request_json: &str) -> Result<String, JsValue> {
93    let request: SegmentIntersectionRequest = json_in(request_json)?;
94    json_out(&segment_intersection(
95        request.a1,
96        request.b1,
97        request.a2,
98        request.b2,
99        request.tolerance,
100    ))
101}
102
103#[wasm_bindgen]
104pub fn point_in_polygon_json(request_json: &str) -> Result<String, JsValue> {
105    let request: PointInPolygonRequest = json_in(request_json)?;
106    json_out(&point_in_polygon(
107        request.point,
108        &request.polygon,
109        request.tolerance,
110    ))
111}
112
113#[wasm_bindgen]
114pub fn parameter_point_in_face_json(request_json: &str) -> Result<String, JsValue> {
115    let request: ParameterPointInFaceRequest = json_in(request_json)?;
116    let classification = parameter_point_in_face(&request.face, request.point, request.tolerance)
117        .map_err(javascript_error)?;
118    let result = match classification {
119        PolygonClass::Inside => "in",
120        PolygonClass::Outside => "out",
121        PolygonClass::Boundary => "boundary",
122    };
123    json_out(result)
124}
125
126#[wasm_bindgen]
127pub fn interpolate_curve_thinned_json(request_json: &str) -> Result<String, JsValue> {
128    let request: ThinnedCurveRequest = json_in(request_json)?;
129    json_out(
130        &interpolate_curve_thinned(&request.points, request.degree, request.maximum_points)
131            .map_err(javascript_error)?,
132    )
133}
134
135#[wasm_bindgen]
136pub fn validate_brep_json(solid_json: &str) -> Result<String, JsValue> {
137    let solid: BrepSolid = json_in(solid_json)?;
138    json_out(&solid.validate())
139}
140
141#[wasm_bindgen]
142pub fn validate_brep_detailed_json(solid_json: &str) -> Result<String, JsValue> {
143    let solid: BrepSolid = json_in(solid_json)?;
144    let policy = KernelTolerances::for_solid(&solid, 1e-7);
145    json_out(&solid.validate_detailed(&policy))
146}