如何将曲面网格变成多面体?
How to turn a Surface Mesh into a Polyhedron?
我已经按照 here 中的建议定义并加载了表面网格:typedef OpenMesh::PolyMesh_ArrayKernelT</* MyTraits*/> Surface_mesh;
,但尚未使用此类
算法 Triangulated Surface Mesh Segmentation 我需要一个类似的多面体:
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
但我不知道如何将一个变成另一个。如何在 CGAL 中执行此操作?
一个简化的演示:
#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);
}
}
由于
编译失败
boost_1_63_0\boost/graph/graph_traits.hpp(57): error C2039:
vertex_descriptor: is not a member of
"OpenMesh::PolyMesh_ArrayKernelT< OpenMesh::DefaultTraits >"
该算法直接使用此 OpenMesh 数据结构,无需复制。但是,如果你碰巧需要复制数据结构,你可以使用函数 CGAL::copy_face_graph()
.
我已经按照 here 中的建议定义并加载了表面网格:typedef OpenMesh::PolyMesh_ArrayKernelT</* MyTraits*/> Surface_mesh;
,但尚未使用此类
算法 Triangulated Surface Mesh Segmentation 我需要一个类似的多面体:
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
但我不知道如何将一个变成另一个。如何在 CGAL 中执行此操作?
一个简化的演示:
#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);
}
}
由于
编译失败boost_1_63_0\boost/graph/graph_traits.hpp(57): error C2039: vertex_descriptor: is not a member of "OpenMesh::PolyMesh_ArrayKernelT< OpenMesh::DefaultTraits >"
该算法直接使用此 OpenMesh 数据结构,无需复制。但是,如果你碰巧需要复制数据结构,你可以使用函数 CGAL::copy_face_graph()
.