@woosh/meep-engine 2.138.19 → 2.139.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/package.json +2 -1
- package/src/core/collection/PairUint32Map.d.ts +100 -0
- package/src/core/collection/PairUint32Map.d.ts.map +1 -0
- package/src/core/collection/PairUint32Map.js +321 -0
- package/src/core/collection/Uint32Map.d.ts +119 -0
- package/src/core/collection/Uint32Map.d.ts.map +1 -0
- package/src/core/collection/Uint32Map.js +345 -0
- package/src/core/collection/array/array_shuffle.d.ts +10 -3
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
- package/src/core/collection/array/array_shuffle.js +27 -22
- package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
- package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
- package/src/core/collection/heap/FibonacciHeap.js +586 -0
- package/src/core/collection/heap/Uint32Heap.js +1 -1
- package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
- package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
- package/src/core/collection/heap/Uint32Heap4.js +490 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
- package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
- package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
- package/src/core/graph/csr/CSRGraph.d.ts +168 -0
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
- package/src/core/graph/csr/CSRGraph.js +319 -0
- package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
- package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
- package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
- package/src/core/graph/metis/metis.d.ts +19 -0
- package/src/core/graph/metis/metis.d.ts.map +1 -1
- package/src/core/graph/metis/metis.js +20 -0
- package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
- package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
- package/src/core/graph/metis/metis_cluster_bs.js +11 -0
- package/src/core/graph/metis/metis_options.d.ts +17 -2
- package/src/core/graph/metis/metis_options.d.ts.map +1 -1
- package/src/core/graph/metis/metis_options.js +17 -2
- package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
- package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
- package/src/core/graph/metis/native/MetisGraph.js +212 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
- package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
- package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
- package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
- package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
- package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
- package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
- package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
- package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
- package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
- package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/project_kway.js +43 -0
- package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
- package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
- package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
- package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
- package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
- package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
- package/src/engine/EngineHarness.d.ts +3 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -4
- package/src/engine/control/first-person/DESIGN.md +30 -6
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
- package/src/engine/control/first-person/TODO.md +127 -0
- package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
- package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Ability.js +119 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Mantle.js +188 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Slide.js +158 -0
- package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
- package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/WallJump.js +131 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/WallRun.js +180 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
- package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
- package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
- package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
- package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
- package/src/engine/control/first-person/math/Spring.d.ts +56 -0
- package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
- package/src/engine/control/first-person/math/Spring.js +71 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
- package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
- package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
- package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
- package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
- package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
- package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
- package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
- package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
- package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
- package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
- package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
- package/src/engine/ecs/EntityManager.d.ts +2 -2
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +13 -8
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +2 -2
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
- package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/Light.js +27 -0
- package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
- package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
- package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
- package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
- package/src/engine/physics/PLAN.md +236 -0
- package/src/engine/physics/body/BodyStorage.d.ts +187 -0
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
- package/src/engine/physics/body/BodyStorage.js +427 -0
- package/src/engine/physics/broadphase/PairList.d.ts +62 -0
- package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
- package/src/engine/physics/broadphase/PairList.js +97 -0
- package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
- package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
- package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
- package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
- package/src/engine/physics/broadphase/generate_pairs.js +101 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
- package/src/engine/physics/contact/ManifoldStore.js +499 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
- package/src/engine/physics/ecs/BodyKind.js +24 -0
- package/src/engine/physics/ecs/Collider.d.ts +98 -0
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
- package/src/engine/physics/ecs/Collider.js +136 -0
- package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
- package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderFlags.js +15 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
- package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
- package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBody.js +240 -0
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
- package/src/engine/physics/ecs/SleepState.d.ts +11 -0
- package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
- package/src/engine/physics/ecs/SleepState.js +12 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
- package/src/engine/physics/events/ContactEventBuffer.js +83 -0
- package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
- package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
- package/src/engine/physics/events/diff_manifolds.js +50 -0
- package/src/engine/physics/fluid/FluidField.d.ts +294 -16
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +510 -66
- package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +455 -95
- package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
- package/src/engine/physics/fluid/prototype.js +102 -91
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
- package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
- package/src/engine/physics/integration/integrate_position.d.ts +16 -0
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_position.js +48 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_velocity.js +79 -0
- package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
- package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
- package/src/engine/physics/integration/quat_integrate.js +62 -0
- package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
- package/src/engine/physics/island/IslandBuilder.js +411 -0
- package/src/engine/physics/island/union_find.d.ts +51 -0
- package/src/engine/physics/island/union_find.d.ts.map +1 -0
- package/src/engine/physics/island/union_find.js +76 -0
- package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/PosedShape.js +110 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
- package/src/engine/physics/queries/raycast.d.ts +20 -0
- package/src/engine/physics/queries/raycast.d.ts.map +1 -0
- package/src/engine/physics/queries/raycast.js +249 -0
- package/src/engine/physics/solver/friction_cone.d.ts +16 -0
- package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
- package/src/engine/physics/solver/friction_cone.js +37 -0
- package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
- package/src/engine/physics/solver/solve_contacts.js +598 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
- package/src/engine/ecs/components/Motion.d.ts +0 -21
- package/src/engine/ecs/components/Motion.d.ts.map +0 -1
- package/src/engine/ecs/components/Motion.js +0 -27
- package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
- package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
- package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
- package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
- package/src/engine/ecs/systems/MotionSystem.js +0 -29
- package/src/engine/physics/fluid/Fluid.d.ts +0 -26
- package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
- package/src/engine/physics/fluid/Fluid.js +0 -221
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Perform a 3-2 flip: three tetrahedra sharing a common edge collapse into
|
|
3
|
+
* two tetrahedra sharing the triangle face that was previously bounded by
|
|
4
|
+
* the edge. Inverse of the 2-3 flip.
|
|
5
|
+
*
|
|
6
|
+
* The three input tets must share exactly one edge (v_a, v_b); together
|
|
7
|
+
* they form a triangular bipyramid whose central edge is (v_a, v_b) and
|
|
8
|
+
* whose equator is the triangle (v_X, v_Y, v_missing) — the three "ring"
|
|
9
|
+
* vertices, one in each pair of adjacent input tets. After the flip, the
|
|
10
|
+
* (v_a, v_b) edge is gone and the (v_X, v_Y, v_missing) face is the only
|
|
11
|
+
* interior face left.
|
|
12
|
+
*
|
|
13
|
+
* Slot reuse: t1's storage becomes the v_a-side new tet, t2's becomes the
|
|
14
|
+
* v_b-side new tet, t3's slot is freed.
|
|
15
|
+
*
|
|
16
|
+
* As with the 2-3 flip, geometric validity (positive volume of each new
|
|
17
|
+
* tet under any specific embedding) is NOT checked — the new tets'
|
|
18
|
+
* orientations follow the canonical winding of t1, so if t1 had a positive
|
|
19
|
+
* signed volume the new tets do too. The caller is responsible for
|
|
20
|
+
* ensuring the flip is geometrically meaningful for its use case (the
|
|
21
|
+
* bipyramid must be convex, which is implicit in "three tets share an
|
|
22
|
+
* edge").
|
|
23
|
+
*
|
|
24
|
+
* @param {TetrahedralMesh} mesh
|
|
25
|
+
* @param {number} t1 — first of three tets sharing the central edge
|
|
26
|
+
* @param {number} t2 — second; must share the same edge as t1
|
|
27
|
+
* @param {number} t3 — third; must share the same edge as t1 and t2
|
|
28
|
+
* @param {Uint32Array|number[]} out — caller-provided storage. out[0]
|
|
29
|
+
* receives the v_a-side new tet ID, out[1] the v_b-side. Must have
|
|
30
|
+
* length ≥ 2.
|
|
31
|
+
*/
|
|
32
|
+
export function tetrahedral_mesh_flip_32(mesh: TetrahedralMesh, t1: number, t2: number, t3: number, out: Uint32Array | number[]): void;
|
|
33
|
+
//# sourceMappingURL=tetrahedral_mesh_flip_32.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tetrahedral_mesh_flip_32.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,oEAPW,MAAM,MACN,MAAM,MACN,MAAM,OACN,WAAW,GAAC,MAAM,EAAE,QAqM9B"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { assert } from "../../../assert.js";
|
|
2
|
+
import { INVALID_NEIGHBOUR } from "./TetrahedralMesh.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Face-vertex layout for a positively-oriented tet: for vertex slot i, the
|
|
6
|
+
* face opposite has these slot indices in counter-clockwise-from-outside
|
|
7
|
+
* order. Identical to the table in tetrahedral_mesh_flip_23.js; kept local
|
|
8
|
+
* for module independence.
|
|
9
|
+
*/
|
|
10
|
+
const FACE_VERTICES_BY_OPPOSITE = [
|
|
11
|
+
[1, 3, 2], // opposite v0
|
|
12
|
+
[0, 2, 3], // opposite v1
|
|
13
|
+
[0, 3, 1], // opposite v2
|
|
14
|
+
[0, 1, 2], // opposite v3
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Perform a 3-2 flip: three tetrahedra sharing a common edge collapse into
|
|
19
|
+
* two tetrahedra sharing the triangle face that was previously bounded by
|
|
20
|
+
* the edge. Inverse of the 2-3 flip.
|
|
21
|
+
*
|
|
22
|
+
* The three input tets must share exactly one edge (v_a, v_b); together
|
|
23
|
+
* they form a triangular bipyramid whose central edge is (v_a, v_b) and
|
|
24
|
+
* whose equator is the triangle (v_X, v_Y, v_missing) — the three "ring"
|
|
25
|
+
* vertices, one in each pair of adjacent input tets. After the flip, the
|
|
26
|
+
* (v_a, v_b) edge is gone and the (v_X, v_Y, v_missing) face is the only
|
|
27
|
+
* interior face left.
|
|
28
|
+
*
|
|
29
|
+
* Slot reuse: t1's storage becomes the v_a-side new tet, t2's becomes the
|
|
30
|
+
* v_b-side new tet, t3's slot is freed.
|
|
31
|
+
*
|
|
32
|
+
* As with the 2-3 flip, geometric validity (positive volume of each new
|
|
33
|
+
* tet under any specific embedding) is NOT checked — the new tets'
|
|
34
|
+
* orientations follow the canonical winding of t1, so if t1 had a positive
|
|
35
|
+
* signed volume the new tets do too. The caller is responsible for
|
|
36
|
+
* ensuring the flip is geometrically meaningful for its use case (the
|
|
37
|
+
* bipyramid must be convex, which is implicit in "three tets share an
|
|
38
|
+
* edge").
|
|
39
|
+
*
|
|
40
|
+
* @param {TetrahedralMesh} mesh
|
|
41
|
+
* @param {number} t1 — first of three tets sharing the central edge
|
|
42
|
+
* @param {number} t2 — second; must share the same edge as t1
|
|
43
|
+
* @param {number} t3 — third; must share the same edge as t1 and t2
|
|
44
|
+
* @param {Uint32Array|number[]} out — caller-provided storage. out[0]
|
|
45
|
+
* receives the v_a-side new tet ID, out[1] the v_b-side. Must have
|
|
46
|
+
* length ≥ 2.
|
|
47
|
+
*/
|
|
48
|
+
export function tetrahedral_mesh_flip_32(mesh, t1, t2, t3, out) {
|
|
49
|
+
assert.defined(mesh, 'mesh');
|
|
50
|
+
assert.equal(mesh.isTetrahedralMesh, true, 'mesh.isTetrahedralMesh !== true');
|
|
51
|
+
assert.isNonNegativeInteger(t1, 't1');
|
|
52
|
+
assert.isNonNegativeInteger(t2, 't2');
|
|
53
|
+
assert.isNonNegativeInteger(t3, 't3');
|
|
54
|
+
assert.notEqual(t1, t2, 't1 must not equal t2');
|
|
55
|
+
assert.notEqual(t1, t3, 't1 must not equal t3');
|
|
56
|
+
assert.notEqual(t2, t3, 't2 must not equal t3');
|
|
57
|
+
assert.defined(out, 'out');
|
|
58
|
+
|
|
59
|
+
// -----------------------------------------------------------------
|
|
60
|
+
// Step 1: find the edge (v_a, v_b) shared by all three tets.
|
|
61
|
+
// -----------------------------------------------------------------
|
|
62
|
+
const t1_verts = [
|
|
63
|
+
mesh.getVertexIndex(t1, 0),
|
|
64
|
+
mesh.getVertexIndex(t1, 1),
|
|
65
|
+
mesh.getVertexIndex(t1, 2),
|
|
66
|
+
mesh.getVertexIndex(t1, 3),
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
let v_a = -1;
|
|
70
|
+
let v_b = -1;
|
|
71
|
+
for (let i = 0; i < 4; i++) {
|
|
72
|
+
const v = t1_verts[i];
|
|
73
|
+
if (mesh.tetContainsVertex(t2, v) && mesh.tetContainsVertex(t3, v)) {
|
|
74
|
+
if (v_a === -1) v_a = v;
|
|
75
|
+
else if (v_b === -1) v_b = v;
|
|
76
|
+
else throw new Error(`tets ${t1}, ${t2}, ${t3} share more than two vertices — input is not a valid 3-2 configuration`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (v_b === -1) {
|
|
80
|
+
throw new Error(`tets ${t1}, ${t2}, ${t3} do not share a common edge`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// -----------------------------------------------------------------
|
|
84
|
+
// Step 2: identify the three ring vertices.
|
|
85
|
+
// t1 has (v_X, v_Y); the third ring vertex (v_missing) is in t2 and t3.
|
|
86
|
+
// The order (v_X, v_Y) within t1 is determined by t1's face opposite
|
|
87
|
+
// v_b in CCW-from-outside order — see step 3.
|
|
88
|
+
// -----------------------------------------------------------------
|
|
89
|
+
let slot_a_in_t1 = -1;
|
|
90
|
+
let slot_b_in_t1 = -1;
|
|
91
|
+
for (let i = 0; i < 4; i++) {
|
|
92
|
+
if (t1_verts[i] === v_a) slot_a_in_t1 = i;
|
|
93
|
+
else if (t1_verts[i] === v_b) slot_b_in_t1 = i;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// -----------------------------------------------------------------
|
|
97
|
+
// Step 3: derive ring order from t1's canonical winding.
|
|
98
|
+
//
|
|
99
|
+
// t1's face opposite v_b reads (in CCW-from-outside order) as a triple
|
|
100
|
+
// containing v_a and t1's two ring vertices. Reading the triple as a
|
|
101
|
+
// cycle (V0 → V1 → V2 → V0) and taking the two ring vertices in the
|
|
102
|
+
// order they appear after v_a gives them in CCW-from-v_a's-view ring
|
|
103
|
+
// direction. v_missing then sits between v_Y and v_X in that same CCW
|
|
104
|
+
// cycle (i.e. it's v_X's CCW-prev, or equivalently v_Y's CCW-next).
|
|
105
|
+
// -----------------------------------------------------------------
|
|
106
|
+
const face_opp_b = FACE_VERTICES_BY_OPPOSITE[slot_b_in_t1];
|
|
107
|
+
const face_v = [
|
|
108
|
+
mesh.getVertexIndex(t1, face_opp_b[0]),
|
|
109
|
+
mesh.getVertexIndex(t1, face_opp_b[1]),
|
|
110
|
+
mesh.getVertexIndex(t1, face_opp_b[2]),
|
|
111
|
+
];
|
|
112
|
+
let pos_a_in_face = -1;
|
|
113
|
+
for (let i = 0; i < 3; i++) {
|
|
114
|
+
if (face_v[i] === v_a) { pos_a_in_face = i; break; }
|
|
115
|
+
}
|
|
116
|
+
const v_X = face_v[(pos_a_in_face + 1) % 3];
|
|
117
|
+
const v_Y = face_v[(pos_a_in_face + 2) % 3];
|
|
118
|
+
|
|
119
|
+
// -----------------------------------------------------------------
|
|
120
|
+
// Step 4: find v_missing — the ring vertex in t2 or t3 but not in t1.
|
|
121
|
+
// Then label which of (t2, t3) is "v_X-side" (carries the (v_X, v_missing)
|
|
122
|
+
// ring) vs "v_Y-side" (carries (v_Y, v_missing)). Needed so we know
|
|
123
|
+
// which input tet supplies which external face.
|
|
124
|
+
// -----------------------------------------------------------------
|
|
125
|
+
let v_missing = -1;
|
|
126
|
+
{
|
|
127
|
+
// v_missing is in t2 (it's the t2 vertex that's not v_a, v_b, and
|
|
128
|
+
// not in t1).
|
|
129
|
+
for (let i = 0; i < 4; i++) {
|
|
130
|
+
const v = mesh.getVertexIndex(t2, i);
|
|
131
|
+
if (v !== v_a && v !== v_b && v !== v_X && v !== v_Y) {
|
|
132
|
+
v_missing = v;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (v_missing === -1) {
|
|
138
|
+
throw new Error(`tets ${t1}, ${t2}, ${t3} do not form a valid 3-2 configuration (couldn't identify ring vertex)`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
let v_X_side_tet;
|
|
142
|
+
let v_Y_side_tet;
|
|
143
|
+
if (mesh.tetContainsVertex(t2, v_X)) {
|
|
144
|
+
// t2 has v_X and v_missing → v_X-side
|
|
145
|
+
v_X_side_tet = t2;
|
|
146
|
+
v_Y_side_tet = t3;
|
|
147
|
+
} else {
|
|
148
|
+
v_X_side_tet = t3;
|
|
149
|
+
v_Y_side_tet = t2;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Sanity: the labeling implies specific membership. If not, the input
|
|
153
|
+
// is malformed.
|
|
154
|
+
if (!mesh.tetContainsVertex(v_X_side_tet, v_X) || !mesh.tetContainsVertex(v_X_side_tet, v_missing) ||
|
|
155
|
+
!mesh.tetContainsVertex(v_Y_side_tet, v_Y) || !mesh.tetContainsVertex(v_Y_side_tet, v_missing)) {
|
|
156
|
+
throw new Error(`tets ${t1}, ${t2}, ${t3} do not form a valid 3-2 ring around edge (${v_a}, ${v_b})`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// -----------------------------------------------------------------
|
|
160
|
+
// Step 5: find the slot of v_a and v_b in each of the 3 input tets.
|
|
161
|
+
// Needed to read the external face neighbours (face opp v_a / v_b).
|
|
162
|
+
// -----------------------------------------------------------------
|
|
163
|
+
const slot_a_in_X = find_slot(mesh, v_X_side_tet, v_a);
|
|
164
|
+
const slot_b_in_X = find_slot(mesh, v_X_side_tet, v_b);
|
|
165
|
+
const slot_a_in_Y = find_slot(mesh, v_Y_side_tet, v_a);
|
|
166
|
+
const slot_b_in_Y = find_slot(mesh, v_Y_side_tet, v_b);
|
|
167
|
+
|
|
168
|
+
// -----------------------------------------------------------------
|
|
169
|
+
// Step 6: snapshot the 6 external neighbours.
|
|
170
|
+
// 3 faces opp v_b → become external faces of new_tet_a (v_a-side)
|
|
171
|
+
// 3 faces opp v_a → become external faces of new_tet_b (v_b-side)
|
|
172
|
+
// -----------------------------------------------------------------
|
|
173
|
+
const ext_b_t1 = mesh.getNeighbour(t1, slot_b_in_t1); // → new_tet_a opp v_missing
|
|
174
|
+
const ext_b_X = mesh.getNeighbour(v_X_side_tet, slot_b_in_X); // → new_tet_a opp v_Y
|
|
175
|
+
const ext_b_Y = mesh.getNeighbour(v_Y_side_tet, slot_b_in_Y); // → new_tet_a opp v_X
|
|
176
|
+
const ext_a_t1 = mesh.getNeighbour(t1, slot_a_in_t1); // → new_tet_b opp v_missing
|
|
177
|
+
const ext_a_X = mesh.getNeighbour(v_X_side_tet, slot_a_in_X); // → new_tet_b opp v_Y
|
|
178
|
+
const ext_a_Y = mesh.getNeighbour(v_Y_side_tet, slot_a_in_Y); // → new_tet_b opp v_X
|
|
179
|
+
|
|
180
|
+
// -----------------------------------------------------------------
|
|
181
|
+
// Step 7: reuse t1 → new_tet_a, t2 → new_tet_b; free t3.
|
|
182
|
+
// -----------------------------------------------------------------
|
|
183
|
+
const new_tet_a = t1;
|
|
184
|
+
const new_tet_b = t2;
|
|
185
|
+
mesh.delete(t3);
|
|
186
|
+
|
|
187
|
+
// -----------------------------------------------------------------
|
|
188
|
+
// Step 8: vertex layouts (canonical positive volume).
|
|
189
|
+
// new_tet_a = (v_X, v_missing, v_Y, v_a) → face opp v_a is
|
|
190
|
+
// (v_X, v_missing, v_Y) CCW from outside (= CCW from v_b view)
|
|
191
|
+
// new_tet_b = (v_X, v_Y, v_missing, v_b) → face opp v_b is
|
|
192
|
+
// (v_X, v_Y, v_missing) CCW from outside (= CCW from v_a view)
|
|
193
|
+
// -----------------------------------------------------------------
|
|
194
|
+
mesh.setVertexIndex(new_tet_a, 0, v_X);
|
|
195
|
+
mesh.setVertexIndex(new_tet_a, 1, v_missing);
|
|
196
|
+
mesh.setVertexIndex(new_tet_a, 2, v_Y);
|
|
197
|
+
mesh.setVertexIndex(new_tet_a, 3, v_a);
|
|
198
|
+
|
|
199
|
+
mesh.setVertexIndex(new_tet_b, 0, v_X);
|
|
200
|
+
mesh.setVertexIndex(new_tet_b, 1, v_Y);
|
|
201
|
+
mesh.setVertexIndex(new_tet_b, 2, v_missing);
|
|
202
|
+
mesh.setVertexIndex(new_tet_b, 3, v_b);
|
|
203
|
+
|
|
204
|
+
// -----------------------------------------------------------------
|
|
205
|
+
// Step 9: neighbour links.
|
|
206
|
+
//
|
|
207
|
+
// new_tet_a = (v_X, v_missing, v_Y, v_a):
|
|
208
|
+
// slot 0 (opp v_X) face {v_missing, v_Y, v_a} — ext, from v_Y_side
|
|
209
|
+
// slot 1 (opp v_missing) face {v_X, v_Y, v_a} — ext, from t1
|
|
210
|
+
// slot 2 (opp v_Y) face {v_X, v_missing, v_a} — ext, from v_X_side
|
|
211
|
+
// slot 3 (opp v_a) face {v_X, v_missing, v_Y} — INTERNAL ↔ new_tet_b
|
|
212
|
+
//
|
|
213
|
+
// new_tet_b = (v_X, v_Y, v_missing, v_b):
|
|
214
|
+
// slot 0 (opp v_X) face {v_Y, v_missing, v_b} — ext, from v_Y_side
|
|
215
|
+
// slot 1 (opp v_Y) face {v_X, v_missing, v_b} — ext, from v_X_side
|
|
216
|
+
// slot 2 (opp v_missing) face {v_X, v_Y, v_b} — ext, from t1
|
|
217
|
+
// slot 3 (opp v_b) face {v_X, v_Y, v_missing} — INTERNAL ↔ new_tet_a
|
|
218
|
+
// -----------------------------------------------------------------
|
|
219
|
+
mesh.setNeighbour(new_tet_a, 0, ext_b_Y);
|
|
220
|
+
mesh.setNeighbour(new_tet_a, 1, ext_b_t1);
|
|
221
|
+
mesh.setNeighbour(new_tet_a, 2, ext_b_X);
|
|
222
|
+
mesh.setNeighbour(new_tet_a, 3, (new_tet_b << 2) | 3);
|
|
223
|
+
|
|
224
|
+
mesh.setNeighbour(new_tet_b, 0, ext_a_Y);
|
|
225
|
+
mesh.setNeighbour(new_tet_b, 1, ext_a_X);
|
|
226
|
+
mesh.setNeighbour(new_tet_b, 2, ext_a_t1);
|
|
227
|
+
mesh.setNeighbour(new_tet_b, 3, (new_tet_a << 2) | 3);
|
|
228
|
+
|
|
229
|
+
// -----------------------------------------------------------------
|
|
230
|
+
// Step 10: rewrite the 6 external neighbours' back-pointers.
|
|
231
|
+
// -----------------------------------------------------------------
|
|
232
|
+
rewrite_back_pointer(mesh, ext_b_Y, new_tet_a, 0);
|
|
233
|
+
rewrite_back_pointer(mesh, ext_b_t1, new_tet_a, 1);
|
|
234
|
+
rewrite_back_pointer(mesh, ext_b_X, new_tet_a, 2);
|
|
235
|
+
rewrite_back_pointer(mesh, ext_a_Y, new_tet_b, 0);
|
|
236
|
+
rewrite_back_pointer(mesh, ext_a_X, new_tet_b, 1);
|
|
237
|
+
rewrite_back_pointer(mesh, ext_a_t1, new_tet_b, 2);
|
|
238
|
+
|
|
239
|
+
out[0] = new_tet_a;
|
|
240
|
+
out[1] = new_tet_b;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function find_slot(mesh, tet, vertex_id) {
|
|
244
|
+
for (let i = 0; i < 4; i++) {
|
|
245
|
+
if (mesh.getVertexIndex(tet, i) === vertex_id) return i;
|
|
246
|
+
}
|
|
247
|
+
throw new Error(`vertex ${vertex_id} not found in tet ${tet}`);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function rewrite_back_pointer(mesh, encoded, new_tet, new_slot) {
|
|
251
|
+
if (encoded === INVALID_NEIGHBOUR) return;
|
|
252
|
+
const ext_tet = encoded >>> 2;
|
|
253
|
+
const back_slot = encoded & 3;
|
|
254
|
+
mesh.setNeighbour(ext_tet, back_slot, (new_tet << 2) | new_slot);
|
|
255
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Driver: improve the shape quality of an existing tetrahedral mesh by
|
|
3
|
+
* locally smoothing low-quality tets and applying 2-3 / 3-2 flips that
|
|
4
|
+
* monotonically increase the per-tet minimum quality.
|
|
5
|
+
*
|
|
6
|
+
* Algorithm — one pass:
|
|
7
|
+
* 1. Scan every live tet, compute its radius-ratio quality.
|
|
8
|
+
* 2. For each tet below `target_quality`, try in order:
|
|
9
|
+
* a. Laplacian smoothing on each non-boundary vertex. Accept the
|
|
10
|
+
* move only if the worst-of-the-1-ring quality strictly improves;
|
|
11
|
+
* otherwise revert the position.
|
|
12
|
+
* b. 2-3 flip across each of the tet's 4 internal faces. Tentatively
|
|
13
|
+
* apply the flip, score the 3 new tets; accept only if the
|
|
14
|
+
* minimum-of-three exceeds the original min-of-two. Otherwise
|
|
15
|
+
* apply the inverse 3-2 flip to roll back.
|
|
16
|
+
* 3. Repeat until no operation in a pass improves anything, or
|
|
17
|
+
* `max_passes` is reached.
|
|
18
|
+
*
|
|
19
|
+
* The "do then maybe undo" pattern for flips keeps the driver simple: no
|
|
20
|
+
* separate "preview the flip" code path. The cost is a wasted reverse-flip
|
|
21
|
+
* per rejected candidate. In practice most candidate flips on bad tets are
|
|
22
|
+
* either clearly beneficial (accepted) or clearly bad (rejected after one
|
|
23
|
+
* round-trip), so the overhead is small.
|
|
24
|
+
*
|
|
25
|
+
* Mesh topology and points are mutated in place. Surface vertices (any
|
|
26
|
+
* vertex incident to a face with INVALID_NEIGHBOUR) are NEVER moved by
|
|
27
|
+
* smoothing — moving them would change the surface shape, which is
|
|
28
|
+
* usually a hard constraint for the caller.
|
|
29
|
+
*
|
|
30
|
+
* @param {TetrahedralMesh} mesh — mutated in place
|
|
31
|
+
* @param {Float32Array|number[]} points — flat (x,y,z) positions, mutated
|
|
32
|
+
* @param {{
|
|
33
|
+
* target_quality?: number,
|
|
34
|
+
* max_passes?: number,
|
|
35
|
+
* smoothing_weight?: number,
|
|
36
|
+
* enable_flips?: boolean,
|
|
37
|
+
* enable_smoothing?: boolean,
|
|
38
|
+
* }} [options]
|
|
39
|
+
* @returns {{
|
|
40
|
+
* passes_run: number,
|
|
41
|
+
* smoothings_committed: number,
|
|
42
|
+
* smoothings_reverted: number,
|
|
43
|
+
* flips_23_committed: number,
|
|
44
|
+
* flips_23_rejected: number,
|
|
45
|
+
* flips_32_committed: number,
|
|
46
|
+
* flips_32_rejected: number,
|
|
47
|
+
* initial_min_quality: number,
|
|
48
|
+
* final_min_quality: number,
|
|
49
|
+
* }}
|
|
50
|
+
*/
|
|
51
|
+
export function tetrahedral_mesh_improve_quality(mesh: TetrahedralMesh, points: Float32Array | number[], options?: {
|
|
52
|
+
target_quality?: number;
|
|
53
|
+
max_passes?: number;
|
|
54
|
+
smoothing_weight?: number;
|
|
55
|
+
enable_flips?: boolean;
|
|
56
|
+
enable_smoothing?: boolean;
|
|
57
|
+
}): {
|
|
58
|
+
passes_run: number;
|
|
59
|
+
smoothings_committed: number;
|
|
60
|
+
smoothings_reverted: number;
|
|
61
|
+
flips_23_committed: number;
|
|
62
|
+
flips_23_rejected: number;
|
|
63
|
+
flips_32_committed: number;
|
|
64
|
+
flips_32_rejected: number;
|
|
65
|
+
initial_min_quality: number;
|
|
66
|
+
final_min_quality: number;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=tetrahedral_mesh_improve_quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tetrahedral_mesh_improve_quality.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,gFApBW,YAAY,GAAC,MAAM,EAAE;qBAEV,MAAM;iBACV,MAAM;uBACA,MAAM;mBACV,OAAO;uBACH,OAAO;IAElB;IACZ,UAAc,EAAE,MAAM,CAAC;IACvB,oBAAwB,EAAE,MAAM,CAAC;IACjC,mBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAqB,EAAE,MAAM,CAAC;CAC3B,CAuOH"}
|