brep_kernel/abi/
curves.rs1use 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}