okgeometry-api 1.26.1 → 1.27.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/Arc.js +1 -1
- package/dist/Arc.js.map +1 -1
- package/dist/Brep.js +1 -1
- package/dist/Brep.js.map +1 -1
- package/dist/Circle.js +1 -1
- package/dist/Circle.js.map +1 -1
- package/dist/Line.js +1 -1
- package/dist/Line.js.map +1 -1
- package/dist/Mesh.d.ts +41 -0
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +235 -21
- package/dist/Mesh.js.map +1 -1
- package/dist/MeshSurface.js +1 -1
- package/dist/MeshSurface.js.map +1 -1
- package/dist/NurbsCurve.js +1 -1
- package/dist/NurbsCurve.js.map +1 -1
- package/dist/NurbsSurface.js +1 -1
- package/dist/NurbsSurface.js.map +1 -1
- package/dist/PolyCurve.js +1 -1
- package/dist/PolyCurve.js.map +1 -1
- package/dist/Polyline.js +1 -1
- package/dist/Polyline.js.map +1 -1
- package/dist/Ray.js +1 -1
- package/dist/Ray.js.map +1 -1
- package/dist/SculptSession.js +1 -1
- package/dist/SculptSession.js.map +1 -1
- package/dist/engine-threaded.d.ts +2 -0
- package/dist/engine-threaded.d.ts.map +1 -0
- package/dist/engine-threaded.js +33 -0
- package/dist/engine-threaded.js.map +1 -0
- package/dist/engine.d.ts +21 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +42 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mesh-boolean.pool.d.ts +23 -1
- package/dist/mesh-boolean.pool.d.ts.map +1 -1
- package/dist/mesh-boolean.pool.js +97 -12
- package/dist/mesh-boolean.pool.js.map +1 -1
- package/dist/mesh-boolean.protocol.d.ts +21 -1
- package/dist/mesh-boolean.protocol.d.ts.map +1 -1
- package/dist/mesh-boolean.protocol.js.map +1 -1
- package/dist/mesh-boolean.worker.d.ts.map +1 -1
- package/dist/mesh-boolean.worker.js +94 -1
- package/dist/mesh-boolean.worker.js.map +1 -1
- package/dist/wasm-active.d.ts +20 -0
- package/dist/wasm-active.d.ts.map +1 -0
- package/dist/wasm-active.js +26 -0
- package/dist/wasm-active.js.map +1 -0
- package/dist/wasm-base64-threaded.d.ts +2 -0
- package/dist/wasm-base64-threaded.d.ts.map +1 -0
- package/dist/wasm-base64-threaded.js +3 -0
- package/dist/wasm-base64-threaded.js.map +1 -0
- 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-threaded.d.ts +2664 -0
- package/dist/wasm-bindings-threaded.d.ts.map +1 -0
- package/dist/wasm-bindings-threaded.js +5008 -0
- package/dist/wasm-bindings-threaded.js.map +1 -0
- package/dist/wasm-bindings.d.ts +130 -0
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +208 -0
- package/dist/wasm-bindings.js.map +1 -1
- package/dist/workerHelpers-threaded.d.ts +2 -0
- package/dist/workerHelpers-threaded.d.ts.map +1 -0
- package/dist/workerHelpers-threaded.js +100 -0
- package/dist/workerHelpers-threaded.js.map +1 -0
- package/package.json +8 -3
- package/src/Arc.ts +117 -117
- package/src/Brep.ts +1 -1
- package/src/Circle.ts +166 -166
- package/src/Line.ts +171 -171
- package/src/Mesh.ts +300 -45
- package/src/MeshSurface.ts +1 -1
- package/src/NurbsCurve.ts +655 -655
- package/src/NurbsSurface.ts +721 -721
- package/src/PolyCurve.ts +203 -203
- package/src/Polyline.ts +316 -316
- package/src/Ray.ts +90 -90
- package/src/SculptSession.ts +377 -377
- package/src/engine-threaded.ts +39 -0
- package/src/engine.ts +46 -0
- package/src/index.ts +1 -1
- package/src/mesh-boolean.pool.ts +208 -86
- package/src/mesh-boolean.protocol.ts +44 -1
- package/src/mesh-boolean.worker.ts +170 -56
- package/src/wasm-active.ts +31 -0
- package/src/wasm-base64-threaded.ts +2 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings-threaded.d.ts +1989 -0
- package/src/wasm-bindings-threaded.js +5235 -0
- package/src/wasm-bindings.d.ts +104 -0
- package/src/wasm-bindings.js +225 -0
- package/src/workerHelpers-threaded.js +107 -0
package/src/wasm-bindings.d.ts
CHANGED
|
@@ -658,6 +658,11 @@ export function mesh_boolean_union_all(packed: Float64Array, flags: string): Flo
|
|
|
658
658
|
*/
|
|
659
659
|
export function mesh_boundary_edge_segments(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
660
660
|
|
|
661
|
+
/**
|
|
662
|
+
* Handle variant of `mesh_boundary_edge_segments`.
|
|
663
|
+
*/
|
|
664
|
+
export function mesh_boundary_edge_segments_h(id: number): Float64Array;
|
|
665
|
+
|
|
661
666
|
/**
|
|
662
667
|
* Extract boundary (perimeter) edges from a mesh as polylines.
|
|
663
668
|
* Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
|
|
@@ -684,6 +689,11 @@ export function mesh_build_coplanar_connected_face_groups(vertex_count: number,
|
|
|
684
689
|
*/
|
|
685
690
|
export function mesh_build_render_buffers(vertex_count: number, buffer: Float64Array, crease_angle_deg: number): Float32Array;
|
|
686
691
|
|
|
692
|
+
/**
|
|
693
|
+
* Handle variant of `mesh_build_render_buffers`.
|
|
694
|
+
*/
|
|
695
|
+
export function mesh_build_render_buffers_h(id: number, crease_angle_deg: number): Float32Array;
|
|
696
|
+
|
|
687
697
|
/**
|
|
688
698
|
* Chamfer all edges of a primitive mesh (flat bevel)
|
|
689
699
|
*
|
|
@@ -816,18 +826,33 @@ export function mesh_extrude_planar_curve(coords: Float64Array, nx: number, ny:
|
|
|
816
826
|
*/
|
|
817
827
|
export function mesh_feature_edge_chains(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
818
828
|
|
|
829
|
+
/**
|
|
830
|
+
* Handle variant of `mesh_feature_edge_chains`.
|
|
831
|
+
*/
|
|
832
|
+
export function mesh_feature_edge_chains_h(id: number): Float64Array;
|
|
833
|
+
|
|
819
834
|
/**
|
|
820
835
|
* Find the best matching coplanar connected face group by normal and optional near-point.
|
|
821
836
|
* Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
|
|
822
837
|
*/
|
|
823
838
|
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;
|
|
824
839
|
|
|
840
|
+
/**
|
|
841
|
+
* Handle variant of `mesh_find_face_group_by_normal`.
|
|
842
|
+
*/
|
|
843
|
+
export function mesh_find_face_group_by_normal_h(id: number, nx: number, ny: number, nz: number, near_x: number, near_y: number, near_z: number, use_near_point: boolean): Float64Array;
|
|
844
|
+
|
|
825
845
|
/**
|
|
826
846
|
* Find the coplanar connected face group containing triangle_index.
|
|
827
847
|
* Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
|
|
828
848
|
*/
|
|
829
849
|
export function mesh_find_face_group_by_triangle_index(vertex_count: number, buffer: Float64Array, triangle_index: number): Float64Array;
|
|
830
850
|
|
|
851
|
+
/**
|
|
852
|
+
* Handle variant of `mesh_find_face_group_by_triangle_index`.
|
|
853
|
+
*/
|
|
854
|
+
export function mesh_find_face_group_by_triangle_index_h(id: number, triangle_index: number): Float64Array;
|
|
855
|
+
|
|
831
856
|
/**
|
|
832
857
|
* Axis-aligned bounding box as [minX, minY, minZ, maxX, maxY, maxZ].
|
|
833
858
|
*/
|
|
@@ -839,11 +864,21 @@ export function mesh_get_bounds(vertex_count: number, buffer: Float64Array): Flo
|
|
|
839
864
|
*/
|
|
840
865
|
export function mesh_get_coplanar_face_group_centroid(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
|
|
841
866
|
|
|
867
|
+
/**
|
|
868
|
+
* Handle variant of `mesh_get_coplanar_face_group_centroid`.
|
|
869
|
+
*/
|
|
870
|
+
export function mesh_get_coplanar_face_group_centroid_h(id: number, face_index: number): Float64Array;
|
|
871
|
+
|
|
842
872
|
/**
|
|
843
873
|
* Edge-connected coplanar triangle indices as [count, i0, i1, ...].
|
|
844
874
|
*/
|
|
845
875
|
export function mesh_get_coplanar_face_indices(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
|
|
846
876
|
|
|
877
|
+
/**
|
|
878
|
+
* Handle variant of `mesh_get_coplanar_face_indices`.
|
|
879
|
+
*/
|
|
880
|
+
export function mesh_get_coplanar_face_indices_h(id: number, face_index: number): Float64Array;
|
|
881
|
+
|
|
847
882
|
/**
|
|
848
883
|
* Coplanar connected face region projected to a plane basis.
|
|
849
884
|
* Output format:
|
|
@@ -856,6 +891,11 @@ export function mesh_get_coplanar_face_region(vertex_count: number, buffer: Floa
|
|
|
856
891
|
*/
|
|
857
892
|
export function mesh_get_edge_vertex_pairs(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
858
893
|
|
|
894
|
+
/**
|
|
895
|
+
* Handle variant of `mesh_get_edge_vertex_pairs`.
|
|
896
|
+
*/
|
|
897
|
+
export function mesh_get_edge_vertex_pairs_h(id: number): Float64Array;
|
|
898
|
+
|
|
859
899
|
/**
|
|
860
900
|
* Face area.
|
|
861
901
|
*/
|
|
@@ -874,6 +914,11 @@ export function mesh_get_face_area(vertex_count: number, buffer: Float64Array, f
|
|
|
874
914
|
*/
|
|
875
915
|
export function mesh_get_face_boundary_loops(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
|
|
876
916
|
|
|
917
|
+
/**
|
|
918
|
+
* Handle variant of `mesh_get_face_boundary_loops`.
|
|
919
|
+
*/
|
|
920
|
+
export function mesh_get_face_boundary_loops_h(id: number, face_index: number): Float64Array;
|
|
921
|
+
|
|
877
922
|
/**
|
|
878
923
|
* Face centroid as [x, y, z].
|
|
879
924
|
*/
|
|
@@ -893,6 +938,11 @@ export function mesh_get_face_normal(vertex_count: number, buffer: Float64Array,
|
|
|
893
938
|
*/
|
|
894
939
|
export function mesh_get_smooth_face_group(vertex_count: number, buffer: Float64Array, face_index: number, max_angle_deg: number): Float64Array;
|
|
895
940
|
|
|
941
|
+
/**
|
|
942
|
+
* Handle variant of `mesh_get_smooth_face_group`.
|
|
943
|
+
*/
|
|
944
|
+
export function mesh_get_smooth_face_group_h(id: number, face_index: number, max_angle_deg: number): Float64Array;
|
|
945
|
+
|
|
896
946
|
/**
|
|
897
947
|
* Get mesh statistics
|
|
898
948
|
* Returns [vertex_count, face_count, edge_count]
|
|
@@ -1017,6 +1067,16 @@ export function mesh_raycast(vertex_count: number, buffer: Float64Array, ox: num
|
|
|
1017
1067
|
*/
|
|
1018
1068
|
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;
|
|
1019
1069
|
|
|
1070
|
+
/**
|
|
1071
|
+
* Handle variant of `mesh_raycast_all` — reuses the stored mesh's cached BVH.
|
|
1072
|
+
*/
|
|
1073
|
+
export function mesh_raycast_all_h(id: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* Handle variant of `mesh_raycast` — reuses the stored mesh's cached BVH.
|
|
1077
|
+
*/
|
|
1078
|
+
export function mesh_raycast_h(id: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, max_distance: number): Float64Array;
|
|
1079
|
+
|
|
1020
1080
|
/**
|
|
1021
1081
|
* Raycast against many meshes packed as:
|
|
1022
1082
|
* [meshCount, meshLen0, meshRaw0..., meshLen1, meshRaw1..., ...]
|
|
@@ -1043,6 +1103,11 @@ export function mesh_repair(vertex_count: number, buffer: Float64Array, flags: n
|
|
|
1043
1103
|
*/
|
|
1044
1104
|
export function mesh_repair_diagnostics(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
1045
1105
|
|
|
1106
|
+
/**
|
|
1107
|
+
* Handle variant of `mesh_repair_diagnostics`.
|
|
1108
|
+
*/
|
|
1109
|
+
export function mesh_repair_diagnostics_h(id: number): Float64Array;
|
|
1110
|
+
|
|
1046
1111
|
/**
|
|
1047
1112
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
1048
1113
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -1099,6 +1164,28 @@ export function mesh_split_by_surface_to_brep(vertex_count: number, buffer: Floa
|
|
|
1099
1164
|
*/
|
|
1100
1165
|
export function mesh_split_polyline(vertex_count: number, buffer: Float64Array, points: Float64Array, closed: boolean): Float64Array;
|
|
1101
1166
|
|
|
1167
|
+
/**
|
|
1168
|
+
* Store a mesh buffer `[vertexCount, x,y,z..., i0,i1,i2...]` WASM-side.
|
|
1169
|
+
* Returns a non-zero id, or 0 on invalid input.
|
|
1170
|
+
*/
|
|
1171
|
+
export function mesh_store(vertex_count: number, buffer: Float64Array): number;
|
|
1172
|
+
|
|
1173
|
+
/**
|
|
1174
|
+
* Approximate bytes held by stored mesh raw buffers (diagnostics/tests).
|
|
1175
|
+
* Excludes lazy raycast caches.
|
|
1176
|
+
*/
|
|
1177
|
+
export function mesh_store_bytes(): number;
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* Number of stored meshes (diagnostics/tests).
|
|
1181
|
+
*/
|
|
1182
|
+
export function mesh_store_count(): number;
|
|
1183
|
+
|
|
1184
|
+
/**
|
|
1185
|
+
* Release a stored mesh and free its memory (idempotent).
|
|
1186
|
+
*/
|
|
1187
|
+
export function mesh_store_free(id: number): void;
|
|
1188
|
+
|
|
1102
1189
|
/**
|
|
1103
1190
|
* Trim an OPEN host surface by all closed cutter meshes in one WASM call.
|
|
1104
1191
|
*
|
|
@@ -1701,9 +1788,11 @@ export interface InitOutput {
|
|
|
1701
1788
|
readonly mesh_boolean_union: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1702
1789
|
readonly mesh_boolean_union_all: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1703
1790
|
readonly mesh_boundary_edge_segments: (a: number, b: number, c: number) => [number, number];
|
|
1791
|
+
readonly mesh_boundary_edge_segments_h: (a: number) => [number, number];
|
|
1704
1792
|
readonly mesh_boundary_polylines: (a: number, b: number, c: number) => [number, number];
|
|
1705
1793
|
readonly mesh_build_coplanar_connected_face_groups: (a: number, b: number, c: number) => [number, number];
|
|
1706
1794
|
readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1795
|
+
readonly mesh_build_render_buffers_h: (a: number, b: number) => [number, number];
|
|
1707
1796
|
readonly mesh_chamfer_all_edges: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1708
1797
|
readonly mesh_chamfer_edges: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1709
1798
|
readonly mesh_clip_polyline: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
@@ -1722,18 +1811,26 @@ export interface InitOutput {
|
|
|
1722
1811
|
readonly mesh_extrude_face: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1723
1812
|
readonly mesh_extrude_planar_curve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1724
1813
|
readonly mesh_feature_edge_chains: (a: number, b: number, c: number) => [number, number];
|
|
1814
|
+
readonly mesh_feature_edge_chains_h: (a: number) => [number, number];
|
|
1725
1815
|
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];
|
|
1816
|
+
readonly mesh_find_face_group_by_normal_h: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1726
1817
|
readonly mesh_find_face_group_by_triangle_index: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1818
|
+
readonly mesh_find_face_group_by_triangle_index_h: (a: number, b: number) => [number, number];
|
|
1727
1819
|
readonly mesh_get_bounds: (a: number, b: number, c: number) => [number, number];
|
|
1728
1820
|
readonly mesh_get_coplanar_face_group_centroid: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1821
|
+
readonly mesh_get_coplanar_face_group_centroid_h: (a: number, b: number) => [number, number];
|
|
1729
1822
|
readonly mesh_get_coplanar_face_indices: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1823
|
+
readonly mesh_get_coplanar_face_indices_h: (a: number, b: number) => [number, number];
|
|
1730
1824
|
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];
|
|
1731
1825
|
readonly mesh_get_edge_vertex_pairs: (a: number, b: number, c: number) => [number, number];
|
|
1826
|
+
readonly mesh_get_edge_vertex_pairs_h: (a: number) => [number, number];
|
|
1732
1827
|
readonly mesh_get_face_area: (a: number, b: number, c: number, d: number) => number;
|
|
1733
1828
|
readonly mesh_get_face_boundary_loops: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1829
|
+
readonly mesh_get_face_boundary_loops_h: (a: number, b: number) => [number, number];
|
|
1734
1830
|
readonly mesh_get_face_centroid: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1735
1831
|
readonly mesh_get_face_normal: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1736
1832
|
readonly mesh_get_smooth_face_group: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
1833
|
+
readonly mesh_get_smooth_face_group_h: (a: number, b: number, c: number) => [number, number];
|
|
1737
1834
|
readonly mesh_get_stats: (a: number, b: number, c: number) => [number, number];
|
|
1738
1835
|
readonly mesh_import_obj: (a: number, b: number) => [number, number];
|
|
1739
1836
|
readonly mesh_import_stl: (a: number, b: number, c: number) => [number, number];
|
|
@@ -1752,9 +1849,12 @@ export interface InitOutput {
|
|
|
1752
1849
|
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];
|
|
1753
1850
|
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];
|
|
1754
1851
|
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];
|
|
1852
|
+
readonly mesh_raycast_all_h: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1853
|
+
readonly mesh_raycast_h: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1755
1854
|
readonly mesh_raycast_many: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
1756
1855
|
readonly mesh_repair: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1757
1856
|
readonly mesh_repair_diagnostics: (a: number, b: number, c: number) => [number, number];
|
|
1857
|
+
readonly mesh_repair_diagnostics_h: (a: number) => [number, number];
|
|
1758
1858
|
readonly mesh_rotate: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
1759
1859
|
readonly mesh_scale: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1760
1860
|
readonly mesh_sheet_union: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
@@ -1762,6 +1862,9 @@ export interface InitOutput {
|
|
|
1762
1862
|
readonly mesh_solid_split_plane: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
1763
1863
|
readonly mesh_split_by_surface_to_brep: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1764
1864
|
readonly mesh_split_polyline: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
1865
|
+
readonly mesh_store: (a: number, b: number, c: number) => number;
|
|
1866
|
+
readonly mesh_store_bytes: () => number;
|
|
1867
|
+
readonly mesh_store_free: (a: number) => void;
|
|
1765
1868
|
readonly mesh_surface_difference_all: (a: number, b: number, c: number, d: number) => [number, number];
|
|
1766
1869
|
readonly mesh_surface_split: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1767
1870
|
readonly mesh_surface_split_plane: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
|
|
@@ -1830,6 +1933,7 @@ export interface InitOutput {
|
|
|
1830
1933
|
readonly test_wasm: () => [number, number];
|
|
1831
1934
|
readonly thicken_polycurve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
1832
1935
|
readonly version: () => [number, number];
|
|
1936
|
+
readonly mesh_store_count: () => number;
|
|
1833
1937
|
readonly ray_distance_to_point: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
|
|
1834
1938
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
|
1835
1939
|
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
package/src/wasm-bindings.js
CHANGED
|
@@ -2086,6 +2086,18 @@ export function mesh_boundary_edge_segments(vertex_count, buffer) {
|
|
|
2086
2086
|
return v2;
|
|
2087
2087
|
}
|
|
2088
2088
|
|
|
2089
|
+
/**
|
|
2090
|
+
* Handle variant of `mesh_boundary_edge_segments`.
|
|
2091
|
+
* @param {number} id
|
|
2092
|
+
* @returns {Float64Array}
|
|
2093
|
+
*/
|
|
2094
|
+
export function mesh_boundary_edge_segments_h(id) {
|
|
2095
|
+
const ret = wasm.mesh_boundary_edge_segments_h(id);
|
|
2096
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2097
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2098
|
+
return v1;
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2089
2101
|
/**
|
|
2090
2102
|
* Extract boundary (perimeter) edges from a mesh as polylines.
|
|
2091
2103
|
* Returns polyline buffer: [num_polylines, n1, x,y,z,..., n2, x,y,z,...]
|
|
@@ -2143,6 +2155,19 @@ export function mesh_build_render_buffers(vertex_count, buffer, crease_angle_deg
|
|
|
2143
2155
|
return v2;
|
|
2144
2156
|
}
|
|
2145
2157
|
|
|
2158
|
+
/**
|
|
2159
|
+
* Handle variant of `mesh_build_render_buffers`.
|
|
2160
|
+
* @param {number} id
|
|
2161
|
+
* @param {number} crease_angle_deg
|
|
2162
|
+
* @returns {Float32Array}
|
|
2163
|
+
*/
|
|
2164
|
+
export function mesh_build_render_buffers_h(id, crease_angle_deg) {
|
|
2165
|
+
const ret = wasm.mesh_build_render_buffers_h(id, crease_angle_deg);
|
|
2166
|
+
var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();
|
|
2167
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
|
|
2168
|
+
return v1;
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2146
2171
|
/**
|
|
2147
2172
|
* Chamfer all edges of a primitive mesh (flat bevel)
|
|
2148
2173
|
*
|
|
@@ -2489,6 +2514,18 @@ export function mesh_feature_edge_chains(vertex_count, buffer) {
|
|
|
2489
2514
|
return v2;
|
|
2490
2515
|
}
|
|
2491
2516
|
|
|
2517
|
+
/**
|
|
2518
|
+
* Handle variant of `mesh_feature_edge_chains`.
|
|
2519
|
+
* @param {number} id
|
|
2520
|
+
* @returns {Float64Array}
|
|
2521
|
+
*/
|
|
2522
|
+
export function mesh_feature_edge_chains_h(id) {
|
|
2523
|
+
const ret = wasm.mesh_feature_edge_chains_h(id);
|
|
2524
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2525
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2526
|
+
return v1;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2492
2529
|
/**
|
|
2493
2530
|
* Find the best matching coplanar connected face group by normal and optional near-point.
|
|
2494
2531
|
* Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
|
|
@@ -2512,6 +2549,25 @@ export function mesh_find_face_group_by_normal(vertex_count, buffer, nx, ny, nz,
|
|
|
2512
2549
|
return v2;
|
|
2513
2550
|
}
|
|
2514
2551
|
|
|
2552
|
+
/**
|
|
2553
|
+
* Handle variant of `mesh_find_face_group_by_normal`.
|
|
2554
|
+
* @param {number} id
|
|
2555
|
+
* @param {number} nx
|
|
2556
|
+
* @param {number} ny
|
|
2557
|
+
* @param {number} nz
|
|
2558
|
+
* @param {number} near_x
|
|
2559
|
+
* @param {number} near_y
|
|
2560
|
+
* @param {number} near_z
|
|
2561
|
+
* @param {boolean} use_near_point
|
|
2562
|
+
* @returns {Float64Array}
|
|
2563
|
+
*/
|
|
2564
|
+
export function mesh_find_face_group_by_normal_h(id, nx, ny, nz, near_x, near_y, near_z, use_near_point) {
|
|
2565
|
+
const ret = wasm.mesh_find_face_group_by_normal_h(id, nx, ny, nz, near_x, near_y, near_z, use_near_point);
|
|
2566
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2567
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2568
|
+
return v1;
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2515
2571
|
/**
|
|
2516
2572
|
* Find the coplanar connected face group containing triangle_index.
|
|
2517
2573
|
* Output format: [centroidX, centroidY, centroidZ, normalX, normalY, normalZ] or [].
|
|
@@ -2529,6 +2585,19 @@ export function mesh_find_face_group_by_triangle_index(vertex_count, buffer, tri
|
|
|
2529
2585
|
return v2;
|
|
2530
2586
|
}
|
|
2531
2587
|
|
|
2588
|
+
/**
|
|
2589
|
+
* Handle variant of `mesh_find_face_group_by_triangle_index`.
|
|
2590
|
+
* @param {number} id
|
|
2591
|
+
* @param {number} triangle_index
|
|
2592
|
+
* @returns {Float64Array}
|
|
2593
|
+
*/
|
|
2594
|
+
export function mesh_find_face_group_by_triangle_index_h(id, triangle_index) {
|
|
2595
|
+
const ret = wasm.mesh_find_face_group_by_triangle_index_h(id, triangle_index);
|
|
2596
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2597
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2598
|
+
return v1;
|
|
2599
|
+
}
|
|
2600
|
+
|
|
2532
2601
|
/**
|
|
2533
2602
|
* Axis-aligned bounding box as [minX, minY, minZ, maxX, maxY, maxZ].
|
|
2534
2603
|
* @param {number} vertex_count
|
|
@@ -2561,6 +2630,19 @@ export function mesh_get_coplanar_face_group_centroid(vertex_count, buffer, face
|
|
|
2561
2630
|
return v2;
|
|
2562
2631
|
}
|
|
2563
2632
|
|
|
2633
|
+
/**
|
|
2634
|
+
* Handle variant of `mesh_get_coplanar_face_group_centroid`.
|
|
2635
|
+
* @param {number} id
|
|
2636
|
+
* @param {number} face_index
|
|
2637
|
+
* @returns {Float64Array}
|
|
2638
|
+
*/
|
|
2639
|
+
export function mesh_get_coplanar_face_group_centroid_h(id, face_index) {
|
|
2640
|
+
const ret = wasm.mesh_get_coplanar_face_group_centroid_h(id, face_index);
|
|
2641
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2642
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2643
|
+
return v1;
|
|
2644
|
+
}
|
|
2645
|
+
|
|
2564
2646
|
/**
|
|
2565
2647
|
* Edge-connected coplanar triangle indices as [count, i0, i1, ...].
|
|
2566
2648
|
* @param {number} vertex_count
|
|
@@ -2577,6 +2659,19 @@ export function mesh_get_coplanar_face_indices(vertex_count, buffer, face_index)
|
|
|
2577
2659
|
return v2;
|
|
2578
2660
|
}
|
|
2579
2661
|
|
|
2662
|
+
/**
|
|
2663
|
+
* Handle variant of `mesh_get_coplanar_face_indices`.
|
|
2664
|
+
* @param {number} id
|
|
2665
|
+
* @param {number} face_index
|
|
2666
|
+
* @returns {Float64Array}
|
|
2667
|
+
*/
|
|
2668
|
+
export function mesh_get_coplanar_face_indices_h(id, face_index) {
|
|
2669
|
+
const ret = wasm.mesh_get_coplanar_face_indices_h(id, face_index);
|
|
2670
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2671
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2672
|
+
return v1;
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2580
2675
|
/**
|
|
2581
2676
|
* Coplanar connected face region projected to a plane basis.
|
|
2582
2677
|
* Output format:
|
|
@@ -2621,6 +2716,18 @@ export function mesh_get_edge_vertex_pairs(vertex_count, buffer) {
|
|
|
2621
2716
|
return v2;
|
|
2622
2717
|
}
|
|
2623
2718
|
|
|
2719
|
+
/**
|
|
2720
|
+
* Handle variant of `mesh_get_edge_vertex_pairs`.
|
|
2721
|
+
* @param {number} id
|
|
2722
|
+
* @returns {Float64Array}
|
|
2723
|
+
*/
|
|
2724
|
+
export function mesh_get_edge_vertex_pairs_h(id) {
|
|
2725
|
+
const ret = wasm.mesh_get_edge_vertex_pairs_h(id);
|
|
2726
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2727
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2728
|
+
return v1;
|
|
2729
|
+
}
|
|
2730
|
+
|
|
2624
2731
|
/**
|
|
2625
2732
|
* Face area.
|
|
2626
2733
|
* @param {number} vertex_count
|
|
@@ -2659,6 +2766,19 @@ export function mesh_get_face_boundary_loops(vertex_count, buffer, face_index) {
|
|
|
2659
2766
|
return v2;
|
|
2660
2767
|
}
|
|
2661
2768
|
|
|
2769
|
+
/**
|
|
2770
|
+
* Handle variant of `mesh_get_face_boundary_loops`.
|
|
2771
|
+
* @param {number} id
|
|
2772
|
+
* @param {number} face_index
|
|
2773
|
+
* @returns {Float64Array}
|
|
2774
|
+
*/
|
|
2775
|
+
export function mesh_get_face_boundary_loops_h(id, face_index) {
|
|
2776
|
+
const ret = wasm.mesh_get_face_boundary_loops_h(id, face_index);
|
|
2777
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2778
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2779
|
+
return v1;
|
|
2780
|
+
}
|
|
2781
|
+
|
|
2662
2782
|
/**
|
|
2663
2783
|
* Face centroid as [x, y, z].
|
|
2664
2784
|
* @param {number} vertex_count
|
|
@@ -2712,6 +2832,20 @@ export function mesh_get_smooth_face_group(vertex_count, buffer, face_index, max
|
|
|
2712
2832
|
return v2;
|
|
2713
2833
|
}
|
|
2714
2834
|
|
|
2835
|
+
/**
|
|
2836
|
+
* Handle variant of `mesh_get_smooth_face_group`.
|
|
2837
|
+
* @param {number} id
|
|
2838
|
+
* @param {number} face_index
|
|
2839
|
+
* @param {number} max_angle_deg
|
|
2840
|
+
* @returns {Float64Array}
|
|
2841
|
+
*/
|
|
2842
|
+
export function mesh_get_smooth_face_group_h(id, face_index, max_angle_deg) {
|
|
2843
|
+
const ret = wasm.mesh_get_smooth_face_group_h(id, face_index, max_angle_deg);
|
|
2844
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2845
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2846
|
+
return v1;
|
|
2847
|
+
}
|
|
2848
|
+
|
|
2715
2849
|
/**
|
|
2716
2850
|
* Get mesh statistics
|
|
2717
2851
|
* Returns [vertex_count, face_count, edge_count]
|
|
@@ -3079,6 +3213,44 @@ export function mesh_raycast_all(vertex_count, buffer, ox, oy, oz, dx, dy, dz, m
|
|
|
3079
3213
|
return v2;
|
|
3080
3214
|
}
|
|
3081
3215
|
|
|
3216
|
+
/**
|
|
3217
|
+
* Handle variant of `mesh_raycast_all` — reuses the stored mesh's cached BVH.
|
|
3218
|
+
* @param {number} id
|
|
3219
|
+
* @param {number} ox
|
|
3220
|
+
* @param {number} oy
|
|
3221
|
+
* @param {number} oz
|
|
3222
|
+
* @param {number} dx
|
|
3223
|
+
* @param {number} dy
|
|
3224
|
+
* @param {number} dz
|
|
3225
|
+
* @param {number} max_distance
|
|
3226
|
+
* @returns {Float64Array}
|
|
3227
|
+
*/
|
|
3228
|
+
export function mesh_raycast_all_h(id, ox, oy, oz, dx, dy, dz, max_distance) {
|
|
3229
|
+
const ret = wasm.mesh_raycast_all_h(id, ox, oy, oz, dx, dy, dz, max_distance);
|
|
3230
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3231
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3232
|
+
return v1;
|
|
3233
|
+
}
|
|
3234
|
+
|
|
3235
|
+
/**
|
|
3236
|
+
* Handle variant of `mesh_raycast` — reuses the stored mesh's cached BVH.
|
|
3237
|
+
* @param {number} id
|
|
3238
|
+
* @param {number} ox
|
|
3239
|
+
* @param {number} oy
|
|
3240
|
+
* @param {number} oz
|
|
3241
|
+
* @param {number} dx
|
|
3242
|
+
* @param {number} dy
|
|
3243
|
+
* @param {number} dz
|
|
3244
|
+
* @param {number} max_distance
|
|
3245
|
+
* @returns {Float64Array}
|
|
3246
|
+
*/
|
|
3247
|
+
export function mesh_raycast_h(id, ox, oy, oz, dx, dy, dz, max_distance) {
|
|
3248
|
+
const ret = wasm.mesh_raycast_h(id, ox, oy, oz, dx, dy, dz, max_distance);
|
|
3249
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3250
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3251
|
+
return v1;
|
|
3252
|
+
}
|
|
3253
|
+
|
|
3082
3254
|
/**
|
|
3083
3255
|
* Raycast against many meshes packed as:
|
|
3084
3256
|
* [meshCount, meshLen0, meshRaw0..., meshLen1, meshRaw1..., ...]
|
|
@@ -3144,6 +3316,18 @@ export function mesh_repair_diagnostics(vertex_count, buffer) {
|
|
|
3144
3316
|
return v2;
|
|
3145
3317
|
}
|
|
3146
3318
|
|
|
3319
|
+
/**
|
|
3320
|
+
* Handle variant of `mesh_repair_diagnostics`.
|
|
3321
|
+
* @param {number} id
|
|
3322
|
+
* @returns {Float64Array}
|
|
3323
|
+
*/
|
|
3324
|
+
export function mesh_repair_diagnostics_h(id) {
|
|
3325
|
+
const ret = wasm.mesh_repair_diagnostics_h(id);
|
|
3326
|
+
var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
3327
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
3328
|
+
return v1;
|
|
3329
|
+
}
|
|
3330
|
+
|
|
3147
3331
|
/**
|
|
3148
3332
|
* Rotate a mesh around an arbitrary axis and return new buffers
|
|
3149
3333
|
* Axis is defined by (ax, ay, az), angle in radians
|
|
@@ -3316,6 +3500,47 @@ export function mesh_split_polyline(vertex_count, buffer, points, closed) {
|
|
|
3316
3500
|
return v3;
|
|
3317
3501
|
}
|
|
3318
3502
|
|
|
3503
|
+
/**
|
|
3504
|
+
* Store a mesh buffer `[vertexCount, x,y,z..., i0,i1,i2...]` WASM-side.
|
|
3505
|
+
* Returns a non-zero id, or 0 on invalid input.
|
|
3506
|
+
* @param {number} vertex_count
|
|
3507
|
+
* @param {Float64Array} buffer
|
|
3508
|
+
* @returns {number}
|
|
3509
|
+
*/
|
|
3510
|
+
export function mesh_store(vertex_count, buffer) {
|
|
3511
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
3512
|
+
const len0 = WASM_VECTOR_LEN;
|
|
3513
|
+
const ret = wasm.mesh_store(vertex_count, ptr0, len0);
|
|
3514
|
+
return ret >>> 0;
|
|
3515
|
+
}
|
|
3516
|
+
|
|
3517
|
+
/**
|
|
3518
|
+
* Approximate bytes held by stored mesh raw buffers (diagnostics/tests).
|
|
3519
|
+
* Excludes lazy raycast caches.
|
|
3520
|
+
* @returns {number}
|
|
3521
|
+
*/
|
|
3522
|
+
export function mesh_store_bytes() {
|
|
3523
|
+
const ret = wasm.mesh_store_bytes();
|
|
3524
|
+
return ret;
|
|
3525
|
+
}
|
|
3526
|
+
|
|
3527
|
+
/**
|
|
3528
|
+
* Number of stored meshes (diagnostics/tests).
|
|
3529
|
+
* @returns {number}
|
|
3530
|
+
*/
|
|
3531
|
+
export function mesh_store_count() {
|
|
3532
|
+
const ret = wasm.mesh_store_count();
|
|
3533
|
+
return ret >>> 0;
|
|
3534
|
+
}
|
|
3535
|
+
|
|
3536
|
+
/**
|
|
3537
|
+
* Release a stored mesh and free its memory (idempotent).
|
|
3538
|
+
* @param {number} id
|
|
3539
|
+
*/
|
|
3540
|
+
export function mesh_store_free(id) {
|
|
3541
|
+
wasm.mesh_store_free(id);
|
|
3542
|
+
}
|
|
3543
|
+
|
|
3319
3544
|
/**
|
|
3320
3545
|
* Trim an OPEN host surface by all closed cutter meshes in one WASM call.
|
|
3321
3546
|
*
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 Google Inc. All Rights Reserved.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
8
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
9
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
10
|
+
* See the License for the specific language governing permissions and
|
|
11
|
+
* limitations under the License.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// Note: we use `wasm_bindgen_worker_`-prefixed message types to make sure
|
|
15
|
+
// we can handle bundling into other files, which might happen to have their
|
|
16
|
+
// own `postMessage`/`onmessage` communication channels.
|
|
17
|
+
//
|
|
18
|
+
// If we didn't take that into the account, we could send much simpler signals
|
|
19
|
+
// like just `0` or whatever, but the code would be less resilient.
|
|
20
|
+
|
|
21
|
+
function waitForMsgType(target, type) {
|
|
22
|
+
return new Promise(resolve => {
|
|
23
|
+
target.addEventListener('message', function onMsg({ data }) {
|
|
24
|
+
if (data?.type !== type) return;
|
|
25
|
+
target.removeEventListener('message', onMsg);
|
|
26
|
+
resolve(data);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
waitForMsgType(self, 'wasm_bindgen_worker_init').then(async ({ init, receiver }) => {
|
|
32
|
+
// # Note 1
|
|
33
|
+
// Our JS should have been generated in
|
|
34
|
+
// `[out-dir]/snippets/wasm-bindgen-rayon-[hash]/workerHelpers.js`,
|
|
35
|
+
// resolve the main module via `../../..`.
|
|
36
|
+
//
|
|
37
|
+
// This might need updating if the generated structure changes on wasm-bindgen
|
|
38
|
+
// side ever in the future, but works well with bundlers today. The whole
|
|
39
|
+
// point of this crate, after all, is to abstract away unstable features
|
|
40
|
+
// and temporary bugs so that you don't need to deal with them in your code.
|
|
41
|
+
//
|
|
42
|
+
// # Note 2
|
|
43
|
+
// This could be a regular import, but then some bundlers complain about
|
|
44
|
+
// circular deps.
|
|
45
|
+
//
|
|
46
|
+
// Dynamic import could be cheap if this file was inlined into the parent,
|
|
47
|
+
// which would require us just using `../../..` in `new Worker` below,
|
|
48
|
+
// but that doesn't work because wasm-pack unconditionally adds
|
|
49
|
+
// "sideEffects":false (see below).
|
|
50
|
+
//
|
|
51
|
+
// OTOH, even though it can't be inlined, it should be still reasonably
|
|
52
|
+
// cheap since the requested file is already in cache (it was loaded by
|
|
53
|
+
// the main thread).
|
|
54
|
+
const pkg = await import('./wasm-bindings-threaded.js');
|
|
55
|
+
await pkg.default(init);
|
|
56
|
+
postMessage({ type: 'wasm_bindgen_worker_ready' });
|
|
57
|
+
pkg.wbg_rayon_start_worker(receiver);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Note: this is never used, but necessary to prevent a bug in Firefox
|
|
61
|
+
// (https://bugzilla.mozilla.org/show_bug.cgi?id=1702191) where it collects
|
|
62
|
+
// Web Workers that have a shared WebAssembly memory with the main thread,
|
|
63
|
+
// but are not explicitly rooted via a `Worker` instance.
|
|
64
|
+
//
|
|
65
|
+
// By storing them in a variable, we can keep `Worker` objects around and
|
|
66
|
+
// prevent them from getting GC-d.
|
|
67
|
+
let _workers;
|
|
68
|
+
|
|
69
|
+
export async function startWorkers(module, memory, builder) {
|
|
70
|
+
if (builder.numThreads() === 0) {
|
|
71
|
+
throw new Error(`num_threads must be > 0.`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const workerInit = {
|
|
75
|
+
type: 'wasm_bindgen_worker_init',
|
|
76
|
+
init: { module_or_path: module, memory },
|
|
77
|
+
receiver: builder.receiver()
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
_workers = await Promise.all(
|
|
81
|
+
Array.from({ length: builder.numThreads() }, async () => {
|
|
82
|
+
// Self-spawn into a new Worker.
|
|
83
|
+
//
|
|
84
|
+
// TODO: while `new URL('...', import.meta.url) becomes a semi-standard
|
|
85
|
+
// way to get asset URLs relative to the module across various bundlers
|
|
86
|
+
// and browser, ideally we should switch to `import.meta.resolve`
|
|
87
|
+
// once it becomes a standard.
|
|
88
|
+
//
|
|
89
|
+
// Note: we could use `../../..` as the URL here to inline workerHelpers.js
|
|
90
|
+
// into the parent entry instead of creating another split point -
|
|
91
|
+
// this would be preferable from optimization perspective -
|
|
92
|
+
// however, Webpack then eliminates all message handler code
|
|
93
|
+
// because wasm-pack produces "sideEffects":false in package.json
|
|
94
|
+
// unconditionally.
|
|
95
|
+
//
|
|
96
|
+
// The only way to work around that is to have side effect code
|
|
97
|
+
// in an entry point such as Worker file itself.
|
|
98
|
+
const worker = new Worker(new URL('./workerHelpers-threaded.js', import.meta.url), {
|
|
99
|
+
type: 'module'
|
|
100
|
+
});
|
|
101
|
+
worker.postMessage(workerInit);
|
|
102
|
+
await waitForMsgType(worker, 'wasm_bindgen_worker_ready');
|
|
103
|
+
return worker;
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
builder.build();
|
|
107
|
+
}
|