#pragma once #include #include "execution.h" #include "background_mesh_manager.hpp" #include "patch_integrator.hpp" struct ImplicitSurfaceNetworkProcessor { void update_background_mesh(const Eigen::Ref& aabb_min, const Eigen::Ref& aabb_max) noexcept; void clear() noexcept; solve_result_t run(const virtual_node_t& tree_node) noexcept; /* adaptors */ BackgroundMeshManager background_mesh_manager{}; PatchIntegrator patch_integrator{}; /* output fields */ // topology results stl_vector_mp iso_vertices{}; ///< Vertices at the surface network mesh stl_vector_mp iso_faces{}; ///< Polygonal faces at the surface network mesh stl_vector_mp> patches{}; ///< A connected component of faces bounded by non-manifold edges stl_vector_mp patch_function_labels{}; ///< index of the zero-valued function that creates the patch stl_vector_mp iso_edges{}; ///< Edges at the surface network mesh stl_vector_mp> chains{}; ///< Chains of non-manifold edges stl_vector_mp> non_manifold_edges_of_vert{}; ///< Indices of non-manifold vertices stl_vector_mp> shells{}; ///< An array of shells. Each shell is a connected component consist of patches. Even patch index, 2*i, ///< indicates patch i is consistently oriented with the shell. Odd patch index, 2*i+1, indicates patch i has ///< opposite orientation with respect to the shell. stl_vector_mp> arrangement_cells{}; ///< A 3D region partitioned by the surface network; encoded by a vector of shell indices };