1use super::*;
2
3#[wasm_bindgen]
4pub fn extrude_brep_json(request_json: &str) -> Result<String, JsValue> {
5 let request: ExtrudeBrepRequest =
6 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
7 let solid = extrude_profile_brep(&request.profile, request.direction, request.distance)
8 .map_err(javascript_error)?;
9 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
10}
11
12#[wasm_bindgen]
13pub fn revolve_brep_json(request_json: &str) -> Result<String, JsValue> {
14 let request: RevolveBrepRequest =
15 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
16 let solid = revolve_profile_brep_named(
17 &request.profile,
18 request.axis_point,
19 request.axis_direction,
20 request.angle,
21 &request.side_names,
22 &request.cap_names,
23 )
24 .map_err(javascript_error)?;
25 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
26}
27
28#[wasm_bindgen]
29pub fn fillet_edge_json(request_json: &str) -> Result<String, JsValue> {
30 let request: EdgeBlendRequest =
31 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
32 let edge_id = resolve_blend_edge(&request).map_err(javascript_error)?;
33 let solid = fillet_edge(
34 &request.solid,
35 edge_id,
36 request.radius,
37 request.name.as_deref(),
38 )
39 .map_err(javascript_error)?;
40 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
41}
42
43#[wasm_bindgen]
44pub fn fillet_edge_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
45 let request: EdgeBlendRequest =
46 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
47 let edge_id = resolve_blend_edge(&request).map_err(javascript_error)?;
48 let solid = fillet_edge(
49 &request.solid,
50 edge_id,
51 request.radius,
52 request.name.as_deref(),
53 )
54 .map_err(javascript_error)?;
55 solid_buffer(&solid, "{}".into())
56}
57
58#[wasm_bindgen]
59pub fn chamfer_edge_json(request_json: &str) -> Result<String, JsValue> {
60 let request: EdgeBlendRequest =
61 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
62 let edge_id = resolve_blend_edge(&request).map_err(javascript_error)?;
63 let solid = chamfer_edge(
64 &request.solid,
65 edge_id,
66 request.radius,
67 request.name.as_deref(),
68 )
69 .map_err(javascript_error)?;
70 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
71}
72
73#[wasm_bindgen]
74pub fn chamfer_edge_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
75 let request: EdgeBlendRequest =
76 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
77 let edge_id = resolve_blend_edge(&request).map_err(javascript_error)?;
78 let solid = chamfer_edge(
79 &request.solid,
80 edge_id,
81 request.radius,
82 request.name.as_deref(),
83 )
84 .map_err(javascript_error)?;
85 solid_buffer(&solid, "{}".into())
86}
87
88#[derive(Deserialize)]
93pub(crate) struct CornerBlendRequest {
94 pub(crate) solid: BrepSolid,
95 pub(crate) corner_point: Vec3,
96 pub(crate) radius: f64,
97 #[serde(default)]
98 pub(crate) name: Option<String>,
99}
100
101#[derive(Deserialize)]
105pub(crate) struct FilletEdgesRequest {
106 pub(crate) solid: BrepSolid,
107 pub(crate) edge_points: Vec<Vec3>,
108 pub(crate) radius: f64,
109 #[serde(default)]
110 pub(crate) chamfer: bool,
111 #[serde(default)]
112 pub(crate) name: Option<String>,
113}
114
115#[wasm_bindgen]
116pub fn fillet_edges_json(request_json: &str) -> Result<String, JsValue> {
117 let request: FilletEdgesRequest =
118 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
119 let solid = fillet_edges(
120 &request.solid,
121 &request.edge_points,
122 None,
123 request.radius,
124 request.chamfer,
125 request.name.as_deref(),
126 )
127 .map_err(javascript_error)?;
128 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
129}
130
131#[wasm_bindgen]
132pub fn fillet_edges_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
133 let request: FilletEdgesRequest =
134 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
135 let solid = fillet_edges(
136 &request.solid,
137 &request.edge_points,
138 None,
139 request.radius,
140 request.chamfer,
141 request.name.as_deref(),
142 )
143 .map_err(javascript_error)?;
144 solid_buffer(&solid, "{}".into())
145}
146
147#[derive(serde::Deserialize)]
148pub(crate) struct FilletEdgesVariableRequest {
149 pub(crate) solid: BrepSolid,
150 pub(crate) edge_points: Vec<Vec3>,
151 pub(crate) radii: Vec<(f64, f64)>,
153 #[serde(default)]
154 pub(crate) chamfer: bool,
155 #[serde(default)]
156 pub(crate) name: Option<String>,
157}
158
159#[wasm_bindgen]
160pub fn fillet_edges_variable_json(request_json: &str) -> Result<String, JsValue> {
161 let request: FilletEdgesVariableRequest =
162 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
163 let solid = fillet_edges_variable(
164 &request.solid,
165 &request.edge_points,
166 None,
167 &request.radii,
168 request.chamfer,
169 request.name.as_deref(),
170 )
171 .map_err(javascript_error)?;
172 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
173}
174
175#[wasm_bindgen]
176pub fn fillet_edges_variable_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
177 let request: FilletEdgesVariableRequest =
178 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
179 let solid = fillet_edges_variable(
180 &request.solid,
181 &request.edge_points,
182 None,
183 &request.radii,
184 request.chamfer,
185 request.name.as_deref(),
186 )
187 .map_err(javascript_error)?;
188 solid_buffer(&solid, "{}".into())
189}
190
191#[derive(serde::Deserialize)]
192pub(crate) struct ChamferEdgesAsymmetricRequest {
193 pub(crate) solid: BrepSolid,
194 pub(crate) edge_points: Vec<Vec3>,
195 pub(crate) d1: f64,
197 pub(crate) d2: f64,
199 #[serde(default)]
200 pub(crate) name: Option<String>,
201}
202
203#[wasm_bindgen]
204pub fn chamfer_edges_asymmetric_json(request_json: &str) -> Result<String, JsValue> {
205 let request: ChamferEdgesAsymmetricRequest =
206 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
207 let solid = chamfer_edges_asymmetric(
208 &request.solid,
209 &request.edge_points,
210 None,
211 request.d1,
212 request.d2,
213 request.name.as_deref(),
214 )
215 .map_err(javascript_error)?;
216 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
217}
218
219#[wasm_bindgen]
220pub fn chamfer_edges_asymmetric_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
221 let request: ChamferEdgesAsymmetricRequest =
222 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
223 let solid = chamfer_edges_asymmetric(
224 &request.solid,
225 &request.edge_points,
226 None,
227 request.d1,
228 request.d2,
229 request.name.as_deref(),
230 )
231 .map_err(javascript_error)?;
232 solid_buffer(&solid, "{}".into())
233}
234
235#[derive(serde::Deserialize)]
236pub(crate) struct ChamferEdgesAngleRequest {
237 pub(crate) solid: BrepSolid,
238 pub(crate) edge_points: Vec<Vec3>,
239 pub(crate) d1: f64,
241 pub(crate) angle: f64,
243 #[serde(default)]
244 pub(crate) name: Option<String>,
245}
246
247#[wasm_bindgen]
248pub fn chamfer_edges_angle_json(request_json: &str) -> Result<String, JsValue> {
249 let request: ChamferEdgesAngleRequest =
250 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
251 let solid = chamfer_edges_angle(
252 &request.solid,
253 &request.edge_points,
254 None,
255 request.d1,
256 request.angle,
257 request.name.as_deref(),
258 )
259 .map_err(javascript_error)?;
260 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
261}
262
263#[wasm_bindgen]
264pub fn chamfer_edges_angle_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
265 let request: ChamferEdgesAngleRequest =
266 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
267 let solid = chamfer_edges_angle(
268 &request.solid,
269 &request.edge_points,
270 None,
271 request.d1,
272 request.angle,
273 request.name.as_deref(),
274 )
275 .map_err(javascript_error)?;
276 solid_buffer(&solid, "{}".into())
277}
278
279#[wasm_bindgen]
280pub fn round_convex_corner_json(request_json: &str) -> Result<String, JsValue> {
281 let request: CornerBlendRequest =
282 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
283 let solid = round_convex_corner(
284 &request.solid,
285 request.corner_point,
286 request.radius,
287 request.name.as_deref(),
288 )
289 .map_err(javascript_error)?;
290 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
291}
292
293#[wasm_bindgen]
294pub fn round_convex_corner_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
295 let request: CornerBlendRequest =
296 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
297 let solid = round_convex_corner(
298 &request.solid,
299 request.corner_point,
300 request.radius,
301 request.name.as_deref(),
302 )
303 .map_err(javascript_error)?;
304 solid_buffer(&solid, "{}".into())
305}
306
307#[wasm_bindgen]
308pub fn loft_brep_json(request_json: &str) -> Result<String, JsValue> {
309 let request: LoftBrepRequest =
310 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
311 let solid = loft_profile_brep(&request.sections).map_err(javascript_error)?;
312 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
313}
314
315#[wasm_bindgen]
316pub fn extrude_brep_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
317 let request: ExtrudeBrepRequest =
318 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
319 let solid = extrude_profile_brep(&request.profile, request.direction, request.distance)
320 .map_err(javascript_error)?;
321 solid_buffer(&solid, "{}".into())
322}
323
324#[wasm_bindgen]
325pub fn extrude_profile_brep_draft_json(request_json: &str) -> Result<String, JsValue> {
326 let request: ExtrudeDraftRequest =
327 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
328 let solid = extrude_profile_brep_draft(
329 &request.profile,
330 request.direction,
331 request.distance,
332 request.draft_angle,
333 request.name.as_deref(),
334 )
335 .map_err(javascript_error)?;
336 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
337}
338
339#[wasm_bindgen]
340pub fn extrude_profile_brep_draft_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
341 let request: ExtrudeDraftRequest =
342 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
343 let solid = extrude_profile_brep_draft(
344 &request.profile,
345 request.direction,
346 request.distance,
347 request.draft_angle,
348 request.name.as_deref(),
349 )
350 .map_err(javascript_error)?;
351 solid_buffer(&solid, "{}".into())
352}
353
354#[wasm_bindgen]
355pub fn rib_from_profile_json(request_json: &str) -> Result<String, JsValue> {
356 let request: RibRequest =
357 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
358 let solid = rib_from_profile(
359 &request.solid,
360 &request.profile,
361 request.thickness,
362 request.extrude_dir,
363 request.plane_normal,
364 request.extrusion,
365 request.name.as_deref(),
366 )
367 .map_err(javascript_error)?;
368 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
369}
370
371#[wasm_bindgen]
372pub fn rib_from_profile_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
373 let request: RibRequest =
374 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
375 let solid = rib_from_profile(
376 &request.solid,
377 &request.profile,
378 request.thickness,
379 request.extrude_dir,
380 request.plane_normal,
381 request.extrusion,
382 request.name.as_deref(),
383 )
384 .map_err(javascript_error)?;
385 solid_buffer(&solid, "{}".into())
386}
387
388#[wasm_bindgen]
389pub fn revolve_brep_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
390 let request: RevolveBrepRequest =
391 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
392 let solid = revolve_profile_brep_named(
393 &request.profile,
394 request.axis_point,
395 request.axis_direction,
396 request.angle,
397 &request.side_names,
398 &request.cap_names,
399 )
400 .map_err(javascript_error)?;
401 solid_buffer(&solid, "{}".into())
402}
403
404#[wasm_bindgen]
405pub fn loft_brep_buffer(request_json: &str) -> Result<WasmSolidBuffer, JsValue> {
406 let request: LoftBrepRequest =
407 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
408 let solid = loft_profile_brep(&request.sections).map_err(javascript_error)?;
409 solid_buffer(&solid, "{}".into())
410}
411
412#[wasm_bindgen]
413pub fn loft_profile_brep_guided_json(request_json: &str) -> Result<String, JsValue> {
414 let request: GuidedLoftRequest =
415 serde_json::from_str(request_json).map_err(|error| javascript_error(error.to_string()))?;
416 let solid = guided_loft_dispatch(&request).map_err(javascript_error)?;
417 serde_json::to_string(&solid).map_err(|error| javascript_error(error.to_string()))
418}