From 99950cc5f43b3dd50016c9e598e0c6b67df5072a Mon Sep 17 00:00:00 2001 From: cnr-isti-vclab Date: Tue, 1 Feb 2011 10:55:06 +0000 Subject: [PATCH] Modified computation of EH and HE relations in method FromIndexed; Removed assertions and added checks about EH and HE relations; --- vcg/complex/trimesh/update/halfedge_indexed.h | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/vcg/complex/trimesh/update/halfedge_indexed.h b/vcg/complex/trimesh/update/halfedge_indexed.h index 9fc42e48..e7ac1607 100644 --- a/vcg/complex/trimesh/update/halfedge_indexed.h +++ b/vcg/complex/trimesh/update/halfedge_indexed.h @@ -29,6 +29,7 @@ #include #include #include +#include namespace vcg { @@ -82,7 +83,6 @@ namespace vcg assert(HasFVAdjacency(m)); assert(HasHOppAdjacency(m)); assert(HasHNextAdjacency(m)); - assert(HasHEAdjacency(m)); typename MeshType::template PerFaceAttributeHandle flagVisited = vcg::tri::Allocator::template AddPerFaceAttribute(m,""); @@ -202,7 +202,7 @@ namespace vcg { if((*ei).HEp() == NULL) { - (*ei).HEp() = &(*edge_i); + (*ei).HEp() = &(*edge_i); (*ei).HOp()->HEp() = &(*edge_i); (*edge_i).EHp() = &(*ei); @@ -214,29 +214,39 @@ namespace vcg } else { - assert(HasEVAdjacency(m)); - //update edge relations - typename MeshType::EdgeIterator ei1; - for( ei1 = m.edge.begin(); ei1 != m.edge.end(); ++ei1 ) - for( ei = m.hedge.begin(); ei != m.hedge.end(); ++ei ) - if ( ((*ei).HVp() == (*ei1).V(0)) && ((*ei).HOp()->HVp() == (*ei1).V(1)) ) + if(HasEVAdjacency(m) && HasHEAdjacency(m) && HasEHAdjacency(m)) + { + //update edge relations + + for(typename MeshType::EdgeIterator ei1 = m.edge.begin(); ei1 != m.edge.end(); ++ei1 ) + { + vector hedges = HalfEdgeTopology::get_incident_hedges((*ei1).V(0)); + + for(typename vector::iterator hi = hedges.begin(); hi != hedges.end(); ++hi) { - // EH - (*ei1).EHp() = &(*ei); + if((*hi)->HOp()->HVp() == (*ei1).V(1)) + { - // HE - (*ei).HEp() = &(*ei1); - (*ei).HOp()->HEp() = &(*ei1); + assert((*hi)->HEp() == NULL); + assert((*hi)->HOp()->HEp() == NULL); - break; + // EH + (*ei1).EHp() = *hi; + + // HE + (*hi)->HEp() = &(*ei1); + (*hi)->HOp()->HEp() = &(*ei1); + + break; + } + } + } } } } - - } /** @@ -260,7 +270,6 @@ namespace vcg assert(MeshType::HEdgeType::HasHNextAdjacency()); assert(MeshType::HEdgeType::HasHOppAdjacency()); assert(MeshType::HEdgeType::HasHVAdjacency()); - assert(MeshType::HEdgeType::HasHEAdjacency()); assert(MeshType::FaceType::HasFHAdjacency()); //bool hasHEF = ( MeshType::HEdgeType::HasHFAdjacency()); @@ -394,7 +403,7 @@ namespace vcg //}while(ep!=ep1); } - if(HasEHAdjacency(m)) + if(HasEHAdjacency(m) && HasHEAdjacency(m)) for(EdgeIterator ei = m.edge.begin(); ei != m.edge.end(); ++ei) { if(!(*ei).IsD())