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