// Authalic_parameterization.C #include #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // Private types // ---------------------------------------------------------------------------- typedef CGAL::Cartesian Kernel; typedef CGAL::Polyhedron_3 Polyhedron; // ---------------------------------------------------------------------------- // main() // ---------------------------------------------------------------------------- int main(int argc, char * argv[]) { std::cerr << "PARAMETERIZATION" << std::endl; std::cerr << " Discrete Authalic Parameterization" << std::endl; std::cerr << " circle border" << std::endl; std::cerr << " OpenNL solver" << std::endl; //*************************************** // decode parameters //*************************************** if (argc-1 != 1) { std::cerr << "Usage: " << argv[0] << " input_file.off" << std::endl; return(EXIT_FAILURE); } // File name is: const char* input_filename = argv[1]; //*************************************** // Read the mesh //*************************************** // Read the mesh std::ifstream stream(input_filename); if(!stream) { std::cerr << "FATAL ERROR: cannot open file " << input_filename << std::endl; return EXIT_FAILURE; } Polyhedron mesh; stream >> mesh; //*************************************** // Create Polyhedron adaptor // Note: no cutting => we support only // meshes that are topological disks //*************************************** typedef CGAL::Parameterization_polyhedron_adaptor_3 Parameterization_polyhedron_adaptor; Parameterization_polyhedron_adaptor mesh_adaptor(mesh); //*************************************** // Discrete Authalic Parameterization // (defaults are circular border and OpenNL solver) //*************************************** typedef CGAL::Discrete_authalic_parameterizer_3 Parameterizer; Parameterizer::Error_code err = CGAL::parameterize(mesh_adaptor, Parameterizer()); if (err != Parameterizer::OK) std::cerr << "FATAL ERROR: " << Parameterizer::get_error_message(err) << std::endl; //*************************************** // Output //*************************************** if (err == Parameterizer::OK) { // Raw output: dump (u,v) pairs Polyhedron::Vertex_const_iterator pVertex; for (pVertex = mesh.vertices_begin(); pVertex != mesh.vertices_end(); pVertex++) { // (u,v) pair is stored in any halfedge double u = mesh_adaptor.info(pVertex->halfedge())->uv().x(); double v = mesh_adaptor.info(pVertex->halfedge())->uv().y(); std::cout << "(u,v) = (" << u << "," << v << ")" << std::endl; } } return (err == Parameterizer::OK) ? EXIT_SUCCESS : EXIT_FAILURE; }