#pragma once #include #include #include #include "settings.h" // struct parametric_chain_t { // stl_vector_mp vertices{}; // // the other subface index (except the subface of the parametric plane) of the chain // uint32_t other_subface_index{}; // // neighboring patch group (at most 2) indices of the chain // std::array group_patch_indices{}; // }; // struct parametric_plane_t { // stl_vector_mp chains{}; // // vertices at the start of the cycle (i.e. always align at U = 0 by now) // stl_vector_mp vertices_at_cycle_start{}; // // verices at the end of the cycle (e.g. for cycle = 2\pi, these points align at U = 2\pi) // stl_vector_mp vertices_at_cycle_end{}; // }; // struct parametric_plane_t { // // /// plane associated properties // // Eigen::AlignedBox2d uv_bounds{}; // /// chain associated properties // stl_vector_mp> chain_vertices{}; // // // iff start/end vertex, then this is signular or not; else this is polar or not // // stl_vector_mp> vertex_special_flags{}; // // // format: total length is N - 1, and i identifies whether edge [i, i+1) is near parallel or not // // stl_vector_mp> edge_near_parallel_flags{}; // // the other subface index (except the subface of the parametric plane) of the chain // stl_vector_mp chain_other_subface_indices{}; // // neighboring patch group (at most 2) indices of the chain // stl_vector_mp> chain_group_indices{}; // // /// chain group (by neighboring patch) associated properties // // stl_vector_mp> chain_group_indices{}; // }; ISNP_API void build_implicit_network_by_blobtree(const s_settings& settings, const baked_blobtree_t& tree, stl_vector_mp& output_vertices, stl_vector_mp& output_polygon_faces, stl_vector_mp& output_vertex_counts_of_face, icurve_relation_graph_t& output_icurve_relation_graph);