https://github.com/CGAL/cgal
Tip revision: fc0e1d0e4ac692309bb308b56941405057e43e7e authored by Laurent Rineau on 26 September 2011, 12:33:57 UTC
Backport from next for CGAL-3.9:
Backport from next for CGAL-3.9:
Tip revision: fc0e1d0
off2gts.cpp
#include <iostream>
#include <fstream>
#include <map>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Polyhedron_items_with_id_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>
typedef CGAL::Simple_cartesian<double> Kernel ;
typedef CGAL::Polyhedron_3<Kernel,CGAL::Polyhedron_items_with_id_3> OffSurface;
typedef OffSurface::Vertex_handle Vertex_handle ;
typedef OffSurface::Halfedge_handle Halfedge_handle ;
typedef OffSurface::Facet_handle Facet_handle ;
typedef OffSurface::Vertex_iterator Vertex_iterator ;
typedef OffSurface::Edge_iterator Edge_iterator ;
typedef OffSurface::Facet_iterator Facet_iterator ;
void Convert ( OffSurface& off, char const* gts_name )
{
std::ofstream gts(gts_name);
if ( gts )
{
std::cout << "Writting " << gts_name << std::endl ;
gts << off.size_of_vertices() << " " << (off.size_of_halfedges()/2) << " " << off.size_of_facets() << std::endl ;
int vid = 1 ;
for ( Vertex_iterator vit = off.vertices_begin() ; vit != off.vertices_end() ; ++ vit )
{
Vertex_handle v = vit ;
gts << v->point().x() << " " << v->point().y() << " " << v->point().z() << std::endl ;
v->id() = vid ++ ;
}
int eid = 1 ;
for ( Edge_iterator eit = off.edges_begin(); eit != off.edges_end() ; ++ eit )
{
Halfedge_handle e = eit ;
Vertex_handle s = e->opposite()->vertex();
Vertex_handle t = e->vertex();
gts << s->id() << " " << t->id() << std::endl ;
e ->id() = eid ;
e->opposite()->id() = eid ;
++ eid ;
}
for ( Facet_iterator fit = off.facets_begin(); fit != off.facets_end() ; ++ fit )
{
Facet_handle f = fit ;
Halfedge_handle e0 = f->halfedge();
Halfedge_handle e1 = e0->next();
Halfedge_handle e2 = e1->next();
gts << e0->id() << " " << e1->id() << " " << e2->id() << std::endl ;
}
}
else std::cerr << "Unable to open output file: " << gts_name << std::endl ;
}
int main( int argc, char* argv[] )
{
if ( argc > 2 )
{
std::ifstream in(argv[1]);
if ( in )
{
OffSurface off ;
in >> off ;
std::cout << "Converting " << argv[1] << " with " << off.size_of_vertices() << " vertices, " << (off.size_of_halfedges()/2) << " edges and " << off.size_of_facets() << " faces" << std::endl ;
if ( off.is_valid() )
{
if ( off.is_pure_triangle() )
{
Convert(off,argv[2]);
}
else std::cerr << "Polyhedron is not a purely triangulated surface" << std::endl ;
}
else std::cerr << "Invalid polyhedron" << std::endl ;
}
else
{
std::cerr << "Unable to open " << argv[1] << std::endl ;
}
}
else
{
std::cerr << "USAGE: off2gts input.off output.gts" << std::endl ;
}
return 0 ;
}