Fix halfedge(v, PolyMesh) + fixes for conversion from OpenMesh to Polyhedron

This commit is contained in:
Andreas Fabri 2015-09-21 16:41:24 +02:00
parent 1eb87f5a9d
commit bb208ab2d6
3 changed files with 38 additions and 5 deletions

View File

@ -39,8 +39,24 @@ typedef boost::graph_traits<Target>::vertex_descriptor tm_vertex_descriptor;
typedef boost::graph_traits<Source>::halfedge_descriptor sm_halfedge_descriptor;
typedef boost::graph_traits<Target>::halfedge_descriptor tm_halfedge_descriptor;
boost::unordered_map<sm_vertex_descriptor, tm_vertex_descriptor> v2v;
boost::unordered_map<sm_halfedge_descriptor, tm_halfedge_descriptor> h2h;
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, char* argv[])
{
@ -49,9 +65,23 @@ int main(int, char* argv[])
std::ifstream in(argv[1]);
in >> S;
convert_surface_mesh(S,T,v2v,h2h);
{
boost::unordered_map<sm_vertex_descriptor, tm_vertex_descriptor> v2v;
boost::unordered_map<sm_halfedge_descriptor, tm_halfedge_descriptor> h2h;
convert_surface_mesh(S,T,v2v,h2h);
OpenMesh::IO::write_mesh(T, "om.off");
}
OpenMesh::IO::write_mesh(T, "om.off");
{
boost::unordered_map<tm_vertex_descriptor, sm_vertex_descriptor> v2v;
boost::unordered_map<tm_halfedge_descriptor, sm_halfedge_descriptor> h2h;
convert_surface_mesh(T,S,v2v,h2h);
std::ofstream out("reverse.off");
out << S << std::endl;
}
return 0;
}

View File

@ -22,7 +22,7 @@ namespace CGAL {
typedef boost::graph_traits<TargetMesh>::halfedge_descriptor tm_halfedge_descriptor;
typedef typename boost::property_map<SourceMesh, vertex_point_t>::const_type sm_PMap;
typedef typename boost::property_map<TargetMesh, vertex_point_t>::const_type tm_PMap;
typedef typename boost::property_map<TargetMesh, vertex_point_t>::type tm_PMap;
sm_PMap sm_pmap = get(vertex_point, sm);
tm_PMap tm_pmap = get(vertex_point, tm);

View File

@ -355,6 +355,9 @@ typename boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >::halfedge_desc
halfedge(typename boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >::vertex_descriptor v,
const OpenMesh::PolyMesh_ArrayKernelT<K>& sm)
{
if(sm.halfedge_handle(v) == boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >::null_halfedge()){
return boost::graph_traits<OpenMesh::PolyMesh_ArrayKernelT<K> >::null_halfedge();
}
// prev because OpenMesh stores out-going halfedges
// return sm.prev_halfedge_handle(sm.halfedge_handle(v));
return sm.opposite_halfedge_handle(sm.halfedge_handle(v));