Modified computation of EH and HE relations in method FromIndexed;

Removed assertions and added checks about EH and HE relations;
This commit is contained in:
Paolo Cignoni 2011-02-01 10:55:06 +00:00
parent 764b2779cb
commit 99950cc5f4
1 changed files with 27 additions and 18 deletions

View File

@ -29,6 +29,7 @@
#include <vcg/complex/trimesh/clean.h> #include <vcg/complex/trimesh/clean.h>
#include <vcg/complex/trimesh/update/topology.h> #include <vcg/complex/trimesh/update/topology.h>
#include <vcg/complex/trimesh/base.h> #include <vcg/complex/trimesh/base.h>
#include <vcg/complex/trimesh/update/halfedge_topology.h>
namespace vcg namespace vcg
{ {
@ -82,7 +83,6 @@ namespace vcg
assert(HasFVAdjacency(m)); assert(HasFVAdjacency(m));
assert(HasHOppAdjacency(m)); assert(HasHOppAdjacency(m));
assert(HasHNextAdjacency(m)); assert(HasHNextAdjacency(m));
assert(HasHEAdjacency(m));
typename MeshType::template PerFaceAttributeHandle<BitVector> flagVisited = typename MeshType::template PerFaceAttributeHandle<BitVector> flagVisited =
vcg::tri::Allocator<MeshType>::template AddPerFaceAttribute<BitVector>(m,""); vcg::tri::Allocator<MeshType>::template AddPerFaceAttribute<BitVector>(m,"");
@ -202,7 +202,7 @@ namespace vcg
{ {
if((*ei).HEp() == NULL) if((*ei).HEp() == NULL)
{ {
(*ei).HEp() = &(*edge_i); (*ei).HEp() = &(*edge_i);
(*ei).HOp()->HEp() = &(*edge_i); (*ei).HOp()->HEp() = &(*edge_i);
(*edge_i).EHp() = &(*ei); (*edge_i).EHp() = &(*ei);
@ -214,29 +214,39 @@ namespace vcg
} }
else else
{ {
assert(HasEVAdjacency(m));
//update edge relations if(HasEVAdjacency(m) && HasHEAdjacency(m) && HasEHAdjacency(m))
typename MeshType::EdgeIterator ei1; {
for( ei1 = m.edge.begin(); ei1 != m.edge.end(); ++ei1 ) //update edge relations
for( ei = m.hedge.begin(); ei != m.hedge.end(); ++ei )
if ( ((*ei).HVp() == (*ei1).V(0)) && ((*ei).HOp()->HVp() == (*ei1).V(1)) ) for(typename MeshType::EdgeIterator ei1 = m.edge.begin(); ei1 != m.edge.end(); ++ei1 )
{
vector<HEdgePointer> hedges = HalfEdgeTopology<MeshType>::get_incident_hedges((*ei1).V(0));
for(typename vector<HEdgePointer>::iterator hi = hedges.begin(); hi != hedges.end(); ++hi)
{ {
// EH if((*hi)->HOp()->HVp() == (*ei1).V(1))
(*ei1).EHp() = &(*ei); {
// HE assert((*hi)->HEp() == NULL);
(*ei).HEp() = &(*ei1); assert((*hi)->HOp()->HEp() == NULL);
(*ei).HOp()->HEp() = &(*ei1);
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::HasHNextAdjacency());
assert(MeshType::HEdgeType::HasHOppAdjacency()); assert(MeshType::HEdgeType::HasHOppAdjacency());
assert(MeshType::HEdgeType::HasHVAdjacency()); assert(MeshType::HEdgeType::HasHVAdjacency());
assert(MeshType::HEdgeType::HasHEAdjacency());
assert(MeshType::FaceType::HasFHAdjacency()); assert(MeshType::FaceType::HasFHAdjacency());
//bool hasHEF = ( MeshType::HEdgeType::HasHFAdjacency()); //bool hasHEF = ( MeshType::HEdgeType::HasHFAdjacency());
@ -394,7 +403,7 @@ namespace vcg
//}while(ep!=ep1); //}while(ep!=ep1);
} }
if(HasEHAdjacency(m)) if(HasEHAdjacency(m) && HasHEAdjacency(m))
for(EdgeIterator ei = m.edge.begin(); ei != m.edge.end(); ++ei) for(EdgeIterator ei = m.edge.begin(); ei != m.edge.end(); ++ei)
{ {
if(!(*ei).IsD()) if(!(*ei).IsD())