From fee07fb15fb3a5ffa1acb0c8f67cb7de173f7b59 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Fri, 18 Nov 2005 10:59:09 +0000 Subject: [PATCH] cleaned RefineEvenOddE. It doesn't work because missed deleted flags --- src/test/loop/new_refine.h | 114 +++++-------------------------------- 1 file changed, 15 insertions(+), 99 deletions(-) diff --git a/src/test/loop/new_refine.h b/src/test/loop/new_refine.h index c982ba7f6..223833973 100644 --- a/src/test/loop/new_refine.h +++ b/src/test/loop/new_refine.h @@ -24,6 +24,9 @@ History $Log$ +Revision 1.4 2005/11/18 10:59:09 mariolatronico +cleaned RefineEvenOddE. It doesn't work because missed deleted flags + Revision 1.3 2005/11/15 00:01:34 giec Implemented a loop for reserch the odd vertex to call on his the evenPointLoop function for smoothing the mesh. Only one problem: the marker function are not implemented on vertexplus,that are a condition for use that algorithm. @@ -177,8 +180,8 @@ struct EvenPointLoop : public std::unary_function 3 ) @@ -219,119 +222,32 @@ struct EvenPointLoop : public std::unary_function bool RefineOddEvenE(MESH_TYPE &m, ODD_VERT odd, EVEN_VERT even,float length, bool RefineSelected=false) { - EdgeLen ep; - ep.thr2=length; // metto uguale a 0 per comodita' - typedef face::Pos faceType; - typedef MESH_TYPE::VertexType vertType; + // typedef MESH_TYPE::VertexType vertType; + // vettore per prendere i vecchi vertici - std::vector oldVertVec(m.vn); + std::vector oldVertVec(m.vn); //memorizzo il numero iniziale di vertici int n = m.vn; - //EdgeLen trashOld = length; //non serve!!! - // refine dei vecchi vertici su una mesh di appoggio app - + // memorizzo i vertici nel vettore typename MESH_TYPE::VertexIterator vi; for ( vi = m.vert.begin(); vi != m.vert.end(); ++vi) { - // dovremmo avere tutti i vertici della mesh nel vettore oldVertVec.push_back((*vi)); - } -/// inizializzo la funzione di marcamento dei vertici -// m.InitVertexIMark (); -/// - - // refine degli odd vertici + // refine dei vertici odd, crea dei nuovi vertici in coda Refine< MESH_TYPE,OddPointLoop > (m, odd, length); - -/// prova /// -///varibili d'appoggio - int nOcc =0; //numero occorrenze - typename MESH_TYPE::VertexType a,b; //per testare l'ugualianza tra vertici - typename MESH_TYPE::VertexIterator old; //iteratore per i vertici vecchi - typename MESH_TYPE::FaceIterator fi; //iteratore di facce della mesh - -// m.InitVertexIMark(); //inizializzo il marcatore per vertice (funzionasse!!!) - - for(old = oldVertVec.begin();old != oldVertVec.end(); ++old) - { - for (fi = m.face.begin();fi != m.face.end(); ++fi) + for (int i = 0 ; i < n; ++i) { - a = (*old); - for(int j=0;j<3;++j) - { - b = *(*fi).V(j); - //funzionassero i marcatori dovrebbe funzionare - if((a.P() == b.P()))//(se funzionassero) && ( !m.IsMarked(&b) )) - { //se lo trovo lo marco come trovato - - //m.Mark(&b); //come sopra - nOcc++; - std::cout << "trovato! " << nOcc << '\n'; - //devo marcarli ne sto trovando un po troppi!!! - - //Dovrebbe essere la chiamata alla evengiusta - //even >(b, face::Pos( (*fi),j)); - - - // - break; - } - } + + even(m.vert[i], face::Pos((oldVertVec[i].VFp()),1)); + } - } - std::cout << n << '\n'; -/// fine prova /// - - //for (vector::size_t i = oldVertVec.begin(); - // i <= oldVertVec.size(); - // i++) { -// } - -// typename MESH_TYPE::FaceIterator fin; -// typename MESH_TYPE::FaceIterator fout; -// fin= app.face.begin(); -// int aux=0; -// for(fout = m.face.begin(); fout != m.face.end(); ++fout) { -// if(!(*fout).IsD()) { -// ++aux; -// for(int vit=0;vit<3;++vit) -// { -// (*fout).V(vit)= even( face::Pos ((&fin[aux]),vit) ); -// } -// //mid( (*lastv), face::Pos (&*fi,j)); -// //(typename MESH_TYPE::VertexType &nv, face::Pos -// } -// } -// std::vector oldPosVec(m.vn), newPosVec(m.vn); - -// // si scorre su tutta la mesh - - -// for(int j = 0; j < 3; j++){ -// // si memorizzano le posizioni dei vertici vecchi -// oldPosVec.push_back(&*fi); -// // odd((*fi).V(j)->P(), face::Pos (&*fi,j)); - -// } -// } -// } -// std::vector::iterator iterb; -// int i=0; -// for( iterb = oldPosVec.begin(); iterb != oldPosVec.end(); iterb++,i++ ) { -// //even((*iter) face::Pos (&*iter,j)); -// odd((*iterb).V((i%3))->P(), faceType(&*iterb,(i%3))); -// } -// i=0; -// std::vector::iterator iter; -// for( iter = oldPosVec.begin(); iter != oldPosVec.end(); iter++,i++) { -// even((*iter), faceType(&*iter,(i%3))); -// } + // 1) calcola nuova pos vertici old e memorizza in un vett ausiliairio // 2) invoca RefineE e crea i nuovi vertici nella giusta posizione