okgeometry-api 1.20.0 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -616,6 +616,13 @@ export function mesh_boolean_union(vertex_count_a: number, buffer_a: Float64Arra
616
616
  */
617
617
  export function mesh_boolean_union_all(packed: Float64Array, flags: string): Float64Array;
618
618
 
619
+ /**
620
+ * Flat 3D endpoints of every open boundary edge: `[x0,y0,z0, x1,y1,z1, ...]`,
621
+ * six values per segment. Empty when the mesh is closed. Drives the red
622
+ * "open edge" viewport highlight.
623
+ */
624
+ export function mesh_boundary_edge_segments(vertex_count: number, buffer: Float64Array): Float64Array;
625
+
619
626
  /**
620
627
  * Extract boundary (perimeter) edges from a mesh as polylines.
621
628
  * Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
@@ -857,6 +864,16 @@ export function mesh_import_stl(data: Uint8Array, weld_tolerance: number): Float
857
864
  */
858
865
  export function mesh_is_closed_volume(vertex_count: number, buffer: Float64Array): boolean;
859
866
 
867
+ /**
868
+ * Layered "make watertight": first geometry-preserving repair; if that already
869
+ * closes the mesh, return it. Otherwise fall back to voxel remeshing.
870
+ *
871
+ * Output: `[ before(13), after(13), method, effectiveResolution, vertexCount,
872
+ * ...positions, ...indices ]` where `method` is 0 (repair) or 1 (remesh) and
873
+ * `after` describes the returned mesh.
874
+ */
875
+ export function mesh_make_watertight(vertex_count: number, buffer: Float64Array, resolution: number, iso: number): Float64Array;
876
+
860
877
  /**
861
878
  * Debug helper: run only the isolated direct-port `MeshGL -> Impl -> MeshGL`
862
879
  * normalization owner and return a JSON dump for local port validation.
@@ -951,6 +968,25 @@ export function mesh_raycast_all(vertex_count: number, buffer: Float64Array, ox:
951
968
  */
952
969
  export function mesh_raycast_many(mesh_data: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
953
970
 
971
+ /**
972
+ * Geometry-preserving repair: weld, drop degenerate/duplicate triangles,
973
+ * remove orphan vertices, fix winding, and fill holes.
974
+ *
975
+ * `flags` bitmask: 1=weld, 2=removeDegenerate, 4=removeDuplicate,
976
+ * 8=fillHoles, 16=fixWinding, 32=removeUnreferenced. `weld_tolerance <= 0`
977
+ * = auto; `max_hole_edges <= 0` = fill every hole.
978
+ *
979
+ * Output: `[ before(13), after(13), weldedVertices, removedTriangles,
980
+ * filledHoles, vertexCount, ...positions, ...indices ]` — the trailing mesh
981
+ * buffer is a standard `[vertexCount, positions, indices]` block.
982
+ */
983
+ export function mesh_repair(vertex_count: number, buffer: Float64Array, flags: number, weld_tolerance: number, max_hole_edges: number): Float64Array;
984
+
985
+ /**
986
+ * Full mesh health report (see [`push_repair_diag`] for the 13-value layout).
987
+ */
988
+ export function mesh_repair_diagnostics(vertex_count: number, buffer: Float64Array): Float64Array;
989
+
954
990
  /**
955
991
  * Rotate a mesh around an arbitrary axis and return new buffers
956
992
  * Axis is defined by (ax, ay, az), angle in radians
@@ -1047,6 +1083,16 @@ export function mesh_topology_metrics_raw(vertex_count: number, buffer: Float64A
1047
1083
  */
1048
1084
  export function mesh_translate(vertex_count: number, buffer: Float64Array, dx: number, dy: number, dz: number): Float64Array;
1049
1085
 
1086
+ /**
1087
+ * Rebuild a mesh as a guaranteed-watertight solid via generalized-winding-
1088
+ * number voxel remeshing. `resolution` = cells along the longest axis
1089
+ * (`0` = 64 default, auto-capped by a work budget). `iso` = winding threshold
1090
+ * (`<=0` or `>=1` → 0.5).
1091
+ *
1092
+ * Output: a standard `[vertexCount, ...positions, ...indices]` mesh buffer.
1093
+ */
1094
+ export function mesh_voxel_remesh(vertex_count: number, buffer: Float64Array, resolution: number, iso: number): Float64Array;
1095
+
1050
1096
  /**
1051
1097
  * Intersect two NURBS curves.
1052
1098
  * Returns: [num_points, x,y,z, ...]
@@ -1558,6 +1604,7 @@ export interface InitOutput {
1558
1604
  readonly mesh_boolean_subtraction: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1559
1605
  readonly mesh_boolean_union: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1560
1606
  readonly mesh_boolean_union_all: (a: number, b: number, c: number, d: number) => [number, number];
1607
+ readonly mesh_boundary_edge_segments: (a: number, b: number, c: number) => [number, number];
1561
1608
  readonly mesh_boundary_polylines: (a: number, b: number, c: number) => [number, number];
1562
1609
  readonly mesh_build_coplanar_connected_face_groups: (a: number, b: number, c: number) => [number, number];
1563
1610
  readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
@@ -1593,6 +1640,7 @@ export interface InitOutput {
1593
1640
  readonly mesh_import_obj: (a: number, b: number) => [number, number];
1594
1641
  readonly mesh_import_stl: (a: number, b: number, c: number) => [number, number];
1595
1642
  readonly mesh_is_closed_volume: (a: number, b: number, c: number) => number;
1643
+ readonly mesh_make_watertight: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1596
1644
  readonly mesh_manifold_port_import_roundtrip_debug: (a: number, b: number, c: number, d: number) => [number, number];
1597
1645
  readonly mesh_manifold_port_import_stage_hashes_debug: (a: number, b: number, c: number, d: number) => [number, number];
1598
1646
  readonly mesh_manifold_port_triangulate_projected_polygon_debug: (a: number, b: number, c: number, d: number) => [number, number];
@@ -1607,6 +1655,8 @@ export interface InitOutput {
1607
1655
  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];
1608
1656
  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];
1609
1657
  readonly mesh_raycast_many: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
1658
+ readonly mesh_repair: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1659
+ readonly mesh_repair_diagnostics: (a: number, b: number, c: number) => [number, number];
1610
1660
  readonly mesh_rotate: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
1611
1661
  readonly mesh_scale: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1612
1662
  readonly mesh_sheet_union: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
@@ -1620,6 +1670,7 @@ export interface InitOutput {
1620
1670
  readonly mesh_topology_metrics: (a: number, b: number, c: number) => [number, number];
1621
1671
  readonly mesh_topology_metrics_raw: (a: number, b: number, c: number) => [number, number];
1622
1672
  readonly mesh_translate: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1673
+ readonly mesh_voxel_remesh: (a: number, b: number, c: number, d: number, e: number) => [number, number];
1623
1674
  readonly nurbs_curve_curve_intersect: (a: number, b: number, c: number, d: number) => [number, number];
1624
1675
  readonly nurbs_curve_curve_intersect_params: (a: number, b: number, c: number, d: number) => [number, number];
1625
1676
  readonly nurbs_curve_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
@@ -1977,6 +1977,23 @@ export function mesh_boolean_union_all(packed, flags) {
1977
1977
  return v3;
1978
1978
  }
1979
1979
 
1980
+ /**
1981
+ * Flat 3D endpoints of every open boundary edge: `[x0,y0,z0, x1,y1,z1, ...]`,
1982
+ * six values per segment. Empty when the mesh is closed. Drives the red
1983
+ * "open edge" viewport highlight.
1984
+ * @param {number} vertex_count
1985
+ * @param {Float64Array} buffer
1986
+ * @returns {Float64Array}
1987
+ */
1988
+ export function mesh_boundary_edge_segments(vertex_count, buffer) {
1989
+ const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
1990
+ const len0 = WASM_VECTOR_LEN;
1991
+ const ret = wasm.mesh_boundary_edge_segments(vertex_count, ptr0, len0);
1992
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
1993
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
1994
+ return v2;
1995
+ }
1996
+
1980
1997
  /**
1981
1998
  * Extract boundary (perimeter) edges from a mesh as polylines.
1982
1999
  * Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
@@ -2622,6 +2639,28 @@ export function mesh_is_closed_volume(vertex_count, buffer) {
2622
2639
  return ret !== 0;
2623
2640
  }
2624
2641
 
2642
+ /**
2643
+ * Layered "make watertight": first geometry-preserving repair; if that already
2644
+ * closes the mesh, return it. Otherwise fall back to voxel remeshing.
2645
+ *
2646
+ * Output: `[ before(13), after(13), method, effectiveResolution, vertexCount,
2647
+ * ...positions, ...indices ]` where `method` is 0 (repair) or 1 (remesh) and
2648
+ * `after` describes the returned mesh.
2649
+ * @param {number} vertex_count
2650
+ * @param {Float64Array} buffer
2651
+ * @param {number} resolution
2652
+ * @param {number} iso
2653
+ * @returns {Float64Array}
2654
+ */
2655
+ export function mesh_make_watertight(vertex_count, buffer, resolution, iso) {
2656
+ const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
2657
+ const len0 = WASM_VECTOR_LEN;
2658
+ const ret = wasm.mesh_make_watertight(vertex_count, ptr0, len0, resolution, iso);
2659
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
2660
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
2661
+ return v2;
2662
+ }
2663
+
2625
2664
  /**
2626
2665
  * Debug helper: run only the isolated direct-port `MeshGL -> Impl -> MeshGL`
2627
2666
  * normalization owner and return a JSON dump for local port validation.
@@ -2926,6 +2965,48 @@ export function mesh_raycast_many(mesh_data, ox, oy, oz, dx, dy, dz, max_distanc
2926
2965
  return v2;
2927
2966
  }
2928
2967
 
2968
+ /**
2969
+ * Geometry-preserving repair: weld, drop degenerate/duplicate triangles,
2970
+ * remove orphan vertices, fix winding, and fill holes.
2971
+ *
2972
+ * `flags` bitmask: 1=weld, 2=removeDegenerate, 4=removeDuplicate,
2973
+ * 8=fillHoles, 16=fixWinding, 32=removeUnreferenced. `weld_tolerance <= 0`
2974
+ * = auto; `max_hole_edges <= 0` = fill every hole.
2975
+ *
2976
+ * Output: `[ before(13), after(13), weldedVertices, removedTriangles,
2977
+ * filledHoles, vertexCount, ...positions, ...indices ]` — the trailing mesh
2978
+ * buffer is a standard `[vertexCount, positions, indices]` block.
2979
+ * @param {number} vertex_count
2980
+ * @param {Float64Array} buffer
2981
+ * @param {number} flags
2982
+ * @param {number} weld_tolerance
2983
+ * @param {number} max_hole_edges
2984
+ * @returns {Float64Array}
2985
+ */
2986
+ export function mesh_repair(vertex_count, buffer, flags, weld_tolerance, max_hole_edges) {
2987
+ const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
2988
+ const len0 = WASM_VECTOR_LEN;
2989
+ const ret = wasm.mesh_repair(vertex_count, ptr0, len0, flags, weld_tolerance, max_hole_edges);
2990
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
2991
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
2992
+ return v2;
2993
+ }
2994
+
2995
+ /**
2996
+ * Full mesh health report (see [`push_repair_diag`] for the 13-value layout).
2997
+ * @param {number} vertex_count
2998
+ * @param {Float64Array} buffer
2999
+ * @returns {Float64Array}
3000
+ */
3001
+ export function mesh_repair_diagnostics(vertex_count, buffer) {
3002
+ const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
3003
+ const len0 = WASM_VECTOR_LEN;
3004
+ const ret = wasm.mesh_repair_diagnostics(vertex_count, ptr0, len0);
3005
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
3006
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
3007
+ return v2;
3008
+ }
3009
+
2929
3010
  /**
2930
3011
  * Rotate a mesh around an arbitrary axis and return new buffers
2931
3012
  * Axis is defined by (ax, ay, az), angle in radians
@@ -3221,6 +3302,28 @@ export function mesh_translate(vertex_count, buffer, dx, dy, dz) {
3221
3302
  return v2;
3222
3303
  }
3223
3304
 
3305
+ /**
3306
+ * Rebuild a mesh as a guaranteed-watertight solid via generalized-winding-
3307
+ * number voxel remeshing. `resolution` = cells along the longest axis
3308
+ * (`0` = 64 default, auto-capped by a work budget). `iso` = winding threshold
3309
+ * (`<=0` or `>=1` → 0.5).
3310
+ *
3311
+ * Output: a standard `[vertexCount, ...positions, ...indices]` mesh buffer.
3312
+ * @param {number} vertex_count
3313
+ * @param {Float64Array} buffer
3314
+ * @param {number} resolution
3315
+ * @param {number} iso
3316
+ * @returns {Float64Array}
3317
+ */
3318
+ export function mesh_voxel_remesh(vertex_count, buffer, resolution, iso) {
3319
+ const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
3320
+ const len0 = WASM_VECTOR_LEN;
3321
+ const ret = wasm.mesh_voxel_remesh(vertex_count, ptr0, len0, resolution, iso);
3322
+ var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
3323
+ wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
3324
+ return v2;
3325
+ }
3326
+
3224
3327
  /**
3225
3328
  * Intersect two NURBS curves.
3226
3329
  * Returns: [num_points, x,y,z, ...]