3#include <geogram/mesh/mesh.h>
25 std::vector<std::vector<int>> &
adj,
26 std::vector<std::pair<int, int>> *pairs_of_edges =
nullptr,
27 std::vector<std::pair<int, int>> *pairs_of_quads =
nullptr,
28 Eigen::MatrixXi *quad_index =
nullptr);
48 const Eigen::MatrixXd &IV,
const Eigen::MatrixXi &IF,
49 const Eigen::MatrixXd &PV,
const Eigen::MatrixXi &PF,
50 Eigen::MatrixXd &OV, Eigen::MatrixXi &OF,
51 Eigen::VectorXi *SF =
nullptr,
64 Eigen::MatrixXd &OV, Eigen::MatrixXi &OF);
69 typedef std::function<void(Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector<std::vector<int>> &OF)>
SplitFunction;
84 void polar_split(
const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector<std::vector<int>> &OF,
double t = 0.5);
89 return [t](
const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector<std::vector<int>> &OF) {
polar_split(IV, OV, OF, t); };
104 void catmul_clark_split(
const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector<std::vector<int>> &OF);
111 void no_split(
const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector<std::vector<int>> &OF);
137 [[deprecated]]
inline void refine_polygonal_mesh(
const GEO::Mesh &M_in, GEO::Mesh &M_out,
bool refine_polygons =
false,
double t = 0.5)
139 if (refine_polygons ==
false)
vector< list< int > > adj
void polar_split(const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector< std::vector< int > > &OF, double t=0.5)
Split a polygon using polar refinement.
void catmul_clark_split(const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector< std::vector< int > > &OF)
Split a polygon using polar refinement.
std::function< void(Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector< std::vector< int > > &OF)> SplitFunction
SplitFunction catmul_clark_split_func()
SplitFunction no_split_func()
SplitFunction polar_split_func(double t)
Helper function.
void no_split(const Eigen::MatrixXd &IV, Eigen::MatrixXd &OV, std::vector< std::vector< int > > &OF)
Don't split polygons.
void refine_triangle_mesh(const GEO::Mesh &M_in, GEO::Mesh &M_out)
Refine a triangle mesh.
void refine_quad_mesh(const Eigen::MatrixXd &IV, const Eigen::MatrixXi &IF, Eigen::MatrixXd &OV, Eigen::MatrixXi &OF)
void edge_adjacency_graph(const Eigen::MatrixXi &Q, Eigen::MatrixXi &edge_index, std::vector< std::vector< int > > &adj, std::vector< std::pair< int, int > > *pairs_of_edges=nullptr, std::vector< std::pair< int, int > > *pairs_of_quads=nullptr, Eigen::MatrixXi *quad_index=nullptr)
bool instantiate_pattern(const Eigen::MatrixXd &IV, const Eigen::MatrixXi &IF, const Eigen::MatrixXd &PV, const Eigen::MatrixXi &PF, Eigen::MatrixXd &OV, Eigen::MatrixXi &OF, Eigen::VectorXi *SF=nullptr, EvalParametersFunc evalFunc=nullptr, GetAdjacentLocalEdge getAdjLocalEdge=nullptr)
std::function< void(const Eigen::MatrixXd &, Eigen::MatrixXd &, int)> EvalParametersFunc
void refine_polygonal_mesh(const GEO::Mesh &M_in, GEO::Mesh &M_out, Polygons::SplitFunction split_func)
Refine a polygonal mesh.
std::function< std::tuple< int, int, bool >(int, int)> GetAdjacentLocalEdge