okgeometry-api 1.1.6 → 1.1.7

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