From 5aaa6f4720937c281f0f9890b360fb6c75f7255e Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 13 Mar 2013 14:59:34 +0000 Subject: [PATCH] harmless small refactoring --- vcg/complex/algorithms/crease_cut.h | 70 ++++++++++++++--------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/vcg/complex/algorithms/crease_cut.h b/vcg/complex/algorithms/crease_cut.h index 9f41f682..ab4e757b 100644 --- a/vcg/complex/algorithms/crease_cut.h +++ b/vcg/complex/algorithms/crease_cut.h @@ -8,7 +8,7 @@ * \ * * All rights reserved. * * * -* This program is free software; you can redistribute it and/or modify * +* This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * @@ -27,7 +27,7 @@ #include namespace vcg { namespace tri { - + /* Crease Angle Assume che: @@ -36,18 +36,18 @@ la mesh non abbia complex (o se li aveva fossero stati detached) Abbia le normali per faccia normalizzate!! -Prende una mesh e duplica tutti gli edge le cui normali nelle facce incidenti formano un angolo maggiore +Prende una mesh e duplica tutti gli edge le cui normali nelle facce incidenti formano un angolo maggiore di (espresso in rad). foreach face foreach unvisited vert vi scan the star of triangles around vi duplicating vi each time we encounter a crease angle. the new (and old) vertexes are put in a std::vector that is swapped with the original one at the end. - -Si tiene un vettore di interi 3 *fn che dice l'indice del vertice puntato da ogni faccia. + +Si tiene un vettore di interi 3 *fn che dice l'indice del vertice puntato da ogni faccia. quando si scandisce la stella intorno ad un vertici, per ogni wedge si scrive l'indice del vertice corrsipondente. - - + + */ template @@ -61,12 +61,12 @@ void CreaseCut(MESH_TYPE &m, float angleRad) typedef typename MESH_TYPE::FaceIterator FaceIterator; typedef typename MESH_TYPE::FaceType FaceType; typedef typename MESH_TYPE::FacePointer FacePointer; - + tri::Allocator::CompactVertexVector(m); tri::Allocator::CompactFaceVector(m); - + tri::UpdateNormal::NormalizePerFace(m); - + assert(tri::HasFFAdjacency(m)); typename MESH_TYPE::ScalarType cosangle=math::Cos(angleRad); @@ -74,68 +74,66 @@ void CreaseCut(MESH_TYPE &m, float angleRad) std::vector indVec(m.fn*3,-1); int newVertexCounter=m.vn; int startVn=m.vn; - FaceIterator fi; - //const FaceType * nextf; - for(fi=m.face.begin();fi!=m.face.end();++fi) - for(int j=0;j<3;++j) + for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) + for(int j=0;j<3;++j) if(!(*fi).V(j)->IsV() ) // foreach unvisited vertex we loop around it searching for creases. { (*fi).V(j)->SetV(); - - face::JumpingPos iPos(&*fi,j,(*fi).V(j)); - size_t vertInd = Index(m,iPos.v); // + + face::JumpingPos iPos(&*fi,j,(*fi).V(j)); + size_t vertInd = Index(m,iPos.v); // bool isBorderVertex = iPos.FindBorder(); // for border vertex we start from the border. face::JumpingPos startPos=iPos; - if(!isBorderVertex) // for internal vertex we search the first crease and start from it + if(!isBorderVertex) // for internal vertex we search the first crease and start from it { do { ScalarType dotProd = iPos.FFlip()->cN().dot(iPos.f->N()); - iPos.NextFE(); - if(dotProdcN().dot(iPos.f->N()); // test normal with the next face (fflip) - size_t faceInd = Index(m,iPos.f); - indVec[faceInd*3+ iPos.VInd()] = curVertexCounter; - + size_t faceInd = Index(m,iPos.f); + indVec[faceInd*3+ iPos.VInd()] = curVertexCounter; + if(dotProd0 && (!isBorderVertex) ) newVertexCounter--; } - + // A questo punto ho un vettore che mi direbbe per ogni faccia quale vertice devo mettere. Dopo che ho aggiunto i vertici necessari, // rifaccio il giro delle facce - //qDebug("adding %i vert for %i crease edges ",newVertexCounter-m.vn, creaseCounter); + //qDebug("adding %i vert for %i crease edges ",newVertexCounter-m.vn, creaseCounter); tri::Allocator::AddVertices(m,newVertexCounter-m.vn); - + tri::UpdateFlags::VertexClearV(m); - for(fi=m.face.begin();fi!=m.face.end();++fi) + for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) for(int j=0;j<3;++j) // foreach unvisited vertex { - size_t faceInd = Index(m, *fi); - size_t vertInd = Index(m, (*fi).V(j)); + size_t faceInd = Index(m, *fi); + size_t vertInd = Index(m, (*fi).V(j)); int curVertexInd = indVec[faceInd*3+ j]; assert(curVertexInd != -1); assert(curVertexInd < m.vn); - if(curVertexInd < startVn) assert(size_t(curVertexInd) == vertInd); + if(curVertexInd < startVn) assert(size_t(curVertexInd) == vertInd); if(curVertexInd >= startVn) { m.vert[curVertexInd].ImportData(*((*fi).V(j))); (*fi).V(j) = & m.vert[curVertexInd]; } - } + } tri::UpdateNormal::PerVertexFromCurrentFaceNormal(m); }