okgeometry-api 1.11.1 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Brep.d.ts +222 -0
- package/dist/Brep.d.ts.map +1 -1
- package/dist/Brep.js +377 -0
- package/dist/Brep.js.map +1 -1
- package/dist/Mesh.d.ts +100 -2
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +258 -4
- package/dist/Mesh.js.map +1 -1
- package/dist/NurbsCurve.d.ts +78 -0
- package/dist/NurbsCurve.d.ts.map +1 -1
- package/dist/NurbsCurve.js +118 -0
- package/dist/NurbsCurve.js.map +1 -1
- package/dist/NurbsSurface.d.ts +23 -0
- package/dist/NurbsSurface.d.ts.map +1 -1
- package/dist/NurbsSurface.js +63 -15
- package/dist/NurbsSurface.js.map +1 -1
- package/dist/Polyline.d.ts +47 -0
- package/dist/Polyline.d.ts.map +1 -1
- package/dist/Polyline.js +45 -0
- package/dist/Polyline.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/wasm-base64.d.ts +1 -1
- package/dist/wasm-base64.d.ts.map +1 -1
- package/dist/wasm-base64.js +1 -1
- package/dist/wasm-base64.js.map +1 -1
- package/dist/wasm-bindings.d.ts +359 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +595 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +7 -3
- package/src/Brep.ts +458 -0
- package/src/Mesh.ts +300 -2
- package/src/NurbsCurve.ts +129 -0
- package/src/NurbsSurface.ts +65 -15
- package/src/Polyline.ts +145 -95
- package/src/index.ts +2 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +308 -0
- package/src/wasm-bindings.js +615 -0
package/src/wasm-bindings.d.ts
CHANGED
|
@@ -20,23 +20,95 @@ export function arc_point_at(cx: number, cy: number, cz: number, nx: number, ny:
|
|
|
20
20
|
*/
|
|
21
21
|
export function brep_boolean_op(a_json: string, b_json: string, op: string, tolerance: number): string;
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Boolean-intersection clip of an exact NURBS curve against a CLOSED solid
|
|
25
|
+
* BREP: the curve is split exactly (knot insertion) at every boundary
|
|
26
|
+
* crossing and each piece is classified by containment. Every returned
|
|
27
|
+
* piece lies exactly on the input curve; closed curves merge the run
|
|
28
|
+
* spanning the parameter seam (same convention as `mesh_clip_polyline`).
|
|
29
|
+
*
|
|
30
|
+
* Packing: `[insideCount, (bufLen, curveData…)·insideCount,
|
|
31
|
+
* outsideCount, (bufLen, curveData…)·outsideCount]` — two concatenated
|
|
32
|
+
* multi-curve packings, inside pieces first. Returns an empty buffer on
|
|
33
|
+
* failure (malformed input, or a BREP that is not a closed solid).
|
|
34
|
+
*/
|
|
35
|
+
export function brep_clip_curve_op(curve_data: Float64Array, brep_json: string): Float64Array;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Closest BREP face to a 3D point. Returns [faceIndex, u, v, distance,
|
|
39
|
+
* isNurbs] ((u, v) in the surface's KNOT domain) or empty on failure.
|
|
40
|
+
*/
|
|
41
|
+
export function brep_closest_face(json: string, x: number, y: number, z: number): Float64Array;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Find all points where a NURBS curve pierces a BREP's faces: per face, the
|
|
45
|
+
* curve is intersected with the EXACT surface and kept only when the hit
|
|
46
|
+
* lies INSIDE the face's trimmed region; crossings on shared edges are
|
|
47
|
+
* deduplicated (smallest face index kept).
|
|
48
|
+
*
|
|
49
|
+
* `curve_data` is the standard NURBS curve encoding. Hits are sorted by
|
|
50
|
+
* curve parameter (normalized [0, 1]); (u, v) are in the face's OWN
|
|
51
|
+
* parameter space (knot domain for NURBS faces, plane-frame coordinates for
|
|
52
|
+
* planar faces).
|
|
53
|
+
*
|
|
54
|
+
* Packing: `[count, (x, y, z, curveParam, faceIndex, u, v)·count]`.
|
|
55
|
+
* Returns an empty buffer on malformed input.
|
|
56
|
+
*/
|
|
57
|
+
export function brep_curve_intersection_op(brep_json: string, curve_data: Float64Array): Float64Array;
|
|
58
|
+
|
|
23
59
|
/**
|
|
24
60
|
* All BREP edges as polylines: [num_polylines, n1, x,y,z..., n2, ...].
|
|
25
61
|
*/
|
|
26
62
|
export function brep_edges(json: string, tolerance: number): Float64Array;
|
|
27
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Extract one face as a standalone single-face TRIMMED sheet BREP (trim
|
|
66
|
+
* loops, pcurves, edges and vertices preserved). Returns JSON, empty on
|
|
67
|
+
* failure.
|
|
68
|
+
*/
|
|
69
|
+
export function brep_extract_face(json: string, face_index: number): string;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* ALL faces as standalone single-face trimmed sheet BREPs, in one crossing
|
|
73
|
+
* (the source JSON is parsed once). Returns a JSON ARRAY aligned with face
|
|
74
|
+
* indices; faces that fail to extract are `null`.
|
|
75
|
+
*/
|
|
76
|
+
export function brep_extract_faces(json: string): string;
|
|
77
|
+
|
|
28
78
|
/**
|
|
29
79
|
* Extrude a profile curve into a BREP (closed profile → capped solid,
|
|
30
80
|
* open profile → sheet). Returns JSON.
|
|
31
81
|
*/
|
|
32
82
|
export function brep_extrude_curve(curve_data: Float64Array, dx: number, dy: number, dz: number, height: number): string;
|
|
33
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Exact (u, v) of a point on a specific BREP face (closest-point Newton for
|
|
86
|
+
* NURBS, frame projection for planes). Returns [u, v, distance, isNurbs].
|
|
87
|
+
*/
|
|
88
|
+
export function brep_face_closest_uv(json: string, face_index: number, x: number, y: number, z: number): Float64Array;
|
|
89
|
+
|
|
34
90
|
/**
|
|
35
91
|
* Iso-parametric curve of a NURBS face's backing surface (untrimmed).
|
|
36
92
|
* Returns curve data, or empty for planar faces.
|
|
37
93
|
*/
|
|
38
94
|
export function brep_face_iso_curve(json: string, face_index: number, t: number, u_dir: boolean): Float64Array;
|
|
39
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Exact isocurve(s) of a BREP face at KNOT-domain parameter `t`, CLIPPED to
|
|
98
|
+
* the face's trimmed region. `u_dir = true` runs along u at fixed v = t.
|
|
99
|
+
* Line pieces (planar faces) are encoded as degree-1 NURBS.
|
|
100
|
+
* Packing: [curveCount, (bufLen, curveData…)·curveCount] where curveData is
|
|
101
|
+
* the standard NURBS curve encoding.
|
|
102
|
+
*/
|
|
103
|
+
export function brep_face_iso_curves_trimmed(json: string, face_index: number, t: number, u_dir: boolean): Float64Array;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Like `brep_face_iso_curves_trimmed`, but `t` is NORMALIZED [0, 1] across
|
|
107
|
+
* the face's trim extent in the fixed direction — callers don't need the
|
|
108
|
+
* surface knot domain. Same packing.
|
|
109
|
+
*/
|
|
110
|
+
export function brep_face_iso_curves_trimmed_normalized(json: string, face_index: number, t: number, u_dir: boolean): Float64Array;
|
|
111
|
+
|
|
40
112
|
/**
|
|
41
113
|
* Geometric backing of a face.
|
|
42
114
|
* Returns [0, ox,oy,oz, ux,uy,uz, vx,vy,vz] for planes,
|
|
@@ -44,22 +116,79 @@ export function brep_face_iso_curve(json: string, face_index: number, t: number,
|
|
|
44
116
|
*/
|
|
45
117
|
export function brep_face_surface(json: string, face_index: number): Float64Array;
|
|
46
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Underlying surface of a face CROPPED to its trim extent, ALWAYS as a NURBS
|
|
121
|
+
* surface (planar faces become exact degree-1 patches). Returns surface
|
|
122
|
+
* data, empty on failure.
|
|
123
|
+
*/
|
|
124
|
+
export function brep_face_surface_cropped(json: string, face_index: number): Float64Array;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Batch variant of `brep_face_surface_cropped` for all faces in one
|
|
128
|
+
* crossing. Packing: [faceCount, (bufLen, surfaceData…)·faceCount], aligned
|
|
129
|
+
* with face indices — a face that fails to crop gets bufLen 0.
|
|
130
|
+
*/
|
|
131
|
+
export function brep_face_surfaces_cropped(json: string): Float64Array;
|
|
132
|
+
|
|
47
133
|
/**
|
|
48
134
|
* Tessellate a single BREP face. Returns the standard mesh buffer.
|
|
49
135
|
*/
|
|
50
136
|
export function brep_face_tessellate(json: string, face_index: number, tolerance: number): Float64Array;
|
|
51
137
|
|
|
138
|
+
/**
|
|
139
|
+
* UV bounding box of a face's trim loops in surface parameter space:
|
|
140
|
+
* [u_min, u_max, v_min, v_max]. Empty on failure.
|
|
141
|
+
*/
|
|
142
|
+
export function brep_face_trim_bounds(json: string, face_index: number): Float64Array;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Convert a closed manifold triangle mesh into a planar-face BREP.
|
|
146
|
+
* `normal_angle_tol_deg` ≤ 0 selects the default (≈0.057°); `max_faces` 0 =
|
|
147
|
+
* default guard (4096). Returns BREP JSON or {"error": ...}.
|
|
148
|
+
*/
|
|
149
|
+
export function brep_from_mesh_buffer(vertex_count: number, buffer: Float64Array, normal_angle_tol_deg: number, max_faces: number): string;
|
|
150
|
+
|
|
52
151
|
/**
|
|
53
152
|
* BREP structure summary: [face_count, edge_count, vertex_count, is_closed].
|
|
54
153
|
*/
|
|
55
154
|
export function brep_info(json: string): Float64Array;
|
|
56
155
|
|
|
156
|
+
/**
|
|
157
|
+
* TRIM-EXACT intersection curves between two BREPs (solids OR sheets): the
|
|
158
|
+
* parametric boolean's SSI → clip → convergence stages run and the fitted 3D
|
|
159
|
+
* intersection edges come back WITHOUT classification/assembly.
|
|
160
|
+
*
|
|
161
|
+
* A closed intersection loop may come back as several contiguous pieces
|
|
162
|
+
* (split at surface seams and face-boundary crossings); the pieces chain
|
|
163
|
+
* end-to-end exactly. Coincident (overlapping) face pairs contribute no
|
|
164
|
+
* curves.
|
|
165
|
+
*
|
|
166
|
+
* Packing: `[curveCount, (bufLen, curveData…)·curveCount]` (standard NURBS
|
|
167
|
+
* curve encoding). Returns an EMPTY buffer on failure (invalid BREP JSON or
|
|
168
|
+
* a pipeline error) — distinguishable from `[0]`, which means the operands
|
|
169
|
+
* genuinely do not intersect.
|
|
170
|
+
*/
|
|
171
|
+
export function brep_intersection_curves_op(a_json: string, b_json: string, tolerance: number): Float64Array;
|
|
172
|
+
|
|
57
173
|
/**
|
|
58
174
|
* Loft through profile curves into a BREP.
|
|
59
175
|
* Input: [num_curves, curve1_data..., curve2_data...]. Returns JSON.
|
|
60
176
|
*/
|
|
61
177
|
export function brep_loft_curves(data: Float64Array): string;
|
|
62
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Intersection curves between a BREP and a triangle mesh.
|
|
181
|
+
*
|
|
182
|
+
* TESSELLATION-BASED (documented approximation): the BREP is tessellated at
|
|
183
|
+
* `tolerance` (pass `<= 0` for the deterministic auto display tolerance)
|
|
184
|
+
* and intersected with the mesh via BVH-pruned tri-tri crossing + chaining.
|
|
185
|
+
*
|
|
186
|
+
* Mesh input is the standard `[vertexCount, positions..., indices...]`
|
|
187
|
+
* buffer. Returns the standard polyline group packing
|
|
188
|
+
* `[num_polylines, n1, x,y,z,..., n2, x,y,z,...]`; empty on failure.
|
|
189
|
+
*/
|
|
190
|
+
export function brep_mesh_intersection_curves_op(brep_json: string, vertex_count: number, mesh_buffer: Float64Array, tolerance: number): Float64Array;
|
|
191
|
+
|
|
63
192
|
/**
|
|
64
193
|
* BREP primitives.
|
|
65
194
|
* kind: "box" [minx,miny,minz, maxx,maxy,maxz]
|
|
@@ -81,12 +210,30 @@ export function brep_revolve_curve(curve_data: Float64Array, ox: number, oy: num
|
|
|
81
210
|
*/
|
|
82
211
|
export function brep_sheet_from_surface(surface_data: Float64Array): string;
|
|
83
212
|
|
|
213
|
+
/**
|
|
214
|
+
* Split a closed solid BREP by a sheet BREP into BOTH capped halves.
|
|
215
|
+
* Returns {"negative": <brep|null>, "positive": <brep|null>} or {"error":...}.
|
|
216
|
+
* Sides follow the sheet normal (negative = behind it), matching
|
|
217
|
+
* `mesh_solid_split_by_surface`.
|
|
218
|
+
*/
|
|
219
|
+
export function brep_split_solid_by_sheet_op(solid_json: string, sheet_json: string, tolerance: number): string;
|
|
220
|
+
|
|
84
221
|
/**
|
|
85
222
|
* Tessellate a BREP into the standard mesh buffer
|
|
86
223
|
* [vertexCount, positions..., indices...]. Crack-free across shared edges.
|
|
87
224
|
*/
|
|
88
225
|
export function brep_tessellate(json: string, tolerance: number): Float64Array;
|
|
89
226
|
|
|
227
|
+
/**
|
|
228
|
+
* Tessellate a BREP with per-face triangle ranges for face-level picking.
|
|
229
|
+
* `tolerance <= 0` selects the deterministic auto display tolerance (from the
|
|
230
|
+
* BREP's own extent), so triangle indices from a previously produced
|
|
231
|
+
* auto-tolerance display mesh stay valid across calls.
|
|
232
|
+
* Packing: [vertexCount, indexCount, rangeCount,
|
|
233
|
+
* positions(3·vc), indices(ic), (face, firstTri, triCount)·rc].
|
|
234
|
+
*/
|
|
235
|
+
export function brep_tessellate_with_face_ranges(json: string, tolerance: number): Float64Array;
|
|
236
|
+
|
|
90
237
|
/**
|
|
91
238
|
* Apply a row-major 4x4 matrix to a BREP. Returns transformed JSON.
|
|
92
239
|
*/
|
|
@@ -428,6 +575,22 @@ export function mesh_chamfer_all_edges(mesh_type: string, params: Float64Array,
|
|
|
428
575
|
*/
|
|
429
576
|
export function mesh_clip_polyline(vertex_count: number, buffer: Float64Array, points: Float64Array, closed: boolean): Float64Array;
|
|
430
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Clip a polyline by an OPEN oriented sheet: split it at every sheet
|
|
580
|
+
* crossing and classify each piece by the SIGNED SIDE of the sheet. This is
|
|
581
|
+
* side classification, NOT containment (unlike `mesh_clip_polyline`, which
|
|
582
|
+
* requires a closed volume): pieces far from the sheet still classify by
|
|
583
|
+
* the nearest facet's normal. `inside` = the positive side, in FRONT of the
|
|
584
|
+
* sheet normal; `outside` = behind it. The sheet may be any non-empty
|
|
585
|
+
* triangle mesh, open or closed; its stored winding defines the normals.
|
|
586
|
+
*
|
|
587
|
+
* Returns two concatenated polyline buffers — inside pieces first, then
|
|
588
|
+
* outside pieces — each encoded as `[num_polylines, n1, x,y,z,..., ...]`
|
|
589
|
+
* (identical packing to `mesh_clip_polyline`). Returns an empty buffer on
|
|
590
|
+
* failure (degenerate polyline/sheet).
|
|
591
|
+
*/
|
|
592
|
+
export function mesh_clip_polyline_by_sheet(vertex_count: number, buffer: Float64Array, points: Float64Array, closed: boolean): Float64Array;
|
|
593
|
+
|
|
431
594
|
/**
|
|
432
595
|
* Compute planar curve normal from ordered points.
|
|
433
596
|
*/
|
|
@@ -544,6 +707,19 @@ export function mesh_get_edge_vertex_pairs(vertex_count: number, buffer: Float64
|
|
|
544
707
|
*/
|
|
545
708
|
export function mesh_get_face_area(vertex_count: number, buffer: Float64Array, face_index: number): number;
|
|
546
709
|
|
|
710
|
+
/**
|
|
711
|
+
* Boundary loops of the coplanar connected face group containing `face_index`.
|
|
712
|
+
*
|
|
713
|
+
* Boundary edges are the directed triangle edges whose reversed twin is not
|
|
714
|
+
* present within the group; chaining them preserves the group's winding.
|
|
715
|
+
* Consecutive collinear points (T-junction subdivisions) are collapsed so
|
|
716
|
+
* consumers receive clean polygon corners.
|
|
717
|
+
*
|
|
718
|
+
* Output format: [loopCount, (pointCount, x, y, z, ...) per loop].
|
|
719
|
+
* Loops are implicitly closed (last point connects back to the first).
|
|
720
|
+
*/
|
|
721
|
+
export function mesh_get_face_boundary_loops(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
|
|
722
|
+
|
|
547
723
|
/**
|
|
548
724
|
* Face centroid as [x, y, z].
|
|
549
725
|
*/
|
|
@@ -634,6 +810,22 @@ export function mesh_planar_face_evaluate(vertex_count: number, buffer: Float64A
|
|
|
634
810
|
*/
|
|
635
811
|
export function mesh_plane_intersect(vertex_count: number, buffer: Float64Array, nx: number, ny: number, nz: number, d: number): Float64Array;
|
|
636
812
|
|
|
813
|
+
/**
|
|
814
|
+
* Compute all transversal crossing points of a polyline with a triangle
|
|
815
|
+
* mesh. Works on OPEN meshes (sheets) — the mesh is NOT required to be a
|
|
816
|
+
* closed volume, unlike `mesh_clip_polyline`.
|
|
817
|
+
*
|
|
818
|
+
* `points` is a flat [x,y,z, ...] vertex list; `closed` marks a closed loop
|
|
819
|
+
* (segment `i` runs `points[i] → points[(i+1) % n]`; open polylines have
|
|
820
|
+
* n−1 segments, closed ones n).
|
|
821
|
+
*
|
|
822
|
+
* Packing: `[count, (x, y, z, segmentIndex, segmentT, triangleIndex)·count]`,
|
|
823
|
+
* sorted by (segmentIndex, segmentT). Shared-edge/vertex crossings dedupe to
|
|
824
|
+
* one hit (smallest triangle index kept); coplanar sliding overlaps yield no
|
|
825
|
+
* hits. Returns an empty buffer on failure (degenerate polyline/mesh).
|
|
826
|
+
*/
|
|
827
|
+
export function mesh_polyline_intersection_points(vertex_count: number, buffer: Float64Array, points: Float64Array, closed: boolean): Float64Array;
|
|
828
|
+
|
|
637
829
|
/**
|
|
638
830
|
* Shift closed boolean cutter curve and adjust height.
|
|
639
831
|
* Returns [height, epsilon, pointCount, x,y,z,...]
|
|
@@ -681,6 +873,28 @@ export function mesh_solid_split_by_surface(vertex_count_a: number, buffer_a: Fl
|
|
|
681
873
|
|
|
682
874
|
export function mesh_solid_split_plane(vertex_count: number, buffer: Float64Array, nx: number, ny: number, nz: number, d: number, operation: string): Float64Array;
|
|
683
875
|
|
|
876
|
+
/**
|
|
877
|
+
* One-shot production path: closed manifold triangle mesh ÷ NURBS surface →
|
|
878
|
+
* both halves as exact capped BREPs, in a single WASM crossing (mesh→BREP
|
|
879
|
+
* conversion, sheet construction and the parametric split all run kernel-side).
|
|
880
|
+
* Returns {"negative": <brep|null>, "positive": <brep|null>} or {"error":...}.
|
|
881
|
+
*/
|
|
882
|
+
export function mesh_split_by_surface_to_brep(vertex_count: number, buffer: Float64Array, surface_data: Float64Array, tolerance: number, normal_angle_tol_deg: number, max_faces: number): string;
|
|
883
|
+
|
|
884
|
+
/**
|
|
885
|
+
* Intersect a polyline with a triangle mesh (open sheets allowed) and split
|
|
886
|
+
* it into pieces at every crossing. Hit points become the shared endpoints
|
|
887
|
+
* of adjacent pieces; a closed loop is opened at the first hit (N hits → N
|
|
888
|
+
* pieces), an open polyline yields N + 1 pieces. With no crossings the
|
|
889
|
+
* original polyline comes back as one piece.
|
|
890
|
+
*
|
|
891
|
+
* Packing: a single flat polyline-group buffer
|
|
892
|
+
* `[num_polylines, n1, x,y,z,..., n2, x,y,z,...]` (same group encoding as
|
|
893
|
+
* `mesh_clip_polyline`, but ONE list — pieces are not classified). Returns
|
|
894
|
+
* an empty buffer on failure.
|
|
895
|
+
*/
|
|
896
|
+
export function mesh_split_polyline(vertex_count: number, buffer: Float64Array, points: Float64Array, closed: boolean): Float64Array;
|
|
897
|
+
|
|
684
898
|
/**
|
|
685
899
|
* Trim an OPEN host surface by all closed cutter meshes in one WASM call.
|
|
686
900
|
*
|
|
@@ -727,6 +941,20 @@ export function mesh_translate(vertex_count: number, buffer: Float64Array, dx: n
|
|
|
727
941
|
*/
|
|
728
942
|
export function nurbs_curve_curve_intersect(data_a: Float64Array, data_b: Float64Array): Float64Array;
|
|
729
943
|
|
|
944
|
+
/**
|
|
945
|
+
* Find all intersections between two NURBS curves, with exact parameters.
|
|
946
|
+
*
|
|
947
|
+
* Inputs are standard NURBS curve encodings
|
|
948
|
+
* `[degree, num_cp, cp_xyz..., weights..., knots...]` (the same format
|
|
949
|
+
* consumed by `sample_nurbs_curve` / produced by `build_nurbs_curve`).
|
|
950
|
+
*
|
|
951
|
+
* Packing: `[count, (x, y, z, paramA, paramB)·count]`. Parameters are
|
|
952
|
+
* normalized to [0, 1]; results are sorted by `paramA`. Coincident
|
|
953
|
+
* (overlapping) curve runs yield NO points (identical curves return
|
|
954
|
+
* `[0]`). Returns an empty buffer on malformed input.
|
|
955
|
+
*/
|
|
956
|
+
export function nurbs_curve_curve_intersect_params(curve_a_data: Float64Array, curve_b_data: Float64Array): Float64Array;
|
|
957
|
+
|
|
730
958
|
/**
|
|
731
959
|
* Intersect a NURBS curve with a plane.
|
|
732
960
|
* Input: same curve format as sample_nurbs_curve + plane normal (nx,ny,nz) and d.
|
|
@@ -734,6 +962,43 @@ export function nurbs_curve_curve_intersect(data_a: Float64Array, data_b: Float6
|
|
|
734
962
|
*/
|
|
735
963
|
export function nurbs_curve_plane_intersect(data: Float64Array, nx: number, ny: number, nz: number, d: number): Float64Array;
|
|
736
964
|
|
|
965
|
+
/**
|
|
966
|
+
* Split a NURBS curve at multiple normalized parameters t ∈ [0, 1].
|
|
967
|
+
*
|
|
968
|
+
* Splitting is exact (knot insertion), so every returned piece lies exactly
|
|
969
|
+
* on the input curve. Parameters are sorted/deduplicated/clamped internally;
|
|
970
|
+
* closed curves are opened at the FIRST parameter (N interior parameters →
|
|
971
|
+
* N pieces), open curves yield N + 1 pieces. With no valid parameters the
|
|
972
|
+
* (clamped) curve comes back as the single piece.
|
|
973
|
+
*
|
|
974
|
+
* `closed_hint` is an explicit topology override: `> 0` forces closed
|
|
975
|
+
* (seam-rejoin) semantics, `0` forces open semantics (an open curve whose
|
|
976
|
+
* endpoints merely coincide keeps N + 1 pieces), `< 0` infers closedness
|
|
977
|
+
* geometrically from the endpoint distance (the historical behavior).
|
|
978
|
+
*
|
|
979
|
+
* Packing: `[curveCount, (bufLen, curveData…)·curveCount]` where curveData
|
|
980
|
+
* is the standard NURBS curve encoding (same multi-curve packing as
|
|
981
|
+
* `brep_face_iso_curves_trimmed`). Returns an empty buffer on malformed
|
|
982
|
+
* input.
|
|
983
|
+
*/
|
|
984
|
+
export function nurbs_curve_split_at_params(curve_data: Float64Array, params: Float64Array, closed_hint: number): Float64Array;
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Find all isolated intersections of a NURBS curve with a NURBS surface,
|
|
988
|
+
* with exact parameters.
|
|
989
|
+
*
|
|
990
|
+
* `curve_data` is the standard NURBS curve encoding; `surface_data` is the
|
|
991
|
+
* standard NURBS surface encoding `[degree_u, degree_v, num_u, num_v,
|
|
992
|
+
* cp(flat)..., weights..., knots_u..., knots_v...]` (same as
|
|
993
|
+
* `nurbs_surface_evaluate`).
|
|
994
|
+
*
|
|
995
|
+
* Packing: `[count, (x, y, z, t, u, v)·count]`. All parameters are
|
|
996
|
+
* normalized to [0, 1]; results are sorted by `t`. Curve segments lying ON
|
|
997
|
+
* the surface (coincident runs) yield no points. Returns an empty buffer on
|
|
998
|
+
* malformed input.
|
|
999
|
+
*/
|
|
1000
|
+
export function nurbs_curve_surface_intersect_exact(curve_data: Float64Array, surface_data: Float64Array): Float64Array;
|
|
1001
|
+
|
|
737
1002
|
/**
|
|
738
1003
|
* Closest point on the surface to (x, y, z).
|
|
739
1004
|
* Returns [u, v, px, py, pz] with u, v normalized to [0,1].
|
|
@@ -829,6 +1094,24 @@ export function nurbs_surface_split(data: Float64Array, u_dir: boolean, t: numbe
|
|
|
829
1094
|
*/
|
|
830
1095
|
export function nurbs_surface_surface_intersect(data_a: Float64Array, data_b: Float64Array, tess: number): Float64Array;
|
|
831
1096
|
|
|
1097
|
+
/**
|
|
1098
|
+
* EXACT intersection curves of two FULL (untrimmed) NURBS surfaces: the
|
|
1099
|
+
* parametric boolean's SSI pipeline (seeded tri-tri, chaining, tangent-plane
|
|
1100
|
+
* relaxation) fitted to tolerance-verified interpolating NURBS curves —
|
|
1101
|
+
* unlike `nurbs_surface_surface_intersect`, which returns tessellated
|
|
1102
|
+
* polylines.
|
|
1103
|
+
*
|
|
1104
|
+
* Inputs are standard NURBS surface encodings; `tolerance` is absolute
|
|
1105
|
+
* (floored relative to the combined model scale kernel-side). Closed loops
|
|
1106
|
+
* come back as ONE closed curve; coincident (overlapping) surfaces yield no
|
|
1107
|
+
* curves (their overlap is a 2D region).
|
|
1108
|
+
*
|
|
1109
|
+
* Packing: `[curveCount, (bufLen, curveData…)·curveCount]` where curveData
|
|
1110
|
+
* is the standard NURBS curve encoding. Returns an empty buffer on
|
|
1111
|
+
* malformed input.
|
|
1112
|
+
*/
|
|
1113
|
+
export function nurbs_surface_surface_intersect_curves(surf_a_data: Float64Array, surf_b_data: Float64Array, tolerance: number): Float64Array;
|
|
1114
|
+
|
|
832
1115
|
/**
|
|
833
1116
|
* Curvature-adaptive tessellation against a chordal tolerance.
|
|
834
1117
|
* Returns the standard mesh buffer [vertexCount, positions..., indices...].
|
|
@@ -970,17 +1253,33 @@ export interface InitOutput {
|
|
|
970
1253
|
readonly arc_length: (a: number, b: number, c: number) => number;
|
|
971
1254
|
readonly arc_point_at: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
972
1255
|
readonly brep_boolean_op: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1256
|
+
readonly brep_clip_curve_op: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1257
|
+
readonly brep_closest_face: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1258
|
+
readonly brep_curve_intersection_op: (a: number, b: number, c: number, d: number) => [number, number];
|
|
973
1259
|
readonly brep_edges: (a: number, b: number, c: number) => [number, number];
|
|
1260
|
+
readonly brep_extract_face: (a: number, b: number, c: number) => [number, number];
|
|
1261
|
+
readonly brep_extract_faces: (a: number, b: number) => [number, number];
|
|
974
1262
|
readonly brep_extrude_curve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1263
|
+
readonly brep_face_closest_uv: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
975
1264
|
readonly brep_face_iso_curve: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1265
|
+
readonly brep_face_iso_curves_trimmed: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1266
|
+
readonly brep_face_iso_curves_trimmed_normalized: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
976
1267
|
readonly brep_face_surface: (a: number, b: number, c: number) => [number, number];
|
|
1268
|
+
readonly brep_face_surface_cropped: (a: number, b: number, c: number) => [number, number];
|
|
1269
|
+
readonly brep_face_surfaces_cropped: (a: number, b: number) => [number, number];
|
|
977
1270
|
readonly brep_face_tessellate: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1271
|
+
readonly brep_face_trim_bounds: (a: number, b: number, c: number) => [number, number];
|
|
1272
|
+
readonly brep_from_mesh_buffer: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
978
1273
|
readonly brep_info: (a: number, b: number) => [number, number];
|
|
1274
|
+
readonly brep_intersection_curves_op: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
979
1275
|
readonly brep_loft_curves: (a: number, b: number) => [number, number];
|
|
1276
|
+
readonly brep_mesh_intersection_curves_op: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
980
1277
|
readonly brep_primitive: (a: number, b: number, c: number, d: number) => [number, number];
|
|
981
1278
|
readonly brep_revolve_curve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
982
1279
|
readonly brep_sheet_from_surface: (a: number, b: number) => [number, number];
|
|
1280
|
+
readonly brep_split_solid_by_sheet_op: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
983
1281
|
readonly brep_tessellate: (a: number, b: number, c: number) => [number, number];
|
|
1282
|
+
readonly brep_tessellate_with_face_ranges: (a: number, b: number, c: number) => [number, number];
|
|
984
1283
|
readonly brep_transform: (a: number, b: number, c: number, d: number) => [number, number];
|
|
985
1284
|
readonly brep_validate: (a: number, b: number, c: number) => [number, number];
|
|
986
1285
|
readonly brep_volume_area: (a: number, b: number, c: number) => [number, number];
|
|
@@ -1039,6 +1338,7 @@ export interface InitOutput {
|
|
|
1039
1338
|
readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1040
1339
|
readonly mesh_chamfer_all_edges: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1041
1340
|
readonly mesh_clip_polyline: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1341
|
+
readonly mesh_clip_polyline_by_sheet: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1042
1342
|
readonly mesh_compute_planar_curve_normal: (a: number, b: number, c: number) => [number, number];
|
|
1043
1343
|
readonly mesh_contains_point: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
1044
1344
|
readonly mesh_create_box: (a: number, b: number, c: number) => [number, number];
|
|
@@ -1060,6 +1360,7 @@ export interface InitOutput {
|
|
|
1060
1360
|
readonly mesh_get_coplanar_face_region: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => [number, number];
|
|
1061
1361
|
readonly mesh_get_edge_vertex_pairs: (a: number, b: number, c: number) => [number, number];
|
|
1062
1362
|
readonly mesh_get_face_area: (a: number, b: number, c: number, d: number) => number;
|
|
1363
|
+
readonly mesh_get_face_boundary_loops: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1063
1364
|
readonly mesh_get_face_centroid: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1064
1365
|
readonly mesh_get_face_normal: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1065
1366
|
readonly mesh_get_smooth_face_group: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
@@ -1075,6 +1376,7 @@ export interface InitOutput {
|
|
|
1075
1376
|
readonly mesh_patch_from_points: (a: number, b: number) => [number, number];
|
|
1076
1377
|
readonly mesh_planar_face_evaluate: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1077
1378
|
readonly mesh_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1379
|
+
readonly mesh_polyline_intersection_points: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1078
1380
|
readonly mesh_prepare_boolean_cutter_curve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1079
1381
|
readonly mesh_raycast: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
1080
1382
|
readonly mesh_raycast_all: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
@@ -1083,6 +1385,8 @@ export interface InitOutput {
|
|
|
1083
1385
|
readonly mesh_scale: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1084
1386
|
readonly mesh_solid_split_by_surface: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1085
1387
|
readonly mesh_solid_split_plane: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
1388
|
+
readonly mesh_split_by_surface_to_brep: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1389
|
+
readonly mesh_split_polyline: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1086
1390
|
readonly mesh_surface_difference_all: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1087
1391
|
readonly mesh_surface_split: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1088
1392
|
readonly mesh_surface_split_plane: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
@@ -1090,7 +1394,10 @@ export interface InitOutput {
|
|
|
1090
1394
|
readonly mesh_topology_metrics_raw: (a: number, b: number, c: number) => [number, number];
|
|
1091
1395
|
readonly mesh_translate: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1092
1396
|
readonly nurbs_curve_curve_intersect: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1397
|
+
readonly nurbs_curve_curve_intersect_params: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1093
1398
|
readonly nurbs_curve_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1399
|
+
readonly nurbs_curve_split_at_params: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1400
|
+
readonly nurbs_curve_surface_intersect_exact: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1094
1401
|
readonly nurbs_surface_closest_point: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1095
1402
|
readonly nurbs_surface_curvature: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1096
1403
|
readonly nurbs_surface_derivatives: (a: number, b: number, c: number, d: number) => [number, number];
|
|
@@ -1107,6 +1414,7 @@ export interface InitOutput {
|
|
|
1107
1414
|
readonly nurbs_surface_ruled: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1108
1415
|
readonly nurbs_surface_split: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1109
1416
|
readonly nurbs_surface_surface_intersect: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1417
|
+
readonly nurbs_surface_surface_intersect_curves: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1110
1418
|
readonly nurbs_surface_tessellate_adaptive: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1111
1419
|
readonly nurbs_surface_tessellate_render: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1112
1420
|
readonly offset_polycurve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|