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 = 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}