From 6b98a018edda95e816b071d2af811255ef8a657b Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Wed, 6 Jun 2007 16:53:23 +0000 Subject: [PATCH] the whole mesh is now visited --- src/meshlabplugins/editsegment/cutting.h | 35 +++++++++++++++--------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/meshlabplugins/editsegment/cutting.h b/src/meshlabplugins/editsegment/cutting.h index 09e4dbc8a..5b7aba790 100644 --- a/src/meshlabplugins/editsegment/cutting.h +++ b/src/meshlabplugins/editsegment/cutting.h @@ -158,10 +158,13 @@ namespace vcg { void MeshCut() { VertexIterator vi; + int counter = 0; for (vi=(*mesh).vert.begin(); vi!=(*mesh).vert.end(); ++vi) { - if ( !vi->IsD() && (*TDMarkPtr)[*vi].Mark != iF && (*TDMarkPtr)[*vi].Mark != iB) + if ( !vi->IsD() && (*TDMarkPtr)[*vi].Mark != iF && (*TDMarkPtr)[*vi].Mark != iB) { (*TDMarkPtr)[*vi].Mark = U; + ++counter; + } } //Computing principal curvatures and directions for all vertices @@ -169,19 +172,25 @@ namespace vcg { ct.ComputeCurvatureTensor(); //now each vertex has principals curvatures and directions in its temp data - //second iteration on the marked vertex - for (vi=(*mesh).vert.begin(); vi!=(*mesh).vert.end(); ++vi) { - if ( !vi->IsD() && ((*TDMarkPtr)[*vi].Mark == iF || (*TDMarkPtr)[*vi].Mark == iB) ) - AddNearestToQ(&(*vi)); - } - //algorithm main loop - CuttingTriplet tempTriplet; - while(!Q.empty()) { - tempTriplet = Q.top(); - Q.pop(); - (*TDMarkPtr)[tempTriplet.v].Mark = tempTriplet.m; - AddNearestToQ(tempTriplet.v); + while (counter != 0) { + //second iteration on the marked vertex + for (vi=(*mesh).vert.begin(); vi!=(*mesh).vert.end(); ++vi) { + if ( !vi->IsD() && ((*TDMarkPtr)[*vi].Mark != U)) + AddNearestToQ(&(*vi)); + } + + //algorithm main loop + CuttingTriplet tempTriplet; + while(!Q.empty()) { + tempTriplet = Q.top(); + Q.pop(); + if ( (*TDMarkPtr)[tempTriplet.v].Mark == U) { + (*TDMarkPtr)[tempTriplet.v].Mark = tempTriplet.m; + AddNearestToQ(tempTriplet.v); + --counter; + } + } } //checks if all vertices are marked