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