okgeometry-api 1.1.6 → 1.1.9

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.
Files changed (55) hide show
  1. package/dist/Arc.js +1 -1
  2. package/dist/Arc.js.map +1 -1
  3. package/dist/Circle.js +1 -1
  4. package/dist/Circle.js.map +1 -1
  5. package/dist/Line.js +1 -1
  6. package/dist/Line.js.map +1 -1
  7. package/dist/Mesh.d.ts +101 -4
  8. package/dist/Mesh.d.ts.map +1 -1
  9. package/dist/Mesh.js +104 -6
  10. package/dist/Mesh.js.map +1 -1
  11. package/dist/NurbsCurve.js +1 -1
  12. package/dist/NurbsCurve.js.map +1 -1
  13. package/dist/NurbsSurface.d.ts.map +1 -1
  14. package/dist/NurbsSurface.js +10 -7
  15. package/dist/NurbsSurface.js.map +1 -1
  16. package/dist/PolyCurve.js +1 -1
  17. package/dist/PolyCurve.js.map +1 -1
  18. package/dist/Polyline.js +1 -1
  19. package/dist/Polyline.js.map +1 -1
  20. package/dist/Ray.js +1 -1
  21. package/dist/Ray.js.map +1 -1
  22. package/dist/engine.d.ts.map +1 -1
  23. package/dist/engine.js +2 -4
  24. package/dist/engine.js.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/wasm-base64.d.ts +1 -1
  29. package/dist/wasm-base64.d.ts.map +1 -1
  30. package/dist/wasm-base64.js +1 -1
  31. package/dist/wasm-base64.js.map +1 -1
  32. package/dist/wasm-bindings.d.ts +1042 -0
  33. package/dist/wasm-bindings.d.ts.map +1 -0
  34. package/{wasm/okgeometrycore_bg.js → dist/wasm-bindings.js} +339 -130
  35. package/dist/wasm-bindings.js.map +1 -0
  36. package/package.json +12 -11
  37. package/src/Arc.ts +117 -117
  38. package/src/Circle.ts +153 -153
  39. package/src/Line.ts +144 -144
  40. package/src/Mesh.ts +672 -453
  41. package/src/NurbsCurve.ts +240 -240
  42. package/src/NurbsSurface.ts +249 -245
  43. package/src/PolyCurve.ts +306 -306
  44. package/src/Polyline.ts +153 -153
  45. package/src/Ray.ts +90 -90
  46. package/src/engine.ts +10 -12
  47. package/src/index.ts +6 -0
  48. package/src/wasm-base64.ts +1 -1
  49. package/{wasm/okgeometrycore.d.ts → src/wasm-bindings.d.ts} +2 -2
  50. package/{wasm/okgeometrycore.js → src/wasm-bindings.js} +4 -4
  51. package/wasm/README.md +0 -104
  52. package/wasm/okgeometrycore_bg.d.ts +0 -3
  53. package/wasm/okgeometrycore_bg.wasm +0 -0
  54. package/wasm/okgeometrycore_bg.wasm.d.ts +0 -100
  55. package/wasm/package.json +0 -19
@@ -0,0 +1,1042 @@
1
+ /**
2
+ * Get the length of an arc.
3
+ * @param {number} radius
4
+ * @param {number} start_angle
5
+ * @param {number} end_angle
6
+ * @returns {number}
7
+ */
8
+ export function arc_length(radius: number, start_angle: number, end_angle: number): number;
9
+ /**
10
+ * Evaluate a point on an arc at parameter t ∈ [0,1].
11
+ * Returns [x, y, z].
12
+ * @param {number} cx
13
+ * @param {number} cy
14
+ * @param {number} cz
15
+ * @param {number} nx
16
+ * @param {number} ny
17
+ * @param {number} nz
18
+ * @param {number} radius
19
+ * @param {number} start_angle
20
+ * @param {number} end_angle
21
+ * @param {number} t
22
+ * @returns {Float64Array}
23
+ */
24
+ export function arc_point_at(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, start_angle: number, end_angle: number, t: number): Float64Array;
25
+ /**
26
+ * Chamfer corners of a polyline by cutting each corner with a straight segment.
27
+ * Input: flat coords [x1,y1,z1, ...], distance from corner to cut.
28
+ * Output: encoded polycurve segments [segment_count, type, ...data, ...]
29
+ * type 0 = Line: [sx,sy,sz, ex,ey,ez]
30
+ * @param {Float64Array} coords
31
+ * @param {number} distance
32
+ * @returns {Float64Array}
33
+ */
34
+ export function chamfer_polycurve(coords: Float64Array, distance: number): Float64Array;
35
+ /**
36
+ * Get the circumference of a circle.
37
+ * @param {number} radius
38
+ * @returns {number}
39
+ */
40
+ export function circle_length(radius: number): number;
41
+ /**
42
+ * Evaluate a point on a circle at parameter t ∈ [0,1].
43
+ * Returns [x, y, z].
44
+ * @param {number} cx
45
+ * @param {number} cy
46
+ * @param {number} cz
47
+ * @param {number} nx
48
+ * @param {number} ny
49
+ * @param {number} nz
50
+ * @param {number} radius
51
+ * @param {number} t
52
+ * @returns {Float64Array}
53
+ */
54
+ export function circle_point_at(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, t: number): Float64Array;
55
+ /**
56
+ * Create an arc and return sampled points
57
+ * @param {number} cx
58
+ * @param {number} cy
59
+ * @param {number} cz
60
+ * @param {number} nx
61
+ * @param {number} ny
62
+ * @param {number} nz
63
+ * @param {number} radius
64
+ * @param {number} start_angle
65
+ * @param {number} end_angle
66
+ * @param {number} samples
67
+ * @returns {Float64Array}
68
+ */
69
+ export function create_arc(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, start_angle: number, end_angle: number, samples: number): Float64Array;
70
+ /**
71
+ * Create a circle and return sampled points
72
+ * @param {number} cx
73
+ * @param {number} cy
74
+ * @param {number} cz
75
+ * @param {number} nx
76
+ * @param {number} ny
77
+ * @param {number} nz
78
+ * @param {number} radius
79
+ * @param {number} samples
80
+ * @returns {Float64Array}
81
+ */
82
+ export function create_circle(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, samples: number): Float64Array;
83
+ /**
84
+ * Create a line segment and return sampled points
85
+ * @param {number} x1
86
+ * @param {number} y1
87
+ * @param {number} z1
88
+ * @param {number} x2
89
+ * @param {number} y2
90
+ * @param {number} z2
91
+ * @param {number} samples
92
+ * @returns {Float64Array}
93
+ */
94
+ export function create_line(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, samples: number): Float64Array;
95
+ /**
96
+ * Create a polyline and return the points
97
+ * @param {Float64Array} coords
98
+ * @param {number} samples_per_segment
99
+ * @returns {Float64Array}
100
+ */
101
+ export function create_polyline(coords: Float64Array, samples_per_segment: number): Float64Array;
102
+ /**
103
+ * Serialize a curve to a list of points for Three.js rendering
104
+ * Returns a flat array of coordinates: [x1, y1, z1, x2, y2, z2, ...]
105
+ * @param {string} curve_type
106
+ * @param {Float64Array} params
107
+ * @param {number} samples
108
+ * @returns {Float64Array}
109
+ */
110
+ export function curve_to_points(curve_type: string, params: Float64Array, samples: number): Float64Array;
111
+ /**
112
+ * Evaluate a NURBS curve at normalized parameter t in [0,1].
113
+ * Returns [x, y, z].
114
+ * @param {Float64Array} data
115
+ * @param {number} t
116
+ * @returns {Float64Array}
117
+ */
118
+ export function evaluate_nurbs_curve_at(data: Float64Array, t: number): Float64Array;
119
+ /**
120
+ * Extrude a circle and return mesh buffers
121
+ * @param {number} cx
122
+ * @param {number} cy
123
+ * @param {number} cz
124
+ * @param {number} nx
125
+ * @param {number} ny
126
+ * @param {number} nz
127
+ * @param {number} radius
128
+ * @param {number} dx
129
+ * @param {number} dy
130
+ * @param {number} dz
131
+ * @param {number} segments
132
+ * @param {boolean} with_caps
133
+ * @returns {Float64Array}
134
+ */
135
+ export function extrude_circle(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, dx: number, dy: number, dz: number, segments: number, with_caps: boolean): Float64Array;
136
+ /**
137
+ * Extrude a line segment and return mesh buffers
138
+ * @param {number} x1
139
+ * @param {number} y1
140
+ * @param {number} z1
141
+ * @param {number} x2
142
+ * @param {number} y2
143
+ * @param {number} z2
144
+ * @param {number} dx
145
+ * @param {number} dy
146
+ * @param {number} dz
147
+ * @param {number} segments
148
+ * @returns {Float64Array}
149
+ */
150
+ export function extrude_line(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, dx: number, dy: number, dz: number, segments: number): Float64Array;
151
+ /**
152
+ * Extrude a polyline and return mesh buffers.
153
+ * Uses the polyline's actual vertices (no resampling) to preserve sharp corners.
154
+ * @param {Float64Array} coords
155
+ * @param {number} dx
156
+ * @param {number} dy
157
+ * @param {number} dz
158
+ * @param {number} _segments
159
+ * @param {boolean} with_caps
160
+ * @returns {Float64Array}
161
+ */
162
+ export function extrude_polyline(coords: Float64Array, dx: number, dy: number, dz: number, _segments: number, with_caps: boolean): Float64Array;
163
+ /**
164
+ * Fillet corners of a polyline with arcs of a given radius.
165
+ * Input: flat coords [x1,y1,z1, ...], radius, plane normal (nx,ny,nz; 0,0,0 for auto).
166
+ * Output: encoded polycurve segments [segment_count, type, ...data, type, ...data, ...]
167
+ * type 0 = Line: [sx,sy,sz, ex,ey,ez]
168
+ * type 1 = Arc: [cx,cy,cz, nx,ny,nz, radius, start_angle, end_angle]
169
+ * @param {Float64Array} coords
170
+ * @param {number} radius
171
+ * @param {number} nx
172
+ * @param {number} ny
173
+ * @param {number} nz
174
+ * @returns {Float64Array}
175
+ */
176
+ export function fillet_polycurve(coords: Float64Array, radius: number, nx: number, ny: number, nz: number): Float64Array;
177
+ /**
178
+ * Get the length of a line segment.
179
+ * @param {number} x1
180
+ * @param {number} y1
181
+ * @param {number} z1
182
+ * @param {number} x2
183
+ * @param {number} y2
184
+ * @param {number} z2
185
+ * @returns {number}
186
+ */
187
+ export function line_length(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): number;
188
+ /**
189
+ * Offset a line segment perpendicular to line direction relative to reference normal.
190
+ * Returns [startX,startY,startZ,endX,endY,endZ]
191
+ * @param {number} x1
192
+ * @param {number} y1
193
+ * @param {number} z1
194
+ * @param {number} x2
195
+ * @param {number} y2
196
+ * @param {number} z2
197
+ * @param {number} distance
198
+ * @param {number} nx
199
+ * @param {number} ny
200
+ * @param {number} nz
201
+ * @returns {Float64Array}
202
+ */
203
+ export function line_offset(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, distance: number, nx: number, ny: number, nz: number): Float64Array;
204
+ /**
205
+ * Evaluate a point on a line segment at parameter t ∈ [0,1].
206
+ * Returns [x, y, z].
207
+ * @param {number} x1
208
+ * @param {number} y1
209
+ * @param {number} z1
210
+ * @param {number} x2
211
+ * @param {number} y2
212
+ * @param {number} z2
213
+ * @param {number} t
214
+ * @returns {Float64Array}
215
+ */
216
+ export function line_point_at(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, t: number): Float64Array;
217
+ /**
218
+ * Get the tangent direction of a line segment. Returns [x, y, z].
219
+ * @param {number} x1
220
+ * @param {number} y1
221
+ * @param {number} z1
222
+ * @param {number} x2
223
+ * @param {number} y2
224
+ * @param {number} z2
225
+ * @returns {Float64Array}
226
+ */
227
+ export function line_tangent(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): Float64Array;
228
+ /**
229
+ * Loft between multiple circles
230
+ *
231
+ * # Parameters
232
+ * * `circle_data` - Flat array of circle definitions [cx, cy, cz, nx, ny, nz, radius, ...]
233
+ * * `segments` - Number of segments to sample along each curve
234
+ * * `with_caps` - Whether to create end caps
235
+ *
236
+ * # Returns
237
+ * Mesh buffers for the lofted surface
238
+ * @param {Float64Array} circle_data
239
+ * @param {number} segments
240
+ * @param {boolean} with_caps
241
+ * @returns {Float64Array}
242
+ */
243
+ export function loft_circles(circle_data: Float64Array, segments: number, with_caps: boolean): Float64Array;
244
+ /**
245
+ * Loft a NURBS surface through multiple NURBS curves.
246
+ * Input: [num_curves, degree_v, curve1_data..., curve2_data..., ...]
247
+ * Each curve_data: [degree, num_pts, x,y,z,..., w0,w1,..., k0,k1,...]
248
+ * Returns the NurbsSurface data (same format as tessellate input, without u_segs/v_segs).
249
+ * @param {Float64Array} data
250
+ * @returns {Float64Array}
251
+ */
252
+ export function loft_nurbs_surface(data: Float64Array): Float64Array;
253
+ /**
254
+ * Loft between multiple polylines
255
+ *
256
+ * # Parameters
257
+ * * `polyline_data` - Flat array where each polyline is prefixed by its point count:
258
+ * [count1, x1, y1, z1, x2, y2, z2, ..., count2, x1, y1, z1, ...]
259
+ * * `_segments` - Ignored for polylines (kept for API compat). Points are used directly.
260
+ * * `with_caps` - Whether to create end caps (fan triangulation from center)
261
+ *
262
+ * # Returns
263
+ * Mesh buffers for the lofted surface
264
+ * @param {Float64Array} polyline_data
265
+ * @param {number} _segments
266
+ * @param {boolean} with_caps
267
+ * @returns {Float64Array}
268
+ */
269
+ export function loft_polylines(polyline_data: Float64Array, _segments: number, with_caps: boolean): Float64Array;
270
+ /**
271
+ * Make multiple NURBS curves compatible (same knot vectors, same CP count).
272
+ * Input: [curve_count, curve1_data..., curve2_data..., ...]
273
+ * Each curve: [degree, num_cp, cp_xyz..., weights..., knots...]
274
+ * Output: same format with unified curves.
275
+ * @param {Float64Array} curves_data
276
+ * @returns {Float64Array}
277
+ */
278
+ export function make_nurbs_curves_compatible(curves_data: Float64Array): Float64Array;
279
+ /**
280
+ * Apply a 4x4 transformation matrix to a mesh.
281
+ * matrix: flat [m00,m01,m02,m03, m10,m11,..., m30,m31,m32,m33] (16 elements, row-major)
282
+ * @param {number} vertex_count
283
+ * @param {Float64Array} buffer
284
+ * @param {Float64Array} matrix
285
+ * @returns {Float64Array}
286
+ */
287
+ export function mesh_apply_matrix(vertex_count: number, buffer: Float64Array, matrix: Float64Array): Float64Array;
288
+ /**
289
+ * Perform boolean intersection on two meshes
290
+ * @param {number} vertex_count_a
291
+ * @param {Float64Array} buffer_a
292
+ * @param {number} vertex_count_b
293
+ * @param {Float64Array} buffer_b
294
+ * @returns {Float64Array}
295
+ */
296
+ export function mesh_boolean_intersection(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array): Float64Array;
297
+ /**
298
+ * @returns {number}
299
+ */
300
+ export function mesh_boolean_last_debug_marker(): number;
301
+ /**
302
+ * @param {number} vertex_count_a
303
+ * @param {Float64Array} buffer_a
304
+ * @param {number} vertex_count_b
305
+ * @param {Float64Array} buffer_b
306
+ * @param {string} operation
307
+ * @returns {Float64Array}
308
+ */
309
+ export function mesh_boolean_operation(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): Float64Array;
310
+ /**
311
+ * Debug helper: perform boolean operation and return a textual status,
312
+ * including kernel error reason on failure.
313
+ * @param {number} vertex_count_a
314
+ * @param {Float64Array} buffer_a
315
+ * @param {number} vertex_count_b
316
+ * @param {Float64Array} buffer_b
317
+ * @param {string} operation
318
+ * @returns {string}
319
+ */
320
+ export function mesh_boolean_operation_debug(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): string;
321
+ /**
322
+ * Perform boolean operation and return stage-level profiling data followed by
323
+ * the result mesh buffer.
324
+ *
325
+ * Output format:
326
+ * [profile_len(=95), broadphase_ms, segments_ms, split_ms,
327
+ * split_touched_faces_a, split_source_faces_a, split_touched_faces_b, split_source_faces_b,
328
+ * classify_ms, classify_seed_ms, classify_strict_ms, classify_open_component_ms,
329
+ * extract_ms, extract_primary_ms, extract_fallback_ms,
330
+ * cleanup_ms, finalize_ms, finalize_cap_ms, finalize_recap_ms, finalize_stitch_ms,
331
+ * pair_accepted, pair_rejected, pair_degenerate,
332
+ * core_passes, core_total_ms, conservative_runs, conservative_ms, nudge_runs, nudge_ms,
333
+ * recompose_runs, recompose_ms, repair_runs, repair_ms,
334
+ * repair_loops, repair_loops_capped, repair_loop_vertices, repair_loop_max_vertices,
335
+ * arrangement_adj_attempts, arrangement_adj_fast_hits, arrangement_adj_disabled_split_limit,
336
+ * arrangement_adj_fallback_no_half_edges, arrangement_adj_fallback_collect_failed,
337
+ * arrangement_adj_fallback_non_manifold, arrangement_adj_fallback_loop_mismatch,
338
+ * arrangement_adj_fallback_twin_mismatch, arrangement_adj_fallback_invalid_face_index,
339
+ * arrangement_adj_non_manifold_edges_total, arrangement_adj_non_manifold_limit_total,
340
+ * arrangement_adj_non_manifold_tolerated_attempts,
341
+ * arrangement_adj_fallback_non_manifold_excess_total,
342
+ * subtraction_ultra_cases, subtraction_ultra_component_fallback_runs,
343
+ * subtraction_ultra_open_bounds_total, subtraction_ultra_open_bounds_max,
344
+ * subtraction_ultra_best_boundary_total, subtraction_ultra_best_non_manifold_total,
345
+ * subtraction_ultra_scoped_faces_total, subtraction_ultra_scoped_faces_max,
346
+ * subtraction_ultra_scoped_strict_evals_total, subtraction_ultra_scoped_strict_evals_max,
347
+ * finalize_stitch_rebuild_ms, finalize_stitch_recap_ms,
348
+ * finalize_stitch_attempts, finalize_stitch_kept,
349
+ * finalize_stitch_rebuild_collect_ms, finalize_stitch_rebuild_weld_ms,
350
+ * finalize_stitch_rebuild_commit_ms, finalize_stitch_rebuild_faces_in,
351
+ * finalize_stitch_rebuild_faces_out,
352
+ * whole_partial_attempts, whole_partial_accepts,
353
+ * whole_partial_total_ms, whole_partial_split_ms,
354
+ * whole_partial_boundary_build_ms,
355
+ * whole_partial_split_triangle_fast_faces,
356
+ * whole_partial_split_cdt_faces,
357
+ * whole_partial_split_cdt_points_total,
358
+ * whole_partial_split_cdt_constraints_total,
359
+ * whole_partial_split_cdt_segment_constraints_total,
360
+ * whole_partial_split_cdt_triangles_total,
361
+ * whole_partial_triangle_cdt_single_segment_faces,
362
+ * whole_partial_triangle_cdt_two_segment_faces,
363
+ * whole_partial_triangle_cdt_three_plus_segment_faces,
364
+ * whole_partial_triangle_cdt_all_boundary_segment_faces,
365
+ * whole_partial_triangle_cdt_mixed_boundary_segment_faces,
366
+ * whole_partial_triangle_cdt_any_interior_segment_faces,
367
+ * whole_partial_classify_source_ms, whole_partial_classify_touched_ms,
368
+ * whole_partial_extract_ms, whole_partial_extract_untouched_ms,
369
+ * whole_partial_extract_interface_ms, whole_partial_extract_touched_ms,
370
+ * whole_partial_finalize_ms,
371
+ * whole_partial_interface_faces_total,
372
+ * whole_partial_interface_faces_emitted,
373
+ * whole_partial_interface_boundary_edge_hits,
374
+ * whole_partial_interface_raw_edge_fallbacks,
375
+ * whole_partial_touched_faces_total,
376
+ * whole_partial_touched_faces_emitted,
377
+ * whole_partial_touched_patch_attempts,
378
+ * whole_partial_touched_patch_direct_regions,
379
+ * whole_partial_touched_patch_triangulated_faces,
380
+ * whole_partial_touched_fallback_faces,
381
+ * whole_partial_touched_lineage_vertices,
382
+ * whole_partial_touched_welded_vertices,
383
+ * whole_partial_raw_boundary_untouched_edges,
384
+ * whole_partial_raw_boundary_interface_edges,
385
+ * whole_partial_raw_boundary_touched_edges,
386
+ * whole_partial_raw_boundary_mixed_edges,
387
+ * whole_partial_raw_non_manifold_untouched_edges,
388
+ * whole_partial_raw_non_manifold_interface_edges,
389
+ * whole_partial_raw_non_manifold_touched_edges,
390
+ * whole_partial_raw_non_manifold_mixed_edges,
391
+ * whole_partial_boundary_edges_total,
392
+ * whole_partial_non_manifold_edges_total,
393
+ * whole_partial_face_ratio_vs_a_total,
394
+ * whole_partial_loop_plausible_total,
395
+ * mesh_buffer...]
396
+ * @param {number} vertex_count_a
397
+ * @param {Float64Array} buffer_a
398
+ * @param {number} vertex_count_b
399
+ * @param {Float64Array} buffer_b
400
+ * @param {string} operation
401
+ * @returns {Float64Array}
402
+ */
403
+ export function mesh_boolean_operation_profiled(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): Float64Array;
404
+ /**
405
+ * Perform boolean subtraction on two meshes (A - B)
406
+ * @param {number} vertex_count_a
407
+ * @param {Float64Array} buffer_a
408
+ * @param {number} vertex_count_b
409
+ * @param {Float64Array} buffer_b
410
+ * @returns {Float64Array}
411
+ */
412
+ export function mesh_boolean_subtraction(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array): Float64Array;
413
+ /**
414
+ * Perform boolean union on two meshes
415
+ * @param {number} vertex_count_a
416
+ * @param {Float64Array} buffer_a
417
+ * @param {number} vertex_count_b
418
+ * @param {Float64Array} buffer_b
419
+ * @returns {Float64Array}
420
+ */
421
+ export function mesh_boolean_union(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array): Float64Array;
422
+ /**
423
+ * @param {number} vertex_count_a
424
+ * @param {Float64Array} buffer_a
425
+ * @param {number} vertex_count_b
426
+ * @param {Float64Array} buffer_b
427
+ * @param {string} operation
428
+ * @returns {Float64Array}
429
+ */
430
+ export function mesh_boolean_whole_partial_candidate(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): Float64Array;
431
+ /**
432
+ * @param {number} vertex_count_a
433
+ * @param {Float64Array} buffer_a
434
+ * @param {number} vertex_count_b
435
+ * @param {Float64Array} buffer_b
436
+ * @param {string} operation
437
+ * @returns {Float64Array}
438
+ */
439
+ export function mesh_boolean_whole_partial_candidate_debug(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): Float64Array;
440
+ /**
441
+ * @param {number} vertex_count_a
442
+ * @param {Float64Array} buffer_a
443
+ * @param {number} vertex_count_b
444
+ * @param {Float64Array} buffer_b
445
+ * @param {string} operation
446
+ * @returns {Float64Array}
447
+ */
448
+ export function mesh_boolean_whole_partial_candidate_debug_full(vertex_count_a: number, buffer_a: Float64Array, vertex_count_b: number, buffer_b: Float64Array, operation: string): Float64Array;
449
+ /**
450
+ * Extract boundary (perimeter) edges from a mesh as polylines.
451
+ * Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
452
+ * @param {number} vertex_count
453
+ * @param {Float64Array} buffer
454
+ * @returns {Float64Array}
455
+ */
456
+ export function mesh_boundary_polylines(vertex_count: number, buffer: Float64Array): Float64Array;
457
+ /**
458
+ * Coplanar connected face groups.
459
+ * Output format:
460
+ * [groupCount, triCount, tri..., centroidX,centroidY,centroidZ, normalX,normalY,normalZ, ...]
461
+ * @param {number} vertex_count
462
+ * @param {Float64Array} buffer
463
+ * @returns {Float64Array}
464
+ */
465
+ export function mesh_build_coplanar_connected_face_groups(vertex_count: number, buffer: Float64Array): Float64Array;
466
+ /**
467
+ * Chamfer all edges of a primitive mesh (flat bevel)
468
+ *
469
+ * # Arguments
470
+ * * `mesh_type` - "box", "cylinder", or "prism"
471
+ * * `params` - Parameters: [width,height,depth] for box, [radius,height,segments] for cylinder/prism
472
+ * * `offset` - Chamfer offset distance
473
+ *
474
+ * # Returns
475
+ * Result mesh buffer [vertexCount, vertices..., indices...]
476
+ * @param {string} mesh_type
477
+ * @param {Float64Array} params
478
+ * @param {number} offset
479
+ * @returns {Float64Array}
480
+ */
481
+ export function mesh_chamfer_all_edges(mesh_type: string, params: Float64Array, offset: number): Float64Array;
482
+ /**
483
+ * Compute planar curve normal from ordered points.
484
+ * @param {Float64Array} coords
485
+ * @param {boolean} closed
486
+ * @returns {Float64Array}
487
+ */
488
+ export function mesh_compute_planar_curve_normal(coords: Float64Array, closed: boolean): Float64Array;
489
+ /**
490
+ * Odd/even mesh containment test.
491
+ * @param {number} vertex_count
492
+ * @param {Float64Array} buffer
493
+ * @param {number} px
494
+ * @param {number} py
495
+ * @param {number} pz
496
+ * @returns {boolean}
497
+ */
498
+ export function mesh_contains_point(vertex_count: number, buffer: Float64Array, px: number, py: number, pz: number): boolean;
499
+ /**
500
+ * Create a box mesh and return buffers
501
+ * Returns [vertices..., indices...]
502
+ * @param {number} width
503
+ * @param {number} height
504
+ * @param {number} depth
505
+ * @returns {Float64Array}
506
+ */
507
+ export function mesh_create_box(width: number, height: number, depth: number): Float64Array;
508
+ /**
509
+ * Create a Manifold-aligned centered Z-axis cone mesh and return buffers
510
+ * @param {number} radius
511
+ * @param {number} height
512
+ * @param {number} segments
513
+ * @returns {Float64Array}
514
+ */
515
+ export function mesh_create_cone(radius: number, height: number, segments: number): Float64Array;
516
+ /**
517
+ * Create a Manifold-aligned centered Z-axis cylinder mesh and return buffers
518
+ * @param {number} radius
519
+ * @param {number} height
520
+ * @param {number} segments
521
+ * @returns {Float64Array}
522
+ */
523
+ export function mesh_create_cylinder(radius: number, height: number, segments: number): Float64Array;
524
+ /**
525
+ * Create a prism mesh and return buffers
526
+ * @param {number} radius
527
+ * @param {number} height
528
+ * @param {number} sides
529
+ * @returns {Float64Array}
530
+ */
531
+ export function mesh_create_prism(radius: number, height: number, sides: number): Float64Array;
532
+ /**
533
+ * Create a geodesic sphere mesh matching Manifold's sphere topology and return buffers
534
+ * @param {number} radius
535
+ * @param {number} segments
536
+ * @param {number} rings
537
+ * @returns {Float64Array}
538
+ */
539
+ export function mesh_create_sphere(radius: number, segments: number, rings: number): Float64Array;
540
+ /**
541
+ * Evaluate a point on a mesh surface at parametric coordinates (u, v).
542
+ * Maps u ∈ [0,1] and v ∈ [0,1] to the mesh's AABB bounding box,
543
+ * then casts a ray perpendicular to the best-fit projection plane.
544
+ * Returns [x, y, z] of the intersection point, or [NaN, NaN, NaN] if no hit.
545
+ * @param {number} vertex_count
546
+ * @param {Float64Array} buffer
547
+ * @param {number} u
548
+ * @param {number} v
549
+ * @returns {Float64Array}
550
+ */
551
+ export function mesh_evaluate(vertex_count: number, buffer: Float64Array, u: number, v: number): Float64Array;
552
+ /**
553
+ * Export a mesh to OBJ format
554
+ * Takes mesh buffers as input (same format as mesh_to_buffers output)
555
+ * Returns OBJ string
556
+ * @param {number} vertex_count
557
+ * @param {Float64Array} buffer
558
+ * @returns {string}
559
+ */
560
+ export function mesh_export_obj(vertex_count: number, buffer: Float64Array): string;
561
+ /**
562
+ * Push/pull a planar face set by moving its coplanar connected region.
563
+ * @param {number} vertex_count
564
+ * @param {Float64Array} buffer
565
+ * @param {number} face_index
566
+ * @param {number} distance
567
+ * @returns {Float64Array}
568
+ */
569
+ export function mesh_extrude_face(vertex_count: number, buffer: Float64Array, face_index: number, distance: number): Float64Array;
570
+ /**
571
+ * Extrude planar curve profile by normal * height.
572
+ * @param {Float64Array} coords
573
+ * @param {number} nx
574
+ * @param {number} ny
575
+ * @param {number} nz
576
+ * @param {number} height
577
+ * @param {boolean} closed
578
+ * @returns {Float64Array}
579
+ */
580
+ export function mesh_extrude_planar_curve(coords: Float64Array, nx: number, ny: number, nz: number, height: number, closed: boolean): Float64Array;
581
+ /**
582
+ * Find the best matching coplanar connected face group by normal and optional near-point.
583
+ * Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
584
+ * @param {number} vertex_count
585
+ * @param {Float64Array} buffer
586
+ * @param {number} nx
587
+ * @param {number} ny
588
+ * @param {number} nz
589
+ * @param {number} near_x
590
+ * @param {number} near_y
591
+ * @param {number} near_z
592
+ * @param {boolean} use_near_point
593
+ * @returns {Float64Array}
594
+ */
595
+ export function mesh_find_face_group_by_normal(vertex_count: number, buffer: Float64Array, nx: number, ny: number, nz: number, near_x: number, near_y: number, near_z: number, use_near_point: boolean): Float64Array;
596
+ /**
597
+ * Find the coplanar connected face group containing triangle_index.
598
+ * Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
599
+ * @param {number} vertex_count
600
+ * @param {Float64Array} buffer
601
+ * @param {number} triangle_index
602
+ * @returns {Float64Array}
603
+ */
604
+ export function mesh_find_face_group_by_triangle_index(vertex_count: number, buffer: Float64Array, triangle_index: number): Float64Array;
605
+ /**
606
+ * Axis-aligned bounding box as [minX, minY, minZ, maxX, maxY, maxZ].
607
+ * @param {number} vertex_count
608
+ * @param {Float64Array} buffer
609
+ * @returns {Float64Array}
610
+ */
611
+ export function mesh_get_bounds(vertex_count: number, buffer: Float64Array): Float64Array;
612
+ /**
613
+ * Coplanar connected face-group centroid containing a given triangle face index.
614
+ * Output format: [x, y, z] or [] when unavailable.
615
+ * @param {number} vertex_count
616
+ * @param {Float64Array} buffer
617
+ * @param {number} face_index
618
+ * @returns {Float64Array}
619
+ */
620
+ export function mesh_get_coplanar_face_group_centroid(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
621
+ /**
622
+ * Edge-connected coplanar triangle indices as [count, i0, i1, ...].
623
+ * @param {number} vertex_count
624
+ * @param {Float64Array} buffer
625
+ * @param {number} face_index
626
+ * @returns {Float64Array}
627
+ */
628
+ export function mesh_get_coplanar_face_indices(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
629
+ /**
630
+ * Coplanar connected face region projected to a plane basis.
631
+ * Output format:
632
+ * [faceCount, faceIndex0, faceIndex1, ..., uMin, uMax, vMin, vMax]
633
+ * @param {number} vertex_count
634
+ * @param {Float64Array} buffer
635
+ * @param {number} face_index
636
+ * @param {number} ox
637
+ * @param {number} oy
638
+ * @param {number} oz
639
+ * @param {number} ux
640
+ * @param {number} uy
641
+ * @param {number} uz
642
+ * @param {number} vx
643
+ * @param {number} vy
644
+ * @param {number} vz
645
+ * @param {number} margin_scale
646
+ * @param {number} min_margin
647
+ * @returns {Float64Array}
648
+ */
649
+ export function mesh_get_coplanar_face_region(vertex_count: number, buffer: Float64Array, face_index: number, ox: number, oy: number, oz: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, margin_scale: number, min_margin: number): Float64Array;
650
+ /**
651
+ * Unique undirected triangle edges as [edgeCount, v0a, v0b, v1a, v1b, ...].
652
+ * @param {number} vertex_count
653
+ * @param {Float64Array} buffer
654
+ * @returns {Float64Array}
655
+ */
656
+ export function mesh_get_edge_vertex_pairs(vertex_count: number, buffer: Float64Array): Float64Array;
657
+ /**
658
+ * Face area.
659
+ * @param {number} vertex_count
660
+ * @param {Float64Array} buffer
661
+ * @param {number} face_index
662
+ * @returns {number}
663
+ */
664
+ export function mesh_get_face_area(vertex_count: number, buffer: Float64Array, face_index: number): number;
665
+ /**
666
+ * Face centroid as [x, y, z].
667
+ * @param {number} vertex_count
668
+ * @param {Float64Array} buffer
669
+ * @param {number} face_index
670
+ * @returns {Float64Array}
671
+ */
672
+ export function mesh_get_face_centroid(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
673
+ /**
674
+ * Face normal as [x, y, z].
675
+ * @param {number} vertex_count
676
+ * @param {Float64Array} buffer
677
+ * @param {number} face_index
678
+ * @returns {Float64Array}
679
+ */
680
+ export function mesh_get_face_normal(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
681
+ /**
682
+ * Get mesh statistics
683
+ * Returns [vertex_count, face_count, edge_count]
684
+ * @param {number} vertex_count
685
+ * @param {Float64Array} buffer
686
+ * @returns {Float64Array}
687
+ */
688
+ export function mesh_get_stats(vertex_count: number, buffer: Float64Array): Float64Array;
689
+ /**
690
+ * Import OBJ data and return mesh buffers
691
+ * @param {string} obj_data
692
+ * @returns {Float64Array}
693
+ */
694
+ export function mesh_import_obj(obj_data: string): Float64Array;
695
+ /**
696
+ * Check if triangulated mesh is a closed volume (no welded boundary edges).
697
+ * @param {number} vertex_count
698
+ * @param {Float64Array} buffer
699
+ * @returns {boolean}
700
+ */
701
+ export function mesh_is_closed_volume(vertex_count: number, buffer: Float64Array): boolean;
702
+ /**
703
+ * Merge multiple mesh buffers while preserving per-mesh vertex order and index remapping.
704
+ * Input format: [mesh_count, len1, mesh1..., len2, mesh2..., ...]
705
+ * @param {Float64Array} mesh_data
706
+ * @returns {Float64Array}
707
+ */
708
+ export function mesh_merge(mesh_data: Float64Array): Float64Array;
709
+ /**
710
+ * Intersect two meshes, returning intersection polyline points.
711
+ * Returns: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
712
+ * @param {number} va_count
713
+ * @param {Float64Array} buffer_a
714
+ * @param {number} vb_count
715
+ * @param {Float64Array} buffer_b
716
+ * @returns {Float64Array}
717
+ */
718
+ export function mesh_mesh_intersect(va_count: number, buffer_a: Float64Array, vb_count: number, buffer_b: Float64Array): Float64Array;
719
+ /**
720
+ * Create a planar patch mesh from boundary points using CDT.
721
+ * Correctly handles concave polygons (unlike fan triangulation).
722
+ * Input: flat coordinate array [x1,y1,z1, x2,y2,z2, ...]
723
+ * Output: mesh buffer [vertexCount, x1,y1,z1,..., i0,i1,i2, ...]
724
+ * @param {Float64Array} coords
725
+ * @returns {Float64Array}
726
+ */
727
+ export function mesh_patch_from_points(coords: Float64Array): Float64Array;
728
+ /**
729
+ * Intersect a mesh with a plane, returning polyline points.
730
+ * Input: vertex_count, mesh_buffer..., nx, ny, nz, d
731
+ * Returns: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
732
+ * @param {number} vertex_count
733
+ * @param {Float64Array} buffer
734
+ * @param {number} nx
735
+ * @param {number} ny
736
+ * @param {number} nz
737
+ * @param {number} d
738
+ * @returns {Float64Array}
739
+ */
740
+ export function mesh_plane_intersect(vertex_count: number, buffer: Float64Array, nx: number, ny: number, nz: number, d: number): Float64Array;
741
+ /**
742
+ * Shift closed boolean cutter curve and adjust height.
743
+ * Returns [height, epsilon, pointCount, x,y,z,...]
744
+ * @param {Float64Array} coords
745
+ * @param {boolean} closed
746
+ * @param {number} nx
747
+ * @param {number} ny
748
+ * @param {number} nz
749
+ * @param {number} height
750
+ * @returns {Float64Array}
751
+ */
752
+ export function mesh_prepare_boolean_cutter_curve(coords: Float64Array, closed: boolean, nx: number, ny: number, nz: number, height: number): Float64Array;
753
+ /**
754
+ * Raycast against mesh and return closest hit.
755
+ * Output: [] when no hit, otherwise [pointX,pointY,pointZ, normalX,normalY,normalZ, faceIndex, distance]
756
+ * @param {number} vertex_count
757
+ * @param {Float64Array} buffer
758
+ * @param {number} ox
759
+ * @param {number} oy
760
+ * @param {number} oz
761
+ * @param {number} dx
762
+ * @param {number} dy
763
+ * @param {number} dz
764
+ * @param {number} max_distance
765
+ * @returns {Float64Array}
766
+ */
767
+ export function mesh_raycast(vertex_count: number, buffer: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
768
+ /**
769
+ * Raycast against mesh and return all hits sorted by distance.
770
+ * Output: [hitCount, (point, normal, faceIndex, distance)*]
771
+ * @param {number} vertex_count
772
+ * @param {Float64Array} buffer
773
+ * @param {number} ox
774
+ * @param {number} oy
775
+ * @param {number} oz
776
+ * @param {number} dx
777
+ * @param {number} dy
778
+ * @param {number} dz
779
+ * @param {number} max_distance
780
+ * @returns {Float64Array}
781
+ */
782
+ export function mesh_raycast_all(vertex_count: number, buffer: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
783
+ /**
784
+ * Raycast against many meshes packed as:
785
+ * [meshCount, meshLen0, meshRaw0..., meshLen1, meshRaw1..., ...]
786
+ * Output: [hitCount, meshIndex, pointX,pointY,pointZ, normalX,normalY,normalZ, faceIndex, distance, ...]
787
+ * @param {Float64Array} mesh_data
788
+ * @param {number} ox
789
+ * @param {number} oy
790
+ * @param {number} oz
791
+ * @param {number} dx
792
+ * @param {number} dy
793
+ * @param {number} dz
794
+ * @param {number} max_distance
795
+ * @returns {Float64Array}
796
+ */
797
+ export function mesh_raycast_many(mesh_data: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
798
+ /**
799
+ * Rotate a mesh around an arbitrary axis and return new buffers
800
+ * Axis is defined by (ax, ay, az), angle in radians
801
+ * @param {number} vertex_count
802
+ * @param {Float64Array} buffer
803
+ * @param {number} ax
804
+ * @param {number} ay
805
+ * @param {number} az
806
+ * @param {number} angle
807
+ * @returns {Float64Array}
808
+ */
809
+ export function mesh_rotate(vertex_count: number, buffer: Float64Array, ax: number, ay: number, az: number, angle: number): Float64Array;
810
+ /**
811
+ * Scale a mesh non-uniformly and return new buffers
812
+ * @param {number} vertex_count
813
+ * @param {Float64Array} buffer
814
+ * @param {number} sx
815
+ * @param {number} sy
816
+ * @param {number} sz
817
+ * @returns {Float64Array}
818
+ */
819
+ export function mesh_scale(vertex_count: number, buffer: Float64Array, sx: number, sy: number, sz: number): Float64Array;
820
+ /**
821
+ * Return welded-edge topology metrics for a triangulated mesh buffer:
822
+ * `[boundary_edges, non_manifold_edges]`.
823
+ * @param {number} vertex_count
824
+ * @param {Float64Array} buffer
825
+ * @returns {Float64Array}
826
+ */
827
+ export function mesh_topology_metrics(vertex_count: number, buffer: Float64Array): Float64Array;
828
+ /**
829
+ * Translate a mesh by an offset vector and return new buffers
830
+ * @param {number} vertex_count
831
+ * @param {Float64Array} buffer
832
+ * @param {number} dx
833
+ * @param {number} dy
834
+ * @param {number} dz
835
+ * @returns {Float64Array}
836
+ */
837
+ export function mesh_translate(vertex_count: number, buffer: Float64Array, dx: number, dy: number, dz: number): Float64Array;
838
+ /**
839
+ * Intersect two NURBS curves.
840
+ * Returns: [num_points, x,y,z, ...]
841
+ * @param {Float64Array} data_a
842
+ * @param {Float64Array} data_b
843
+ * @returns {Float64Array}
844
+ */
845
+ export function nurbs_curve_curve_intersect(data_a: Float64Array, data_b: Float64Array): Float64Array;
846
+ /**
847
+ * Intersect a NURBS curve with a plane.
848
+ * Input: same curve format as sample_nurbs_curve + plane normal (nx,ny,nz) and d.
849
+ * Returns: [num_points, x,y,z, x,y,z, ...]
850
+ * @param {Float64Array} data
851
+ * @param {number} nx
852
+ * @param {number} ny
853
+ * @param {number} nz
854
+ * @param {number} d
855
+ * @returns {Float64Array}
856
+ */
857
+ export function nurbs_curve_plane_intersect(data: Float64Array, nx: number, ny: number, nz: number, d: number): Float64Array;
858
+ /**
859
+ * Evaluate a NURBS surface at (u, v) parameters.
860
+ * Input format: same as tessellate but last 2 values are u, v instead of u_segs, v_segs
861
+ * Returns [x, y, z]
862
+ * @param {Float64Array} data
863
+ * @param {number} u
864
+ * @param {number} v
865
+ * @returns {Float64Array}
866
+ */
867
+ export function nurbs_surface_evaluate(data: Float64Array, u: number, v: number): Float64Array;
868
+ /**
869
+ * Intersect a NURBS surface with a plane.
870
+ * Input: same surface format as tessellate_nurbs_surface, then plane (nx,ny,nz,d) appended.
871
+ * Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
872
+ * @param {Float64Array} surface_data
873
+ * @param {number} nx
874
+ * @param {number} ny
875
+ * @param {number} nz
876
+ * @param {number} d
877
+ * @param {number} tess
878
+ * @returns {Float64Array}
879
+ */
880
+ export function nurbs_surface_plane_intersect(surface_data: Float64Array, nx: number, ny: number, nz: number, d: number, tess: number): Float64Array;
881
+ /**
882
+ * Intersect two NURBS surfaces.
883
+ * Returns polyline buffer.
884
+ * @param {Float64Array} data_a
885
+ * @param {Float64Array} data_b
886
+ * @param {number} tess
887
+ * @returns {Float64Array}
888
+ */
889
+ export function nurbs_surface_surface_intersect(data_a: Float64Array, data_b: Float64Array, tess: number): Float64Array;
890
+ /**
891
+ * Offset a polyline by a distance in a given plane.
892
+ * If nx=ny=nz=0, the plane normal is auto-detected.
893
+ * Returns flat [x1,y1,z1, x2,y2,z2, ...] of the offset polyline.
894
+ * @param {Float64Array} coords
895
+ * @param {number} distance
896
+ * @param {number} nx
897
+ * @param {number} ny
898
+ * @param {number} nz
899
+ * @returns {Float64Array}
900
+ */
901
+ export function offset_polyline_curve(coords: Float64Array, distance: number, nx: number, ny: number, nz: number): Float64Array;
902
+ /**
903
+ * Convert a polycurve (Line/Arc segments) to an exact NURBS curve.
904
+ * Input format: [segment_count, type1, ...data1..., type2, ...data2..., ...]
905
+ * type 0 = Line (6 floats: start_xyz, end_xyz)
906
+ * type 1 = Arc (9 floats: center_xyz, normal_xyz, radius, start_angle, end_angle)
907
+ * Output format: [degree, num_cp, cp_x1,y1,z1,..., w1,w2,..., k1,k2,...]
908
+ * @param {Float64Array} segment_data
909
+ * @returns {Float64Array}
910
+ */
911
+ export function polycurve_to_nurbs(segment_data: Float64Array): Float64Array;
912
+ /**
913
+ * Get the total length of a polyline.
914
+ * Input: flat coords [x1,y1,z1, x2,y2,z2, ...]
915
+ * @param {Float64Array} coords
916
+ * @returns {number}
917
+ */
918
+ export function polyline_length(coords: Float64Array): number;
919
+ /**
920
+ * Evaluate a point on a polyline at parameter t ∈ [0,1].
921
+ * Input: flat coords [x1,y1,z1, x2,y2,z2, ...]
922
+ * Returns [x, y, z].
923
+ * @param {Float64Array} coords
924
+ * @param {number} t
925
+ * @returns {Float64Array}
926
+ */
927
+ export function polyline_point_at(coords: Float64Array, t: number): Float64Array;
928
+ /**
929
+ * Find the closest point on a ray to a given point.
930
+ * Returns [x, y, z] of the closest point on the ray.
931
+ * @param {number} ox
932
+ * @param {number} oy
933
+ * @param {number} oz
934
+ * @param {number} dx
935
+ * @param {number} dy
936
+ * @param {number} dz
937
+ * @param {number} px
938
+ * @param {number} py
939
+ * @param {number} pz
940
+ * @returns {Float64Array}
941
+ */
942
+ export function ray_closest_point(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, px: number, py: number, pz: number): Float64Array;
943
+ /**
944
+ * Find the parameter t for the closest point on a ray to a given point.
945
+ * The closest point is at: origin + t * direction
946
+ * Note: t can be negative if the closest point is "behind" the ray origin.
947
+ * @param {number} ox
948
+ * @param {number} oy
949
+ * @param {number} oz
950
+ * @param {number} dx
951
+ * @param {number} dy
952
+ * @param {number} dz
953
+ * @param {number} px
954
+ * @param {number} py
955
+ * @param {number} pz
956
+ * @returns {number}
957
+ */
958
+ export function ray_closest_point_parameter(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, px: number, py: number, pz: number): number;
959
+ /**
960
+ * Compute the distance from a ray to a point.
961
+ * Ray is defined by origin (ox, oy, oz) and direction (dx, dy, dz).
962
+ * Direction should be normalized for accurate distance.
963
+ * Returns the perpendicular distance from the ray to the point.
964
+ * @param {number} ox
965
+ * @param {number} oy
966
+ * @param {number} oz
967
+ * @param {number} dx
968
+ * @param {number} dy
969
+ * @param {number} dz
970
+ * @param {number} px
971
+ * @param {number} py
972
+ * @param {number} pz
973
+ * @returns {number}
974
+ */
975
+ export function ray_distance_to_point(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, px: number, py: number, pz: number): number;
976
+ /**
977
+ * Get a point along the ray at parameter t.
978
+ * Returns [x, y, z] = origin + t * direction
979
+ * @param {number} ox
980
+ * @param {number} oy
981
+ * @param {number} oz
982
+ * @param {number} dx
983
+ * @param {number} dy
984
+ * @param {number} dz
985
+ * @param {number} t
986
+ * @returns {Float64Array}
987
+ */
988
+ export function ray_point_at(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, t: number): Float64Array;
989
+ /**
990
+ * Sample a NURBS curve.
991
+ * Input: degree, then flat control points [x,y,z,...], then flat weights, then flat knots
992
+ * Format: [degree, num_pts, x0,y0,z0, ..., w0,w1,..., k0,k1,...]
993
+ * @param {Float64Array} data
994
+ * @param {number} samples
995
+ * @returns {Float64Array}
996
+ */
997
+ export function sample_nurbs_curve(data: Float64Array, samples: number): Float64Array;
998
+ /**
999
+ * Sweep a profile curve along a path curve using exact curve evaluation.
1000
+ * profile_data/path_data: encoded curve (see decode_curve)
1001
+ * Returns mesh buffers.
1002
+ * @param {Float64Array} profile_data
1003
+ * @param {Float64Array} path_data
1004
+ * @param {number} profile_segments
1005
+ * @param {number} path_segments
1006
+ * @param {boolean} with_caps
1007
+ * @returns {Float64Array}
1008
+ */
1009
+ export function sweep_curves(profile_data: Float64Array, path_data: Float64Array, profile_segments: number, path_segments: number, with_caps: boolean): Float64Array;
1010
+ /**
1011
+ * Sweep a profile polyline along a path polyline.
1012
+ * profile_coords: flat [x,y,z,...] for profile curve
1013
+ * path_coords: flat [x,y,z,...] for path curve
1014
+ * with_caps: whether to close the ends
1015
+ * Returns mesh buffers.
1016
+ * @param {Float64Array} profile_coords
1017
+ * @param {Float64Array} path_coords
1018
+ * @param {boolean} with_caps
1019
+ * @returns {Float64Array}
1020
+ */
1021
+ export function sweep_polylines(profile_coords: Float64Array, path_coords: Float64Array, with_caps: boolean): Float64Array;
1022
+ /**
1023
+ * Tessellate a NURBS surface to a mesh buffer.
1024
+ * Input format: [degree_u, degree_v, num_u, num_v, ...control_points(flat)..., ...weights(flat)..., ...knots_u..., ...knots_v..., u_segs, v_segs]
1025
+ * @param {Float64Array} data
1026
+ * @returns {Float64Array}
1027
+ */
1028
+ export function tessellate_nurbs_surface(data: Float64Array): Float64Array;
1029
+ /**
1030
+ * Simple test function to verify WASM is working
1031
+ * @returns {string}
1032
+ */
1033
+ export function test_wasm(): string;
1034
+ /**
1035
+ * Get version info
1036
+ * @returns {string}
1037
+ */
1038
+ export function version(): string;
1039
+ export function initSync(module: any): any;
1040
+ declare function __wbg_init(module_or_path: any): Promise<any>;
1041
+ export { __wbg_init as default };
1042
+ //# sourceMappingURL=wasm-bindings.d.ts.map