#include #include #include #include #include #if 1 #include #include #else #include #include #endif #include #include #include #include typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; typedef Kernel::Vector_3 Vector; typedef Kernel::Point_3 Point; typedef CGAL::Polyhedron_3 Source; #if 1 typedef OpenMesh::PolyMesh_ArrayKernelT Target; #else typedef OpenMesh::TriMesh_ArrayKernelT Target; #endif typedef boost::graph_traits::vertex_descriptor sm_vertex_descriptor; typedef boost::graph_traits::vertex_descriptor tm_vertex_descriptor; typedef boost::graph_traits::halfedge_descriptor sm_halfedge_descriptor; typedef boost::graph_traits::halfedge_descriptor tm_halfedge_descriptor; namespace OpenMesh { inline std::size_t hash_value(const VertexHandle& i) { return i.idx(); } inline std::size_t hash_value(const HalfedgeHandle& i) { return i.idx(); } inline std::size_t hash_value(const FaceHandle& i) { return i.idx(); } } int main(int argc, char* argv[]) { Source S; Target T; std::ifstream in((argc>1)?argv[1]:"cube.off"); in >> S; { boost::unordered_map v2v; boost::unordered_map h2h; convert_surface_mesh(S,T,v2v,h2h); OpenMesh::IO::write_mesh(T, "om.off"); } S.clear(); { boost::unordered_map v2v; boost::unordered_map h2h; convert_surface_mesh(T,S,v2v,h2h); std::ofstream out("reverse.off"); out << S << std::endl; } return 0; }