diff --git a/include/Algo/Import/importMesh.hpp b/include/Algo/Import/importMesh.hpp index 61b0cdf2fbf494d437ba34cbe1bbc6b3e7fbd921..9a080d415a923714cf426ec1996be89e030c665e 100644 --- a/include/Algo/Import/importMesh.hpp +++ b/include/Algo/Import/importMesh.hpp @@ -60,7 +60,7 @@ bool importMesh(typename PFP::MAP& map, MeshTablesSurface& mts) for (unsigned int j = 0; j < nbe; ++j) { unsigned int em = mts.getEmbIdx(index++); - if (em!=prec) + if (em != prec) { prec = em; edgesBuffer.push_back(em); @@ -74,21 +74,21 @@ bool importMesh(typename PFP::MAP& map, MeshTablesSurface& mts) nbe = edgesBuffer.size(); if (nbe > 2) { - Dart d = map.newFace(nbe,false); + Dart d = map.newFace(nbe, false); for (unsigned int j = 0; j < nbe; ++j) { unsigned int em = edgesBuffer[j]; // get embedding - map.setDartEmbedding(VERTEX, d, em); // associate to dart - vecDartsPerVertex[em].push_back(d); // store incident darts for fast phi2 reconstruction + map.embedOrbit(VERTEX, d, em) ; +// map.setDartEmbedding(VERTEX, d, em); // associate to dart + vecDartsPerVertex[em].push_back(d); // store incident darts for fast adjacency reconstruction d = map.phi1(d); } - m.markOrbit(FACE, d); // mark on the fly to unmark on second loop + m.markOrbit(ORIENTED_FACE, d); // mark on the fly to unmark on second loop } } - unsigned int nbnm = 0; // reconstruct neighbourhood - + unsigned int nbnm = 0; for (Dart d = map.begin(); d != map.end(); map.next(d)) { if (m.isMarked(d)) @@ -97,7 +97,7 @@ bool importMesh(typename PFP::MAP& map, MeshTablesSurface& mts) std::vector& vec = vecDartsPerVertex[map.phi1(d)]; unsigned int embd = map.getEmbedding(VERTEX, d); - Dart good_dart=NIL; + Dart good_dart = NIL; for (typename std::vector::iterator it = vec.begin(); it != vec.end() && good_dart == NIL; ++it) { if (map.getEmbedding(VERTEX, map.phi1(*it)) == embd) @@ -108,7 +108,7 @@ bool importMesh(typename PFP::MAP& map, MeshTablesSurface& mts) { if (good_dart == map.phi2(good_dart)) { - map.sewFaces(d, good_dart,false); + map.sewFaces(d, good_dart, false); m.unmarkOrbit(EDGE, d); } } diff --git a/include/Algo/Modelisation/polyhedron.h b/include/Algo/Modelisation/polyhedron.h index 69f3e3c05d46c56bb0f729dbb97f5e1ea8a130a1..f65c3ef55da9832faaa4a4aef2f864b71f4acc55 100644 --- a/include/Algo/Modelisation/polyhedron.h +++ b/include/Algo/Modelisation/polyhedron.h @@ -117,11 +117,11 @@ protected: /** * numbers that defined the subdivision of Polyhedron */ - int m_nx; + unsigned int m_nx; - int m_ny; + unsigned int m_ny; - int m_nz; + unsigned int m_nz; bool m_top_closed; @@ -151,14 +151,14 @@ public: * @param idPositions id of attribute position */ Polyhedron(MAP& map, typename PFP::TVEC3& position): - m_map(map), - m_kind(NONE), - m_nx(-1), m_ny(-1), m_nz(-1), - m_top_closed(false), m_bottom_closed(false), - m_positions(position) - { + m_map(map), + m_kind(NONE), + m_nx(-1), m_ny(-1), m_nz(-1), + m_top_closed(false), m_bottom_closed(false), + m_positions(position) + { computeCenter(); - } + } /** * Polyhedron fusion: give a COMPOSED type @@ -170,7 +170,7 @@ public: /** * create simple simple polyhedron (not handled by Polyhedron object) */ - static Dart createPolyhedron(typename PFP::MAP& the_map, int nbFaces); + static Dart createPolyhedron(typename PFP::MAP& the_map, unsigned int nbFaces); /** * create simple simple tetrahedron (not handled by Polyhedron object) @@ -225,7 +225,7 @@ public: * @param bottom_closed close the bottom with triangles fan * @return the dart */ - Dart cylinder_topo(int n, int z, bool top_closed, bool bottom_closed); + Dart cylinder_topo(unsigned int n, unsigned int z, bool top_closed, bool bottom_closed); /** * Create a subdivided (surface) cone (with param 1,3,true create tetrahedron) @@ -234,7 +234,7 @@ public: * @param bottom_closed close the bottom with triangles fan * @return the dart */ - Dart cone_topo(int n, int z, bool bottom_closed); + Dart cone_topo(unsigned int n, unsigned int z, bool bottom_closed); /** * Create a subdived (surface) cube @@ -244,7 +244,7 @@ public: * @param z nb of quads in z * @return the dart */ - Dart cube_topo(int x, int y, int z); + Dart cube_topo(unsigned int x, unsigned int y, unsigned int z); /** * Create a subdivided (surface) cylinder @@ -254,7 +254,7 @@ public: * @param bottom_closed close the bottom with triangles fan * @return the dart */ - Dart tore_topo(int m, int n); + Dart tore_topo(unsigned int m, unsigned int n); /** * embed the topo grid Polyhedron @@ -262,7 +262,7 @@ public: * @param x * @param y */ - void embedGrid(float x, float y, float z=0.0f); + void embedGrid(float x, float y, float z = 0.0f); /** * embed the topo cylinder Polyhedron @@ -317,7 +317,7 @@ public: * @param maxHeight height to reach * @param turns number of turn */ - void embedHelicoid( float radius_min, float radius_max, float maxHeight, float nbTurn, int orient=1); + void embedHelicoid( float radius_min, float radius_max, float maxHeight, float nbTurn, int orient = 1); /** * transform the Polyhedron with transformation matrice diff --git a/include/Algo/Modelisation/polyhedron.hpp b/include/Algo/Modelisation/polyhedron.hpp index c77e247b943d1b72420d91884cdbad55b8531183..0965554430f29d11f437195c7fe3289f1c408646 100644 --- a/include/Algo/Modelisation/polyhedron.hpp +++ b/include/Algo/Modelisation/polyhedron.hpp @@ -37,27 +37,23 @@ void explodPolyhedron(typename PFP::MAP& map, Dart d, typename PFP::TVEC3 positi map.unsewVertexUmbrella(d); unsigned int newFaceDegree = map.closeHole(map.phi1(d)); - if(newFaceDegree != 3) { - //chercher le brin ou demarer + // chercher le brin ou demarrer std::multimap edges ; typename std::multimap::iterator it ; Dart d12 = map.phi2(map.phi1(d)); Dart fit = d12; - int i; + unsigned int i; do { i = map.faceDegree(map.phi2(fit)); - std::cout << "edge(" << fit << "," << i << ")" << std::endl; - edges.insert(std::make_pair(fit, i)); - - fit = map.phi1(fit); + fit = map.phi1(fit); } while(fit != d12); @@ -108,8 +104,6 @@ void explodPolyhedron(typename PFP::MAP& map, Dart d, typename PFP::TVEC3 positi std::cout << "flip cas quad tri" << std::endl; } - - fit = map.phi1(fit); } while(map.faceDegree(fit) > 4 && fit != d12); @@ -118,13 +112,13 @@ void explodPolyhedron(typename PFP::MAP& map, Dart d, typename PFP::TVEC3 positi } template -Polyhedron::Polyhedron(const Polyhedron& p1, const Polyhedron& p2): -m_map(p1.m_map), -m_dart(p1.m_dart), -m_kind(COMPOSED), -m_nx(-1), m_ny(-1), m_nz(-1), -m_top_closed(false), m_bottom_closed(false), -m_positions(p1.m_positions) +Polyhedron::Polyhedron(const Polyhedron& p1, const Polyhedron& p2) : + m_map(p1.m_map), + m_dart(p1.m_dart), + m_kind(COMPOSED), + m_nx(-1), m_ny(-1), m_nz(-1), + m_top_closed(false), m_bottom_closed(false), + m_positions(p1.m_positions) { if (&(p1.map) != &(p2.map)) { @@ -135,23 +129,23 @@ m_positions(p1.m_positions) typename PFP::VEC3 center(0); - for(typename std::vector::const_iterator di=p1.m_tableVertDarts.begin(); di!=p1.m_tableVertDarts.end(); ++di) + for(typename std::vector::const_iterator di = p1.m_tableVertDarts.begin(); di != p1.m_tableVertDarts.end(); ++di) { m_tableVertDarts.push_back(*di); center += m_positions[*di]; } // O(n2) pas terrible !! - for(typename std::vector::const_iterator di=p2.m_tableVertDarts.begin(); di!=p2.m_tableVertDarts.end(); ++di) + for(typename std::vector::const_iterator di = p2.m_tableVertDarts.begin(); di != p2.m_tableVertDarts.end(); ++di) { - unsigned int em = m_map.getEmbedding(*di,VERTEX); + unsigned int em = m_map.getEmbedding(*di, VERTEX); typename std::vector::const_iterator dj=p1.m_tableVertDarts.begin(); bool found = false; while ((dj !=p1.m_tableVertDarts.end()) && (!found)) { - unsigned int xm = m_map.getEmbedding(*dj,VERTEX); - if ( xm == em) + unsigned int xm = m_map.getEmbedding(*dj, VERTEX); + if (xm == em) found = true; else ++dj; @@ -270,7 +264,7 @@ Dart Polyhedron::createPrism(typename PFP::MAP& the_map) } template -Dart Polyhedron::createPolyhedron(typename PFP::MAP& the_map, int n) +Dart Polyhedron::createPolyhedron(typename PFP::MAP& the_map, unsigned int n) { Dart d; switch (n) @@ -352,7 +346,7 @@ Dart Polyhedron::grid_topo(unsigned int x, unsigned int y) } template -Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_closed) +Dart Polyhedron::cylinder_topo(unsigned int n, unsigned int z, bool top_closed, bool bottom_closed) { if (m_kind != NONE) return m_dart; @@ -360,8 +354,8 @@ Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_c m_nx = n; m_nz = z; - m_bottom_closed=bottom_closed; - m_top_closed=top_closed; + m_bottom_closed = bottom_closed; + m_top_closed = top_closed; int nb = (n)*(z+1); if (bottom_closed) nb++; @@ -371,40 +365,40 @@ Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_c m_tableVertDarts.reserve(nb); // creation of quads and storing vertices - for (int i=0;i0) // sew with preceeding row + if (i > 0) // sew with preceeding row { int pos = i*n+j; Dart d = m_tableVertDarts[pos]; Dart e = m_tableVertDarts[pos-n]; e = m_map.phi1(m_map.phi1(e)); - m_map.sewFaces(d,e,false); + m_map.sewFaces(d, e, false); } - if (j>0) // sew with preceeding column + if (j > 0) // sew with preceeding column { int pos = i*n+j; Dart d = m_tableVertDarts[pos]; d = m_map.phi_1(d); Dart e = m_tableVertDarts[pos-1]; e = m_map.phi1(e); - m_map.sewFaces(d,e,false); + m_map.sewFaces(d, e, false); } else { @@ -413,7 +407,7 @@ Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_c d = m_map.phi_1(d); Dart e = m_tableVertDarts[pos+(n-1)]; e = m_map.phi1(e); - m_map.sewFaces(d,e,false); + m_map.sewFaces(d, e, false); } } } @@ -450,7 +444,7 @@ Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_c if (top_closed) { Dart d = m_map.phi_1(m_tableVertDarts[n*z]); - if(m_map.closeHole(d,true)) + if(m_map.closeHole(d, true)) { d = m_map.phi2(d); if(m_map.faceDegree(d) > 3) @@ -626,7 +620,7 @@ Dart Polyhedron::cylinder_topo(int n, int z, bool top_closed, bool bottom_c // } template -Dart Polyhedron::cube_topo(int x, int y,int z) +Dart Polyhedron::cube_topo(unsigned int x, unsigned int y, unsigned int z) { if (m_kind != NONE) return m_dart; @@ -646,31 +640,31 @@ Dart Polyhedron::cube_topo(int x, int y,int z) std::vector& tableTop = primTop.getVertexDarts(); int index_side = 2*(x+y)*z; - for(int i=0;i::cube_topo(int x, int y,int z) std::vector& tableBottom = primBottom.getVertexDarts(); index_side = 3*(x+y)+(x-1); - for(int i=0;i -Dart Polyhedron::tore_topo(int m, int n) +Dart Polyhedron::tore_topo(unsigned int m, unsigned int n) { if (m_kind != NONE) return m_dart; @@ -739,12 +729,12 @@ Dart Polyhedron::tore_topo(int m, int n) m_kind = TORE; // juste finish to sew - for(int i=0; i::tore_topo(int m, int n) } template -void Polyhedron::embedGrid( float x, float y,float z) +void Polyhedron::embedGrid(float x, float y, float z) { typedef typename PFP::VEC3 VEC3 ; @@ -767,24 +757,25 @@ void Polyhedron::embedGrid( float x, float y,float z) float dx = x/float(m_nx); float dy = y/float(m_ny); - for(int i=0; i<=m_ny; ++i) + for(unsigned int i = 0; i <= m_ny; ++i) { - for(int j=0; j<=m_nx;++j) + for(unsigned int j = 0; j <= m_nx;++j) { VEC3 pos(-x/2 + dx*float(j), -y/2 + dy*float(i), z); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[i*(m_nx+1)+j]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } } template -void Polyhedron::embedCylinder( float bottom_radius, float top_radius, float height) +void Polyhedron::embedCylinder(float bottom_radius, float top_radius, float height) { typedef typename PFP::VEC3 VEC3 ; - if (m_kind != CYLINDER) { + if (m_kind != CYLINDER) + { CGoGNerr << "Warning try to embedCylinder something that is not a cylnder"<::embedCylinder( float bottom_radius, float top_radius, floa float alpha = float(2.0*M_PI/m_nx); float dz = height/float(m_nz); - for(int i=0; i<=m_nz; ++i) + for(unsigned int i = 0; i <= m_nz; ++i) { float a = float(i)/float(m_nz); float radius = a*top_radius + (1.0f-a)*bottom_radius; - for(int j=0; j::embedCylinder( float bottom_radius, float top_radius, floa VEC3 pos(x, y, -height/2 + dz*float(i)); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[i*(m_nx)+j]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } @@ -814,7 +805,7 @@ void Polyhedron::embedCylinder( float bottom_radius, float top_radius, floa VEC3 pos(0.0f, 0.0f, -height/2 ); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[indexUmbrella++]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } if (m_top_closed) @@ -822,16 +813,17 @@ void Polyhedron::embedCylinder( float bottom_radius, float top_radius, floa VEC3 pos(0.0f ,0.0f, height/2 ); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[indexUmbrella]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } template -void Polyhedron::embedCone( float radius, float height) +void Polyhedron::embedCone(float radius, float height) { typedef typename PFP::VEC3 VEC3 ; - if (m_kind != CONE) { + if (m_kind != CONE) + { CGoGNerr << "Warning try to embedCone something that is not a cone"<::embedCone( float radius, float height) int zcyl = m_nz-1; float dz = height/float(m_nz); - for(int i=0; i<=zcyl; ++i) + for(unsigned int i = 0; i <= zcyl; ++i) { - for(int j=0; j::embedCone( float radius, float height) VEC3 pos(x, y, h); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[i*(m_nx)+j]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } @@ -863,22 +855,23 @@ void Polyhedron::embedCone( float radius, float height) VEC3 pos(0.0f, 0.0f, -height/2 ); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[indexUmbrella++]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } // top always closed in cone VEC3 pos(0.0f ,0.0f, height/2.0f ); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[indexUmbrella]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } template -void Polyhedron::embedSphere( float radius) +void Polyhedron::embedSphere(float radius) { typedef typename PFP::VEC3 VEC3 ; - if (!((m_kind==CYLINDER)&&(m_top_closed)&&(m_bottom_closed))) { + if (!((m_kind == CYLINDER) && (m_top_closed) && (m_bottom_closed))) + { CGoGNerr << "Warning try to embedSphere something that is not a sphere (closed cylinder)"<::embedSphere( float radius) float alpha = float(2.0*M_PI/m_nx); float beta = float(M_PI/(m_nz+2)); - for(int i=0; i<=m_nz; ++i) + for(unsigned int i = 0; i <= m_nz; ++i) { - for(int j=0; j::embedSphere( float radius) VEC3 pos(x, y, h ); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[i*(m_nx)+j]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } // bottom pole - VEC3 pos(0.0f, 0.0f, -radius ); + VEC3 pos(0.0f, 0.0f, -radius); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[m_nx*(m_nz+1)]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); // top pole - pos = VEC3(0.0f ,0.0f, radius ); + pos = VEC3(0.0f, 0.0f, radius); em = m_positions.insert(pos); d = m_tableVertDarts[m_nx*(m_nz+1)+1]; - m_map.embedOrbit(VERTEX,d,em); - + m_map.embedOrbit(VERTEX, d, em); } template -void Polyhedron::embedTore( float big_radius, float small_radius) +void Polyhedron::embedTore(float big_radius, float small_radius) { typedef typename PFP::VEC3 VEC3 ; - if (m_kind !=TORE) { + if (m_kind != TORE) + { CGoGNerr << "Warning try to embedTore something that is not a tore"<::embedTore( float big_radius, float small_radius) float alpha = float(2.0*M_PI/m_nx); float beta = float(2.0*M_PI/m_ny); - for (int i=0;i< m_nx; ++i) + for (unsigned int i = 0; i < m_nx; ++i) { - for(int j=0; j::embedTore( float big_radius, float small_radius) VEC3 pos(x, y, z); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[j*(m_nx)+i]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } } template -void Polyhedron::embedCube( float sx, float sy, float sz) +void Polyhedron::embedCube(float sx, float sy, float sz) { typedef typename PFP::VEC3 VEC3 ; - if (m_kind != CUBE) { + if (m_kind != CUBE) + { CGoGNerr << "Warning try to embedCube something that is not a cube"<::embedCube( float sx, float sy, float sz) // first embedding the sides int index = 0; - for (int k=0; k<=m_nz; ++k) + for (unsigned int k = 0; k <= m_nz; ++k) { float z = float(k)*dz - sz/2.0f; - for (int i=0;i::computeCenter() { typename PFP::VEC3 center(0); - for(typename std::vector::iterator di=m_tableVertDarts.begin(); di!=m_tableVertDarts.end(); ++di) + for(typename std::vector::iterator di = m_tableVertDarts.begin(); di != m_tableVertDarts.end(); ++di) { center += m_positions[*di]; } @@ -1045,7 +1039,7 @@ void Polyhedron::transform(const Geom::Matrix44f& matrice) // Geom::Vec4f v3(matrice[2],matrice[6],matrice[10],matrice[14]); // Geom::Vec4f v4(matrice[3],matrice[7],matrice[11],matrice[15]); - for(typename std::vector::iterator di=m_tableVertDarts.begin(); di!=m_tableVertDarts.end(); ++di) + for(typename std::vector::iterator di = m_tableVertDarts.begin(); di != m_tableVertDarts.end(); ++di) { typename PFP::VEC3& pos = m_positions[*di]; @@ -1082,7 +1076,7 @@ void Polyhedron::mark(CellMarker& m) //} template -void Polyhedron::embedTwistedStrip( float radius_min, float radius_max, float turns) +void Polyhedron::embedTwistedStrip(float radius_min, float radius_max, float turns) { typedef typename PFP::VEC3 VEC3 ; @@ -1092,16 +1086,16 @@ void Polyhedron::embedTwistedStrip( float radius_min, float radius_max, fl float radius = (radius_max + radius_min)/2.0f; float rdiff = (radius_max - radius_min)/2.0f; - for(int i=0; i<=m_ny; ++i) + for(unsigned int i = 0; i <= m_ny; ++i) { - for(int j=0; j<=m_nx; ++j) + for(unsigned int j = 0; j <= m_nx; ++j) { float rw = -rdiff + float(j)*2.0f*rdiff/float(m_nx); float r = radius + rw*cos(beta*float(i)); VEC3 pos(r*cos(alpha*float(i)), r*sin(alpha*float(i)), rw*sin(beta*float(i))); unsigned int em = m_positions.insert(pos); Dart d = m_tableVertDarts[i*(m_nx+1)+j]; - m_map.embedOrbit(VERTEX,d,em); + m_map.embedOrbit(VERTEX, d, em); } } } @@ -1117,9 +1111,9 @@ void Polyhedron::embedHelicoid(float radius_min, float radius_max, float ma // float radius = (radius_max + radius_min)/2.0f; // float rdiff = (radius_max - radius_min)/2.0f; - for(int i=0; i<=m_ny; ++i) + for(unsigned int i = 0; i <= m_ny; ++i) { - for(int j=0; j<=m_nx; ++j) + for(unsigned int j = 0; j <= m_nx; ++j) { // float r = radius_max + radius_min*cos(beta*float(j)); float r,x,y; @@ -1127,7 +1121,7 @@ void Polyhedron::embedHelicoid(float radius_min, float radius_max, float ma // r = radius_max; // } // else { - r= radius_min+(radius_max-radius_min)*float(i)/float(m_ny); + r = radius_min+(radius_max-radius_min)*float(i)/float(m_ny); // } x = orient*r*sin(alpha*float(j)); y = orient*r*cos(alpha*float(j)); diff --git a/include/Algo/Modelisation/primitives3d.h b/include/Algo/Modelisation/primitives3d.h index c876b3eba6165c0c92d7e76b87ef2636187757c4..4a973e41ccbb0f9b3669422a7abeb264a40b15e2 100644 --- a/include/Algo/Modelisation/primitives3d.h +++ b/include/Algo/Modelisation/primitives3d.h @@ -53,7 +53,6 @@ class Primitive3D typedef typename PFP::MAP MAP; typedef typename PFP::VEC3 EMB; - public: enum {NONE,HEXAGRID}; @@ -82,20 +81,18 @@ protected: std::vector m_tableVertDarts; /** - * numbers that defined the subdivision of primitives + * numbers that defined the subdivision of primitives */ - int m_nx; - - int m_ny; - - int m_nz; + unsigned int m_nx; + unsigned int m_ny; + unsigned int m_nz; /** * Create a 3D grid * @param nx nb of cubes in x * @return the dart of vertex (0,0,0) direction z */ - Dart HexaGrid1Topo(int nx); + Dart HexaGrid1Topo(unsigned int nx); /** * Create a 3D grid @@ -103,11 +100,10 @@ protected: * @param ny nb of cubes in y * @return the dart of vertex (0,0,0) direction z */ - Dart HexaGrid2Topo(int nx, int ny); + Dart HexaGrid2Topo(unsigned int nx, unsigned int ny); Dart createHexa(); - public: /** @@ -130,7 +126,6 @@ public: */ Dart getDart() { return m_dart;} - /** * transform the primitive with transformation matrice * @param matrice @@ -143,7 +138,6 @@ public: */ // void mark(Mark m); - /** * Create a 3D grid * @param nx nb of cubes in x @@ -151,8 +145,7 @@ public: * @param nz nb of cubes in z * @return the dart of vertex (0,0,0) direction z */ - Dart hexaGrid_topo(int nx, int ny, int nz); - + Dart hexaGrid_topo(unsigned int nx, unsigned int ny, unsigned int nz); /** * embed the topo grid primitive @@ -162,7 +155,7 @@ public: * @param z * @param positions handler of position attribute */ - void embedHexaGrid( float x, float y, float z); + void embedHexaGrid(float x, float y, float z); /** * Create a 3D grid @@ -173,7 +166,6 @@ public: */ // Dart prismGrid_topo(int nx,int nz); - /** * embed the topo grid primitive * Grid has size x,y,z centered on 0 @@ -182,16 +174,13 @@ public: * @param z */ // void embedPrismGrid( float x, float z); - - - }; -}//end namespace -}//end namespace -}//end namespace +} // namespace Modelisation +} // namespace Algo +} // namespace CGoGN #include "primitives3d.hpp" diff --git a/include/Algo/Modelisation/primitives3d.hpp b/include/Algo/Modelisation/primitives3d.hpp index 3955199e955e0dc7cff6f28c427634fb6a257030..ade8337d0f7b4908929b67d8e43bfc2f32302b95 100644 --- a/include/Algo/Modelisation/primitives3d.hpp +++ b/include/Algo/Modelisation/primitives3d.hpp @@ -35,52 +35,47 @@ namespace Modelisation template Dart Primitive3D::createHexa() { - Dart base = m_map.newFace(4); + Dart base = m_map.newFace(4, false); - Dart side1 = m_map.newFace(4); - m_map.sewFaces(base,side1); + Dart side1 = m_map.newFace(4, false); + m_map.sewFaces(base, side1, false); - Dart side2 = m_map.newFace(4); - m_map.sewFaces(m_map.phi1(base),side2); - m_map.sewFaces(m_map.phi_1(side1), m_map.phi1(side2)); + Dart side2 = m_map.newFace(4, false); + m_map.sewFaces(m_map.phi1(base), side2, false); + m_map.sewFaces(m_map.phi_1(side1), m_map.phi1(side2), false); - Dart side3 = m_map.newFace(4); - m_map.sewFaces(m_map.phi1(m_map.phi1(base)),side3); - m_map.sewFaces(m_map.phi_1(side2), m_map.phi1(side3)); + Dart side3 = m_map.newFace(4, false); + m_map.sewFaces(m_map.phi1(m_map.phi1(base)), side3, false); + m_map.sewFaces(m_map.phi_1(side2), m_map.phi1(side3), false); - Dart side4 = m_map.newFace(4); - m_map.sewFaces(m_map.phi_1(base),side4); - m_map.sewFaces(m_map.phi_1(side3), m_map.phi1(side4)); + Dart side4 = m_map.newFace(4, false); + m_map.sewFaces(m_map.phi_1(base), side4, false); + m_map.sewFaces(m_map.phi_1(side3), m_map.phi1(side4), false); - m_map.sewFaces(m_map.phi_1(side4), m_map.phi1(side1)); + m_map.sewFaces(m_map.phi_1(side4), m_map.phi1(side1), false); - Dart top = m_map.newFace(4); - m_map.sewFaces(top,m_map.phi1(m_map.phi1(side1))); - m_map.sewFaces(m_map.phi_1(top),m_map.phi1(m_map.phi1(side2))); - m_map.sewFaces(m_map.phi1(m_map.phi1(top)),m_map.phi1(m_map.phi1(side3))); - m_map.sewFaces(m_map.phi1(top),m_map.phi1(m_map.phi1(side4))); + Dart top = m_map.newFace(4, false); + m_map.sewFaces(top, m_map.phi1(m_map.phi1(side1)), false); + m_map.sewFaces(m_map.phi_1(top), m_map.phi1(m_map.phi1(side2)), false); + m_map.sewFaces(m_map.phi1(m_map.phi1(top)), m_map.phi1(m_map.phi1(side3)), false); + m_map.sewFaces(m_map.phi1(top), m_map.phi1(m_map.phi1(side4)), false); return base; } template -Dart Primitive3D::HexaGrid1Topo(int nx) +Dart Primitive3D::HexaGrid1Topo(unsigned int nx) { // first cube -<<<<<<< HEAD - Dart d0 = createOrientedHexa(); //return a dart from the base of the cube - m_tableVertDarts.push_back(d0); //push_back darts frome the base of cubes -======= Dart d0 = createHexa(); m_tableVertDarts.push_back(d0); ->>>>>>> 9d09fe01ab3a12525ca57c400eb2777dfbc5b528 Dart d1 = m_map.template phi<2112>(d0); - for (int i=1; i< nx; ++i) + for (unsigned int i = 1; i < nx; ++i) { Dart d2 = createHexa(); m_tableVertDarts.push_back(d2); - m_map.sewVolumes(d1,d2); + m_map.sewVolumes(d1, d2); d1 = m_map.template phi<2112>(d2); } @@ -92,20 +87,20 @@ Dart Primitive3D::HexaGrid1Topo(int nx) } template -Dart Primitive3D::HexaGrid2Topo( int nx, int ny) +Dart Primitive3D::HexaGrid2Topo(unsigned int nx, unsigned int ny) { // creation premiere ligne Dart d0 = HexaGrid1Topo(nx); Dart d1 = m_map.template phi<112>(d0); - for (int i=1; i< ny; ++i) + for (unsigned int i = 1; i < ny; ++i) { // creation ligne suivante Dart d2 = HexaGrid1Topo(nx); - Dart d3 = m_map.phi2(d2); + Dart d3 = m_map.phi2(d2); // couture des deux lignes de cubes - for (int i=0; i< nx; ++i) + for (unsigned int i = 0; i < nx; ++i) { m_map.sewVolumes(d1,d3); d1 = m_map.template phi<11232>(d1); @@ -118,7 +113,7 @@ Dart Primitive3D::HexaGrid2Topo( int nx, int ny) // add last row of vertices (y = ny) int index = m_tableVertDarts.size()-(nx+1); // pos of last inserted row of dart - for (int i = 0; i< nx; ++i) + for (unsigned int i = 0; i < nx; ++i) { Dart dd = m_tableVertDarts[index++]; dd =m_map.template phi<112>(dd); @@ -129,13 +124,11 @@ Dart Primitive3D::HexaGrid2Topo( int nx, int ny) dd =m_map.template phi<211>(dd); m_tableVertDarts.push_back(dd); - return d0; } - template -Dart Primitive3D::hexaGrid_topo( int nx, int ny, int nz) +Dart Primitive3D::hexaGrid_topo(unsigned int nx, unsigned int ny, unsigned int nz) { m_kind = HEXAGRID; m_nx = nx; @@ -143,23 +136,22 @@ Dart Primitive3D::hexaGrid_topo( int nx, int ny, int nz) m_nz = nz; m_tableVertDarts.clear(); m_tableVertDarts.reserve((nx+1)*(ny+1)*(nz+1)); - Dart d0 = HexaGrid2Topo(nx,ny); Dart d1 = m_map.template phi<12>(d0); - for (int i=1; i< nz; ++i) + for (unsigned int i = 1; i < nz; ++i) { // creation grille suivante Dart d2 = HexaGrid2Topo(nx,ny); Dart d3 = m_map.phi2(m_map.phi_1(d2)); // couture des deux grilles 2D de cubes - for (int j=0; j< ny; ++j) + for (unsigned int j = 0; j < ny; ++j) { Dart da = d1; Dart db = d3; - for (int k=0; k< nx; ++k) + for (unsigned int k = 0; k < nx; ++k) { m_map.sewVolumes(da,db); da = m_map.template phi<11232>(da); @@ -175,21 +167,20 @@ Dart Primitive3D::hexaGrid_topo( int nx, int ny, int nz) } // add last slice of vertices to the table - int nb = (nx+1)*(ny+1); // nb of vertices in one slice XY - int index = nb*(nz-1); // last slice - for (int i=0; i < nb; ++i) + unsigned int nb = (nx+1)*(ny+1); // nb of vertices in one slice XY + unsigned int index = nb*(nz-1); // last slice + for (unsigned int i = 0; i < nb; ++i) { Dart dd = m_tableVertDarts[index++]; - dd =m_map.phi2(dd); + dd = m_map.phi2(dd); m_tableVertDarts.push_back(dd); } return d0; } - template -void Primitive3D::embedHexaGrid( float x, float y, float z) +void Primitive3D::embedHexaGrid(float x, float y, float z) { if (m_kind != HEXAGRID) { @@ -201,25 +192,24 @@ void Primitive3D::embedHexaGrid( float x, float y, float z) float dy = y/float(m_ny); float dz = z/float(m_nz); - int nbs = (m_nx+1)*(m_ny+1); + unsigned int nbs = (m_nx+1)*(m_ny+1); - for(int i=0; i<=m_nz; ++i) + for(unsigned int i = 0; i <= m_nz; ++i) { - for(int j=0; j<=m_ny; ++j) + for(unsigned int j = 0; j <= m_ny; ++j) { - for(int k=0; k<=m_nx;++k) + for(unsigned int k = 0; k <= m_nx; ++k) { typename PFP::VEC3 pos(-x/2.0f + dx*float(k), -y/2.0f + dy*float(j), -z/2.0f + dz*float(i)); Dart d = m_tableVertDarts[ i*nbs+j*(m_nx+1)+k ]; - m_map.embedNewCell(VERTEX,d); + m_map.embedNewCell(VERTEX, d); m_positions[d] = pos; } } } } - template void Primitive3D::transform(const Geom::Matrix44f& matrice) { @@ -240,6 +230,8 @@ void Primitive3D::transform(const Geom::Matrix44f& matrice) // } //} -}//end namespace -}//end namespace -}//end namespace +} // namespace Modelisation + +} // namespace Algo + +} // namespace CGoGN diff --git a/include/Topology/generic/traversor1.h b/include/Topology/generic/traversor1.h index efd1512120c05db116eef83dc70b9a54987b8107..bffe9663467630e0eb83aab805d1a2f7a2ebed92 100644 --- a/include/Topology/generic/traversor1.h +++ b/include/Topology/generic/traversor1.h @@ -46,26 +46,11 @@ private: Dart d2 ; public: - Traversor1VE(MAP& map, Dart dart) : m(map), start(dart) - { - d2 = m.phi_1(start) ; - if(d2 == start) // 1 edge loop case - d2 = NIL ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - if(current == start) - current = d2 ; - else - current = NIL ; - } - return current ; - } + Traversor1VE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the vertices adjacent to a given vertex through sharing a common edge @@ -79,32 +64,11 @@ private: Dart d2 ; public: - Traversor1VVaE(MAP& map, Dart dart) : m(map) - { - start = m.phi_1(dart) ; - if(start == dart) // 1 edge loop case - start = NIL ; - else - { - d2 = m.phi1(dart) ; - if(d2 == start) // 2 edges loop case - d2 = NIL ; - } - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - if(current == start) - current = d2 ; - else - current = NIL ; - } - return current ; - } + Traversor1VVaE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; /******************************************************************************* @@ -123,26 +87,11 @@ private: Dart d2 ; public: - Traversor1EV(MAP& map, Dart dart) : m(map), start(dart) - { - d2 = m.phi1(start) ; - if(d2 == start) // 1 edge loop case - d2 = NIL ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - if(current == start) - current = d2 ; - else - current = NIL ; - } - return current ; - } + Traversor1EV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the edges adjacent to a given edge through sharing a common vertex @@ -156,34 +105,15 @@ private: Dart d2 ; public: - Traversor1EEaV(MAP& map, Dart dart) : m(map) - { - start = m.phi_1(dart) ; - if(start == dart) // 1 edge loop case - start = NIL ; - else - { - d2 = m.phi1(dart) ; - if(d2 == start) // 2 edges loop case - d2 = NIL ; - } - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - if(current == start) - current = d2 ; - else - current = NIL ; - } - return current ; - } + Traversor1EEaV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; } // namespace CGoGN +#include "Topology/generic/traversor1.hpp" + #endif diff --git a/include/Topology/generic/traversor1.hpp b/include/Topology/generic/traversor1.hpp new file mode 100644 index 0000000000000000000000000000000000000000..42b906b046d38862737f752e84acdea3433eeda4 --- /dev/null +++ b/include/Topology/generic/traversor1.hpp @@ -0,0 +1,192 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg * +* * +* This library is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by the * +* Free Software Foundation; either version 2.1 of the License, or (at your * +* option) any later version. * +* * +* This library is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this library; if not, write to the Free Software Foundation, * +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * +* * +* Web site: http://cgogn.u-strasbg.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor1VE + +template +Traversor1VE::Traversor1VE(MAP& map, Dart dart) : m(map), start(dart) +{ + d2 = m.phi_1(start) ; + if(d2 == start) // 1 edge loop case + d2 = NIL ; +} + +template +Dart Traversor1VE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor1VE::end() +{ + return NIL ; +} + +template +Dart Traversor1VE::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +// Traversor1VVaE + +template +Traversor1VVaE::Traversor1VVaE(MAP& map, Dart dart) : m(map) +{ + start = m.phi_1(dart) ; + if(start == dart) // 1 edge loop case + start = NIL ; + else + { + d2 = m.phi1(dart) ; + if(d2 == start) // 2 edges loop case + d2 = NIL ; + } +} + +template +Dart Traversor1VVaE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor1VVaE::end() +{ + return NIL ; +} + +template +Dart Traversor1VVaE::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +/******************************************************************************* + EDGE CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor1EV + +template +Traversor1EV::Traversor1EV(MAP& map, Dart dart) : m(map), start(dart) +{ + d2 = m.phi1(start) ; + if(d2 == start) // 1 edge loop case + d2 = NIL ; +} + +template +Dart Traversor1EV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor1EV::end() +{ + return NIL ; +} + +template +Dart Traversor1EV::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +// Traversor1EEaV + +template +Traversor1EEaV::Traversor1EEaV(MAP& map, Dart dart) : m(map) +{ + start = m.phi_1(dart) ; + if(start == dart) // 1 edge loop case + start = NIL ; + else + { + d2 = m.phi1(dart) ; + if(d2 == start) // 2 edges loop case + d2 = NIL ; + } +} + +template +Dart Traversor1EEaV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor1EEaV::end() +{ + return NIL ; +} + +template +Dart Traversor1EEaV::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +} // namespace CGoGN diff --git a/include/Topology/generic/traversor2.h b/include/Topology/generic/traversor2.h index 1a4b09caa18fe5cbbe97b0748f675aa534b7f77f..956d1f29de253afd9b0b535d25237df83ead7893 100644 --- a/include/Topology/generic/traversor2.h +++ b/include/Topology/generic/traversor2.h @@ -44,21 +44,11 @@ private: Dart current ; public: - Traversor2VE(MAP& map, Dart dart) : m(map), start(dart) - {} - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.alpha1(current) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2VE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the faces incident to a given vertex @@ -71,26 +61,11 @@ private: Dart current ; public: - Traversor2VF(MAP& map, Dart dart) : m(map), start(dart) - { - if(m.isBoundaryMarked(start)) // jump over a boundary face - start = m.alpha1(start) ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.alpha1(current) ; - if(m.isBoundaryMarked(current)) // jump over a boundary face - current = m.alpha1(current) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2VF(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the vertices adjacent to a given vertex through sharing a common edge @@ -103,23 +78,11 @@ private: Dart current ; public: - Traversor2VVaE(MAP& map, Dart dart) : m(map) - { - start = m.phi2(dart) ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi_1(m.phi2(current)) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2VVaE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the vertices adjacent to a given vertex through sharing a common face @@ -134,38 +97,11 @@ private: Dart stop ; public: - Traversor2VVaF(MAP& map, Dart dart) : m(map) - { - if(m.isBoundaryMarked(dart)) - dart = m.alpha1(dart) ; - start = m.phi1(m.phi1(dart)) ; - if(start == dart) - start = m.phi1(dart) ; - stop = dart ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi1(current) ; - if(current == stop) - { - Dart d = m.alpha1(current) ; - if(m.isBoundaryMarked(d)) // jump over a boundary face - d = m.alpha1(d) ; - current = m.phi1(m.phi1(d)) ; - if(current == d) - current = m.phi1(d) ; - stop = d ; - } - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2VVaF(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; /******************************************************************************* @@ -182,21 +118,11 @@ private: Dart current ; public: - Traversor2EV(MAP& map, Dart dart) : m(map), start(dart) - {} - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi2(current) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2EV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the faces incident to a given edge @@ -209,24 +135,11 @@ private: Dart current ; public: - Traversor2EF(MAP& map, Dart dart) : m(map), start(dart) - { - if(m.isBoundaryMarked(start)) - start = m.phi2(current) ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi2(current) ; - if(current == start || m.isBoundaryMarked(current)) // do not consider a boundary face - current = NIL ; - } - return current ; - } + Traversor2EF(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the edges adjacent to a given edge through sharing a common vertex @@ -241,27 +154,11 @@ private: Dart stop1, stop2 ; public: - Traversor2EEaV(MAP& map, Dart dart) : m(map) - { - start = m.alpha1(dart) ; - stop1 = dart ; - stop2 = m.phi2(dart) ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.alpha1(current) ; - if(current == stop1) - current = m.alpha1(stop2) ; - else if(current == stop2) - current = NIL ; - } - return current ; - } + Traversor2EEaV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the edges adjacent to a given edge through sharing a common face @@ -276,27 +173,11 @@ private: Dart stop1, stop2 ; public: - Traversor2EEaF(MAP& map, Dart dart) : m(map) - { - start = m.phi1(dart) ; - stop1 = dart ; - stop2 = m.phi2(dart) ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi1(current) ; - if(current == stop1) - current = m.phi1(stop2) ; - else if(current == stop2) - current = NIL ; - } - return current ; - } + Traversor2EEaF(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; /******************************************************************************* @@ -313,21 +194,11 @@ private: Dart current ; public: - Traversor2FV(MAP& map, Dart dart) : m(map), start(dart) - {} - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi1(current) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2FV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the edges incident to a given face @@ -340,21 +211,11 @@ private: Dart current ; public: - Traversor2FE(MAP& map, Dart dart) : m(map), start(dart) - {} - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.phi1(current) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2FE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the faces adjacent to a given face through sharing a common vertex @@ -369,45 +230,11 @@ private: Dart stop ; public: - Traversor2FFaV(MAP& map, Dart dart) : m(map) - { - start = m.alpha1(m.alpha1(dart)) ; - current = start ; - if(start == dart) - { - stop = m.alpha1(dart) ; - start = next() ; - } - stop = dart ; - if(m.isBoundaryMarked(start)) - start = next() ; - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - current = m.alpha1(current) ; - if(current == stop) - { - Dart d = m.phi1(current) ; - current = m.alpha1(m.alpha1(d)) ; - if(current == d) - { - stop = m.alpha1(d) ; - return next() ; - } - stop = d ; - if(m.isBoundaryMarked(current)) - return next() ; - } - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2FFaV(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; // Traverse the faces adjacent to a given face through sharing a common edge @@ -420,34 +247,15 @@ private: Dart current ; public: - Traversor2FFaE(MAP& map, Dart dart) : m(map) - { - start = m.phi2(dart) ; - while(start != NIL && m.isBoundaryMarked(start)) - { - start = m.phi2(m.phi1(m.phi2(start))) ; - if(start == m.phi2(dart)) - start = NIL ; - } - } - - Dart begin() { current = start ; return current ; } - Dart end() { return NIL ; } - Dart next() - { - if(current != NIL) - { - do - { - current = m.phi2(m.phi1(m.phi2(current))) ; - } while(m.isBoundaryMarked(current)) ; - if(current == start) - current = NIL ; - } - return current ; - } + Traversor2FFaE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; } ; } // namespace CGoGN +#include "Topology/generic/traversor2.hpp" + #endif diff --git a/include/Topology/generic/traversor2.hpp b/include/Topology/generic/traversor2.hpp new file mode 100644 index 0000000000000000000000000000000000000000..0b6ddb004458de39a7e7000b0894f872117c7934 --- /dev/null +++ b/include/Topology/generic/traversor2.hpp @@ -0,0 +1,486 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg * +* * +* This library is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by the * +* Free Software Foundation; either version 2.1 of the License, or (at your * +* option) any later version. * +* * +* This library is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this library; if not, write to the Free Software Foundation, * +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * +* * +* Web site: http://cgogn.u-strasbg.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor2VE + +template +Traversor2VE::Traversor2VE(MAP& map, Dart dart) : m(map), start(dart) +{} + +template +Dart Traversor2VE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2VE::end() +{ + return NIL ; +} + +template +Dart Traversor2VE::next() +{ + if(current != NIL) + { + current = m.alpha1(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2VF + +template +Traversor2VF::Traversor2VF(MAP& map, Dart dart) : m(map), start(dart) +{ + if(m.isBoundaryMarked(start)) // jump over a boundary face + start = m.alpha1(start) ; +} + +template +Dart Traversor2VF::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2VF::end() +{ + return NIL ; +} + +template +Dart Traversor2VF::next() +{ + if(current != NIL) + { + current = m.alpha1(current) ; + if(m.isBoundaryMarked(current)) // jump over a boundary face + current = m.alpha1(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2VVaE + +template +Traversor2VVaE::Traversor2VVaE(MAP& map, Dart dart) : m(map) +{ + start = m.phi2(dart) ; +} + +template +Dart Traversor2VVaE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2VVaE::end() +{ + return NIL ; +} + +template +Dart Traversor2VVaE::next() +{ + if(current != NIL) + { + current = m.phi_1(m.phi2(current)) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2VVaF + +template +Traversor2VVaF::Traversor2VVaF(MAP& map, Dart dart) : m(map) +{ + if(m.isBoundaryMarked(dart)) + dart = m.alpha1(dart) ; + start = m.phi1(m.phi1(dart)) ; + if(start == dart) + start = m.phi1(dart) ; + stop = dart ; +} + +template +Dart Traversor2VVaF::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2VVaF::end() +{ + return NIL ; +} + +template +Dart Traversor2VVaF::next() +{ + if(current != NIL) + { + current = m.phi1(current) ; + if(current == stop) + { + Dart d = m.alpha1(current) ; + if(m.isBoundaryMarked(d)) // jump over a boundary face + d = m.alpha1(d) ; + current = m.phi1(m.phi1(d)) ; + if(current == d) + current = m.phi1(d) ; + stop = d ; + } + if(current == start) + current = NIL ; + } + return current ; +} + +/******************************************************************************* + EDGE CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor2EV + +template +Traversor2EV::Traversor2EV(MAP& map, Dart dart) : m(map), start(dart) +{} + +template +Dart Traversor2EV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2EV::end() +{ + return NIL ; +} + +template +Dart Traversor2EV::next() +{ + if(current != NIL) + { + current = m.phi2(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2EF + +template +Traversor2EF::Traversor2EF(MAP& map, Dart dart) : m(map), start(dart) +{ + if(m.isBoundaryMarked(start)) + start = m.phi2(current) ; +} + +template +Dart Traversor2EF::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2EF::end() +{ + return NIL ; +} + +template +Dart Traversor2EF::next() +{ + if(current != NIL) + { + current = m.phi2(current) ; + if(current == start || m.isBoundaryMarked(current)) // do not consider a boundary face + current = NIL ; + } + return current ; +} + +// Traversor2EEaV + +template +Traversor2EEaV::Traversor2EEaV(MAP& map, Dart dart) : m(map) +{ + start = m.alpha1(dart) ; + stop1 = dart ; + stop2 = m.phi2(dart) ; +} + +template +Dart Traversor2EEaV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2EEaV::end() +{ + return NIL ; +} + +template +Dart Traversor2EEaV::next() +{ + if(current != NIL) + { + current = m.alpha1(current) ; + if(current == stop1) + current = m.alpha1(stop2) ; + else if(current == stop2) + current = NIL ; + } + return current ; +} + +// Traversor2EEaF + +template +Traversor2EEaF::Traversor2EEaF(MAP& map, Dart dart) : m(map) +{ + start = m.phi1(dart) ; + stop1 = dart ; + stop2 = m.phi2(dart) ; +} + +template +Dart Traversor2EEaF::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2EEaF::end() +{ + return NIL ; +} + +template +Dart Traversor2EEaF::next() +{ + if(current != NIL) + { + current = m.phi1(current) ; + if(current == stop1) + current = m.phi1(stop2) ; + else if(current == stop2) + current = NIL ; + } + return current ; +} + +/******************************************************************************* + FACE CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor2FV + +template +Traversor2FV::Traversor2FV(MAP& map, Dart dart) : m(map), start(dart) +{} + +template +Dart Traversor2FV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2FV::end() +{ + return NIL ; +} + +template +Dart Traversor2FV::next() +{ + if(current != NIL) + { + current = m.phi1(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2FE + +template +Traversor2FE::Traversor2FE(MAP& map, Dart dart) : m(map), start(dart) +{} + +template +Dart Traversor2FE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2FE::end() +{ + return NIL ; +} + +template +Dart Traversor2FE::next() +{ + if(current != NIL) + { + current = m.phi1(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2FFaV + +template +Traversor2FFaV::Traversor2FFaV(MAP& map, Dart dart) : m(map) +{ + start = m.alpha1(m.alpha1(dart)) ; + current = start ; + if(start == dart) + { + stop = m.alpha1(dart) ; + start = next() ; + } + stop = dart ; + if(m.isBoundaryMarked(start)) + start = next() ; +} + +template +Dart Traversor2FFaV::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2FFaV::end() +{ + return NIL ; +} + +template +Dart Traversor2FFaV::next() +{ + if(current != NIL) + { + current = m.alpha1(current) ; + if(current == stop) + { + Dart d = m.phi1(current) ; + current = m.alpha1(m.alpha1(d)) ; + if(current == d) + { + stop = m.alpha1(d) ; + return next() ; + } + stop = d ; + if(m.isBoundaryMarked(current)) + return next() ; + } + if(current == start) + current = NIL ; + } + return current ; +} + +// Traversor2FFaE + +template +Traversor2FFaE::Traversor2FFaE(MAP& map, Dart dart) : m(map) +{ + start = m.phi2(dart) ; + while(start != NIL && m.isBoundaryMarked(start)) + { + start = m.phi2(m.phi1(m.phi2(start))) ; + if(start == m.phi2(dart)) + start = NIL ; + } +} + +template +Dart Traversor2FFaE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor2FFaE::end() +{ + return NIL ; +} + +template +Dart Traversor2FFaE::next() +{ + if(current != NIL) + { + do + { + current = m.phi2(m.phi1(m.phi2(current))) ; + } while(m.isBoundaryMarked(current)) ; + if(current == start) + current = NIL ; + } + return current ; +} + +} // namespace CGoGN diff --git a/include/Topology/generic/traversor3.h b/include/Topology/generic/traversor3.h new file mode 100644 index 0000000000000000000000000000000000000000..aed8457f33668453f7758144c811fbb736fa11e9 --- /dev/null +++ b/include/Topology/generic/traversor3.h @@ -0,0 +1,110 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg * +* * +* This library is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by the * +* Free Software Foundation; either version 2.1 of the License, or (at your * +* option) any later version. * +* * +* This library is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this library; if not, write to the Free Software Foundation, * +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * +* * +* Web site: http://cgogn.u-strasbg.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +#ifndef __TRAVERSOR3_H__ +#define __TRAVERSOR3_H__ + +#include "Topology/generic/dart.h" + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// Traverse the edges incident to a given vertex +template +class Traversor3VE +{ +private: + MAP& m ; + Dart start ; + Dart current ; + +public: + Traversor3VE(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +// Traverse the faces incident to a given vertex +template +class Traversor3VF +{ +private: + MAP& m ; + Dart start ; + Dart current ; + +public: + Traversor3VF(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +// Traverse the volumes incident to a given vertex +template +class Traversor3VW +{ +private: + MAP& m ; + Dart start ; + Dart current ; + +public: + Traversor3VW(MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +/******************************************************************************* + EDGE CENTERED TRAVERSALS +*******************************************************************************/ + + + +/******************************************************************************* + FACE CENTERED TRAVERSALS +*******************************************************************************/ + + + +/******************************************************************************* + VOLUME CENTERED TRAVERSALS +*******************************************************************************/ + + + +} // namespace CGoGN + +#include "Topology/generic/traversor3.hpp" + +#endif diff --git a/include/Topology/generic/traversor3.hpp b/include/Topology/generic/traversor3.hpp new file mode 100644 index 0000000000000000000000000000000000000000..87de3e24aa13e4c73b0eae1cfed9182d0e2d05c2 --- /dev/null +++ b/include/Topology/generic/traversor3.hpp @@ -0,0 +1,63 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg * +* * +* This library is free software; you can redistribute it and/or modify it * +* under the terms of the GNU Lesser General Public License as published by the * +* Free Software Foundation; either version 2.1 of the License, or (at your * +* option) any later version. * +* * +* This library is distributed in the hope that it will be useful, but WITHOUT * +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * +* for more details. * +* * +* You should have received a copy of the GNU Lesser General Public License * +* along with this library; if not, write to the Free Software Foundation, * +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * +* * +* Web site: http://cgogn.u-strasbg.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// Traversor3VE + +template +Traversor3VE::Traversor3VE(MAP& map, Dart dart) : m(map), start(dart) +{} + +template +Dart Traversor3VE::begin() +{ + current = start ; + return current ; +} + +template +Dart Traversor3VE::end() +{ + return NIL ; +} + +template +Dart Traversor3VE::next() +{ + if(current != NIL) + { + current = m.alpha1(current) ; + if(current == start) + current = NIL ; + } + return current ; +} + +} // namespace CGoGN diff --git a/include/Topology/gmap/embeddedGMap3.h b/include/Topology/gmap/embeddedGMap3.h index 307341f4838d7761d6bf112087045012eca784e7..4e8f3d70ba0db255e59a2f112a07200ed4f43562 100644 --- a/include/Topology/gmap/embeddedGMap3.h +++ b/include/Topology/gmap/embeddedGMap3.h @@ -49,7 +49,7 @@ public: * The attributes attached to the edge of d are kept on the resulting edge * The attributes attached to the volume of d are kept on the resulting volume */ - void sewFaces(Dart d, Dart e); + void sewFaces(Dart d, Dart e, bool withBoundary = true); /** * The attributes attached to the vertices of the old edge of d are duplicated on the vertices of both resulting edges @@ -87,8 +87,7 @@ public: virtual unsigned int closeHole(Dart d); - virtual void closeMap(DartMarker &marker); - +// virtual void closeMap(DartMarker &marker); virtual bool check(); } ; diff --git a/include/Topology/gmap/gmap1.hpp b/include/Topology/gmap/gmap1.hpp index 03a7579774252795d793367c9b514a3189c22539..7e606648be3501f63cac03b6cdd2f2a920c7c79c 100644 --- a/include/Topology/gmap/gmap1.hpp +++ b/include/Topology/gmap/gmap1.hpp @@ -149,10 +149,10 @@ inline void GMap1::beta1unsew(Dart d) inline void GMap1::cutEdge(Dart d) { + Dart dd = beta0(d) ; Dart e = newDart(); Dart f = newDart(); beta1sew(e, f) ; - Dart dd = beta0(d) ; beta0unsew(d) ; beta0sew(e, d) ; beta0sew(f, dd) ; @@ -254,7 +254,7 @@ inline unsigned int GMap1::faceDegree(Dart d) return count ; } -bool GMap1::isFaceTriangle(Dart d) +inline bool GMap1::isFaceTriangle(Dart d) { return (phi1(d) != d) && (phi1(phi1(phi1(d))) == d) ; } @@ -279,7 +279,7 @@ inline bool GMap1::foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thr return false; } -bool GMap1::foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int thread) +inline bool GMap1::foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int thread) { Dart it = d ; do @@ -291,7 +291,7 @@ bool GMap1::foreach_dart_of_oriented_face(Dart d, FunctorType& f, unsigned int t return false ; } -bool GMap1::foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread) +inline bool GMap1::foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread) { return foreach_dart_of_oriented_face(d, f, thread) || foreach_dart_of_oriented_face(beta0(d), f, thread) ; } @@ -301,7 +301,7 @@ inline bool GMap1::foreach_dart_of_volume(Dart d, FunctorType& f, unsigned int t return foreach_dart_of_face(d, f, thread) ; } -bool GMap1::foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread) +inline bool GMap1::foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread) { return foreach_dart_of_face(d, f, thread) ; } diff --git a/include/Topology/map/map2.h b/include/Topology/map/map2.h index 6fdaa24de1284ad75304e99fbbe7fec6c1122b93..20839239f8a91e6fc31c9a6626244b557552dac9 100644 --- a/include/Topology/map/map2.h +++ b/include/Topology/map/map2.h @@ -396,20 +396,6 @@ public: * @param f the functor to apply */ bool foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread = 0); - - //! - /*! TODO Ajout a valider - * restreint aux complexes simpliciaux - * Apply a functor on the all darts in the set of the star from orbit - */ - bool foreach_dart_of_star(Dart d, unsigned int orbit, FunctorType& f, unsigned int thread = 0); - - //! - /*! TODO Ajout a valider - * restreint aux complexes simpliciaux - * Apply a functor on the all darts in the set of the link from orbit - */ - bool foreach_dart_of_link(Dart d, unsigned int orbit, FunctorType& f, unsigned int thread = 0); //@} /*! @name Close map after import or creation diff --git a/src/Topology/gmap/embeddedGMap3.cpp b/src/Topology/gmap/embeddedGMap3.cpp index c8ed5c4e60533f8910f1f6cad478bd4c8c37f784..5e555f3a21761b6bc9a92a0d0da5c945858144ac 100644 --- a/src/Topology/gmap/embeddedGMap3.cpp +++ b/src/Topology/gmap/embeddedGMap3.cpp @@ -82,9 +82,9 @@ void EmbeddedGMap3::cutEdge(Dart d) } } -void EmbeddedGMap3::sewFaces(Dart d, Dart e) +void EmbeddedGMap3::sewFaces(Dart d, Dart e, bool withBoundary) { - GMap3::sewFaces(d,e); + GMap3::sewFaces(d, e, withBoundary); unsigned int vEmb; if (isOrbitEmbedded(VERTEX)) @@ -324,22 +324,22 @@ unsigned int EmbeddedGMap3::closeHole(Dart d) return nbE; } -void EmbeddedGMap3::closeMap(DartMarker &marker) -{ - GMap3::closeMap(marker); - - for(Dart d = begin() ; d != end() ; next(d)) - { - if(marker.isMarked(d)) - { - if(isOrbitEmbedded(VERTEX)) - { - copyDartEmbedding(VERTEX, d, phi1(phi3(d))); - copyDartEmbedding(VERTEX, beta0(d), beta0(phi1(phi3(d)))); - } - } - } -} +//void EmbeddedGMap3::closeMap(DartMarker &marker) +//{ +// GMap3::closeMap(marker); +// +// for(Dart d = begin() ; d != end() ; next(d)) +// { +// if(marker.isMarked(d)) +// { +// if(isOrbitEmbedded(VERTEX)) +// { +// copyDartEmbedding(VERTEX, d, phi1(phi3(d))); +// copyDartEmbedding(VERTEX, beta0(d), beta0(phi1(phi3(d)))); +// } +// } +// } +//} bool EmbeddedGMap3::check() { diff --git a/src/Topology/map/embeddedMap3.cpp b/src/Topology/map/embeddedMap3.cpp index 5c82939059f3dca3007753fe72dfede03bfdc0ff..55664126c307f2d50661b3806c075b3eecdc8a97 100644 --- a/src/Topology/map/embeddedMap3.cpp +++ b/src/Topology/map/embeddedMap3.cpp @@ -30,7 +30,7 @@ namespace CGoGN { -bool EmbeddedMap3::deleteVertex(Dart d) +Dart EmbeddedMap3::deleteVertex(Dart d) { //the merge volumes inside deleteVertex merges the volume embedding diff --git a/src/Topology/map/map2.cpp b/src/Topology/map/map2.cpp index 1155a3fc225f24f53401acd730b3744924bde5f6..15a7bcda97d8777a89ac28f3ad27906bf25d5279 100644 --- a/src/Topology/map/map2.cpp +++ b/src/Topology/map/map2.cpp @@ -743,65 +743,6 @@ bool Map2::foreach_dart_of_oriented_volume(Dart d, FunctorType& f, unsigned int return found; } -bool Map2::foreach_dart_of_star(Dart d, unsigned int orbit, FunctorType& f, unsigned int thread) -{ - if(orbit == VERTEX) - { - - Dart dNext = d; - do - { - if(Map1::foreach_dart_of_face(dNext,f,thread)) - return true; - - dNext = alpha1(dNext); - } while (dNext != d); - - return false; - } - else if(orbit == FACE) - { - if(Map1::foreach_dart_of_face(d,f,thread)) - return true; - - if(phi2(d) != d) - return Map1::foreach_dart_of_face(phi2(d),f,thread); - else - return false; - } - - return false; -} - -bool Map2::foreach_dart_of_link(Dart d, unsigned int orbit, FunctorType& f, unsigned int thread) -{ - if(orbit == VERTEX) - { - Dart dNext = d; - do - { - if(Map2::foreach_dart_of_edge(phi1(dNext),f,thread)) - return true; - - dNext = alpha1(dNext); - } while (dNext != d); - - return false; - } - else if(orbit == FACE) - { - if(Map2::foreach_dart_of_vertex(phi_1(d),f,thread)) - return true; - - if(Map2::foreach_dart_of_vertex(phi_1(phi2(d)),f,thread)) - return true; - - return false; - } - - return false; -} - /*! @name Close map after import or creation * These functions must be used with care, generally only by import/creation algorithms *************************************************************************/ diff --git a/src/Topology/map/map3.cpp b/src/Topology/map/map3.cpp index 7cb73c40b7df72e4a50b157e46ed07cc4616536c..9b12d62899ed0bc09899fe2edd86badea7896076 100644 --- a/src/Topology/map/map3.cpp +++ b/src/Topology/map/map3.cpp @@ -91,14 +91,12 @@ Dart Map3::deleteVertex(Dart d) } } - for(std::vector::iterator it = fstore.begin() ; it != fstore.end() ; ++it) { if(!mergeVolumes(*it)) return NIL; } - return NIL; } @@ -546,9 +544,9 @@ bool Map3::foreach_dart_of_oriented_vertex(Dart d, FunctorType& f, unsigned int DartMarkerStore mv(*this,thread); // Lock a marker bool found = false; // Last functor return value - std::vector darts_list; //Darts that are traversed + std::vector darts_list; // Darts that are traversed darts_list.reserve(512); - darts_list.push_back(d); //Start with the dart d + darts_list.push_back(d); // Start with the dart d mv.mark(d); for(std::vector::iterator darts = darts_list.begin(); !found && darts != darts_list.end() ; ++darts) @@ -584,8 +582,10 @@ bool Map3::foreach_dart_of_oriented_vertex(Dart d, FunctorType& f, unsigned int bool Map3::foreach_dart_of_edge(Dart d, FunctorType& f, unsigned int thread) { Dart dNext = d; - do { - if (Map2::foreach_dart_of_edge(dNext,f,thread)) return true; + do + { + if (Map2::foreach_dart_of_edge(dNext, f, thread)) + return true; dNext = alpha2(dNext); } while (dNext != d); return false; @@ -629,10 +629,12 @@ bool Map3::foreach_dart_of_open_edge(Dart d, FunctorType& f, unsigned int thread bool Map3::foreach_dart_of_face(Dart d, FunctorType& f, unsigned int thread) { - if (foreach_dart_of_oriented_face(d,f,thread)) return true; + if (foreach_dart_of_oriented_face(d, f, thread)) + return true; Dart d3 = phi3(d); - if (d3 != d) return foreach_dart_of_oriented_face(d3,f,thread); + if (d3 != d) + return foreach_dart_of_oriented_face(d3, f, thread); return false; } @@ -676,7 +678,6 @@ bool Map3::foreach_dart_of_cc(Dart d, FunctorType& f, unsigned int thread) found = f(d1); // functor say finish } - return found; }