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.
- package/dist/Mesh.d.ts +90 -0
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +110 -0
- package/dist/Mesh.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/wasm-base64.d.ts +1 -1
- package/dist/wasm-base64.d.ts.map +1 -1
- package/dist/wasm-base64.js +1 -1
- package/dist/wasm-base64.js.map +1 -1
- package/dist/wasm-bindings.d.ts +63 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +98 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +59 -59
- package/src/Mesh.ts +194 -0
- package/src/index.ts +4 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +51 -0
- package/src/wasm-bindings.js +103 -0
package/src/wasm-bindings.d.ts
CHANGED
|
@@ -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];
|
package/src/wasm-bindings.js
CHANGED
|
@@ -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, ...]
|