|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <blobtree.hpp>
|
|
|
|
|
|
|
|
#include "settings.h"
|
|
|
|
|
|
|
|
struct parameteric_plane_t {
|
|
|
|
/// chain associated properties
|
|
|
|
stl_vector_mp<stl_vector_mp<Eigen::Vector2d>> chain_vertices{};
|
|
|
|
// iff start/end vertex, then this is signular or not; else this is polar or not
|
|
|
|
stl_vector_mp<dynamic_bitset_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<dynamic_bitset_mp<>> edge_near_parallel_flags{};
|
|
|
|
/// chain group (by neighboring patch) associated properties
|
|
|
|
stl_vector_mp<stl_vector_mp<uint16_t>> chain_group_indices{};
|
|
|
|
};
|
|
|
|
|
|
|
|
ISNP_API void build_implicit_network_by_blobtree(const s_settings& settings,
|
|
|
|
const baked_blobtree_t& tree,
|
|
|
|
stl_vector_mp<Eigen::Vector3d>& output_vertices,
|
|
|
|
stl_vector_mp<uint32_t>& output_polygon_faces,
|
|
|
|
stl_vector_mp<uint32_t>& output_vertex_counts_of_face,
|
|
|
|
flat_hash_map_mp<uint32_t, parameteric_plane_t>& output_parameteric_planes);
|