@woosh/meep-engine 2.131.48 → 2.132.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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +4 -3
- package/src/core/codegen/LineBuilder.js +3 -3
- package/src/core/collection/heap/Uint32Heap.d.ts +14 -0
- package/src/core/collection/heap/Uint32Heap.d.ts.map +1 -1
- package/src/core/collection/heap/Uint32Heap.js +18 -0
- package/src/core/collection/map/HashMap.d.ts.map +1 -1
- package/src/core/collection/map/HashMap.js +4 -22
- package/src/core/collection/map/generate_next_linear_congruential_index.d.ts +15 -0
- package/src/core/collection/map/generate_next_linear_congruential_index.d.ts.map +1 -0
- package/src/core/collection/map/generate_next_linear_congruential_index.js +18 -0
- package/src/core/geom/3d/aabb/AABB3.js +1 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +10 -26
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts +19 -0
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts.map +1 -0
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +48 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance.d.ts +15 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance.d.ts.map +1 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance.js +24 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts +17 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +95 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts +16 -0
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts.map +1 -0
- package/src/core/geom/3d/line/{line3_computeSegmentPointDistance_sqr.js → line3_compute_segment_point_distance_sqr.js} +16 -3
- package/src/core/geom/3d/topology/struct/TopoMesh.d.ts +4 -0
- package/src/core/geom/3d/topology/struct/TopoMesh.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/TopoMesh.js +4 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +18 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +56 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +46 -16
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +85 -15
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.d.ts +9 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.js +43 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.d.ts +4 -3
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.js +38 -4
- package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.d.ts +8 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.js +36 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.js +62 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +145 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.d.ts +12 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.js +111 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.js +290 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.d.ts +11 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_index_geometry_to_topology.js → bt_mesh_from_indexed_geometry.js} +6 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.d.ts +8 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.js +31 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.d.ts +7 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.js +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.d.ts +8 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.js +32 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.d.ts +8 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.js +26 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{OrderedEdge.js → edge/OrderedEdge.js} +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_create.js → edge/bt_edge_create.js} +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_get_or_create.js → edge/bt_edge_get_or_create.js} +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_kill.js → edge/bt_edge_kill.js} +6 -3
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.js +180 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_kill_only_edge.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_mesh_calc_edges.js → edge/bt_mesh_calc_edges.js} +10 -7
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.d.ts +8 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.js +26 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +152 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.js +124 -0
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_kill_only_face.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +165 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/{bt_vert_kill.js → vertex/bt_vert_kill.js} +5 -2
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +125 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_has_vertex.d.ts +9 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_has_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_has_vertex.js → bt_edge_has_vertex.js} +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_other_vertex.d.ts → bt_edge_other_vertex.d.ts} +2 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_other_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_other_vertex.js → bt_edge_other_vertex.js} +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts +12 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +96 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.js +75 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +85 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts +12 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +74 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.d.ts +9 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.js +78 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +151 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.js +46 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.d.ts +9 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.js +78 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.js +48 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.d.ts +9 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.js +31 -0
- package/src/core/geom/3d/topology/struct/prototypeBinaryTopology.js +2 -2
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts +19 -0
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/triangle3_incenter.js +60 -0
- package/src/core/math/hash/lowbias32.d.ts +9 -0
- package/src/core/math/hash/lowbias32.d.ts.map +1 -0
- package/src/core/math/hash/lowbias32.js +20 -0
- package/src/core/process/task/util/iteratorTask.d.ts +2 -2
- package/src/core/process/task/util/iteratorTask.d.ts.map +1 -1
- package/src/core/process/task/util/iteratorTask.js +3 -3
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +4 -4
- package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +4 -4
- package/src/engine/navigation/ecs/components/Path.js +3 -3
- package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts +4 -4
- 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 +5 -4
- package/src/engine/navigation/mesh/NavigationMesh.d.ts +32 -0
- package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -0
- package/src/engine/navigation/mesh/NavigationMesh.js +190 -0
- package/src/engine/navigation/mesh/NavigationMeshAgent.d.ts +9 -0
- package/src/engine/navigation/mesh/NavigationMeshAgent.d.ts.map +1 -0
- package/src/engine/navigation/mesh/NavigationMeshAgent.js +11 -0
- package/src/engine/navigation/mesh/README.md +3 -0
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts +14 -0
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -0
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +203 -0
- package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.d.ts +8 -0
- package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.d.ts.map +1 -0
- package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.js +46 -0
- package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.d.ts +12 -0
- package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.d.ts.map +1 -0
- package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.js +204 -0
- package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts +14 -0
- package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -0
- package/src/engine/navigation/mesh/build/navmesh_build_topology.js +183 -0
- package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts +7 -0
- package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts.map +1 -0
- package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.js +64 -0
- package/src/engine/navigation/mesh/funnel_string_pull.d.ts +15 -0
- package/src/engine/navigation/mesh/funnel_string_pull.d.ts.map +1 -0
- package/src/engine/navigation/mesh/funnel_string_pull.js +225 -0
- package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.d.ts +0 -14
- package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/OrderedEdge.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_edge_create.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_edge_get_or_create.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_edge_kill.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.js +0 -8
- package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.d.ts +0 -11
- package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_edge.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_face.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_vert.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.d.ts +0 -18
- package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.js +0 -83
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_calc_edges.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_vert_kill.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/get_or_create_edge_map.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.d.ts +0 -9
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_other_vertex.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.d.ts +0 -10
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.js +0 -44
- package/src/engine/navigation/__module.d.ts +0 -2
- package/src/engine/navigation/__module.d.ts.map +0 -1
- package/src/engine/navigation/__module.js +0 -1
- /package/src/core/geom/3d/topology/struct/binary/io/{OrderedEdge.d.ts → edge/OrderedEdge.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_create.d.ts → edge/bt_edge_create.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_get_or_create.d.ts → edge/bt_edge_get_or_create.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_kill.d.ts → edge/bt_edge_kill.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_edge.d.ts → edge/bt_kill_only_edge.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_edge.js → edge/bt_kill_only_edge.js} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_mesh_calc_edges.d.ts → edge/bt_mesh_calc_edges.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{get_or_create_edge_map.d.ts → edge/get_or_create_edge_map.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{get_or_create_edge_map.js → edge/get_or_create_edge_map.js} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_face.d.ts → face/bt_kill_only_face.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_face.js → face/bt_kill_only_face.js} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_vert.d.ts → vertex/bt_kill_only_vert.d.ts} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_vert.js → vertex/bt_kill_only_vert.js} +0 -0
- /package/src/core/geom/3d/topology/struct/binary/io/{bt_vert_kill.d.ts → vertex/bt_vert_kill.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -82,7 +82,7 @@ export default defineConfig({
|
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
### Reliability
|
|
85
|
-
* **Tests:**
|
|
85
|
+
* **Tests:** 3,159 handwritten tests covering critical algorithms and complex edge cases.
|
|
86
86
|
|
|
87
87
|
* **Coverage:** 90%+ core coverage.
|
|
88
88
|
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"description": "Pure JavaScript game engine. Fully featured and production ready.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Alexander Goldring",
|
|
8
|
-
"version": "2.
|
|
8
|
+
"version": "2.132.1",
|
|
9
9
|
"main": "build/meep.module.js",
|
|
10
10
|
"module": "build/meep.module.js",
|
|
11
11
|
"exports": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"AAgRA;;;;;;;GAOG;AACH,uDAHW,MAAM,iBACN,MAAM,
|
|
1
|
+
{"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"AAgRA;;;;;;;GAOG;AACH,uDAHW,MAAM,iBACN,MAAM,QAgJhB"}
|
|
@@ -117,7 +117,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
117
117
|
const i_rest = mask_rest * 6;
|
|
118
118
|
|
|
119
119
|
// Merge bounds
|
|
120
|
-
min_x = Math.min(scratch_bounds[i_lsb],
|
|
120
|
+
min_x = Math.min(scratch_bounds[i_lsb], scratch_bounds[i_rest]);
|
|
121
121
|
min_y = Math.min(scratch_bounds[i_lsb + 1], scratch_bounds[i_rest + 1]);
|
|
122
122
|
min_z = Math.min(scratch_bounds[i_lsb + 2], scratch_bounds[i_rest + 2]);
|
|
123
123
|
max_x = Math.max(scratch_bounds[i_lsb + 3], scratch_bounds[i_rest + 3]);
|
|
@@ -128,7 +128,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
128
128
|
// --- STORE ---
|
|
129
129
|
const dest_offset = s * 6;
|
|
130
130
|
|
|
131
|
-
scratch_bounds[dest_offset]
|
|
131
|
+
scratch_bounds[dest_offset] = min_x;
|
|
132
132
|
scratch_bounds[dest_offset + 1] = min_y;
|
|
133
133
|
scratch_bounds[dest_offset + 2] = min_z;
|
|
134
134
|
scratch_bounds[dest_offset + 3] = max_x;
|
|
@@ -144,7 +144,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
144
144
|
|
|
145
145
|
scratch_areas[s] = area;
|
|
146
146
|
|
|
147
|
-
if(is_a_leaf){
|
|
147
|
+
if (is_a_leaf) {
|
|
148
148
|
// Initialize costs of individual leaves
|
|
149
149
|
scratch_cost[s] = SAH_COST_TRIANGLE * area;
|
|
150
150
|
}
|
|
@@ -285,6 +285,7 @@ export function ebvh_optimize_treelet(
|
|
|
285
285
|
) {
|
|
286
286
|
assert.isNonNegativeInteger(treelet_size, 'treelet_size');
|
|
287
287
|
assert.lessThanOrEqual(treelet_size, 8, 'limit is 8');
|
|
288
|
+
assert.isNonNegativeInteger(root, 'root');
|
|
288
289
|
|
|
289
290
|
if (root === NULL_NODE) {
|
|
290
291
|
// special case
|
|
@@ -211,15 +211,15 @@ class LineBuilder {
|
|
|
211
211
|
for (let i = 0; i < line_count; i++) {
|
|
212
212
|
const line = lines[i];
|
|
213
213
|
|
|
214
|
-
let
|
|
214
|
+
let prefix = '';
|
|
215
215
|
|
|
216
216
|
const indent_count = line.indentation;
|
|
217
217
|
|
|
218
218
|
for (let j = 0; j < indent_count; j++) {
|
|
219
|
-
|
|
219
|
+
prefix += indent_string;
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
result.push(
|
|
222
|
+
result.push(prefix + line.text);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
return result.join('\n');
|
|
@@ -85,7 +85,20 @@ export class Uint32Heap {
|
|
|
85
85
|
* @returns {boolean}
|
|
86
86
|
*/
|
|
87
87
|
is_empty(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Returns the score of the node with the lowest score
|
|
90
|
+
* @returns {number}
|
|
91
|
+
*/
|
|
92
|
+
peek_score(): number;
|
|
93
|
+
/**
|
|
94
|
+
* Returns the ID of the node with the lowest score
|
|
95
|
+
* @returns {number}
|
|
96
|
+
*/
|
|
88
97
|
peek_min(): number;
|
|
98
|
+
/**
|
|
99
|
+
* Removed and returns the ID of the node with the lowest score
|
|
100
|
+
* @returns {number}
|
|
101
|
+
*/
|
|
89
102
|
pop_min(): number;
|
|
90
103
|
/**
|
|
91
104
|
*
|
|
@@ -133,6 +146,7 @@ export class Uint32Heap {
|
|
|
133
146
|
*/
|
|
134
147
|
get_score(id: number): number;
|
|
135
148
|
/**
|
|
149
|
+
* Insert or update an element, if the element already exists, its score will be updated.
|
|
136
150
|
*
|
|
137
151
|
* @param {number} id
|
|
138
152
|
* @param {number} score
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Uint32Heap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/Uint32Heap.js"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH;IAGI;;;OAGG;IACH,+BAFW,MAAM,EAkChB;IA7BG,2BAA0E;IAE1E;;;;OAIG;IACH,sBAAwD;IAExD;;;;OAIG;IACH,uBAA0D;IAE1D;;;;OAIG;IACH,mBAAkC;IAElC;;;;OAIG;IACH,eAAe;IAGnB;;;OAGG;IACH,wBAsBC;IAED;;;;;OAKG;IACH,gBAOC;IAED;;;;;OAKG;IACH,aAiBC;IAED;;;OAGG;IACH,kBA6BC;IAED;;;;OAIG;IACH,gBAeC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED,
|
|
1
|
+
{"version":3,"file":"Uint32Heap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/Uint32Heap.js"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH;IAGI;;;OAGG;IACH,+BAFW,MAAM,EAkChB;IA7BG,2BAA0E;IAE1E;;;;OAIG;IACH,sBAAwD;IAExD;;;;OAIG;IACH,uBAA0D;IAE1D;;;;OAIG;IACH,mBAAkC;IAElC;;;;OAIG;IACH,eAAe;IAGnB;;;OAGG;IACH,wBAsBC;IAED;;;;;OAKG;IACH,gBAOC;IAED;;;;;OAKG;IACH,aAiBC;IAED;;;OAGG;IACH,kBA6BC;IAED;;;;OAIG;IACH,gBAeC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED;;;OAGG;IACH,cAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,WAFa,MAAM,CAsBlB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,MAAM,CAmBlB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,cAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,OAAO,CAWnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAehB;IAED;;;;OAIG;IACH,iBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,SACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,MAAM,CAYlB;IAGD;;;;;OAKG;IACH,qBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,WAHW,MAAM,SACN,MAAM,QA2BhB;CAGJ"}
|
|
@@ -251,10 +251,26 @@ export class Uint32Heap {
|
|
|
251
251
|
return this.__size === 0;
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Returns the score of the node with the lowest score
|
|
256
|
+
* @returns {number}
|
|
257
|
+
*/
|
|
258
|
+
peek_score() {
|
|
259
|
+
return this.__data_float32[1];
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Returns the ID of the node with the lowest score
|
|
264
|
+
* @returns {number}
|
|
265
|
+
*/
|
|
254
266
|
peek_min() {
|
|
255
267
|
return this.top_id;
|
|
256
268
|
}
|
|
257
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Removed and returns the ID of the node with the lowest score
|
|
272
|
+
* @returns {number}
|
|
273
|
+
*/
|
|
258
274
|
pop_min() {
|
|
259
275
|
assert.greaterThan(this.__size, 0, 'heap is empty');
|
|
260
276
|
|
|
@@ -408,6 +424,7 @@ export class Uint32Heap {
|
|
|
408
424
|
|
|
409
425
|
|
|
410
426
|
/**
|
|
427
|
+
* Insert or update an element, if the element already exists, its score will be updated.
|
|
411
428
|
*
|
|
412
429
|
* @param {number} id
|
|
413
430
|
* @param {number} score
|
|
@@ -431,6 +448,7 @@ export class Uint32Heap {
|
|
|
431
448
|
assert.isNonNegativeInteger(id, 'value');
|
|
432
449
|
assert.lessThanOrEqual(id, UINT32_MAX - 1, 'must be less than or equal to (2^32 - 2)');
|
|
433
450
|
assert.isNumber(score, 'score');
|
|
451
|
+
assert.notNaN(score, 'score');
|
|
434
452
|
|
|
435
453
|
const current_size = this.__size;
|
|
436
454
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HashMap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/HashMap.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HashMap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/HashMap.js"],"names":[],"mappings":"AA+GA;;;;;;;;;GASG;AACH;IAsFI;;;;;;OAMG;IACH,4FALuB,MAAM,EAsC5B;IA7HD;;;;;OAKG;IACH,eAAoB;IAEpB;;;;OAIG;IACH,kBAAyB;IAEzB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,oBAAgB;IAEhB;;;;OAIG;IACH,kCAA8B;IAE9B;;;;OAIG;IACH,iCAA6B;IAE7B;;;;OAIG;IACH,qCAAiC;IAEjC;;;;OAIG;IACH,yBAAqB;IAErB;;;;OAIG;IACH,sBAAoC;IAEpC;;;;OAIG;IACH,kBAAc;IAwBV;;;;;OAKG;IACH,iCAAsC;IACtC;;;;;OAKG;IACH,qCAA8C;IAOlD;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IA2CD;;;;;OAKG;IACH,0BAUC;IAuGD;;;;OAIG;IACH,SAHW,CAAC,SACD,CAAC,QA0EX;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,CAAC,GAAC,SAAS,CA+BvB;IAED;;;;;;;;OAQG;IACH,kBALW,CAAC,kBACQ,CAAC,KAAE,CAAC,0BAEZ,CAAC,CAgBZ;IAED;;;;;OAKG;IACH,cAJW,CAAC,SACD,CAAC,GACA,CAAC,CAaZ;IAwBD;;;;OAIG;IACH,YAHW,CAAC,GACC,OAAO,CA+CnB;IAED;;;;;OAKG;IACH,4CAFa,OAAO,CA+BnB;IAOD;;OAEG;IACH,gBA0DC;IAmBD,2CA0BC;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,OAAO,CAInB;IAED;;OAEG;IACH,cA6BC;IA+BD;;;OAGG;IACH,WAFa,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAM3B;IAED;;;OAGG;IACH,UAFa,SAAS,CAAC,CAAC,CAOvB;IAED;;;OAGG;IACH,QAFa,SAAS,CAAC,CAAC,CAMvB;IA1DD,yDA2BC;;CAgCJ"}
|
|
@@ -7,6 +7,7 @@ import { invokeObjectEquals } from "../../model/object/invokeObjectEquals.js";
|
|
|
7
7
|
import { invokeObjectHash } from "../../model/object/invokeObjectHash.js";
|
|
8
8
|
import { array_copy } from "../array/array_copy.js";
|
|
9
9
|
import { UintArrayForCount } from "../array/typed/uint_array_for_count.js";
|
|
10
|
+
import { generate_next_linear_congruential_index } from "./generate_next_linear_congruential_index.js";
|
|
10
11
|
|
|
11
12
|
/*
|
|
12
13
|
* Heavily inspired by ruby's "new" (circa 2016) hash table implementation
|
|
@@ -14,25 +15,6 @@ import { UintArrayForCount } from "../array/typed/uint_array_for_count.js";
|
|
|
14
15
|
* @see https://blog.heroku.com/ruby-2-4-features-hashes-integers-rounding#hash-changes
|
|
15
16
|
*/
|
|
16
17
|
|
|
17
|
-
/**
|
|
18
|
-
* Formula: Xn+1 = (a * Xn + c ) % m
|
|
19
|
-
*
|
|
20
|
-
* According the Hull-Dobell theorem a generator
|
|
21
|
-
* "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
|
|
22
|
-
* o m and c are relatively prime
|
|
23
|
-
* o a-1 is divisible by all prime factors of m
|
|
24
|
-
* o a-1 is divisible by 4 if m is divisible by 4.
|
|
25
|
-
* For our case a is 5, c is 1, and m is a power of two.
|
|
26
|
-
* @param index
|
|
27
|
-
* @param mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
|
|
28
|
-
* @see https://en.wikipedia.org/wiki/Linear_congruential_generator
|
|
29
|
-
*/
|
|
30
|
-
export function generate_next_linear_congruential_index(index, mask) {
|
|
31
|
-
const index5 = (index << 2) + index; // this is just a faster version of index*5
|
|
32
|
-
|
|
33
|
-
return (index5 + 1) & mask;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
18
|
|
|
37
19
|
/**
|
|
38
20
|
* @template K,V
|
|
@@ -452,7 +434,7 @@ export class HashMap {
|
|
|
452
434
|
const raw_hash = this.#build_key_hash(key);
|
|
453
435
|
let bin_index = this.compute_bin_index(raw_hash);
|
|
454
436
|
|
|
455
|
-
assert.
|
|
437
|
+
assert.isFinite(bin_index, 'hash');
|
|
456
438
|
|
|
457
439
|
let first_deleted_bin_index = UNDEFINED_BIN_INDEX;
|
|
458
440
|
|
|
@@ -900,8 +882,8 @@ export class HashMap {
|
|
|
900
882
|
*
|
|
901
883
|
* @returns {Iterator<[K,V]>}
|
|
902
884
|
*/
|
|
903
|
-
* entries(){
|
|
904
|
-
for (const e of this){
|
|
885
|
+
* entries() {
|
|
886
|
+
for (const e of this) {
|
|
905
887
|
yield e;
|
|
906
888
|
}
|
|
907
889
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formula: Xn+1 = (a * Xn + c ) % m
|
|
3
|
+
*
|
|
4
|
+
* According the Hull-Dobell theorem a generator
|
|
5
|
+
* "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
|
|
6
|
+
* o m and c are relatively prime
|
|
7
|
+
* o a-1 is divisible by all prime factors of m
|
|
8
|
+
* o a-1 is divisible by 4 if m is divisible by 4.
|
|
9
|
+
* For our case a is 5, c is 1, and m is a power of two.
|
|
10
|
+
* @param {number} index
|
|
11
|
+
* @param {number} mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
|
|
12
|
+
* @see https://en.wikipedia.org/wiki/Linear_congruential_generator
|
|
13
|
+
*/
|
|
14
|
+
export function generate_next_linear_congruential_index(index: number, mask: number): number;
|
|
15
|
+
//# sourceMappingURL=generate_next_linear_congruential_index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate_next_linear_congruential_index.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/generate_next_linear_congruential_index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+DAJW,MAAM,QACN,MAAM,UAOhB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formula: Xn+1 = (a * Xn + c ) % m
|
|
3
|
+
*
|
|
4
|
+
* According the Hull-Dobell theorem a generator
|
|
5
|
+
* "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
|
|
6
|
+
* o m and c are relatively prime
|
|
7
|
+
* o a-1 is divisible by all prime factors of m
|
|
8
|
+
* o a-1 is divisible by 4 if m is divisible by 4.
|
|
9
|
+
* For our case a is 5, c is 1, and m is a power of two.
|
|
10
|
+
* @param {number} index
|
|
11
|
+
* @param {number} mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
|
|
12
|
+
* @see https://en.wikipedia.org/wiki/Linear_congruential_generator
|
|
13
|
+
*/
|
|
14
|
+
export function generate_next_linear_congruential_index(index, mask) {
|
|
15
|
+
const index5 = (index << 2) + index; // this is just a faster version of index*5
|
|
16
|
+
|
|
17
|
+
return (index5 + 1) & mask;
|
|
18
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line3_compute_nearest_point_to_point.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_nearest_point_to_point.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,
|
|
1
|
+
{"version":3,"file":"line3_compute_nearest_point_to_point.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_nearest_point_to_point.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,QAkBhB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { lerp } from "../../../math/lerp.js";
|
|
2
|
+
import { line3_compute_segment_nearest_point_to_point_t } from "./line3_compute_segment_nearest_point_to_point_t.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
@@ -22,29 +22,13 @@ export function line3_compute_nearest_point_to_point(
|
|
|
22
22
|
ref_x, ref_y, ref_z
|
|
23
23
|
) {
|
|
24
24
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const t = line3_compute_segment_nearest_point_to_point_t(
|
|
26
|
+
ax, ay, az,
|
|
27
|
+
bx, by, bz,
|
|
28
|
+
ref_x, ref_y, ref_z
|
|
29
|
+
);
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const sp0_z = ref_z - az;
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
const d2 = v3_dot(direction_x, direction_y, direction_z, direction_x, direction_y, direction_z);
|
|
36
|
-
const d3 = v3_dot(direction_x, direction_y, direction_z, sp0_x, sp0_y, sp0_z);
|
|
37
|
-
|
|
38
|
-
const t = d3 / d2;
|
|
39
|
-
|
|
40
|
-
const t_clamped = clamp01(t);
|
|
41
|
-
|
|
42
|
-
// compute point on the line
|
|
43
|
-
const lp_x = direction_x * t_clamped + ax;
|
|
44
|
-
const lp_y = direction_y * t_clamped + ay;
|
|
45
|
-
const lp_z = direction_z * t_clamped + az;
|
|
46
|
-
|
|
47
|
-
result[result_offset + 0] = lp_x;
|
|
48
|
-
result[result_offset + 1] = lp_y;
|
|
49
|
-
result[result_offset + 2] = lp_z;
|
|
31
|
+
result[result_offset + 0] = lerp(ax, bx, t);
|
|
32
|
+
result[result_offset + 1] = lerp(ay, by, t);
|
|
33
|
+
result[result_offset + 2] = lerp(az, bz, t);
|
|
50
34
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes parameter t for the nearest point on the line segment to the given point.
|
|
3
|
+
*
|
|
4
|
+
* t is clamped to [0, 1] and represents position along the line segment from v0 to v1.
|
|
5
|
+
*
|
|
6
|
+
* @param {number} x0
|
|
7
|
+
* @param {number} y0
|
|
8
|
+
* @param {number} z0
|
|
9
|
+
* @param {number} x1
|
|
10
|
+
* @param {number} y1
|
|
11
|
+
* @param {number} z1
|
|
12
|
+
* @param {number} px
|
|
13
|
+
* @param {number} py
|
|
14
|
+
* @param {number} pz
|
|
15
|
+
* @returns {number}
|
|
16
|
+
* @see line3_compute_segment_point_distance_sqr
|
|
17
|
+
*/
|
|
18
|
+
export function line3_compute_segment_nearest_point_to_point_t(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
|
|
19
|
+
//# sourceMappingURL=line3_compute_segment_nearest_point_to_point_t.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line3_compute_segment_nearest_point_to_point_t.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,mEAZW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CA+BlB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { clamp01 } from "../../../math/clamp01.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Computes parameter t for the nearest point on the line segment to the given point.
|
|
5
|
+
*
|
|
6
|
+
* t is clamped to [0, 1] and represents position along the line segment from v0 to v1.
|
|
7
|
+
*
|
|
8
|
+
* @param {number} x0
|
|
9
|
+
* @param {number} y0
|
|
10
|
+
* @param {number} z0
|
|
11
|
+
* @param {number} x1
|
|
12
|
+
* @param {number} y1
|
|
13
|
+
* @param {number} z1
|
|
14
|
+
* @param {number} px
|
|
15
|
+
* @param {number} py
|
|
16
|
+
* @param {number} pz
|
|
17
|
+
* @returns {number}
|
|
18
|
+
* @see line3_compute_segment_point_distance_sqr
|
|
19
|
+
*/
|
|
20
|
+
export function line3_compute_segment_nearest_point_to_point_t(
|
|
21
|
+
x0, y0, z0,
|
|
22
|
+
x1, y1, z1,
|
|
23
|
+
px, py, pz
|
|
24
|
+
) {
|
|
25
|
+
// get line delta
|
|
26
|
+
const line_delta_x = x1 - x0;
|
|
27
|
+
const line_delta_y = y1 - y0;
|
|
28
|
+
const line_delta_z = z1 - z0;
|
|
29
|
+
|
|
30
|
+
// find closest point
|
|
31
|
+
const sp0_x = px - x0;
|
|
32
|
+
const sp0_y = py - y0;
|
|
33
|
+
const sp0_z = pz - z0;
|
|
34
|
+
|
|
35
|
+
//
|
|
36
|
+
const d2 = line_delta_x * line_delta_x + line_delta_y * line_delta_y + line_delta_z * line_delta_z;
|
|
37
|
+
|
|
38
|
+
if (d2 === 0) {
|
|
39
|
+
// line is a point
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const d3 = line_delta_x * sp0_x + line_delta_y * sp0_y + line_delta_z * sp0_z;
|
|
44
|
+
|
|
45
|
+
const t = clamp01(d3 / d2);
|
|
46
|
+
|
|
47
|
+
return t;
|
|
48
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number} x0
|
|
4
|
+
* @param {number} y0
|
|
5
|
+
* @param {number} z0
|
|
6
|
+
* @param {number} x1
|
|
7
|
+
* @param {number} y1
|
|
8
|
+
* @param {number} z1
|
|
9
|
+
* @param {number} px
|
|
10
|
+
* @param {number} py
|
|
11
|
+
* @param {number} pz
|
|
12
|
+
* @returns {number}
|
|
13
|
+
*/
|
|
14
|
+
export function line3_compute_segment_point_distance(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
|
|
15
|
+
//# sourceMappingURL=line3_compute_segment_point_distance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line3_compute_segment_point_distance.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,yDAXW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAUlB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { line3_compute_segment_point_distance_sqr } from "./line3_compute_segment_point_distance_sqr.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {number} x0
|
|
6
|
+
* @param {number} y0
|
|
7
|
+
* @param {number} z0
|
|
8
|
+
* @param {number} x1
|
|
9
|
+
* @param {number} y1
|
|
10
|
+
* @param {number} z1
|
|
11
|
+
* @param {number} px
|
|
12
|
+
* @param {number} py
|
|
13
|
+
* @param {number} pz
|
|
14
|
+
* @returns {number}
|
|
15
|
+
*/
|
|
16
|
+
export function line3_compute_segment_point_distance(
|
|
17
|
+
x0, y0, z0,
|
|
18
|
+
x1, y1, z1,
|
|
19
|
+
px, py, pz
|
|
20
|
+
) {
|
|
21
|
+
const d2 = line3_compute_segment_point_distance_sqr(x0, y0, z0, x1, y1, z1, px, py, pz);
|
|
22
|
+
|
|
23
|
+
return Math.sqrt(d2);
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number} d0 distance at v0
|
|
4
|
+
* @param {number} d1 distance at v1
|
|
5
|
+
* @param {number} x0 X coordinate of v0
|
|
6
|
+
* @param {number} y0 Y coordinate of v0
|
|
7
|
+
* @param {number} z0 Z coordinate of v0
|
|
8
|
+
* @param {number} x1 X coordinate of v1
|
|
9
|
+
* @param {number} y1 Y coordinate of v1
|
|
10
|
+
* @param {number} z1 Z coordinate of v1
|
|
11
|
+
* @param {number} px X coordinate of reference point
|
|
12
|
+
* @param {number} py Y coordinate of reference point
|
|
13
|
+
* @param {number} pz Z coordinate of reference point
|
|
14
|
+
* @returns {number} The exact geodesic distance
|
|
15
|
+
*/
|
|
16
|
+
export function line3_compute_segment_point_distance_eikonal(d0: number, d1: number, x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
|
|
17
|
+
//# sourceMappingURL=line3_compute_segment_point_distance_eikonal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAiFlB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number} d0 distance at v0
|
|
4
|
+
* @param {number} d1 distance at v1
|
|
5
|
+
* @param {number} x0 X coordinate of v0
|
|
6
|
+
* @param {number} y0 Y coordinate of v0
|
|
7
|
+
* @param {number} z0 Z coordinate of v0
|
|
8
|
+
* @param {number} x1 X coordinate of v1
|
|
9
|
+
* @param {number} y1 Y coordinate of v1
|
|
10
|
+
* @param {number} z1 Z coordinate of v1
|
|
11
|
+
* @param {number} px X coordinate of reference point
|
|
12
|
+
* @param {number} py Y coordinate of reference point
|
|
13
|
+
* @param {number} pz Z coordinate of reference point
|
|
14
|
+
* @returns {number} The exact geodesic distance
|
|
15
|
+
*/
|
|
16
|
+
export function line3_compute_segment_point_distance_eikonal(
|
|
17
|
+
d0, d1,
|
|
18
|
+
x0, y0, z0,
|
|
19
|
+
x1, y1, z1,
|
|
20
|
+
px, py, pz
|
|
21
|
+
) {
|
|
22
|
+
// 2. Map to 2D Local Coordinate System
|
|
23
|
+
// A (v0) is origin (0,0), B (v1) is (L, 0)
|
|
24
|
+
const ab_x = x1 - x0;
|
|
25
|
+
const ab_y = y1 - y0;
|
|
26
|
+
const ab_z = z1 - z0;
|
|
27
|
+
const L = Math.hypot(ab_x, ab_y, ab_z);
|
|
28
|
+
|
|
29
|
+
if (L < 1e-9) return Math.min(d0, d1);
|
|
30
|
+
|
|
31
|
+
// Vector AC
|
|
32
|
+
const ac_x = px - x0;
|
|
33
|
+
const ac_y = py - y0;
|
|
34
|
+
const ac_z = pz - z0;
|
|
35
|
+
|
|
36
|
+
// Project AC onto AB to find x coordinate of C
|
|
37
|
+
const dot = ac_x * ab_x + ac_y * ab_y + ac_z * ab_z;
|
|
38
|
+
const x = dot / L;
|
|
39
|
+
|
|
40
|
+
// Find height (y coordinate) of C
|
|
41
|
+
const ac_sq_len = ac_x * ac_x + ac_y * ac_y + ac_z * ac_z;
|
|
42
|
+
const y_sq = ac_sq_len - x * x;
|
|
43
|
+
const y = y_sq > 0 ? Math.sqrt(y_sq) : 0;
|
|
44
|
+
|
|
45
|
+
// 3. Prepare for Eikonal Update
|
|
46
|
+
let u0 = d0;
|
|
47
|
+
let u1 = d1;
|
|
48
|
+
let x_local = x;
|
|
49
|
+
|
|
50
|
+
// We need to track which vertex corresponds to u0 for fallback logic
|
|
51
|
+
let dist_to_u0_vertex_sq = ac_sq_len;
|
|
52
|
+
|
|
53
|
+
// Mirror if d1 < d0 to ensure u0 <= u1
|
|
54
|
+
if (d1 < d0) {
|
|
55
|
+
u0 = d1;
|
|
56
|
+
u1 = d0;
|
|
57
|
+
x_local = L - x;
|
|
58
|
+
// If u0 is now v1, we need distance from v1 to C (BC squared)
|
|
59
|
+
// BC^2 = AC^2 + L^2 - 2 * AC * AB_normalized (Law of Cosines / Vector arithmetic)
|
|
60
|
+
// Or simply recalculate:
|
|
61
|
+
const bc_x = px - x1;
|
|
62
|
+
const bc_y = py - y1;
|
|
63
|
+
const bc_z = pz - z1;
|
|
64
|
+
dist_to_u0_vertex_sq = bc_x * bc_x + bc_y * bc_y + bc_z * bc_z;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const u = u1 - u0;
|
|
68
|
+
|
|
69
|
+
// 4. Causality & Consistency Checks
|
|
70
|
+
|
|
71
|
+
// Lipschitz / Gradient limit check
|
|
72
|
+
if (u >= L) {
|
|
73
|
+
// FIX: Use the distance to the vertex associated with u0 (the smaller value)
|
|
74
|
+
return u0 + Math.sqrt(dist_to_u0_vertex_sq);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// "Virtual Source" Direction check
|
|
78
|
+
const p = u;
|
|
79
|
+
const q = L;
|
|
80
|
+
const det = q * q - p * p;
|
|
81
|
+
const det_sqrt = Math.sqrt(Math.max(0, det));
|
|
82
|
+
const coef = p / det_sqrt;
|
|
83
|
+
const s = x_local - y * coef; // Intersection with x-axis
|
|
84
|
+
|
|
85
|
+
if (s > 0) {
|
|
86
|
+
// 5. Valid Eikonal Update
|
|
87
|
+
return u0 + (p * x_local + y * det_sqrt) / q;
|
|
88
|
+
} else {
|
|
89
|
+
// 6. Fallback (The path comes strictly from one of the vertices)
|
|
90
|
+
const dist_to_v0 = Math.sqrt(ac_sq_len);
|
|
91
|
+
// Recalculate dist_to_v1 explicitly to be safe
|
|
92
|
+
const dist_to_v1 = Math.hypot(px - x1, py - y1, pz - z1);
|
|
93
|
+
return Math.min(d0 + dist_to_v0, d1 + dist_to_v1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes the shortest distance squared between a line segment defined by 2 points and another point
|
|
3
|
+
* @param {number} x0
|
|
4
|
+
* @param {number} y0
|
|
5
|
+
* @param {number} z0
|
|
6
|
+
* @param {number} x1
|
|
7
|
+
* @param {number} y1
|
|
8
|
+
* @param {number} z1
|
|
9
|
+
* @param {number} px
|
|
10
|
+
* @param {number} py
|
|
11
|
+
* @param {number} pz
|
|
12
|
+
* @returns {number}
|
|
13
|
+
* @see line3_compute_segment_nearest_point_to_point_t
|
|
14
|
+
*/
|
|
15
|
+
export function line3_compute_segment_point_distance_sqr(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
|
|
16
|
+
//# sourceMappingURL=line3_compute_segment_point_distance_sqr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line3_compute_segment_point_distance_sqr.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAsClB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { v3_distance_sqr } from "../../vec3/v3_distance_sqr.js";
|
|
2
1
|
import { clamp01 } from "../../../math/clamp01.js";
|
|
2
|
+
import { v3_distance_sqr } from "../../vec3/v3_distance_sqr.js";
|
|
3
|
+
import { line3_compute_segment_nearest_point_to_point_t } from "./line3_compute_segment_nearest_point_to_point_t.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
|
-
* Computes shortest distance between a line segment
|
|
6
|
+
* Computes the shortest distance squared between a line segment defined by 2 points and another point
|
|
6
7
|
* @param {number} x0
|
|
7
8
|
* @param {number} y0
|
|
8
9
|
* @param {number} z0
|
|
@@ -12,8 +13,15 @@ import { clamp01 } from "../../../math/clamp01.js";
|
|
|
12
13
|
* @param {number} px
|
|
13
14
|
* @param {number} py
|
|
14
15
|
* @param {number} pz
|
|
16
|
+
* @returns {number}
|
|
17
|
+
* @see line3_compute_segment_nearest_point_to_point_t
|
|
15
18
|
*/
|
|
16
|
-
export function
|
|
19
|
+
export function line3_compute_segment_point_distance_sqr(
|
|
20
|
+
x0, y0, z0,
|
|
21
|
+
x1, y1, z1,
|
|
22
|
+
px, py, pz
|
|
23
|
+
) {
|
|
24
|
+
|
|
17
25
|
// get line delta
|
|
18
26
|
const line_delta_x = x1 - x0;
|
|
19
27
|
const line_delta_y = y1 - y0;
|
|
@@ -27,6 +35,11 @@ export function line3_computeSegmentPointDistance_sqr(x0, y0, z0, x1, y1, z1, px
|
|
|
27
35
|
//
|
|
28
36
|
const d2 = line_delta_x * line_delta_x + line_delta_y * line_delta_y + line_delta_z * line_delta_z;
|
|
29
37
|
|
|
38
|
+
if (d2 === 0) {
|
|
39
|
+
// line is a point
|
|
40
|
+
return v3_distance_sqr(px, py, pz, x0, y0, z0);
|
|
41
|
+
}
|
|
42
|
+
|
|
30
43
|
const d3 = line_delta_x * sp0_x + line_delta_y * sp0_y + line_delta_z * sp0_z;
|
|
31
44
|
|
|
32
45
|
const t = clamp01(d3 / d2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopoMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/struct/TopoMesh.js"],"names":[],"mappings":"AAcA;IAEI;;;OAGG;IACH,UAFU,UAAU,EAAE,CAER;IAEd;;;;OAIG;IACH,gBAAoB;IAGpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,uBAkBC;IAED;;;OAGG;IACH,YAFa,IAAI,QAAQ,CAAC,CAIzB;IAED;;;OAGG;IACH,YAFa,IAAI,YAAY,CAAC,CAI7B;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACL,SAAS,GAAC,YAAY,CAYjC;IAED;;;;OAIG;IACH,wCAFa,OAAO,CA0GnB;IAED,kBAMC;IAED;;;OAGG;IACH,sBAFa,IAAI,MAAM,EAAE,UAAU,CAAC,CAoBnC;IAED;;;;OAIG;IACH,yBAHW,QAAQ,cACR,IAAI,MAAM,EAAE,UAAU,CAAC,QAYjC;IAED;;;;OAIG;IACH,kBAHW,YAAY,cACZ,IAAI,MAAM,EAAC,UAAU,CAAC,QAqChC;IAED;;;;OAIG;IACH,qBAFW,YAAY,QAsBtB;IAED;;;OAGG;IACH,WAFW,QAAQ,QAclB;IAED;;;OAGG;IACH,aAFW,UAAU,QAKpB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAMpB;IAED;;;OAGG;IACH,gBAFW,UAAU,QAIpB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAKnB;IAGD;;;OAGG;IACH,WAFW,QAAQ,QAKlB;IAED;;;OAGG;IACH,iBAFW,QAAQ,QAMlB;IAED;;;OAGG;IACH,cAFW,QAAQ,QAIlB;IAED;;;;OAIG;IACH,gBAHW,QAAQ,GACN,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFW,YAAY,QAUtB;IAED;;;OAGG;IACH,uBAFW,SAAS,YAAY,CAAC,QAMhC;IAED;;;OAGG;IACH,cAFW,YAAY,QAwBtB;IAED;;;OAGG;IACH,cAFW,YAAY,QAItB;IAED;;;;OAIG;IACH,gBAHW,YAAY,GACV,OAAO,CAKnB;IAED;;;;;;OAMG;IACH,cALW,UAAU,KACV,UAAU,GAER,QAAQ,CAoCpB;IAED,mBAsCC;IAED,kCAQC;IAED;;;OAGG;IACH,+BAFW,YAAY,QA6BtB;IAED;;;OAGG;IACH,8BAFW,WAAW,GAAC,WAAW,GAAC,MAAM,EAAE,QA4B1C;IAED,0BAiBC;IAED;;;;OAIG;IACH,gBAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,UAClC,WAAW,GAAC,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,QAYrD;IAED;;;;;;;OAOG;IACH,sBANW,MAAM,MACN,UAAU,MACV,UAAU,MACV,UAAU,GACR,YAAY,CA0BxB;IAED,mBAEC;IAIL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAP5B;
|
|
1
|
+
{"version":3,"file":"TopoMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/struct/TopoMesh.js"],"names":[],"mappings":"AAcA;;;GAGG;AACH;IAEI;;;OAGG;IACH,UAFU,UAAU,EAAE,CAER;IAEd;;;;OAIG;IACH,gBAAoB;IAGpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,uBAkBC;IAED;;;OAGG;IACH,YAFa,IAAI,QAAQ,CAAC,CAIzB;IAED;;;OAGG;IACH,YAFa,IAAI,YAAY,CAAC,CAI7B;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACL,SAAS,GAAC,YAAY,CAYjC;IAED;;;;OAIG;IACH,wCAFa,OAAO,CA0GnB;IAED,kBAMC;IAED;;;OAGG;IACH,sBAFa,IAAI,MAAM,EAAE,UAAU,CAAC,CAoBnC;IAED;;;;OAIG;IACH,yBAHW,QAAQ,cACR,IAAI,MAAM,EAAE,UAAU,CAAC,QAYjC;IAED;;;;OAIG;IACH,kBAHW,YAAY,cACZ,IAAI,MAAM,EAAC,UAAU,CAAC,QAqChC;IAED;;;;OAIG;IACH,qBAFW,YAAY,QAsBtB;IAED;;;OAGG;IACH,WAFW,QAAQ,QAclB;IAED;;;OAGG;IACH,aAFW,UAAU,QAKpB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAMpB;IAED;;;OAGG;IACH,gBAFW,UAAU,QAIpB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAKnB;IAGD;;;OAGG;IACH,WAFW,QAAQ,QAKlB;IAED;;;OAGG;IACH,iBAFW,QAAQ,QAMlB;IAED;;;OAGG;IACH,cAFW,QAAQ,QAIlB;IAED;;;;OAIG;IACH,gBAHW,QAAQ,GACN,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFW,YAAY,QAUtB;IAED;;;OAGG;IACH,uBAFW,SAAS,YAAY,CAAC,QAMhC;IAED;;;OAGG;IACH,cAFW,YAAY,QAwBtB;IAED;;;OAGG;IACH,cAFW,YAAY,QAItB;IAED;;;;OAIG;IACH,gBAHW,YAAY,GACV,OAAO,CAKnB;IAED;;;;;;OAMG;IACH,cALW,UAAU,KACV,UAAU,GAER,QAAQ,CAoCpB;IAED,mBAsCC;IAED,kCAQC;IAED;;;OAGG;IACH,+BAFW,YAAY,QA6BtB;IAED;;;OAGG;IACH,8BAFW,WAAW,GAAC,WAAW,GAAC,MAAM,EAAE,QA4B1C;IAED,0BAiBC;IAED;;;;OAIG;IACH,gBAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,UAClC,WAAW,GAAC,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,QAYrD;IAED;;;;;;;OAOG;IACH,sBANW,MAAM,MACN,UAAU,MACV,UAAU,MACV,UAAU,GACR,YAAY,CA0BxB;IAED,mBAEC;IAIL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAP5B;2BAtsB0B,iBAAiB;yBAFnB,eAAe;6BACX,mBAAmB;qBAR3B,8BAA8B"}
|