@woosh/meep-engine 2.131.48 → 2.132.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/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/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
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { NULL_POINTER } from "../BinaryTopology.js";
|
|
2
|
-
import { bt_edge_get_or_create } from "./bt_edge_get_or_create.js";
|
|
3
|
-
|
|
2
|
+
import { bt_edge_get_or_create } from "./edge/bt_edge_get_or_create.js";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
|
-
* Populates supplied topology with data from supplied indexed geometry
|
|
5
|
+
* Populates supplied topology with data from supplied indexed geometry (triangles)
|
|
7
6
|
* @see https://github.com/blender/blender/blob/9cb061f4f0119e647173e7d354e1457e97632333/source/blender/blenkernel/intern/mesh_calc_edges.cc
|
|
8
7
|
* @see https://github.com/blender/blender/blob/9cb061f4f0119e647173e7d354e1457e97632333/source/blender/io/stl/importer/stl_import_mesh.cc#L63
|
|
9
8
|
* @param {BinaryTopology} out
|
|
10
|
-
* @param {number[]} indices
|
|
11
|
-
* @param {number[]} vertex_positions
|
|
12
|
-
* @param {number[]} [vertex_normals]
|
|
9
|
+
* @param {number[]|Uint32Array|Uint16Array|Uint8Array} indices
|
|
10
|
+
* @param {number[]|Float32Array} vertex_positions
|
|
11
|
+
* @param {number[]|Float32Array} [vertex_normals] Optional vertex normals. Can be skipped.
|
|
13
12
|
*/
|
|
14
|
-
export function
|
|
13
|
+
export function bt_mesh_from_indexed_geometry(
|
|
15
14
|
out,
|
|
16
15
|
indices,
|
|
17
16
|
vertex_positions,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Populates supplied topology with data from supplied unindexed geometry (triangles)
|
|
3
|
+
* @param {BinaryTopology} out
|
|
4
|
+
* @param {number[]} vertex_positions
|
|
5
|
+
* @param {number[]} [vertex_normals] Optional vertex normals. Can be skipped.
|
|
6
|
+
*/
|
|
7
|
+
export function bt_mesh_from_unindexed_geometry(out: BinaryTopology, vertex_positions: number[], vertex_normals?: number[]): void;
|
|
8
|
+
//# sourceMappingURL=bt_mesh_from_unindexed_geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_mesh_from_unindexed_geometry.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,uFAHW,MAAM,EAAE,mBACR,MAAM,EAAE,QAuBlB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { assert } from "../../../../../../assert.js";
|
|
2
|
+
import { bt_mesh_from_indexed_geometry } from "./bt_mesh_from_indexed_geometry.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Populates supplied topology with data from supplied unindexed geometry (triangles)
|
|
6
|
+
* @param {BinaryTopology} out
|
|
7
|
+
* @param {number[]} vertex_positions
|
|
8
|
+
* @param {number[]} [vertex_normals] Optional vertex normals. Can be skipped.
|
|
9
|
+
*/
|
|
10
|
+
export function bt_mesh_from_unindexed_geometry(
|
|
11
|
+
out,
|
|
12
|
+
vertex_positions,
|
|
13
|
+
vertex_normals,
|
|
14
|
+
) {
|
|
15
|
+
|
|
16
|
+
const triangle_count = vertex_positions.length / 9;
|
|
17
|
+
|
|
18
|
+
assert.isNonNegativeInteger(triangle_count, 'triangle_count');
|
|
19
|
+
|
|
20
|
+
const indices = new Uint32Array(triangle_count * 3);
|
|
21
|
+
for (let i = 0; i < indices.length; i++) {
|
|
22
|
+
indices[i] = i;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return bt_mesh_from_indexed_geometry(
|
|
26
|
+
out,
|
|
27
|
+
indices,
|
|
28
|
+
vertex_positions,
|
|
29
|
+
vertex_normals
|
|
30
|
+
);
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_mesh_triangulate.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,gEAcC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { bt_face_triangulate } from "./face/bt_face_triangulate.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Convert all non-triangular faces into triangles.
|
|
5
|
+
*
|
|
6
|
+
* @param {BinaryTopology} mesh
|
|
7
|
+
*/
|
|
8
|
+
export function bt_mesh_triangulate(mesh) {
|
|
9
|
+
|
|
10
|
+
const faces = mesh.faces;
|
|
11
|
+
|
|
12
|
+
const face_count = faces.size;
|
|
13
|
+
|
|
14
|
+
for (let face_id = 0; face_id < face_count; face_id++) {
|
|
15
|
+
if (!faces.is_allocated(face_id)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
bt_face_triangulate(mesh, face_id);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adds a loop to an edge's radial cycle.
|
|
3
|
+
* @param {BinaryTopology} mesh
|
|
4
|
+
* @param {number} loop Loop ID
|
|
5
|
+
* @param {number} edge Edge ID
|
|
6
|
+
*/
|
|
7
|
+
export function bt_radial_loop_add(mesh: BinaryTopology, loop: number, edge: number): void;
|
|
8
|
+
//# sourceMappingURL=bt_radial_loop_add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_radial_loop_add.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,+DAHW,MAAM,QACN,MAAM,QAyBhB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { NULL_POINTER } from "../BinaryTopology.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Adds a loop to an edge's radial cycle.
|
|
5
|
+
* @param {BinaryTopology} mesh
|
|
6
|
+
* @param {number} loop Loop ID
|
|
7
|
+
* @param {number} edge Edge ID
|
|
8
|
+
*/
|
|
9
|
+
export function bt_radial_loop_add(mesh, loop, edge) {
|
|
10
|
+
// Associate the loop with the edge
|
|
11
|
+
mesh.loop_write_edge(loop, edge);
|
|
12
|
+
|
|
13
|
+
const base_loop = mesh.edge_read_loop(edge);
|
|
14
|
+
|
|
15
|
+
if (base_loop === NULL_POINTER) {
|
|
16
|
+
// First loop on this edge
|
|
17
|
+
mesh.edge_write_loop(edge, loop);
|
|
18
|
+
mesh.loop_write_radial_next(loop, loop);
|
|
19
|
+
mesh.loop_write_radial_prev(loop, loop);
|
|
20
|
+
} else {
|
|
21
|
+
// Splice into existing cycle just before the base_loop
|
|
22
|
+
const base_prev = mesh.loop_read_radial_prev(base_loop);
|
|
23
|
+
|
|
24
|
+
// Link base_prev -> loop
|
|
25
|
+
mesh.loop_write_radial_next(base_prev, loop);
|
|
26
|
+
mesh.loop_write_radial_prev(loop, base_prev);
|
|
27
|
+
|
|
28
|
+
// Link loop -> base_loop
|
|
29
|
+
mesh.loop_write_radial_next(loop, base_loop);
|
|
30
|
+
mesh.loop_write_radial_prev(base_loop, loop);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes a loop from an edge's radial cycle.
|
|
3
|
+
* @param {BinaryTopology} mesh
|
|
4
|
+
* @param {number} loop Loop ID
|
|
5
|
+
* @param {number} edge Edge ID
|
|
6
|
+
*/
|
|
7
|
+
export function bt_radial_loop_remove(mesh: BinaryTopology, loop: number, edge: number): void;
|
|
8
|
+
//# sourceMappingURL=bt_radial_loop_remove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_radial_loop_remove.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,kEAHW,MAAM,QACN,MAAM,QAmBhB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NULL_POINTER } from "../BinaryTopology.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Removes a loop from an edge's radial cycle.
|
|
5
|
+
* @param {BinaryTopology} mesh
|
|
6
|
+
* @param {number} loop Loop ID
|
|
7
|
+
* @param {number} edge Edge ID
|
|
8
|
+
*/
|
|
9
|
+
export function bt_radial_loop_remove(mesh, loop, edge) {
|
|
10
|
+
const r_prev = mesh.loop_read_radial_prev(loop);
|
|
11
|
+
const r_next = mesh.loop_read_radial_next(loop);
|
|
12
|
+
|
|
13
|
+
// Bypass the loop in the doubly linked list
|
|
14
|
+
mesh.loop_write_radial_next(r_prev, r_next);
|
|
15
|
+
mesh.loop_write_radial_prev(r_next, r_prev);
|
|
16
|
+
|
|
17
|
+
// If the edge's base pointer is looking at the loop being removed
|
|
18
|
+
if (mesh.edge_read_loop(edge) === loop) {
|
|
19
|
+
// If it was the only loop, set to NULL. Otherwise, advance to the next loop.
|
|
20
|
+
mesh.edge_write_loop(edge, r_next === loop ? NULL_POINTER : r_next);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Reset the removed loop's radial pointers to itself for safety
|
|
24
|
+
mesh.loop_write_radial_next(loop, loop);
|
|
25
|
+
mesh.loop_write_radial_prev(loop, loop);
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderedEdge.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js"],"names":[],"mappings":"AAEA;IACI;;;;OAIG;IACH,gBAHW,MAAM,MACN,MAAM,EAUhB;IANO,cAAe;IACf,eAAgB;IAOxB;;;;OAIG;IACH,QAHW,MAAM,MACN,MAAM,QAUhB;IAED;;;OAGG;IACH,YAFW,WAAW,QAKrB;IAED,qBAEC;IAED;;;OAGG;IACH,QAFY,MAAM,CAKjB;IAED;;;;OAIG;IACH,cAHW,WAAW,GACT,OAAO,CAMnB;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_edge_create.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js"],"names":[],"mappings":"AA8DA;;;;;;GAMG;AACH,yDAJW,MAAM,MACN,MAAM,GACL,MAAM,CAsCjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_edge_get_or_create.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,gEAJW,MAAM,MACN,MAAM,GACJ,MAAM,CAmClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_edge_kill.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,sDAFW,MAAM,QAoBhB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { assert } from "../../../../../../../assert.js";
|
|
2
|
+
import { NULL_POINTER } from "../../BinaryTopology.js";
|
|
3
|
+
import { bt_disk_edge_remove } from "../bt_disk_edge_remove.js";
|
|
4
|
+
import { bt_face_kill } from "../face/bt_face_kill.js";
|
|
4
5
|
import { bt_kill_only_edge } from "./bt_kill_only_edge.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -8,6 +9,8 @@ import { bt_kill_only_edge } from "./bt_kill_only_edge.js";
|
|
|
8
9
|
* @param {number} e
|
|
9
10
|
*/
|
|
10
11
|
export function bt_edge_kill(mesh, e) {
|
|
12
|
+
assert.isNonNegativeInteger(e, 'e');
|
|
13
|
+
|
|
11
14
|
let l = NULL_POINTER;
|
|
12
15
|
|
|
13
16
|
while ((l = mesh.edge_read_loop(e)) !== NULL_POINTER) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splits an edge at parameter t and triangulates adjacent faces.
|
|
3
|
+
*
|
|
4
|
+
* NOTE: Assumes that the input mesh is triangulated.
|
|
5
|
+
* NOTE: Does not check for created self-intersections or degenerate edges/faces. Make sure that if you pass t <= 0 or t >= 1 - you understand the implications.
|
|
6
|
+
*
|
|
7
|
+
* @param {BinaryTopology} mesh
|
|
8
|
+
* @param {number} edge_id The edge to split
|
|
9
|
+
* @param {number} t Interpolation parameter (0.0 to 1.0)
|
|
10
|
+
* @returns {number} The newly created vertex ID
|
|
11
|
+
*/
|
|
12
|
+
export function bt_edge_split(mesh: BinaryTopology, edge_id: number, t: number): number;
|
|
13
|
+
//# sourceMappingURL=bt_edge_split.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_edge_split.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;GAUG;AACH,6DAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAsJlB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { assert } from "../../../../../../../assert.js";
|
|
2
|
+
import { NULL_POINTER } from "../../BinaryTopology.js";
|
|
3
|
+
import { bt_disk_edge_add } from "../bt_disk_edge_add.js";
|
|
4
|
+
import { bt_disk_edge_remove } from "../bt_disk_edge_remove.js";
|
|
5
|
+
import { bt_radial_loop_add } from "../bt_radial_loop_add.js";
|
|
6
|
+
import { bt_radial_loop_remove } from "../bt_radial_loop_remove.js";
|
|
7
|
+
import { bt_edge_create } from "./bt_edge_create.js";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const f_normal = new Float32Array(3);
|
|
11
|
+
|
|
12
|
+
const c1 = new Float32Array(3);
|
|
13
|
+
const c2 = new Float32Array(3);
|
|
14
|
+
|
|
15
|
+
const n1 = new Float32Array(3);
|
|
16
|
+
const n2 = new Float32Array(3);
|
|
17
|
+
|
|
18
|
+
const c_new = new Float32Array(3);
|
|
19
|
+
const n_new = new Float32Array(3);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Splits an edge at parameter t and triangulates adjacent faces.
|
|
23
|
+
*
|
|
24
|
+
* NOTE: Assumes that the input mesh is triangulated.
|
|
25
|
+
* NOTE: Does not check for created self-intersections or degenerate edges/faces. Make sure that if you pass t <= 0 or t >= 1 - you understand the implications.
|
|
26
|
+
*
|
|
27
|
+
* @param {BinaryTopology} mesh
|
|
28
|
+
* @param {number} edge_id The edge to split
|
|
29
|
+
* @param {number} t Interpolation parameter (0.0 to 1.0)
|
|
30
|
+
* @returns {number} The newly created vertex ID
|
|
31
|
+
*/
|
|
32
|
+
export function bt_edge_split(
|
|
33
|
+
mesh,
|
|
34
|
+
edge_id,
|
|
35
|
+
t
|
|
36
|
+
) {
|
|
37
|
+
assert.isNonNegativeInteger(edge_id, 'edge_id');
|
|
38
|
+
assert.isNumber(t, 't');
|
|
39
|
+
assert.greaterThanOrEqual(t, 0, 't');
|
|
40
|
+
assert.lessThanOrEqual(t, 1, 't');
|
|
41
|
+
|
|
42
|
+
assert.defined(mesh, 'mesh');
|
|
43
|
+
assert.notNull(mesh, 'mesh');
|
|
44
|
+
|
|
45
|
+
const v1 = mesh.edge_read_vertex1(edge_id);
|
|
46
|
+
const v2 = mesh.edge_read_vertex2(edge_id);
|
|
47
|
+
|
|
48
|
+
// ----------------------------------------------------------------
|
|
49
|
+
// 1. Interpolate and Create New Vertex
|
|
50
|
+
// ----------------------------------------------------------------
|
|
51
|
+
|
|
52
|
+
mesh.vertex_read_coordinate(c1, 0, v1);
|
|
53
|
+
mesh.vertex_read_coordinate(c2, 0, v2);
|
|
54
|
+
|
|
55
|
+
c_new[0] = c1[0] + (c2[0] - c1[0]) * t;
|
|
56
|
+
c_new[1] = c1[1] + (c2[1] - c1[1]) * t;
|
|
57
|
+
c_new[2] = c1[2] + (c2[2] - c1[2]) * t;
|
|
58
|
+
|
|
59
|
+
mesh.vertex_read_normal(n1, 0, v1);
|
|
60
|
+
mesh.vertex_read_normal(n2, 0, v2);
|
|
61
|
+
|
|
62
|
+
n_new[0] = n1[0] + (n2[0] - n1[0]) * t;
|
|
63
|
+
n_new[1] = n1[1] + (n2[1] - n1[1]) * t;
|
|
64
|
+
n_new[2] = n1[2] + (n2[2] - n1[2]) * t;
|
|
65
|
+
|
|
66
|
+
const len = Math.sqrt(n_new[0] ** 2 + n_new[1] ** 2 + n_new[2] ** 2);
|
|
67
|
+
if (len > 0) {
|
|
68
|
+
n_new[0] /= len;
|
|
69
|
+
n_new[1] /= len;
|
|
70
|
+
n_new[2] /= len;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const v_new = mesh.vertices.allocate();
|
|
74
|
+
mesh.vertex_write_coordinate(v_new, c_new, 0);
|
|
75
|
+
mesh.vertex_write_normal(v_new, n_new, 0);
|
|
76
|
+
mesh.vertex_write_edge(v_new, NULL_POINTER); // Initialize disk cycle
|
|
77
|
+
|
|
78
|
+
// ----------------------------------------------------------------
|
|
79
|
+
// 2. Gather Connected Faces (Radial Cycle)
|
|
80
|
+
// ----------------------------------------------------------------
|
|
81
|
+
const loops_to_split = [];
|
|
82
|
+
let curr_loop = mesh.edge_read_loop(edge_id);
|
|
83
|
+
if (curr_loop !== NULL_POINTER) {
|
|
84
|
+
let start_loop = curr_loop;
|
|
85
|
+
do {
|
|
86
|
+
loops_to_split.push(curr_loop);
|
|
87
|
+
curr_loop = mesh.loop_read_radial_next(curr_loop);
|
|
88
|
+
} while (curr_loop !== start_loop && curr_loop !== NULL_POINTER);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ----------------------------------------------------------------
|
|
92
|
+
// 3. Split the Edge Topologically
|
|
93
|
+
// ----------------------------------------------------------------
|
|
94
|
+
// Shrink original edge to (v1, v_new)
|
|
95
|
+
bt_disk_edge_remove(mesh, edge_id, v2);
|
|
96
|
+
mesh.edge_write_vertex2(edge_id, v_new);
|
|
97
|
+
bt_disk_edge_add(mesh, edge_id, v_new);
|
|
98
|
+
|
|
99
|
+
// Create new edge for (v_new, v2)
|
|
100
|
+
// Note: bt_edge_create handles the disk cycle attachments for us!
|
|
101
|
+
const e_new = bt_edge_create(mesh, v_new, v2);
|
|
102
|
+
|
|
103
|
+
// ----------------------------------------------------------------
|
|
104
|
+
// 4. Split Adjacent Faces
|
|
105
|
+
// ----------------------------------------------------------------
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
for (let i = 0; i < loops_to_split.length; i++) {
|
|
109
|
+
const l_start = loops_to_split[i];
|
|
110
|
+
const l_end = mesh.loop_read_next(l_start);
|
|
111
|
+
const l_opp = mesh.loop_read_next(l_end);
|
|
112
|
+
|
|
113
|
+
const v_start = mesh.loop_read_vertex(l_start);
|
|
114
|
+
const v_end = mesh.loop_read_vertex(l_end);
|
|
115
|
+
const v_opp = mesh.loop_read_vertex(l_opp);
|
|
116
|
+
|
|
117
|
+
const f = mesh.loop_read_face(l_start);
|
|
118
|
+
mesh.face_read_normal(f_normal, 0, f);
|
|
119
|
+
|
|
120
|
+
const e_end_opp = mesh.loop_read_edge(l_end);
|
|
121
|
+
|
|
122
|
+
// Determine which physical edge corresponds to this loop's direction
|
|
123
|
+
const is_start_v1 = (v_start === v1);
|
|
124
|
+
const edge_start_new = is_start_v1 ? edge_id : e_new;
|
|
125
|
+
const edge_new_end = is_start_v1 ? e_new : edge_id;
|
|
126
|
+
|
|
127
|
+
// Create the cross edge dividing the triangle
|
|
128
|
+
const e_cross = bt_edge_create(mesh, v_new, v_opp);
|
|
129
|
+
|
|
130
|
+
// --- FACE 1: Re-use existing face (v_start, v_new, v_opp) ---
|
|
131
|
+
|
|
132
|
+
// Update l_start (ensure it points to the correct half of the split edge)
|
|
133
|
+
if (mesh.loop_read_edge(l_start) !== edge_start_new) {
|
|
134
|
+
bt_radial_loop_remove(mesh, l_start, mesh.loop_read_edge(l_start));
|
|
135
|
+
bt_radial_loop_add(mesh, l_start, edge_start_new);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Update l_end (now acts as the loop for v_new -> v_opp)
|
|
139
|
+
bt_radial_loop_remove(mesh, l_end, e_end_opp);
|
|
140
|
+
mesh.loop_write_vertex(l_end, v_new);
|
|
141
|
+
bt_radial_loop_add(mesh, l_end, e_cross);
|
|
142
|
+
|
|
143
|
+
// l_opp remains unchanged (v_opp -> v_start)
|
|
144
|
+
|
|
145
|
+
// --- FACE 2: Create new face (v_new, v_end, v_opp) ---
|
|
146
|
+
const f2 = mesh.faces.allocate();
|
|
147
|
+
mesh.face_write_normal(f2, f_normal, 0);
|
|
148
|
+
|
|
149
|
+
const nl1 = mesh.loop_create();
|
|
150
|
+
const nl2 = mesh.loop_create();
|
|
151
|
+
const nl3 = mesh.loop_create();
|
|
152
|
+
|
|
153
|
+
// nl1: v_new -> v_end
|
|
154
|
+
mesh.loop_write_vertex(nl1, v_new);
|
|
155
|
+
mesh.loop_write_face(nl1, f2);
|
|
156
|
+
bt_radial_loop_add(mesh, nl1, edge_new_end);
|
|
157
|
+
|
|
158
|
+
// nl2: v_end -> v_opp
|
|
159
|
+
mesh.loop_write_vertex(nl2, v_end);
|
|
160
|
+
mesh.loop_write_face(nl2, f2);
|
|
161
|
+
bt_radial_loop_add(mesh, nl2, e_end_opp);
|
|
162
|
+
|
|
163
|
+
// nl3: v_opp -> v_new
|
|
164
|
+
mesh.loop_write_vertex(nl3, v_opp);
|
|
165
|
+
mesh.loop_write_face(nl3, f2);
|
|
166
|
+
bt_radial_loop_add(mesh, nl3, e_cross);
|
|
167
|
+
|
|
168
|
+
// Wire up loops for f2
|
|
169
|
+
mesh.loop_write_next(nl1, nl2);
|
|
170
|
+
mesh.loop_write_prev(nl1, nl3);
|
|
171
|
+
mesh.loop_write_next(nl2, nl3);
|
|
172
|
+
mesh.loop_write_prev(nl2, nl1);
|
|
173
|
+
mesh.loop_write_next(nl3, nl1);
|
|
174
|
+
mesh.loop_write_prev(nl3, nl2);
|
|
175
|
+
|
|
176
|
+
mesh.face_write_loop(f2, nl1);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return v_new;
|
|
180
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_kill_only_edge.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_kill_only_edge.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,2DAFW,MAAM,QAIhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_mesh_calc_edges.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js"],"names":[],"mappings":""}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
+
import { HashSet } from "../../../../../../../collection/set/HashSet.js";
|
|
1
2
|
import { OrderedEdge } from "./OrderedEdge.js";
|
|
2
|
-
import { HashMap } from "../../../../../../collection/map/HashMap.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @see https://github.com/blender/blender/blob/9cb061f4f0119e647173e7d354e1457e97632333/source/blender/blenkernel/intern/mesh_calc_edges.cc#L209
|
|
6
6
|
* @param {BinaryTopology} mesh
|
|
7
|
+
* @returns {HashSet<OrderedEdge>}
|
|
7
8
|
*/
|
|
8
9
|
function bt_mesh_calc_edges(mesh) {
|
|
9
10
|
/**
|
|
10
11
|
*
|
|
11
|
-
* @type {
|
|
12
|
+
* @type {HashSet<OrderedEdge>}
|
|
12
13
|
*/
|
|
13
|
-
const
|
|
14
|
+
const collection = new HashSet();
|
|
14
15
|
|
|
15
|
-
add_polygon_edges_to_map(mesh,
|
|
16
|
+
add_polygon_edges_to_map(mesh, collection);
|
|
17
|
+
|
|
18
|
+
return collection;
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
* @see https://github.com/blender/blender/blob/9cb061f4f0119e647173e7d354e1457e97632333/source/blender/blenkernel/intern/mesh_calc_edges.cc#L96
|
|
20
23
|
* @param {BinaryTopology} mesh
|
|
21
|
-
* @param {
|
|
24
|
+
* @param {HashSet<OrderedEdge>} edge_set
|
|
22
25
|
*/
|
|
23
|
-
function add_polygon_edges_to_map(mesh,
|
|
26
|
+
function add_polygon_edges_to_map(mesh, edge_set) {
|
|
24
27
|
|
|
25
28
|
const faces = mesh.faces;
|
|
26
29
|
const face_count = faces.size;
|
|
@@ -42,7 +45,7 @@ function add_polygon_edges_to_map(mesh, edge_map) {
|
|
|
42
45
|
|
|
43
46
|
const edge = new OrderedEdge(prev_v, next_v);
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
edge_set.ensure(edge);
|
|
46
49
|
|
|
47
50
|
prev_loop = loop;
|
|
48
51
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_or_create_edge_map.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely removes a face from the topology.
|
|
3
|
+
* Iteratively untangles and frees all its loops, then releases the face memory.
|
|
4
|
+
* @param {BinaryTopology} mesh
|
|
5
|
+
* @param {number} f Face ID
|
|
6
|
+
*/
|
|
7
|
+
export function bt_face_kill(mesh: BinaryTopology, f: number): void;
|
|
8
|
+
//# sourceMappingURL=bt_face_kill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_face_kill.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,sDAFW,MAAM,QAiBhB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { assert } from "../../../../../../../assert.js";
|
|
2
|
+
import { NULL_POINTER } from "../../BinaryTopology.js";
|
|
3
|
+
import { bt_loop_kill } from "../bt_loop_kill.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Safely removes a face from the topology.
|
|
7
|
+
* Iteratively untangles and frees all its loops, then releases the face memory.
|
|
8
|
+
* @param {BinaryTopology} mesh
|
|
9
|
+
* @param {number} f Face ID
|
|
10
|
+
*/
|
|
11
|
+
export function bt_face_kill(mesh, f) {
|
|
12
|
+
assert.isNonNegativeInteger(f, 'f');
|
|
13
|
+
|
|
14
|
+
let l = NULL_POINTER;
|
|
15
|
+
|
|
16
|
+
// TODO add a cycle limit to avoid infinite loops on bad topologies
|
|
17
|
+
|
|
18
|
+
// bt_loop_kill automatically updates the face's base loop pointer to the
|
|
19
|
+
// next loop, or to NULL_POINTER if it's the last loop in the cycle.
|
|
20
|
+
while ((l = mesh.face_read_loop(f)) !== NULL_POINTER) {
|
|
21
|
+
bt_loop_kill(mesh, l);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// With all loops removed, the face is completely isolated and can be freed
|
|
25
|
+
mesh.faces.release(f);
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pokes a face by adding a vertex at the specified coordinates and fan-tessellating the face.
|
|
3
|
+
* Reuses bt_edge_create to handle the complex vertex-disk linking automatically.
|
|
4
|
+
*
|
|
5
|
+
* Coordinates of the new vertex must be co-planar with the face.
|
|
6
|
+
*
|
|
7
|
+
* @param {BinaryTopology} mesh
|
|
8
|
+
* @param {number} face_id
|
|
9
|
+
* @param {number} x
|
|
10
|
+
* @param {number} y
|
|
11
|
+
* @param {number} z
|
|
12
|
+
* @returns {number} vertex ID of the new center vertex, NULL_POINTER if face is degenerate or does not exist.
|
|
13
|
+
*/
|
|
14
|
+
export function bt_mesh_face_poke(mesh: BinaryTopology, face_id: number, x: number, y: number, z: number): number;
|
|
15
|
+
//# sourceMappingURL=bt_face_poke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_face_poke.d.ts","sourceRoot":"","sources":["../../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,iEANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAuGlB"}
|