J'ai défini et chargé un maillage de surface comme suggéré dans here: typedef OpenMesh::PolyMesh_ArrayKernelT</* MyTraits*/> Surface_mesh;
, mais d'utiliser cet algorithme comme Triangulated Surface Mesh Segmentation je besoin d'un polyèdre aussi bien:Comment transformer un maillage de surface en un polyèdre?
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
Pourtant, je ne vois pas comment transformer l'un dans l'autre. Comment faire une telle chose dans CGAL?
Une démonstration simplifiée:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/mesh_segmentation.h>
#include <CGAL/Polygon_mesh_processing/connected_components.h>
#include <CGAL/boost/graph/copy_face_graph.h>
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <iostream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef OpenMesh::PolyMesh_ArrayKernelT</* MyTraits*/> Surface_mesh;
int main()
{
// create and read Polyhedron
Surface_mesh mesh_in, mesh_out;
Polyhedron mesh;
OpenMesh::IO::read_mesh(mesh_in, "data/elephant.off");
CGAL::copy_face_graph(mesh_in, mesh);
CGAL::copy_face_graph(mesh, mesh_out);
if (!OpenMesh::IO::write_mesh(mesh_out, "slon.obj"))
{
std::cerr << "write error\n";
exit(1);
}
}
Ce qui ne peut pas compiler en raison de
boost_1_63_0 \ boost/graphique/graph_traits.hpp (57): erreur C2039: vertex_descriptor: n'est pas membre de "OpenMesh :: PolyMesh_ArrayKernelT < OpenMesh :: DefaultTraits>"
Ajout d'un code de démo qui échoue à la compilation et utilise la fonction 'CGAL :: copy_face_graph()' suggérée – DuckQueen
Il vous manque '#include'. –
sloriot