okgeometry-api 1.19.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 +110 -0
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +139 -0
- package/dist/Mesh.js.map +1 -1
- package/dist/SculptSession.d.ts +10 -0
- package/dist/SculptSession.d.ts.map +1 -1
- package/dist/SculptSession.js +14 -0
- package/dist/SculptSession.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 +93 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +142 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +1 -1
- package/src/Mesh.ts +4046 -3810
- package/src/SculptSession.ts +377 -362
- package/src/index.ts +4 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +72 -0
- package/src/wasm-bindings.js +149 -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.
|
|
@@ -923,6 +940,15 @@ export function mesh_polyline_intersection_points(vertex_count: number, buffer:
|
|
|
923
940
|
*/
|
|
924
941
|
export function mesh_prepare_boolean_cutter_curve(coords: Float64Array, closed: boolean, nx: number, ny: number, nz: number, height: number): Float64Array;
|
|
925
942
|
|
|
943
|
+
/**
|
|
944
|
+
* Host-aware boolean cutter preparation: like
|
|
945
|
+
* `mesh_prepare_boolean_cutter_curve`, but the bias is raised past the
|
|
946
|
+
* measured host-surface deviation under the cutter footprint (sculpted /
|
|
947
|
+
* non-planar faces). The host arrives as a standard triangulated buffer.
|
|
948
|
+
* Returns [height, epsilon, pointCount, x,y,z,...]
|
|
949
|
+
*/
|
|
950
|
+
export function mesh_prepare_hosted_boolean_cutter(host_vertex_count: number, host_buffer: Float64Array, coords: Float64Array, closed: boolean, nx: number, ny: number, nz: number, height: number): Float64Array;
|
|
951
|
+
|
|
926
952
|
/**
|
|
927
953
|
* Raycast against mesh and return closest hit.
|
|
928
954
|
* Output: [] when no hit, otherwise [pointX,pointY,pointZ, normalX,normalY,normalZ, faceIndex, distance]
|
|
@@ -942,6 +968,25 @@ export function mesh_raycast_all(vertex_count: number, buffer: Float64Array, ox:
|
|
|
942
968
|
*/
|
|
943
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;
|
|
944
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
|
+
|
|
945
990
|
/**
|
|
946
991
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
947
992
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -1038,6 +1083,16 @@ export function mesh_topology_metrics_raw(vertex_count: number, buffer: Float64A
|
|
|
1038
1083
|
*/
|
|
1039
1084
|
export function mesh_translate(vertex_count: number, buffer: Float64Array, dx: number, dy: number, dz: number): Float64Array;
|
|
1040
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
|
+
|
|
1041
1096
|
/**
|
|
1042
1097
|
* Intersect two NURBS curves.
|
|
1043
1098
|
* Returns: [num_points, x,y,z, ...]
|
|
@@ -1328,6 +1383,16 @@ export function sculpt_session_create(vertex_count: number, buffer: Float64Array
|
|
|
1328
1383
|
*/
|
|
1329
1384
|
export function sculpt_session_dab(id: number, cx: number, cy: number, cz: number, vx: number, vy: number, vz: number, dragx: number, dragy: number, dragz: number, pressure: number): Float32Array;
|
|
1330
1385
|
|
|
1386
|
+
/**
|
|
1387
|
+
* Locally REDUCE point density in the given triangle group (constrained
|
|
1388
|
+
* edge collapse of interior vertices; the group boundary is preserved)
|
|
1389
|
+
* until the group has at most `target_points` unique vertices or no safe
|
|
1390
|
+
* collapse remains. Returns 1 when at least one collapse happened, 0
|
|
1391
|
+
* otherwise. Clears session undo history; callers must refetch
|
|
1392
|
+
* `sculpt_session_render_data` afterwards.
|
|
1393
|
+
*/
|
|
1394
|
+
export function sculpt_session_decimate_faces(id: number, triangles: Uint32Array, target_points: number): number;
|
|
1395
|
+
|
|
1331
1396
|
/**
|
|
1332
1397
|
* Finish the active stroke (pushes one undo entry).
|
|
1333
1398
|
*/
|
|
@@ -1539,6 +1604,7 @@ export interface InitOutput {
|
|
|
1539
1604
|
readonly mesh_boolean_subtraction: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1540
1605
|
readonly mesh_boolean_union: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1541
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];
|
|
1542
1608
|
readonly mesh_boundary_polylines: (a: number, b: number, c: number) => [number, number];
|
|
1543
1609
|
readonly mesh_build_coplanar_connected_face_groups: (a: number, b: number, c: number) => [number, number];
|
|
1544
1610
|
readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
|
|
@@ -1574,6 +1640,7 @@ export interface InitOutput {
|
|
|
1574
1640
|
readonly mesh_import_obj: (a: number, b: number) => [number, number];
|
|
1575
1641
|
readonly mesh_import_stl: (a: number, b: number, c: number) => [number, number];
|
|
1576
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];
|
|
1577
1644
|
readonly mesh_manifold_port_import_roundtrip_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1578
1645
|
readonly mesh_manifold_port_import_stage_hashes_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1579
1646
|
readonly mesh_manifold_port_triangulate_projected_polygon_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
@@ -1584,9 +1651,12 @@ export interface InitOutput {
|
|
|
1584
1651
|
readonly mesh_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1585
1652
|
readonly mesh_polyline_intersection_points: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1586
1653
|
readonly mesh_prepare_boolean_cutter_curve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1654
|
+
readonly mesh_prepare_hosted_boolean_cutter: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
1587
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];
|
|
1588
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];
|
|
1589
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];
|
|
1590
1660
|
readonly mesh_rotate: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1591
1661
|
readonly mesh_scale: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1592
1662
|
readonly mesh_sheet_union: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
@@ -1600,6 +1670,7 @@ export interface InitOutput {
|
|
|
1600
1670
|
readonly mesh_topology_metrics: (a: number, b: number, c: number) => [number, number];
|
|
1601
1671
|
readonly mesh_topology_metrics_raw: (a: number, b: number, c: number) => [number, number];
|
|
1602
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];
|
|
1603
1674
|
readonly nurbs_curve_curve_intersect: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1604
1675
|
readonly nurbs_curve_curve_intersect_params: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1605
1676
|
readonly nurbs_curve_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
@@ -1637,6 +1708,7 @@ export interface InitOutput {
|
|
|
1637
1708
|
readonly sculpt_session_begin_stroke: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
|
|
1638
1709
|
readonly sculpt_session_create: (a: number, b: number, c: number) => number;
|
|
1639
1710
|
readonly sculpt_session_dab: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
|
|
1711
|
+
readonly sculpt_session_decimate_faces: (a: number, b: number, c: number, d: number) => number;
|
|
1640
1712
|
readonly sculpt_session_end_stroke: (a: number) => void;
|
|
1641
1713
|
readonly sculpt_session_face_group: (a: number, b: number, c: number) => [number, number];
|
|
1642
1714
|
readonly sculpt_session_info: (a: 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.
|
|
@@ -2830,6 +2869,33 @@ export function mesh_prepare_boolean_cutter_curve(coords, closed, nx, ny, nz, he
|
|
|
2830
2869
|
return v2;
|
|
2831
2870
|
}
|
|
2832
2871
|
|
|
2872
|
+
/**
|
|
2873
|
+
* Host-aware boolean cutter preparation: like
|
|
2874
|
+
* `mesh_prepare_boolean_cutter_curve`, but the bias is raised past the
|
|
2875
|
+
* measured host-surface deviation under the cutter footprint (sculpted /
|
|
2876
|
+
* non-planar faces). The host arrives as a standard triangulated buffer.
|
|
2877
|
+
* Returns [height, epsilon, pointCount, x,y,z,...]
|
|
2878
|
+
* @param {number} host_vertex_count
|
|
2879
|
+
* @param {Float64Array} host_buffer
|
|
2880
|
+
* @param {Float64Array} coords
|
|
2881
|
+
* @param {boolean} closed
|
|
2882
|
+
* @param {number} nx
|
|
2883
|
+
* @param {number} ny
|
|
2884
|
+
* @param {number} nz
|
|
2885
|
+
* @param {number} height
|
|
2886
|
+
* @returns {Float64Array}
|
|
2887
|
+
*/
|
|
2888
|
+
export function mesh_prepare_hosted_boolean_cutter(host_vertex_count, host_buffer, coords, closed, nx, ny, nz, height) {
|
|
2889
|
+
const ptr0 = passArrayF64ToWasm0(host_buffer, wasm.__wbindgen_malloc);
|
|
2890
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2891
|
+
const ptr1 = passArrayF64ToWasm0(coords, wasm.__wbindgen_malloc);
|
|
2892
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2893
|
+
const ret = wasm.mesh_prepare_hosted_boolean_cutter(host_vertex_count, ptr0, len0, ptr1, len1, closed, nx, ny, nz, height);
|
|
2894
|
+
var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2895
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2896
|
+
return v3;
|
|
2897
|
+
}
|
|
2898
|
+
|
|
2833
2899
|
/**
|
|
2834
2900
|
* Raycast against mesh and return closest hit.
|
|
2835
2901
|
* Output: [] when no hit, otherwise [pointX,pointY,pointZ, normalX,normalY,normalZ, faceIndex, distance]
|
|
@@ -2899,6 +2965,48 @@ export function mesh_raycast_many(mesh_data, ox, oy, oz, dx, dy, dz, max_distanc
|
|
|
2899
2965
|
return v2;
|
|
2900
2966
|
}
|
|
2901
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
|
+
|
|
2902
3010
|
/**
|
|
2903
3011
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
2904
3012
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -3194,6 +3302,28 @@ export function mesh_translate(vertex_count, buffer, dx, dy, dz) {
|
|
|
3194
3302
|
return v2;
|
|
3195
3303
|
}
|
|
3196
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
|
+
|
|
3197
3327
|
/**
|
|
3198
3328
|
* Intersect two NURBS curves.
|
|
3199
3329
|
* Returns: [num_points, x,y,z, ...]
|
|
@@ -3943,6 +4073,25 @@ export function sculpt_session_dab(id, cx, cy, cz, vx, vy, vz, dragx, dragy, dra
|
|
|
3943
4073
|
return v1;
|
|
3944
4074
|
}
|
|
3945
4075
|
|
|
4076
|
+
/**
|
|
4077
|
+
* Locally REDUCE point density in the given triangle group (constrained
|
|
4078
|
+
* edge collapse of interior vertices; the group boundary is preserved)
|
|
4079
|
+
* until the group has at most `target_points` unique vertices or no safe
|
|
4080
|
+
* collapse remains. Returns 1 when at least one collapse happened, 0
|
|
4081
|
+
* otherwise. Clears session undo history; callers must refetch
|
|
4082
|
+
* `sculpt_session_render_data` afterwards.
|
|
4083
|
+
* @param {number} id
|
|
4084
|
+
* @param {Uint32Array} triangles
|
|
4085
|
+
* @param {number} target_points
|
|
4086
|
+
* @returns {number}
|
|
4087
|
+
*/
|
|
4088
|
+
export function sculpt_session_decimate_faces(id, triangles, target_points) {
|
|
4089
|
+
const ptr0 = passArray32ToWasm0(triangles, wasm.__wbindgen_malloc);
|
|
4090
|
+
const len0 = WASM_VECTOR_LEN;
|
|
4091
|
+
const ret = wasm.sculpt_session_decimate_faces(id, ptr0, len0, target_points);
|
|
4092
|
+
return ret >>> 0;
|
|
4093
|
+
}
|
|
4094
|
+
|
|
3946
4095
|
/**
|
|
3947
4096
|
* Finish the active stroke (pushes one undo entry).
|
|
3948
4097
|
* @param {number} id
|