@woosh/meep-engine 2.133.3 → 2.134.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 (89) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/package.json +2 -2
  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/binary/BitSet.d.ts +6 -0
  7. package/src/core/binary/BitSet.d.ts.map +1 -1
  8. package/src/core/binary/BitSet.js +38 -1
  9. package/src/core/binary/operations/bitCount.d.ts.map +1 -1
  10. package/src/core/binary/operations/bitCount.js +11 -6
  11. package/src/core/geom/3d/aabb/AABB3.d.ts +7 -1
  12. package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
  13. package/src/core/geom/3d/aabb/AABB3.js +14 -1
  14. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts +4 -4
  15. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts.map +1 -1
  16. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js +2 -2
  17. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.d.ts +2 -2
  18. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.d.ts.map +1 -1
  19. package/src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.js +1 -1
  20. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts +2 -2
  21. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts.map +1 -1
  22. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.js +1 -1
  23. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts +4 -4
  24. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.d.ts.map +1 -1
  25. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +3 -3
  26. package/src/core/geom/3d/topology/simplify/quadratic/{Quadratic3.d.ts → Quadric3.d.ts} +55 -29
  27. package/src/core/geom/3d/topology/simplify/quadratic/Quadric3.d.ts.map +1 -0
  28. package/src/core/geom/3d/topology/simplify/quadratic/Quadric3.js +307 -0
  29. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts +7 -7
  30. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts.map +1 -1
  31. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +39 -13
  32. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts +2 -2
  33. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts.map +1 -1
  34. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.js +1 -1
  35. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.d.ts +2 -2
  36. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.d.ts.map +1 -1
  37. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.js +2 -2
  38. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.d.ts +4 -4
  39. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.d.ts.map +1 -1
  40. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +5 -5
  41. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts +8 -0
  42. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts.map +1 -0
  43. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +56 -0
  44. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts +14 -0
  45. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts.map +1 -0
  46. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +95 -0
  47. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +17 -0
  48. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -0
  49. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +352 -0
  50. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.d.ts +21 -0
  51. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.d.ts.map +1 -0
  52. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.js +52 -0
  53. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +16 -0
  54. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -0
  55. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +90 -0
  56. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts +19 -0
  57. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts.map +1 -0
  58. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.js +83 -0
  59. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts +22 -0
  60. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts.map +1 -0
  61. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +148 -0
  62. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +4 -4
  63. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts +15 -0
  64. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts.map +1 -0
  65. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +48 -0
  66. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  67. package/src/engine/ecs/terrain/ecs/Terrain.js +6 -1
  68. package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.d.ts.map +1 -1
  69. package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +10 -9
  70. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  71. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +14 -11
  72. package/src/engine/graphics/ecs/water/WaterSystem.d.ts.map +1 -1
  73. package/src/engine/graphics/ecs/water/WaterSystem.js +3 -0
  74. package/src/engine/graphics/material/SplatMaterial.d.ts.map +1 -1
  75. package/src/engine/graphics/material/SplatMaterial.js +2 -4
  76. package/src/engine/graphics/shaders/TerrainShader.js +4 -11
  77. package/src/engine/navigation/mesh/NavigationMesh.d.ts +6 -4
  78. package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -1
  79. package/src/engine/navigation/mesh/NavigationMesh.js +212 -190
  80. package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -1
  81. package/src/engine/navigation/mesh/build/navmesh_build_topology.js +20 -7
  82. package/src/engine/navigation/mesh/bvh_query_nearest_face.d.ts +15 -0
  83. package/src/engine/navigation/mesh/bvh_query_nearest_face.d.ts.map +1 -0
  84. package/src/engine/navigation/mesh/bvh_query_nearest_face.js +131 -0
  85. package/src/engine/physics/gjk/gjk.d.ts +16 -0
  86. package/src/engine/physics/gjk/gjk.d.ts.map +1 -0
  87. package/src/engine/physics/gjk/gjk.js +378 -0
  88. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.d.ts.map +0 -1
  89. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +0 -302
@@ -7,11 +7,16 @@ export function bitCount(v) {
7
7
  // see https://stackoverflow.com/a/109025/3973586
8
8
  // see https://graphics.stanford.edu/%7Eseander/bithacks.html#CountBitsSetParallel
9
9
 
10
- let i = v|0;
11
10
 
12
- i = i - ((i >> 1) & 0x55555555); // add pairs of bits
13
- i = (i & 0x33333333) + ((i >> 2) & 0x33333333); // quads
14
- i = (i + (i >> 4)) & 0x0F0F0F0F; // groups of 8
15
- i *= 0x01010101; // horizontal sum of bytes
16
- return i >> 24; // return just that top byte (after truncating to 32-bit even when int is wider than uint32_t)
11
+ // Force to a 32-bit unsigned integer
12
+ let i = v >>> 0;
13
+
14
+ i = i - ((i >>> 1) & 0x55555555); // Add pairs of bits
15
+ i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); // Quads
16
+ i = (i + (i >>> 4)) & 0x0F0F0F0F; // Groups of 8
17
+
18
+ // horizontal sum of bytes
19
+ // return just that top byte (after truncating to 32-bit even when int is wider than uint32_t)
20
+ // Math.imul perfectly simulates C's 32-bit integer multiplication overflow
21
+ return (Math.imul(i, 0x01010101) >>> 24);
17
22
  }
@@ -215,10 +215,16 @@ export class AABB3 {
215
215
  * @returns {boolean}
216
216
  */
217
217
  _expandToFitPoint(x: number, y: number, z: number): boolean;
218
+ /**
219
+ *
220
+ * @param {AABB3} other
221
+ */
222
+ union(other: AABB3): void;
218
223
  /**
219
224
  *
220
225
  * @param {AABB3} box
221
226
  * @returns {boolean}
227
+ * @deprecated use {@link AABB3#union} instead
222
228
  */
223
229
  expandToFit(box: AABB3): boolean;
224
230
  /**
@@ -323,7 +329,7 @@ export class AABB3 {
323
329
  intersectRay(oX: any, oY: any, oZ: any, dX: any, dY: any, dZ: any): boolean;
324
330
  intersectSegment(startX: any, startY: any, startZ: any, endX: any, endY: any, endZ: any): boolean;
325
331
  /**
326
- *
332
+ * @deprecated use {@link AABB3#_containsBox} instead
327
333
  * @param {THREE.Box} box
328
334
  * @returns {boolean}
329
335
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AABB3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/AABB3.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AABB3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/AABB3.js"],"names":[],"mappings":"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"}
@@ -491,10 +491,19 @@ export class AABB3 {
491
491
  return expanded;
492
492
  }
493
493
 
494
+ /**
495
+ *
496
+ * @param {AABB3} other
497
+ */
498
+ union(other) {
499
+ this._expandToFit(other.x0, other.y0, other.z0, other.x1, other.y1, other.z1);
500
+ }
501
+
494
502
  /**
495
503
  *
496
504
  * @param {AABB3} box
497
505
  * @returns {boolean}
506
+ * @deprecated use {@link AABB3#union} instead
498
507
  */
499
508
  expandToFit(box) {
500
509
  return this._expandToFit(box.x0, box.y0, box.z0, box.x1, box.y1, box.z1);
@@ -710,7 +719,7 @@ export class AABB3 {
710
719
  }
711
720
 
712
721
  /**
713
- *
722
+ * @deprecated use {@link AABB3#_containsBox} instead
714
723
  * @param {THREE.Box} box
715
724
  * @returns {boolean}
716
725
  */
@@ -961,6 +970,10 @@ export class AABB3 {
961
970
  * @param {number} extra
962
971
  */
963
972
  grow(extra) {
973
+ assert.isNumber(extra, 'extra');
974
+ assert.notNaN(extra, 'extra');
975
+ assert.isFinite(extra, 'extra');
976
+
964
977
  this.x0 -= extra;
965
978
  this.y0 -= extra;
966
979
  this.z0 -= extra;
@@ -39,15 +39,15 @@ export class EdgeCollapseCandidate {
39
39
  /**
40
40
  *
41
41
  * @param {TopoMesh} mesh
42
- * @param {Map<number, Quadratic3>} vertex_quadratics
42
+ * @param {Map<number, Quadric3>} vertex_quadratics
43
43
  */
44
- collapse(mesh: TopoMesh, vertex_quadratics: Map<number, Quadratic3>): void;
44
+ collapse(mesh: TopoMesh, vertex_quadratics: Map<number, Quadric3>): void;
45
45
  /**
46
46
  * Compute cost of collapse as well as which vertex should be the victim
47
- * @param {Map<number, Quadratic3>} vertex_quadratics
47
+ * @param {Map<number, Quadric3>} vertex_quadratics
48
48
  * @param {Set<number>} restricted_vertices
49
49
  * @returns {boolean}
50
50
  */
51
- update(vertex_quadratics: Map<number, Quadratic3>, restricted_vertices: Set<number>): boolean;
51
+ update(vertex_quadratics: Map<number, Quadric3>, restricted_vertices: Set<number>): boolean;
52
52
  }
53
53
  //# sourceMappingURL=EdgeCollapseCandidate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeCollapseCandidate.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js"],"names":[],"mappings":"AAIA;IAEQ;;;OAGG;IACH,MAFU,WAAS,IAAI,CAEP;IAChB;;;OAGG;IACH,eAFU,aAAW,IAAI,CAEA;IACzB;;;OAGG;IACH,eAFU,aAAW,IAAI,CAEA;IAEzB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,SAFU,MAAM,CAEA;IAEhB;;;;OAIG;IACH,0BAA8B;IAGlC;;;OAGG;IACH,oBAFa,OAAO,CAInB;IAGD,oBAMC;IAED;;;;OAIG;IACH,4CAFW,IAAI,MAAM,aAAa,QA2BjC;IAED;;;;;OAKG;IACH,0BAJW,IAAI,MAAM,aAAa,uBACvB,IAAI,MAAM,CAAC,GACT,OAAO,CAkDnB;CACJ"}
1
+ {"version":3,"file":"EdgeCollapseCandidate.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js"],"names":[],"mappings":"AAIA;IAEQ;;;OAGG;IACH,MAFU,WAAS,IAAI,CAEP;IAChB;;;OAGG;IACH,eAFU,aAAW,IAAI,CAEA;IACzB;;;OAGG;IACH,eAFU,aAAW,IAAI,CAEA;IAEzB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,SAFU,MAAM,CAEA;IAEhB;;;;OAIG;IACH,0BAA8B;IAGlC;;;OAGG;IACH,oBAFa,OAAO,CAInB;IAGD,oBAMC;IAED;;;;OAIG;IACH,4CAFW,IAAI,MAAM,WAAW,QA2B/B;IAED;;;;;OAKG;IACH,0BAJW,IAAI,MAAM,WAAW,uBACrB,IAAI,MAAM,CAAC,GACT,OAAO,CAkDnB;CACJ"}
@@ -60,7 +60,7 @@ export class EdgeCollapseCandidate {
60
60
  /**
61
61
  *
62
62
  * @param {TopoMesh} mesh
63
- * @param {Map<number, Quadratic3>} vertex_quadratics
63
+ * @param {Map<number, Quadric3>} vertex_quadratics
64
64
  */
65
65
  collapse(mesh, vertex_quadratics) {
66
66
  // if (!this.validate()) {
@@ -91,7 +91,7 @@ export class EdgeCollapseCandidate {
91
91
 
92
92
  /**
93
93
  * Compute cost of collapse as well as which vertex should be the victim
94
- * @param {Map<number, Quadratic3>} vertex_quadratics
94
+ * @param {Map<number, Quadric3>} vertex_quadratics
95
95
  * @param {Set<number>} restricted_vertices
96
96
  * @returns {boolean}
97
97
  */
@@ -3,9 +3,9 @@
3
3
  * @param {TopoMesh} mesh
4
4
  * @param {BinaryHeap<EdgeCollapseCandidate>} heap
5
5
  * @param {Map<TopoEdge, EdgeCollapseCandidate>} edge_map
6
- * @param {Map<number, Quadratic3>} vertex_quadratics
6
+ * @param {Map<number, Quadric3>} vertex_quadratics
7
7
  * @param {Set<number>} restricted_vertices
8
8
  */
9
- export function build_edge_collapse_candidates(mesh: TopoMesh, heap: BinaryHeap<EdgeCollapseCandidate>, edge_map: Map<TopoEdge, EdgeCollapseCandidate>, vertex_quadratics: Map<number, Quadratic3>, restricted_vertices: Set<number>): void;
9
+ export function build_edge_collapse_candidates(mesh: TopoMesh, heap: BinaryHeap<EdgeCollapseCandidate>, edge_map: Map<TopoEdge, EdgeCollapseCandidate>, vertex_quadratics: Map<number, Quadric3>, restricted_vertices: Set<number>): void;
10
10
  import { EdgeCollapseCandidate } from "./EdgeCollapseCandidate.js";
11
11
  //# sourceMappingURL=build_edge_collapse_candidates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build_edge_collapse_candidates.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,kHAJW,cAAc,qBAAqB,CAAC,qBACpC,IAAI,MAAM,aAAa,uBACvB,IAAI,MAAM,CAAC,QA6BrB;sCArCqC,4BAA4B"}
1
+ {"version":3,"file":"build_edge_collapse_candidates.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/build_edge_collapse_candidates.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,kHAJW,cAAc,qBAAqB,CAAC,qBACpC,IAAI,MAAM,WAAW,uBACrB,IAAI,MAAM,CAAC,QA6BrB;sCArCqC,4BAA4B"}
@@ -6,7 +6,7 @@ import { EdgeCollapseCandidate } from "./EdgeCollapseCandidate.js";
6
6
  * @param {TopoMesh} mesh
7
7
  * @param {BinaryHeap<EdgeCollapseCandidate>} heap
8
8
  * @param {Map<TopoEdge, EdgeCollapseCandidate>} edge_map
9
- * @param {Map<number, Quadratic3>} vertex_quadratics
9
+ * @param {Map<number, Quadric3>} vertex_quadratics
10
10
  * @param {Set<number>} restricted_vertices
11
11
  */
12
12
  export function build_edge_collapse_candidates(
@@ -4,8 +4,8 @@
4
4
  * @param {TopoVertex} victim
5
5
  * @param {TopoVertex} target
6
6
  * @param {TopoEdge} victim_edge
7
- * @param {Map<number, Quadratic3>} vertex_quadratics
7
+ * @param {Map<number, Quadric3>} vertex_quadratics
8
8
  * @return {number}
9
9
  */
10
- export function computeEdgeCollapseCost(victim: TopoVertex, target: TopoVertex, victim_edge: TopoEdge, vertex_quadratics: Map<number, Quadratic3>): number;
10
+ export function computeEdgeCollapseCost(victim: TopoVertex, target: TopoVertex, victim_edge: TopoEdge, vertex_quadratics: Map<number, Quadric3>): number;
11
11
  //# sourceMappingURL=computeEdgeCollapseCost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computeEdgeCollapseCost.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,0HAHW,IAAI,MAAM,aAAa,GACtB,MAAM,CAgEjB"}
1
+ {"version":3,"file":"computeEdgeCollapseCost.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,0HAHW,IAAI,MAAM,WAAW,GACpB,MAAM,CAgEjB"}
@@ -14,7 +14,7 @@ const INVALID_FLIP_COST = Number.MAX_VALUE;
14
14
  * @param {TopoVertex} victim
15
15
  * @param {TopoVertex} target
16
16
  * @param {TopoEdge} victim_edge
17
- * @param {Map<number, Quadratic3>} vertex_quadratics
17
+ * @param {Map<number, Quadric3>} vertex_quadratics
18
18
  * @return {number}
19
19
  */
20
20
  export function computeEdgeCollapseCost(victim, target, victim_edge, vertex_quadratics) {
@@ -14,19 +14,19 @@ export function edge_collapse_pick_target_vertex(edge: TopoEdge, restricted_vert
14
14
  /**
15
15
  *
16
16
  * @param {TopoEdge} edge
17
- * @param {Map<number,Quadratic3>} quadratics
17
+ * @param {Map<number,Quadric3>} quadratics
18
18
  * @param {Set<number>} restricted_vertices
19
19
  */
20
- export function compute_edge_collapse_cost(edge: TopoEdge, quadratics: Map<number, Quadratic3>, restricted_vertices: Set<number>): number;
20
+ export function compute_edge_collapse_cost(edge: TopoEdge, quadratics: Map<number, Quadric3>, restricted_vertices: Set<number>): number;
21
21
  /**
22
22
  *
23
23
  * @param {TopoMesh} mesh
24
24
  * @param {TopoEdge}edge
25
25
  * @param {TopoVertex} target
26
- * @param {Map<number,Quadratic3>} quadratics
26
+ * @param {Map<number,Quadric3>} quadratics
27
27
  * @param {Uint32Heap} heap
28
28
  * @param {Set<number>} restricted_vertices
29
29
  * @returns {boolean}
30
30
  */
31
- export function decimate_edge_collapse_snap(mesh: TopoMesh, edge: TopoEdge, target: TopoVertex, quadratics: Map<number, Quadratic3>, heap: Uint32Heap, restricted_vertices: Set<number>): boolean;
31
+ export function decimate_edge_collapse_snap(mesh: TopoMesh, edge: TopoEdge, target: TopoVertex, quadratics: Map<number, Quadric3>, heap: Uint32Heap, restricted_vertices: Set<number>): boolean;
32
32
  //# sourceMappingURL=decimate_edge_collapse_snap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decimate_edge_collapse_snap.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js"],"names":[],"mappings":"AAgDA;;;;GAIG;AACH,kFASC;AAED;;;;;GAKG;AACH,sFAHW,IAAI,MAAM,CAAC,GACT,aAAW,SAAS,CA0ChC;AAqBD;;;;;GAKG;AACH,uEAHW,IAAI,MAAM,aAAY,uBACtB,IAAI,MAAM,CAAC,UAsBrB;AAsBD;;;;;;;;;GASG;AACH,4GALW,IAAI,MAAM,aAAY,yCAEtB,IAAI,MAAM,CAAC,GACT,OAAO,CAmFnB"}
1
+ {"version":3,"file":"decimate_edge_collapse_snap.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js"],"names":[],"mappings":"AAgDA;;;;GAIG;AACH,kFASC;AAED;;;;;GAKG;AACH,sFAHW,IAAI,MAAM,CAAC,GACT,aAAW,SAAS,CA0ChC;AAqBD;;;;;GAKG;AACH,uEAHW,IAAI,MAAM,WAAU,uBACpB,IAAI,MAAM,CAAC,UAsBrB;AAsBD;;;;;;;;;GASG;AACH,4GALW,IAAI,MAAM,WAAU,yCAEpB,IAAI,MAAM,CAAC,GACT,OAAO,CAmFnB"}
@@ -132,7 +132,7 @@ function build_edge_cost_squared_topology(edge) {
132
132
  /**
133
133
  *
134
134
  * @param {TopoEdge} edge
135
- * @param {Map<number,Quadratic3>} quadratics
135
+ * @param {Map<number,Quadric3>} quadratics
136
136
  * @param {Set<number>} restricted_vertices
137
137
  */
138
138
  export function compute_edge_collapse_cost(edge, quadratics, restricted_vertices) {
@@ -160,7 +160,7 @@ export function compute_edge_collapse_cost(edge, quadratics, restricted_vertices
160
160
  /**
161
161
  *
162
162
  * @param {TopoEdge} edge
163
- * @param {Map<number,Quadratic3>} quadratics
163
+ * @param {Map<number,Quadric3>} quadratics
164
164
  * @param {Uint32Heap} heap
165
165
  * @param {Set<number>} restricted_vertices
166
166
  */
@@ -182,7 +182,7 @@ function tm_build_cost(edge, quadratics, heap, restricted_vertices) {
182
182
  * @param {TopoMesh} mesh
183
183
  * @param {TopoEdge}edge
184
184
  * @param {TopoVertex} target
185
- * @param {Map<number,Quadratic3>} quadratics
185
+ * @param {Map<number,Quadric3>} quadratics
186
186
  * @param {Uint32Heap} heap
187
187
  * @param {Set<number>} restricted_vertices
188
188
  * @returns {boolean}
@@ -1,18 +1,45 @@
1
1
  /**
2
2
  * Quadric Error Metric
3
- * Triangular 4x4 matrix, see https://en.wikipedia.org/wiki/Triangular_matrix
3
+ * Upper-triangular portion of a symmetric 4x4 matrix encoding a quadric form.
4
+ *
5
+ * Layout (10 elements):
6
+ * [0]=a2 [1]=ab [2]=ac [3]=ad
7
+ * [4]=b2 [5]=bc [6]=bd
8
+ * [7]=c2 [8]=cd
9
+ * [9]=d2
4
10
  */
5
- export class Quadratic3 {
6
- a2: number;
7
- ab: number;
8
- ac: number;
9
- ad: number;
10
- b2: number;
11
- bc: number;
12
- bd: number;
13
- c2: number;
14
- cd: number;
15
- d2: number;
11
+ export class Quadric3 extends Float64Array {
12
+ constructor();
13
+ set a2(arg: any);
14
+ get a2(): any;
15
+ 0: any;
16
+ set ab(arg: any);
17
+ get ab(): any;
18
+ 1: any;
19
+ set ac(arg: any);
20
+ get ac(): any;
21
+ 2: any;
22
+ set ad(arg: any);
23
+ get ad(): any;
24
+ 3: any;
25
+ set b2(arg: any);
26
+ get b2(): any;
27
+ 4: any;
28
+ set bc(arg: any);
29
+ get bc(): any;
30
+ 5: any;
31
+ set bd(arg: any);
32
+ get bd(): any;
33
+ 6: any;
34
+ set c2(arg: any);
35
+ get c2(): any;
36
+ 7: any;
37
+ set cd(arg: any);
38
+ get cd(): any;
39
+ 8: any;
40
+ set d2(arg: any);
41
+ get d2(): any;
42
+ 9: any;
16
43
  /**
17
44
  *
18
45
  * @param {ArrayLike<number>|number[]|Float32Array} result
@@ -39,12 +66,7 @@ export class Quadratic3 {
39
66
  */
40
67
  setFromVector4(x: number, y: number, z: number, w: number): void;
41
68
  /**
42
- *
43
- * @param {TopoTriangle} face
44
- */
45
- setFromFace(face: TopoTriangle): void;
46
- /**
47
- * Squared distance from the given point to plane encoded by the quadratic
69
+ * Squared distance from the given point to plane encoded by the quadric
48
70
  * @param {number} x
49
71
  * @param {number} y
50
72
  * @param {number} z
@@ -52,19 +74,17 @@ export class Quadratic3 {
52
74
  */
53
75
  evaluate(x: number, y: number, z: number): number;
54
76
  /**
55
- * Find optimal vertex position based on the quadratic
77
+ * Find the optimal vertex position based on the quadric
56
78
  *
57
- * Based on Blender's implementation: https://github.com/blender/blender/blob/594f47ecd2d5367ca936cf6fc6ec8168c2b360d0/source/blender/blenlib/intern/quadric.c
58
- *
59
- * @param {number[]} out
79
+ * @param {number[]} out vector3
60
80
  * @returns {boolean}
61
81
  */
62
82
  optimize(out: number[]): boolean;
63
83
  /**
64
84
  *
65
- * @param {Quadratic3} Q
85
+ * @param {Quadric3} Q
66
86
  */
67
- add(Q: Quadratic3): void;
87
+ add(Q: Quadric3): void;
68
88
  /**
69
89
  *
70
90
  * @param {number} v
@@ -72,17 +92,23 @@ export class Quadratic3 {
72
92
  multiplyScalar(v: number): void;
73
93
  /**
74
94
  *
75
- * @returns {Quadratic3}
95
+ * @returns {Quadric3}
76
96
  */
77
- clone(): Quadratic3;
97
+ clone(): Quadric3;
78
98
  /**
79
99
  *
80
- * @param {Quadratic3} other
100
+ * @param {Quadric3} other
81
101
  */
82
- copy(other: Quadratic3): void;
102
+ copy(other: Quadric3): void;
83
103
  /**
84
104
  * Set all matrix values to 0
85
105
  */
86
106
  clear(): void;
107
+ /**
108
+ * Useful for type checking
109
+ * @readonly
110
+ * @type {boolean}
111
+ */
112
+ readonly isQuadric3: boolean;
87
113
  }
88
- //# sourceMappingURL=Quadratic3.d.ts.map
114
+ //# sourceMappingURL=Quadric3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Quadric3.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/simplify/quadratic/Quadric3.js"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH;IACI,cAEC;IAMD,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAOf,iBAEC;IAND,cAEC;IAGG,OAAW;IAGf;;;OAGG;IACH,kBAFW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,QAMjD;IAED;;;OAGG;IACH,eAFW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,QAkBjD;IAED;;;;;OAKG;IACH,sBAJW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,WACvC,MAAM,GACJ,OAAO,CAqCnB;IAED;;;;;;OAMG;IACH,kBALW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAgBhB;IAED;;;;;;OAMG;IACH,YALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CASlB;IAED;;;;;OAKG;IACH,cAHW,MAAM,EAAE,GACN,OAAO,CAkBnB;IAED;;;OAGG;IACH,OAFW,QAAQ,QAalB;IAED;;;OAGG;IACH,kBAFW,MAAM,QAahB;IAED;;;OAGG;IACH,SAFa,QAAQ,CAQpB;IAED;;;OAGG;IACH,YAFW,QAAQ,QAIlB;IAED;;OAEG;IACH,cAEC;IAGL;;;;OAIG;IACH,qBAFU,OAAO,CAEY;CAP5B"}