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.
Files changed (99) hide show
  1. package/dist/Arc.js +1 -1
  2. package/dist/Arc.js.map +1 -1
  3. package/dist/Brep.js +1 -1
  4. package/dist/Brep.js.map +1 -1
  5. package/dist/Circle.js +1 -1
  6. package/dist/Circle.js.map +1 -1
  7. package/dist/Line.js +1 -1
  8. package/dist/Line.js.map +1 -1
  9. package/dist/Mesh.d.ts +41 -0
  10. package/dist/Mesh.d.ts.map +1 -1
  11. package/dist/Mesh.js +235 -21
  12. package/dist/Mesh.js.map +1 -1
  13. package/dist/MeshSurface.js +1 -1
  14. package/dist/MeshSurface.js.map +1 -1
  15. package/dist/NurbsCurve.js +1 -1
  16. package/dist/NurbsCurve.js.map +1 -1
  17. package/dist/NurbsSurface.js +1 -1
  18. package/dist/NurbsSurface.js.map +1 -1
  19. package/dist/PolyCurve.js +1 -1
  20. package/dist/PolyCurve.js.map +1 -1
  21. package/dist/Polyline.js +1 -1
  22. package/dist/Polyline.js.map +1 -1
  23. package/dist/Ray.js +1 -1
  24. package/dist/Ray.js.map +1 -1
  25. package/dist/SculptSession.js +1 -1
  26. package/dist/SculptSession.js.map +1 -1
  27. package/dist/engine-threaded.d.ts +2 -0
  28. package/dist/engine-threaded.d.ts.map +1 -0
  29. package/dist/engine-threaded.js +33 -0
  30. package/dist/engine-threaded.js.map +1 -0
  31. package/dist/engine.d.ts +21 -0
  32. package/dist/engine.d.ts.map +1 -1
  33. package/dist/engine.js +42 -0
  34. package/dist/engine.js.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/mesh-boolean.pool.d.ts +23 -1
  40. package/dist/mesh-boolean.pool.d.ts.map +1 -1
  41. package/dist/mesh-boolean.pool.js +97 -12
  42. package/dist/mesh-boolean.pool.js.map +1 -1
  43. package/dist/mesh-boolean.protocol.d.ts +21 -1
  44. package/dist/mesh-boolean.protocol.d.ts.map +1 -1
  45. package/dist/mesh-boolean.protocol.js.map +1 -1
  46. package/dist/mesh-boolean.worker.d.ts.map +1 -1
  47. package/dist/mesh-boolean.worker.js +94 -1
  48. package/dist/mesh-boolean.worker.js.map +1 -1
  49. package/dist/wasm-active.d.ts +20 -0
  50. package/dist/wasm-active.d.ts.map +1 -0
  51. package/dist/wasm-active.js +26 -0
  52. package/dist/wasm-active.js.map +1 -0
  53. package/dist/wasm-base64-threaded.d.ts +2 -0
  54. package/dist/wasm-base64-threaded.d.ts.map +1 -0
  55. package/dist/wasm-base64-threaded.js +3 -0
  56. package/dist/wasm-base64-threaded.js.map +1 -0
  57. package/dist/wasm-base64.d.ts +1 -1
  58. package/dist/wasm-base64.d.ts.map +1 -1
  59. package/dist/wasm-base64.js +1 -1
  60. package/dist/wasm-base64.js.map +1 -1
  61. package/dist/wasm-bindings-threaded.d.ts +2664 -0
  62. package/dist/wasm-bindings-threaded.d.ts.map +1 -0
  63. package/dist/wasm-bindings-threaded.js +5008 -0
  64. package/dist/wasm-bindings-threaded.js.map +1 -0
  65. package/dist/wasm-bindings.d.ts +130 -0
  66. package/dist/wasm-bindings.d.ts.map +1 -1
  67. package/dist/wasm-bindings.js +208 -0
  68. package/dist/wasm-bindings.js.map +1 -1
  69. package/dist/workerHelpers-threaded.d.ts +2 -0
  70. package/dist/workerHelpers-threaded.d.ts.map +1 -0
  71. package/dist/workerHelpers-threaded.js +100 -0
  72. package/dist/workerHelpers-threaded.js.map +1 -0
  73. package/package.json +8 -3
  74. package/src/Arc.ts +117 -117
  75. package/src/Brep.ts +1 -1
  76. package/src/Circle.ts +166 -166
  77. package/src/Line.ts +171 -171
  78. package/src/Mesh.ts +300 -45
  79. package/src/MeshSurface.ts +1 -1
  80. package/src/NurbsCurve.ts +655 -655
  81. package/src/NurbsSurface.ts +721 -721
  82. package/src/PolyCurve.ts +203 -203
  83. package/src/Polyline.ts +316 -316
  84. package/src/Ray.ts +90 -90
  85. package/src/SculptSession.ts +377 -377
  86. package/src/engine-threaded.ts +39 -0
  87. package/src/engine.ts +46 -0
  88. package/src/index.ts +1 -1
  89. package/src/mesh-boolean.pool.ts +208 -86
  90. package/src/mesh-boolean.protocol.ts +44 -1
  91. package/src/mesh-boolean.worker.ts +170 -56
  92. package/src/wasm-active.ts +31 -0
  93. package/src/wasm-base64-threaded.ts +2 -0
  94. package/src/wasm-base64.ts +1 -1
  95. package/src/wasm-bindings-threaded.d.ts +1989 -0
  96. package/src/wasm-bindings-threaded.js +5235 -0
  97. package/src/wasm-bindings.d.ts +104 -0
  98. package/src/wasm-bindings.js +225 -0
  99. package/src/workerHelpers-threaded.js +107 -0
@@ -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;
@@ -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
+ }