#include #include #include #include #include #include #include #include #include #include #include #include typedef CGAL::Simple_cartesian Kernel; typedef Kernel::Point_2 Point_2; typedef Kernel::Point_3 Point_3; typedef CGAL::Surface_mesh SurfaceMesh; typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef boost::graph_traits::face_descriptor face_descriptor; namespace SMP = CGAL::Surface_mesh_parameterization; int main(int argc, char** argv) { std::ifstream in((argc>1) ? argv[1] : "data/three_peaks.off"); if(!in) { std::cerr << "Problem loading the input data" << std::endl; return EXIT_FAILURE; } SurfaceMesh sm; in >> sm; // A halfedge on the border halfedge_descriptor bhd = CGAL::Polygon_mesh_processing::longest_border(sm).first; // The 2D points of the uv parametrisation will be written into this map typedef SurfaceMesh::Property_map UV_pmap; UV_pmap uv_map = sm.add_property_map("v:uv").first; typedef SMP::Circular_border_arc_length_parameterizer_3 Border_parameterizer; typedef SMP::Discrete_authalic_parameterizer_3 Parameterizer; SMP::Error_code err = SMP::parameterize(sm, Parameterizer(), bhd, uv_map); if(err != SMP::OK) { std::cerr << "Error: " << SMP::get_error_message(err) << std::endl; return EXIT_FAILURE; } std::ofstream out("result.off"); SMP::IO::output_uvmap_to_off(sm, bhd, uv_map, out); return EXIT_SUCCESS; }