okgeometry-api 1.20.0 → 1.22.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 +105 -0
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +141 -0
- package/dist/Mesh.js.map +1 -1
- package/dist/NurbsCurve.d.ts +13 -11
- package/dist/NurbsCurve.d.ts.map +1 -1
- package/dist/NurbsCurve.js +22 -19
- package/dist/NurbsCurve.js.map +1 -1
- package/dist/NurbsSurface.d.ts +12 -0
- package/dist/NurbsSurface.d.ts.map +1 -1
- package/dist/NurbsSurface.js +17 -0
- package/dist/NurbsSurface.js.map +1 -1
- package/dist/Polyline.d.ts +11 -0
- package/dist/Polyline.d.ts.map +1 -1
- package/dist/Polyline.js +41 -0
- package/dist/Polyline.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 +120 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +199 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +3 -2
- package/src/Mesh.ts +231 -0
- package/src/NurbsCurve.ts +35 -26
- package/src/NurbsSurface.ts +20 -0
- package/src/Polyline.ts +45 -0
- package/src/index.ts +4 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +96 -0
- package/src/wasm-bindings.js +208 -0
package/src/wasm-bindings.d.ts
CHANGED
|
@@ -321,6 +321,15 @@ export function build_nurbs_curve(degree: number, coords: Float64Array, closed:
|
|
|
321
321
|
*/
|
|
322
322
|
export function chamfer_polycurve(coords: Float64Array, distance: number): Float64Array;
|
|
323
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Chamfer polyline corners with closed support and optional corner
|
|
326
|
+
* selection. `coords` is a flat point list (closed inputs without the
|
|
327
|
+
* duplicate seam point); `corner_indices` empty = all eligible corners.
|
|
328
|
+
* Returns the flat chamfered point list (closed outputs again without the
|
|
329
|
+
* seam duplicate), or empty on failure (see `geometry_last_error`).
|
|
330
|
+
*/
|
|
331
|
+
export function chamfer_polyline_corners(coords: Float64Array, closed: boolean, distance: number, corner_indices: Float64Array): Float64Array;
|
|
332
|
+
|
|
324
333
|
/**
|
|
325
334
|
* Get the circumference of a circle.
|
|
326
335
|
*/
|
|
@@ -432,6 +441,12 @@ export function extrude_polyline(coords: Float64Array, dx: number, dy: number, d
|
|
|
432
441
|
*/
|
|
433
442
|
export function fillet_polycurve(coords: Float64Array, radius: number, nx: number, ny: number, nz: number): Float64Array;
|
|
434
443
|
|
|
444
|
+
/**
|
|
445
|
+
* Human-readable reason for the most recent empty result returned by the
|
|
446
|
+
* offset/chamfer exports below. Cleared at the start of each such call.
|
|
447
|
+
*/
|
|
448
|
+
export function geometry_last_error(): string;
|
|
449
|
+
|
|
435
450
|
/**
|
|
436
451
|
* Get the length of a line segment.
|
|
437
452
|
*/
|
|
@@ -616,6 +631,13 @@ export function mesh_boolean_union(vertex_count_a: number, buffer_a: Float64Arra
|
|
|
616
631
|
*/
|
|
617
632
|
export function mesh_boolean_union_all(packed: Float64Array, flags: string): Float64Array;
|
|
618
633
|
|
|
634
|
+
/**
|
|
635
|
+
* Flat 3D endpoints of every open boundary edge: `[x0,y0,z0, x1,y1,z1, ...]`,
|
|
636
|
+
* six values per segment. Empty when the mesh is closed. Drives the red
|
|
637
|
+
* "open edge" viewport highlight.
|
|
638
|
+
*/
|
|
639
|
+
export function mesh_boundary_edge_segments(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
640
|
+
|
|
619
641
|
/**
|
|
620
642
|
* Extract boundary (perimeter) edges from a mesh as polylines.
|
|
621
643
|
* Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
|
|
@@ -655,6 +677,16 @@ export function mesh_build_render_buffers(vertex_count: number, buffer: Float64A
|
|
|
655
677
|
*/
|
|
656
678
|
export function mesh_chamfer_all_edges(mesh_type: string, params: Float64Array, offset: number): Float64Array;
|
|
657
679
|
|
|
680
|
+
/**
|
|
681
|
+
* Chamfer feature edges of a closed solid. `edges` is a flat buffer of
|
|
682
|
+
* segment endpoint pairs [ax,ay,az,bx,by,bz, ...]; each picked segment
|
|
683
|
+
* expands to its full feature-edge chain (straight box edges, tessellated
|
|
684
|
+
* rims). `distance` is the setback along each adjacent face.
|
|
685
|
+
* Returns a standard mesh buffer, or empty on failure (see
|
|
686
|
+
* `geometry_last_error`).
|
|
687
|
+
*/
|
|
688
|
+
export function mesh_chamfer_edges(vertex_count: number, buffer: Float64Array, edges: Float64Array, distance: number): Float64Array;
|
|
689
|
+
|
|
658
690
|
/**
|
|
659
691
|
* Clip a polyline against a closed mesh volume (boolean intersection for curves).
|
|
660
692
|
*
|
|
@@ -857,6 +889,16 @@ export function mesh_import_stl(data: Uint8Array, weld_tolerance: number): Float
|
|
|
857
889
|
*/
|
|
858
890
|
export function mesh_is_closed_volume(vertex_count: number, buffer: Float64Array): boolean;
|
|
859
891
|
|
|
892
|
+
/**
|
|
893
|
+
* Layered "make watertight": first geometry-preserving repair; if that already
|
|
894
|
+
* closes the mesh, return it. Otherwise fall back to voxel remeshing.
|
|
895
|
+
*
|
|
896
|
+
* Output: `[ before(13), after(13), method, effectiveResolution, vertexCount,
|
|
897
|
+
* ...positions, ...indices ]` where `method` is 0 (repair) or 1 (remesh) and
|
|
898
|
+
* `after` describes the returned mesh.
|
|
899
|
+
*/
|
|
900
|
+
export function mesh_make_watertight(vertex_count: number, buffer: Float64Array, resolution: number, iso: number): Float64Array;
|
|
901
|
+
|
|
860
902
|
/**
|
|
861
903
|
* Debug helper: run only the isolated direct-port `MeshGL -> Impl -> MeshGL`
|
|
862
904
|
* normalization owner and return a JSON dump for local port validation.
|
|
@@ -951,6 +993,25 @@ export function mesh_raycast_all(vertex_count: number, buffer: Float64Array, ox:
|
|
|
951
993
|
*/
|
|
952
994
|
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
995
|
|
|
996
|
+
/**
|
|
997
|
+
* Geometry-preserving repair: weld, drop degenerate/duplicate triangles,
|
|
998
|
+
* remove orphan vertices, fix winding, and fill holes.
|
|
999
|
+
*
|
|
1000
|
+
* `flags` bitmask: 1=weld, 2=removeDegenerate, 4=removeDuplicate,
|
|
1001
|
+
* 8=fillHoles, 16=fixWinding, 32=removeUnreferenced. `weld_tolerance <= 0`
|
|
1002
|
+
* = auto; `max_hole_edges <= 0` = fill every hole.
|
|
1003
|
+
*
|
|
1004
|
+
* Output: `[ before(13), after(13), weldedVertices, removedTriangles,
|
|
1005
|
+
* filledHoles, vertexCount, ...positions, ...indices ]` — the trailing mesh
|
|
1006
|
+
* buffer is a standard `[vertexCount, positions, indices]` block.
|
|
1007
|
+
*/
|
|
1008
|
+
export function mesh_repair(vertex_count: number, buffer: Float64Array, flags: number, weld_tolerance: number, max_hole_edges: number): Float64Array;
|
|
1009
|
+
|
|
1010
|
+
/**
|
|
1011
|
+
* Full mesh health report (see [`push_repair_diag`] for the 13-value layout).
|
|
1012
|
+
*/
|
|
1013
|
+
export function mesh_repair_diagnostics(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
1014
|
+
|
|
954
1015
|
/**
|
|
955
1016
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
956
1017
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -1047,6 +1108,16 @@ export function mesh_topology_metrics_raw(vertex_count: number, buffer: Float64A
|
|
|
1047
1108
|
*/
|
|
1048
1109
|
export function mesh_translate(vertex_count: number, buffer: Float64Array, dx: number, dy: number, dz: number): Float64Array;
|
|
1049
1110
|
|
|
1111
|
+
/**
|
|
1112
|
+
* Rebuild a mesh as a guaranteed-watertight solid via generalized-winding-
|
|
1113
|
+
* number voxel remeshing. `resolution` = cells along the longest axis
|
|
1114
|
+
* (`0` = 64 default, auto-capped by a work budget). `iso` = winding threshold
|
|
1115
|
+
* (`<=0` or `>=1` → 0.5).
|
|
1116
|
+
*
|
|
1117
|
+
* Output: a standard `[vertexCount, ...positions, ...indices]` mesh buffer.
|
|
1118
|
+
*/
|
|
1119
|
+
export function mesh_voxel_remesh(vertex_count: number, buffer: Float64Array, resolution: number, iso: number): Float64Array;
|
|
1120
|
+
|
|
1050
1121
|
/**
|
|
1051
1122
|
* Intersect two NURBS curves.
|
|
1052
1123
|
* Returns: [num_points, x,y,z, ...]
|
|
@@ -1067,6 +1138,14 @@ export function nurbs_curve_curve_intersect(data_a: Float64Array, data_b: Float6
|
|
|
1067
1138
|
*/
|
|
1068
1139
|
export function nurbs_curve_curve_intersect_params(curve_a_data: Float64Array, curve_b_data: Float64Array): Float64Array;
|
|
1069
1140
|
|
|
1141
|
+
/**
|
|
1142
|
+
* Offset a planar NURBS curve by `distance` within the plane with normal
|
|
1143
|
+
* (nx, ny, nz), refit to `tolerance`. Input/output use the standard curve
|
|
1144
|
+
* buffer format [degree, n, cps(xyz)..., weights..., knots...].
|
|
1145
|
+
* Returns an empty buffer on failure (see `geometry_last_error`).
|
|
1146
|
+
*/
|
|
1147
|
+
export function nurbs_curve_offset(data: Float64Array, distance: number, nx: number, ny: number, nz: number, tolerance: number): Float64Array;
|
|
1148
|
+
|
|
1070
1149
|
/**
|
|
1071
1150
|
* Intersect a NURBS curve with a plane.
|
|
1072
1151
|
* Input: same curve format as sample_nurbs_curve + plane normal (nx,ny,nz) and d.
|
|
@@ -1169,6 +1248,13 @@ export function nurbs_surface_iso_curve(data: Float64Array, t: number, u_dir: bo
|
|
|
1169
1248
|
*/
|
|
1170
1249
|
export function nurbs_surface_normal(data: Float64Array, u: number, v: number): Float64Array;
|
|
1171
1250
|
|
|
1251
|
+
/**
|
|
1252
|
+
* Offset a NURBS surface by `distance` along its normal field, refit to
|
|
1253
|
+
* `tolerance`. Input/output use the standard surface buffer format.
|
|
1254
|
+
* Returns an empty buffer on failure (see `geometry_last_error`).
|
|
1255
|
+
*/
|
|
1256
|
+
export function nurbs_surface_offset(data: Float64Array, distance: number, tolerance: number): Float64Array;
|
|
1257
|
+
|
|
1172
1258
|
/**
|
|
1173
1259
|
* Intersect a NURBS surface with a plane.
|
|
1174
1260
|
* Input: same surface format as tessellate_nurbs_surface, then plane (nx,ny,nz,d) appended.
|
|
@@ -1508,6 +1594,7 @@ export interface InitOutput {
|
|
|
1508
1594
|
readonly brep_volume_area: (a: number, b: number, c: number) => [number, number];
|
|
1509
1595
|
readonly build_nurbs_curve: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1510
1596
|
readonly chamfer_polycurve: (a: number, b: number, c: number) => [number, number];
|
|
1597
|
+
readonly chamfer_polyline_corners: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1511
1598
|
readonly circle_length: (a: number) => number;
|
|
1512
1599
|
readonly circle_point_at: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1513
1600
|
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];
|
|
@@ -1522,6 +1609,7 @@ export interface InitOutput {
|
|
|
1522
1609
|
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];
|
|
1523
1610
|
readonly extrude_polyline: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1524
1611
|
readonly fillet_polycurve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1612
|
+
readonly geometry_last_error: () => [number, number];
|
|
1525
1613
|
readonly line_length: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
1526
1614
|
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];
|
|
1527
1615
|
readonly line_point_at: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
@@ -1558,10 +1646,12 @@ export interface InitOutput {
|
|
|
1558
1646
|
readonly mesh_boolean_subtraction: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1559
1647
|
readonly mesh_boolean_union: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1560
1648
|
readonly mesh_boolean_union_all: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1649
|
+
readonly mesh_boundary_edge_segments: (a: number, b: number, c: number) => [number, number];
|
|
1561
1650
|
readonly mesh_boundary_polylines: (a: number, b: number, c: number) => [number, number];
|
|
1562
1651
|
readonly mesh_build_coplanar_connected_face_groups: (a: number, b: number, c: number) => [number, number];
|
|
1563
1652
|
readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1564
1653
|
readonly mesh_chamfer_all_edges: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1654
|
+
readonly mesh_chamfer_edges: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1565
1655
|
readonly mesh_clip_polyline: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1566
1656
|
readonly mesh_clip_polyline_by_sheet: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1567
1657
|
readonly mesh_compute_planar_curve_normal: (a: number, b: number, c: number) => [number, number];
|
|
@@ -1593,6 +1683,7 @@ export interface InitOutput {
|
|
|
1593
1683
|
readonly mesh_import_obj: (a: number, b: number) => [number, number];
|
|
1594
1684
|
readonly mesh_import_stl: (a: number, b: number, c: number) => [number, number];
|
|
1595
1685
|
readonly mesh_is_closed_volume: (a: number, b: number, c: number) => number;
|
|
1686
|
+
readonly mesh_make_watertight: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1596
1687
|
readonly mesh_manifold_port_import_roundtrip_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1597
1688
|
readonly mesh_manifold_port_import_stage_hashes_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1598
1689
|
readonly mesh_manifold_port_triangulate_projected_polygon_debug: (a: number, b: number, c: number, d: number) => [number, number];
|
|
@@ -1607,6 +1698,8 @@ export interface InitOutput {
|
|
|
1607
1698
|
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
1699
|
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
1700
|
readonly mesh_raycast_many: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
1701
|
+
readonly mesh_repair: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1702
|
+
readonly mesh_repair_diagnostics: (a: number, b: number, c: number) => [number, number];
|
|
1610
1703
|
readonly mesh_rotate: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1611
1704
|
readonly mesh_scale: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1612
1705
|
readonly mesh_sheet_union: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
@@ -1620,8 +1713,10 @@ export interface InitOutput {
|
|
|
1620
1713
|
readonly mesh_topology_metrics: (a: number, b: number, c: number) => [number, number];
|
|
1621
1714
|
readonly mesh_topology_metrics_raw: (a: number, b: number, c: number) => [number, number];
|
|
1622
1715
|
readonly mesh_translate: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1716
|
+
readonly mesh_voxel_remesh: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1623
1717
|
readonly nurbs_curve_curve_intersect: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1624
1718
|
readonly nurbs_curve_curve_intersect_params: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1719
|
+
readonly nurbs_curve_offset: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1625
1720
|
readonly nurbs_curve_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1626
1721
|
readonly nurbs_curve_split_at_params: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1627
1722
|
readonly nurbs_curve_surface_intersect_exact: (a: number, b: number, c: number, d: number) => [number, number];
|
|
@@ -1635,6 +1730,7 @@ export interface InitOutput {
|
|
|
1635
1730
|
readonly nurbs_surface_insert_knot: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1636
1731
|
readonly nurbs_surface_iso_curve: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1637
1732
|
readonly nurbs_surface_normal: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1733
|
+
readonly nurbs_surface_offset: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1638
1734
|
readonly nurbs_surface_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1639
1735
|
readonly nurbs_surface_primitive: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1640
1736
|
readonly nurbs_surface_revolve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
package/src/wasm-bindings.js
CHANGED
|
@@ -839,6 +839,29 @@ export function chamfer_polycurve(coords, distance) {
|
|
|
839
839
|
return v2;
|
|
840
840
|
}
|
|
841
841
|
|
|
842
|
+
/**
|
|
843
|
+
* Chamfer polyline corners with closed support and optional corner
|
|
844
|
+
* selection. `coords` is a flat point list (closed inputs without the
|
|
845
|
+
* duplicate seam point); `corner_indices` empty = all eligible corners.
|
|
846
|
+
* Returns the flat chamfered point list (closed outputs again without the
|
|
847
|
+
* seam duplicate), or empty on failure (see `geometry_last_error`).
|
|
848
|
+
* @param {Float64Array} coords
|
|
849
|
+
* @param {boolean} closed
|
|
850
|
+
* @param {number} distance
|
|
851
|
+
* @param {Float64Array} corner_indices
|
|
852
|
+
* @returns {Float64Array}
|
|
853
|
+
*/
|
|
854
|
+
export function chamfer_polyline_corners(coords, closed, distance, corner_indices) {
|
|
855
|
+
const ptr0 = passArrayF64ToWasm0(coords, wasm.__wbindgen_malloc);
|
|
856
|
+
const len0 = WASM_VECTOR_LEN;
|
|
857
|
+
const ptr1 = passArrayF64ToWasm0(corner_indices, wasm.__wbindgen_malloc);
|
|
858
|
+
const len1 = WASM_VECTOR_LEN;
|
|
859
|
+
const ret = wasm.chamfer_polyline_corners(ptr0, len0, closed, distance, ptr1, len1);
|
|
860
|
+
var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
861
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
862
|
+
return v3;
|
|
863
|
+
}
|
|
864
|
+
|
|
842
865
|
/**
|
|
843
866
|
* Get the circumference of a circle.
|
|
844
867
|
* @param {number} radius
|
|
@@ -1131,6 +1154,24 @@ export function fillet_polycurve(coords, radius, nx, ny, nz) {
|
|
|
1131
1154
|
return v2;
|
|
1132
1155
|
}
|
|
1133
1156
|
|
|
1157
|
+
/**
|
|
1158
|
+
* Human-readable reason for the most recent empty result returned by the
|
|
1159
|
+
* offset/chamfer exports below. Cleared at the start of each such call.
|
|
1160
|
+
* @returns {string}
|
|
1161
|
+
*/
|
|
1162
|
+
export function geometry_last_error() {
|
|
1163
|
+
let deferred1_0;
|
|
1164
|
+
let deferred1_1;
|
|
1165
|
+
try {
|
|
1166
|
+
const ret = wasm.geometry_last_error();
|
|
1167
|
+
deferred1_0 = ret[0];
|
|
1168
|
+
deferred1_1 = ret[1];
|
|
1169
|
+
return getStringFromWasm0(ret[0], ret[1]);
|
|
1170
|
+
} finally {
|
|
1171
|
+
wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1134
1175
|
/**
|
|
1135
1176
|
* Get the length of a line segment.
|
|
1136
1177
|
* @param {number} x1
|
|
@@ -1977,6 +2018,23 @@ export function mesh_boolean_union_all(packed, flags) {
|
|
|
1977
2018
|
return v3;
|
|
1978
2019
|
}
|
|
1979
2020
|
|
|
2021
|
+
/**
|
|
2022
|
+
* Flat 3D endpoints of every open boundary edge: `[x0,y0,z0, x1,y1,z1, ...]`,
|
|
2023
|
+
* six values per segment. Empty when the mesh is closed. Drives the red
|
|
2024
|
+
* "open edge" viewport highlight.
|
|
2025
|
+
* @param {number} vertex_count
|
|
2026
|
+
* @param {Float64Array} buffer
|
|
2027
|
+
* @returns {Float64Array}
|
|
2028
|
+
*/
|
|
2029
|
+
export function mesh_boundary_edge_segments(vertex_count, buffer) {
|
|
2030
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
2031
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2032
|
+
const ret = wasm.mesh_boundary_edge_segments(vertex_count, ptr0, len0);
|
|
2033
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2034
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2035
|
+
return v2;
|
|
2036
|
+
}
|
|
2037
|
+
|
|
1980
2038
|
/**
|
|
1981
2039
|
* Extract boundary (perimeter) edges from a mesh as polylines.
|
|
1982
2040
|
* Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
|
|
@@ -2060,6 +2118,30 @@ export function mesh_chamfer_all_edges(mesh_type, params, offset) {
|
|
|
2060
2118
|
return v3;
|
|
2061
2119
|
}
|
|
2062
2120
|
|
|
2121
|
+
/**
|
|
2122
|
+
* Chamfer feature edges of a closed solid. `edges` is a flat buffer of
|
|
2123
|
+
* segment endpoint pairs [ax,ay,az,bx,by,bz, ...]; each picked segment
|
|
2124
|
+
* expands to its full feature-edge chain (straight box edges, tessellated
|
|
2125
|
+
* rims). `distance` is the setback along each adjacent face.
|
|
2126
|
+
* Returns a standard mesh buffer, or empty on failure (see
|
|
2127
|
+
* `geometry_last_error`).
|
|
2128
|
+
* @param {number} vertex_count
|
|
2129
|
+
* @param {Float64Array} buffer
|
|
2130
|
+
* @param {Float64Array} edges
|
|
2131
|
+
* @param {number} distance
|
|
2132
|
+
* @returns {Float64Array}
|
|
2133
|
+
*/
|
|
2134
|
+
export function mesh_chamfer_edges(vertex_count, buffer, edges, distance) {
|
|
2135
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
2136
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2137
|
+
const ptr1 = passArrayF64ToWasm0(edges, wasm.__wbindgen_malloc);
|
|
2138
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2139
|
+
const ret = wasm.mesh_chamfer_edges(vertex_count, ptr0, len0, ptr1, len1, distance);
|
|
2140
|
+
var v3 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2141
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2142
|
+
return v3;
|
|
2143
|
+
}
|
|
2144
|
+
|
|
2063
2145
|
/**
|
|
2064
2146
|
* Clip a polyline against a closed mesh volume (boolean intersection for curves).
|
|
2065
2147
|
*
|
|
@@ -2622,6 +2704,28 @@ export function mesh_is_closed_volume(vertex_count, buffer) {
|
|
|
2622
2704
|
return ret !== 0;
|
|
2623
2705
|
}
|
|
2624
2706
|
|
|
2707
|
+
/**
|
|
2708
|
+
* Layered "make watertight": first geometry-preserving repair; if that already
|
|
2709
|
+
* closes the mesh, return it. Otherwise fall back to voxel remeshing.
|
|
2710
|
+
*
|
|
2711
|
+
* Output: `[ before(13), after(13), method, effectiveResolution, vertexCount,
|
|
2712
|
+
* ...positions, ...indices ]` where `method` is 0 (repair) or 1 (remesh) and
|
|
2713
|
+
* `after` describes the returned mesh.
|
|
2714
|
+
* @param {number} vertex_count
|
|
2715
|
+
* @param {Float64Array} buffer
|
|
2716
|
+
* @param {number} resolution
|
|
2717
|
+
* @param {number} iso
|
|
2718
|
+
* @returns {Float64Array}
|
|
2719
|
+
*/
|
|
2720
|
+
export function mesh_make_watertight(vertex_count, buffer, resolution, iso) {
|
|
2721
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
2722
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2723
|
+
const ret = wasm.mesh_make_watertight(vertex_count, ptr0, len0, resolution, iso);
|
|
2724
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2725
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2726
|
+
return v2;
|
|
2727
|
+
}
|
|
2728
|
+
|
|
2625
2729
|
/**
|
|
2626
2730
|
* Debug helper: run only the isolated direct-port `MeshGL -> Impl -> MeshGL`
|
|
2627
2731
|
* normalization owner and return a JSON dump for local port validation.
|
|
@@ -2926,6 +3030,48 @@ export function mesh_raycast_many(mesh_data, ox, oy, oz, dx, dy, dz, max_distanc
|
|
|
2926
3030
|
return v2;
|
|
2927
3031
|
}
|
|
2928
3032
|
|
|
3033
|
+
/**
|
|
3034
|
+
* Geometry-preserving repair: weld, drop degenerate/duplicate triangles,
|
|
3035
|
+
* remove orphan vertices, fix winding, and fill holes.
|
|
3036
|
+
*
|
|
3037
|
+
* `flags` bitmask: 1=weld, 2=removeDegenerate, 4=removeDuplicate,
|
|
3038
|
+
* 8=fillHoles, 16=fixWinding, 32=removeUnreferenced. `weld_tolerance <= 0`
|
|
3039
|
+
* = auto; `max_hole_edges <= 0` = fill every hole.
|
|
3040
|
+
*
|
|
3041
|
+
* Output: `[ before(13), after(13), weldedVertices, removedTriangles,
|
|
3042
|
+
* filledHoles, vertexCount, ...positions, ...indices ]` — the trailing mesh
|
|
3043
|
+
* buffer is a standard `[vertexCount, positions, indices]` block.
|
|
3044
|
+
* @param {number} vertex_count
|
|
3045
|
+
* @param {Float64Array} buffer
|
|
3046
|
+
* @param {number} flags
|
|
3047
|
+
* @param {number} weld_tolerance
|
|
3048
|
+
* @param {number} max_hole_edges
|
|
3049
|
+
* @returns {Float64Array}
|
|
3050
|
+
*/
|
|
3051
|
+
export function mesh_repair(vertex_count, buffer, flags, weld_tolerance, max_hole_edges) {
|
|
3052
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
3053
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3054
|
+
const ret = wasm.mesh_repair(vertex_count, ptr0, len0, flags, weld_tolerance, max_hole_edges);
|
|
3055
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3056
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3057
|
+
return v2;
|
|
3058
|
+
}
|
|
3059
|
+
|
|
3060
|
+
/**
|
|
3061
|
+
* Full mesh health report (see [`push_repair_diag`] for the 13-value layout).
|
|
3062
|
+
* @param {number} vertex_count
|
|
3063
|
+
* @param {Float64Array} buffer
|
|
3064
|
+
* @returns {Float64Array}
|
|
3065
|
+
*/
|
|
3066
|
+
export function mesh_repair_diagnostics(vertex_count, buffer) {
|
|
3067
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
3068
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3069
|
+
const ret = wasm.mesh_repair_diagnostics(vertex_count, ptr0, len0);
|
|
3070
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3071
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3072
|
+
return v2;
|
|
3073
|
+
}
|
|
3074
|
+
|
|
2929
3075
|
/**
|
|
2930
3076
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
2931
3077
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -3221,6 +3367,28 @@ export function mesh_translate(vertex_count, buffer, dx, dy, dz) {
|
|
|
3221
3367
|
return v2;
|
|
3222
3368
|
}
|
|
3223
3369
|
|
|
3370
|
+
/**
|
|
3371
|
+
* Rebuild a mesh as a guaranteed-watertight solid via generalized-winding-
|
|
3372
|
+
* number voxel remeshing. `resolution` = cells along the longest axis
|
|
3373
|
+
* (`0` = 64 default, auto-capped by a work budget). `iso` = winding threshold
|
|
3374
|
+
* (`<=0` or `>=1` → 0.5).
|
|
3375
|
+
*
|
|
3376
|
+
* Output: a standard `[vertexCount, ...positions, ...indices]` mesh buffer.
|
|
3377
|
+
* @param {number} vertex_count
|
|
3378
|
+
* @param {Float64Array} buffer
|
|
3379
|
+
* @param {number} resolution
|
|
3380
|
+
* @param {number} iso
|
|
3381
|
+
* @returns {Float64Array}
|
|
3382
|
+
*/
|
|
3383
|
+
export function mesh_voxel_remesh(vertex_count, buffer, resolution, iso) {
|
|
3384
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
3385
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3386
|
+
const ret = wasm.mesh_voxel_remesh(vertex_count, ptr0, len0, resolution, iso);
|
|
3387
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3388
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3389
|
+
return v2;
|
|
3390
|
+
}
|
|
3391
|
+
|
|
3224
3392
|
/**
|
|
3225
3393
|
* Intersect two NURBS curves.
|
|
3226
3394
|
* Returns: [num_points, x,y,z, ...]
|
|
@@ -3265,6 +3433,28 @@ export function nurbs_curve_curve_intersect_params(curve_a_data, curve_b_data) {
|
|
|
3265
3433
|
return v3;
|
|
3266
3434
|
}
|
|
3267
3435
|
|
|
3436
|
+
/**
|
|
3437
|
+
* Offset a planar NURBS curve by `distance` within the plane with normal
|
|
3438
|
+
* (nx, ny, nz), refit to `tolerance`. Input/output use the standard curve
|
|
3439
|
+
* buffer format [degree, n, cps(xyz)..., weights..., knots...].
|
|
3440
|
+
* Returns an empty buffer on failure (see `geometry_last_error`).
|
|
3441
|
+
* @param {Float64Array} data
|
|
3442
|
+
* @param {number} distance
|
|
3443
|
+
* @param {number} nx
|
|
3444
|
+
* @param {number} ny
|
|
3445
|
+
* @param {number} nz
|
|
3446
|
+
* @param {number} tolerance
|
|
3447
|
+
* @returns {Float64Array}
|
|
3448
|
+
*/
|
|
3449
|
+
export function nurbs_curve_offset(data, distance, nx, ny, nz, tolerance) {
|
|
3450
|
+
const ptr0 = passArrayF64ToWasm0(data, wasm.__wbindgen_malloc);
|
|
3451
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3452
|
+
const ret = wasm.nurbs_curve_offset(ptr0, len0, distance, nx, ny, nz, tolerance);
|
|
3453
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3454
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3455
|
+
return v2;
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3268
3458
|
/**
|
|
3269
3459
|
* Intersect a NURBS curve with a plane.
|
|
3270
3460
|
* Input: same curve format as sample_nurbs_curve + plane normal (nx,ny,nz) and d.
|
|
@@ -3520,6 +3710,24 @@ export function nurbs_surface_normal(data, u, v) {
|
|
|
3520
3710
|
return v2;
|
|
3521
3711
|
}
|
|
3522
3712
|
|
|
3713
|
+
/**
|
|
3714
|
+
* Offset a NURBS surface by `distance` along its normal field, refit to
|
|
3715
|
+
* `tolerance`. Input/output use the standard surface buffer format.
|
|
3716
|
+
* Returns an empty buffer on failure (see `geometry_last_error`).
|
|
3717
|
+
* @param {Float64Array} data
|
|
3718
|
+
* @param {number} distance
|
|
3719
|
+
* @param {number} tolerance
|
|
3720
|
+
* @returns {Float64Array}
|
|
3721
|
+
*/
|
|
3722
|
+
export function nurbs_surface_offset(data, distance, tolerance) {
|
|
3723
|
+
const ptr0 = passArrayF64ToWasm0(data, wasm.__wbindgen_malloc);
|
|
3724
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3725
|
+
const ret = wasm.nurbs_surface_offset(ptr0, len0, distance, tolerance);
|
|
3726
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3727
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3728
|
+
return v2;
|
|
3729
|
+
}
|
|
3730
|
+
|
|
3523
3731
|
/**
|
|
3524
3732
|
* Intersect a NURBS surface with a plane.
|
|
3525
3733
|
* Input: same surface format as tessellate_nurbs_surface, then plane (nx,ny,nz,d) appended.
|