removed a useless loop in the update cycle of the heap of the edges to be collapesed. Stupid bug pointed out by Enrico (thanks!)

This commit is contained in:
Paolo Cignoni 2013-01-28 15:42:24 +00:00
parent 794f2f27a7
commit 2b9a9f2be2
2 changed files with 82 additions and 89 deletions

View File

@ -134,7 +134,7 @@ public:
inline void UpdateHeap(HeapType & h_ret, BaseParameterClass *pp) inline void UpdateHeap(HeapType & h_ret, BaseParameterClass *pp)
{ {
GlobalMark()++; int nn=0; GlobalMark()++;
VertexType *v[2]; VertexType *v[2];
v[0]= pos.V(0);v[1]=pos.V(1); v[0]= pos.V(0);v[1]=pos.V(1);
v[1]->IMark() = GlobalMark(); v[1]->IMark() = GlobalMark();
@ -153,8 +153,6 @@ public:
while (!vfi.End()) while (!vfi.End())
{ {
assert(!vfi.F()->IsD()); assert(!vfi.F()->IsD());
for (int j=0;j<3;j++)
{
if( !(vfi.V1()->IsV()) && (vfi.V1()->IsRW())) if( !(vfi.V1()->IsV()) && (vfi.V1()->IsRW()))
{ {
vfi.V1()->SetV(); vfi.V1()->SetV();
@ -176,19 +174,16 @@ public:
} }
} }
// if(vfi.V1()->IsRW() && vfi.V2()->IsRW() ) // if(vfi.V1()->IsRW() && vfi.V2()->IsRW() )
// { // {
// h_ret.push_back(HeapElem(new MYTYPE(EdgeType(vfi.V1(),vfi.V2()),this->GlobalMark()))); // h_ret.push_back(HeapElem(new MYTYPE(EdgeType(vfi.V1(),vfi.V2()),this->GlobalMark())));
// std::push_heap(h_ret.begin(),h_ret.end()); // std::push_heap(h_ret.begin(),h_ret.end());
// if(IsSymmetric()){ // if(IsSymmetric()){
// h_ret.push_back(HeapElem(new MYTYPE(EdgeType(vfi.V2(),vfi.V1()), this->GlobalMark()))); // h_ret.push_back(HeapElem(new MYTYPE(EdgeType(vfi.V2(),vfi.V1()), this->GlobalMark())));
// std::push_heap(h_ret.begin(),h_ret.end()); // std::push_heap(h_ret.begin(),h_ret.end());
// } // }
// } // }
++vfi;
} } // end while
++vfi;nn++;
}
// printf("ADDED %d\n",nn);
} }
ModifierType IsOfType(){ return TriEdgeCollapseOp;} ModifierType IsOfType(){ return TriEdgeCollapseOp;}

View File

@ -472,8 +472,6 @@ public:
while (!vfi.End()) while (!vfi.End())
{ {
assert(!vfi.F()->IsD()); assert(!vfi.F()->IsD());
for (int j=0;j<3;j++)
{
if( !(vfi.V1()->IsV()) && vfi.V1()->IsRW()) if( !(vfi.V1()->IsV()) && vfi.V1()->IsRW())
{ {
vfi.V1()->SetV(); vfi.V1()->SetV();
@ -503,13 +501,13 @@ public:
std::push_heap(h_ret.begin(),h_ret.end()); std::push_heap(h_ret.begin(),h_ret.end());
} }
} }
}
++vfi; ++vfi;
} }
} }
static void InitQuadric(TriMeshType &m,BaseParameterClass *_pp) static void InitQuadric(TriMeshType &m,BaseParameterClass *_pp)
{ {
QParameter *pp=(QParameter *)_pp; QParameter *pp=(QParameter *)_pp;
typename TriMeshType::FaceIterator pf; typename TriMeshType::FaceIterator pf;