@woosh/meep-engine 2.133.5 → 2.134.1

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 (83) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/BinaryBuffer.d.ts +20 -0
  4. package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
  5. package/src/core/binary/BinaryBuffer.js +50 -0
  6. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts +4 -4
  7. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts.map +1 -1
  8. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js +2 -2
  9. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.d.ts +2 -2
  10. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.d.ts.map +1 -1
  11. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.js +1 -1
  12. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts +2 -2
  13. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts.map +1 -1
  14. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.js +1 -1
  15. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts +4 -4
  16. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts.map +1 -1
  17. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +3 -3
  18. package/src/core/geom/3d/topology/simplify/quadratic/{Quadratic3.d.ts → Quadric3.d.ts} +55 -29
  19. package/src/core/geom/3d/topology/simplify/quadratic/Quadric3.d.ts.map +1 -0
  20. package/src/core/geom/3d/topology/simplify/quadratic/Quadric3.js +307 -0
  21. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts +7 -7
  22. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts.map +1 -1
  23. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +39 -13
  24. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts +2 -2
  25. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts.map +1 -1
  26. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.js +1 -1
  27. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.d.ts +2 -2
  28. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.d.ts.map +1 -1
  29. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.js +2 -2
  30. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.d.ts +4 -4
  31. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.d.ts.map +1 -1
  32. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +5 -5
  33. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts +8 -0
  34. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts.map +1 -0
  35. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +56 -0
  36. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts +14 -0
  37. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts.map +1 -0
  38. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +95 -0
  39. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +17 -0
  40. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -0
  41. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +352 -0
  42. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.d.ts +21 -0
  43. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.d.ts.map +1 -0
  44. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.js +52 -0
  45. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +16 -0
  46. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -0
  47. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +90 -0
  48. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts +19 -0
  49. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts.map +1 -0
  50. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.js +83 -0
  51. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts +22 -0
  52. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts.map +1 -0
  53. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +148 -0
  54. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +4 -4
  55. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts +15 -0
  56. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts.map +1 -0
  57. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +48 -0
  58. package/src/core/graph/coloring/colorizeGraphMCS.js +1 -1
  59. package/src/core/graph/convert_graph_to_dot_string.d.ts.map +1 -1
  60. package/src/core/graph/convert_graph_to_dot_string.js +2 -1
  61. package/src/core/graph/graph_compute_distance_matrix.d.ts +18 -1
  62. package/src/core/graph/graph_compute_distance_matrix.d.ts.map +1 -1
  63. package/src/core/graph/graph_compute_distance_matrix.js +21 -2
  64. package/src/core/graph/graph_compute_laplacian_matrix.d.ts.map +1 -1
  65. package/src/core/graph/graph_compute_laplacian_matrix.js +2 -1
  66. package/src/core/graph/graph_k_means_cluster.d.ts +10 -3
  67. package/src/core/graph/graph_k_means_cluster.d.ts.map +1 -1
  68. package/src/core/graph/graph_k_means_cluster.js +250 -123
  69. package/src/core/graph/layout/CircleLayout.js +6 -6
  70. package/src/core/graph/layout/Connection.js +1 -1
  71. package/src/core/graph/layout/box/aabb2_force_into_container.d.ts.map +1 -1
  72. package/src/core/graph/layout/box/aabb2_force_into_container.js +4 -2
  73. package/src/core/math/statistics/computeStatisticalMedian.js +1 -1
  74. package/src/engine/navigation/mesh/NavigationMesh.d.ts +6 -4
  75. package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -1
  76. package/src/engine/navigation/mesh/NavigationMesh.js +212 -190
  77. package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -1
  78. package/src/engine/navigation/mesh/build/navmesh_build_topology.js +20 -7
  79. package/src/engine/navigation/mesh/bvh_query_nearest_face.d.ts +15 -0
  80. package/src/engine/navigation/mesh/bvh_query_nearest_face.d.ts.map +1 -0
  81. package/src/engine/navigation/mesh/bvh_query_nearest_face.js +131 -0
  82. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.d.ts.map +0 -1
  83. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +0 -302
@@ -1,302 +0,0 @@
1
- import { vec3 } from "gl-matrix";
2
- import { EPSILON } from "../../../../../math/EPSILON.js";
3
- import { fabsf } from "../../../../../math/fabsf.js";
4
- import { v3_dot } from "../../../../vec3/v3_dot.js";
5
- import { compute_triangle_normal } from "../../../triangle/compute_triangle_normal.js";
6
-
7
- const scratch_v3 = new Float32Array(3);
8
- const scratch_m3 = new Float32Array(9);
9
-
10
- /**
11
- * Quadric Error Metric
12
- * Triangular 4x4 matrix, see https://en.wikipedia.org/wiki/Triangular_matrix
13
- */
14
- export class Quadratic3 {
15
-
16
- // Row 0
17
- a2 = 0;
18
- ab = 0;
19
- ac = 0;
20
- ad = 0;
21
-
22
- // Row 1
23
- b2 = 0;
24
- bc = 0;
25
- bd = 0;
26
-
27
- // Row 2
28
- c2 = 0;
29
- cd = 0;
30
-
31
- // Row 3
32
- d2 = 0;
33
-
34
-
35
- /**
36
- *
37
- * @param {ArrayLike<number>|number[]|Float32Array} result
38
- */
39
- toVector3(result) {
40
- result[0] = this.ad;
41
- result[1] = this.bd;
42
- result[2] = this.cd;
43
- }
44
-
45
- /**
46
- *
47
- * @param {ArrayLike<number>|number[]|Float32Array} m3
48
- */
49
- toTensorM3(m3) {
50
- m3[0] = this.a2;
51
- m3[1] = this.ab;
52
- m3[2] = this.ac;
53
-
54
- m3[3] = this.ab;
55
- m3[4] = this.b2;
56
- m3[5] = this.bc;
57
-
58
- m3[6] = this.ac;
59
- m3[7] = this.bc;
60
- m3[8] = this.c2;
61
- }
62
-
63
- /**
64
- * Equivalent to taking a tensor followed by matrix inversion
65
- * @param {ArrayLike<number>|number[]|Float32Array} m3
66
- * @param {number} epsilon
67
- * @returns {boolean} whether operation was successful or not
68
- */
69
- toTensorM3Inverse(m3, epsilon) {
70
- const a2 = this.a2;
71
- const b2 = this.b2;
72
- const c2 = this.c2;
73
- const bc = this.bc;
74
- const ab = this.ab;
75
- const ac = this.ac;
76
-
77
- const det = a2 * (b2 * c2 - bc * bc) -
78
- ab * (ab * c2 - ac * bc) +
79
- ac * (ab * bc - ac * b2);
80
-
81
- if (fabsf(det) > epsilon) {
82
-
83
- const invdet = 1.0 / det;
84
-
85
- m3[0] = (b2 * c2 - bc * bc) * invdet;
86
- m3[3] = (bc * ac - ab * c2) * invdet;
87
- m3[6] = (ab * bc - b2 * ac) * invdet;
88
-
89
- m3[1] = (ac * bc - ab * c2) * invdet;
90
- m3[4] = (a2 * c2 - ac * ac) * invdet;
91
- m3[7] = (ab * ac - a2 * bc) * invdet;
92
-
93
- m3[2] = (ab * bc - ac * b2) * invdet;
94
- m3[5] = (ac * ab - a2 * bc) * invdet;
95
- m3[8] = (a2 * b2 - ab * ab) * invdet;
96
-
97
- return true;
98
- }
99
-
100
- return false;
101
- }
102
-
103
- /**
104
- * Set from plane expressed as a 4 component vector
105
- * @param {number} x plane normal
106
- * @param {number} y plane normal
107
- * @param {number} z plane normal
108
- * @param {number} w plane offset
109
- */
110
- setFromVector4(x, y, z, w) {
111
- this.a2 = x * x;
112
- this.ab = x * y;
113
- this.ac = x * z;
114
- this.ad = x * w;
115
-
116
- this.b2 = y * y;
117
- this.bc = y * z;
118
- this.bd = y * w;
119
-
120
- this.c2 = z * z;
121
- this.cd = z * w;
122
-
123
- this.d2 = w * w;
124
- }
125
-
126
- /**
127
- *
128
- * @param {TopoTriangle} face
129
- */
130
- setFromFace(face) {
131
- const v0 = face.vertices[0];
132
-
133
- // compute triangle's plane
134
- compute_triangle_normal(scratch_v3, v0, face.vertices[1], face.vertices[2]);
135
-
136
- // compute plane offset
137
-
138
- const normal_x = scratch_v3[0];
139
- const normal_y = scratch_v3[1];
140
- const normal_z = scratch_v3[2];
141
-
142
- const plane_constant = -v3_dot(
143
- normal_x, normal_y, normal_z,
144
-
145
- v0.x, v0.y, v0.z
146
- );
147
-
148
- this.setFromVector4(normal_x, normal_y, normal_z, plane_constant);
149
- }
150
-
151
- /**
152
- * Squared distance from the given point to plane encoded by the quadratic
153
- * @param {number} x
154
- * @param {number} y
155
- * @param {number} z
156
- * @returns {number}
157
- */
158
- evaluate(x, y, z) {
159
- // Evaluate vAv + 2bv + c
160
-
161
- return (x * x * this.a2) + (2 * x * y * this.ab) + (2 * x * z * this.ac) + (2 * x * this.ad) // A
162
- + (y * y * this.b2) + (2 * y * z * this.bc) + (2 * y * this.bd) // B
163
- + (z * z * this.c2) + (2 * z * this.cd) // C
164
- + this.d2; // D
165
- }
166
-
167
- /**
168
- * Find optimal vertex position based on the quadratic
169
- *
170
- * Based on Blender's implementation: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/blenlib/intern/quadric.c
171
- *
172
- * @param {number[]} out
173
- * @returns {boolean}
174
- */
175
- optimize(out) {
176
-
177
- if (this.toTensorM3Inverse(scratch_m3, EPSILON)) {
178
-
179
- this.toVector3(out);
180
-
181
- vec3.transformMat3(out, out, scratch_m3);
182
- vec3.negate(out, out);
183
-
184
- return true;
185
- }
186
-
187
- return false;
188
-
189
- }
190
-
191
- /**
192
- *
193
- * @param {Quadratic3} Q
194
- */
195
- add(Q) {
196
-
197
- // Accumulate coefficients
198
-
199
- // R0
200
- this.a2 += Q.a2;
201
- this.ab += Q.ab;
202
- this.ac += Q.ac;
203
- this.ad += Q.ad;
204
-
205
- // R1
206
- this.b2 += Q.b2;
207
- this.bc += Q.bc;
208
- this.bd += Q.bd;
209
-
210
- // R2
211
- this.c2 += Q.c2;
212
- this.cd += Q.cd;
213
-
214
- // R3
215
- this.d2 += Q.d2;
216
- }
217
-
218
- /**
219
- *
220
- * @param {number} v
221
- */
222
- multiplyScalar(v) {
223
- // R0
224
- this.a2 *= v;
225
- this.ab *= v;
226
- this.ac *= v;
227
- this.ad *= v;
228
-
229
- // R1
230
- this.b2 *= v;
231
- this.bc *= v;
232
- this.bd *= v;
233
-
234
- // R2
235
- this.c2 *= v;
236
- this.cd *= v;
237
-
238
- // R3
239
- this.d2 *= v;
240
- }
241
-
242
- /**
243
- *
244
- * @returns {Quadratic3}
245
- */
246
- clone() {
247
- const r = new Quadratic3();
248
-
249
- r.copy(this);
250
-
251
- return r;
252
- }
253
-
254
- /**
255
- *
256
- * @param {Quadratic3} other
257
- */
258
- copy(other) {
259
-
260
- // R0
261
- this.a2 = other.a2;
262
- this.ab = other.ab;
263
- this.ac = other.ac;
264
- this.ad = other.ad;
265
-
266
- // R1
267
- this.b2 = other.b2;
268
- this.bc = other.bc;
269
- this.bd = other.bd;
270
-
271
- // R2
272
- this.c2 = other.c2;
273
- this.cd = other.cd;
274
-
275
- // R3
276
- this.d2 = other.d2;
277
- }
278
-
279
- /**
280
- * Set all matrix values to 0
281
- */
282
- clear() {
283
- // Row 0
284
- this.a2 = 0;
285
- this.ab = 0;
286
- this.ac = 0;
287
- this.ad = 0;
288
-
289
- // Row 1
290
- this.b2 = 0;
291
- this.bc = 0;
292
- this.bd = 0;
293
-
294
- // Row 2
295
- this.c2 = 0;
296
- this.cd = 0;
297
-
298
- // Row 3
299
- this.d2 = 0;
300
-
301
- }
302
- }