#pragma once #include #include #include #include using grid_region = std::pair, Eigen::Vector>; void extract_vertex_infos(const s_settings& settings, const baked_blobtree_t& tree, scene_bg_mesh_info_t& scene_bg_mesh_info, Eigen::Ref vertex_infos); void build_tetrahedron_and_adjacency(const scene_bg_mesh_info_t& scene_bg_mesh_info, std::vector>& tetrahedrons, flat_hash_map& vertex_lexigraphical_adjacency, flat_hash_map>& reverse_vertex_adjacency, btree_map>& vertex_to_tet_mapping); void filter_tet_by_subface(const btree_map>& vertex_to_tet_mapping, Eigen::MatrixXd& vertex_infos, flat_hash_map& vertex_indices_mapping, std::vector>& tetrahedrons, flat_hash_map& vertex_lexigraphical_adjacency, const flat_hash_map>& reverse_vertex_adjacency, std::vector& tetrahedron_active_subface_start_index, std::vector& active_subface_indices, flat_hash_map>& zero_vertex_to_incident_tet_mapping); // in turn: num_1_func, num_2_func, num_more_func std::array compute_implicit_arrangements(const Eigen::Ref vertex_infos, const flat_hash_map& vertex_indices_mapping, const std::vector>& tetrahedrons, const std::vector& tetrahedron_active_subface_start_index, const std::vector& active_subface_indices, std::vector& tetrahedron_arrangements); // extract iso-mesh (topology only) void extract_iso_mesh(const std::array& tet_active_subface_counts, const std::vector& tetrahedron_arrangements, const scene_bg_mesh_info_t& scene_bg_mesh_info, const std::vector>& tetrahedrons, const std::vector& tetrahedron_active_subface_start_index, const std::vector& active_subface_indices, const Eigen::Ref vertex_infos, const flat_hash_map& vertex_indices_mapping, std::vector& iso_pts, std::vector& iso_verts, std::vector& iso_faces);