#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) { const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/three_peaks.off"); SurfaceMesh sm; if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; } // 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; }