From e75796dde0dee69949b343a6f5f8b8376871c218 Mon Sep 17 00:00:00 2001 From: Pierre Kraemer Date: Thu, 19 Jun 2014 12:05:39 +0200 Subject: [PATCH] create traversor1 Virtual version --- include/Topology/generic/cells.h | 54 +++++ .../Topology/generic/traversor/traversor1.h | 9 +- .../generic/traversor/traversor1Virt.h | 122 +++++++++++ .../generic/traversor/traversor1Virt.hpp | 192 ++++++++++++++++++ .../Topology/generic/traversor/traversor2.h | 28 ++- .../Topology/generic/traversor/traversor2.hpp | 63 ------ .../Topology/generic/traversor/traversor3.h | 6 +- .../generic/traversor/traversorFactory.hpp | 11 +- 8 files changed, 392 insertions(+), 93 deletions(-) create mode 100644 include/Topology/generic/traversor/traversor1Virt.h create mode 100644 include/Topology/generic/traversor/traversor1Virt.hpp diff --git a/include/Topology/generic/cells.h b/include/Topology/generic/cells.h index 69db1428..b4ce3bee 100644 --- a/include/Topology/generic/cells.h +++ b/include/Topology/generic/cells.h @@ -26,6 +26,8 @@ #define CELLS_H_ #include "Topology/generic/dart.h" +//#include "Topology/generic/traversor/traversor2.h" +//#include "Topology/generic/traversor/traversor3.h" namespace CGoGN { @@ -58,6 +60,58 @@ public: friend std::ostream& operator<<( std::ostream &out, const Cell& fa ) { return out << fa.dart; } inline bool valid() const { return !dart.isNil(); } + +// template +// inline void foreach_incident(MAP& map, FUNC f) +// { +// switch (MAP::DIMENSION) +// { +// case 2 : foreach_incident2(map, f); break; +// case 3 : foreach_incident3(map, f); break; +// } +// } + +// template +// inline void foreach_adjacent(MAP& map, FUNC f) +// { +// switch (MAP::DIMENSION) +// { +// case 2 : foreach_adjacent2(map, f); break; +// case 3 : foreach_adjacent3(map, f); break; +// } +// } + +// template +// inline void foreach_incident2(MAP& map, FUNC f) +// { +// IncidentTrav2 trav(const_cast(map), *this); +// for (Cell c = trav.t.begin(), e = trav.t.end(); c.dart != e.dart; c = trav.t.next()) +// f(c); +// } + +// template +// inline void foreach_adjacent2(MAP& map, FUNC f) +// { +// AdjacentTrav2 trav(const_cast(map), *this); +// for (Cell c = trav.t.begin(), e = trav.t.end(); c.dart != e.dart; c = trav.t.next()) +// f(c); +// } + +// template +// inline void foreach_incident3(MAP& map, FUNC f, bool forceDartMarker = false, unsigned int thread = 0) +// { +// Traversor3XY trav(const_cast(map),*this,forceDartMarker,thread); +// for (Cell c = trav.begin(), e = trav.end(); c.dart != e.dart; c = trav.next()) +// f(c); +// } + +// template +// inline void foreach_adjacent3(MAP& map, FUNC f, bool forceDartMarker = false, unsigned int thread = 0) +// { +// Traversor3XXaY trav(const_cast(map),*this,forceDartMarker,thread); +// for (Cell c = trav.begin(), e = trav.end(); c.dart != e.dart; c = trav.next()) +// f(c); +// } }; typedef Cell Vertex; diff --git a/include/Topology/generic/traversor/traversor1.h b/include/Topology/generic/traversor/traversor1.h index 89d4b098..d6d3f0a8 100644 --- a/include/Topology/generic/traversor/traversor1.h +++ b/include/Topology/generic/traversor/traversor1.h @@ -26,7 +26,6 @@ #define __TRAVERSOR1_H__ #include "Topology/generic/dart.h" -#include "Topology/generic/traversor/traversorGen.h" namespace CGoGN { @@ -37,7 +36,7 @@ namespace CGoGN // Traverse the edges incident to a given vertex template -class Traversor1VE: public Traversor +class Traversor1VE { private: const MAP& m ; @@ -56,7 +55,7 @@ public: // Traverse the vertices adjacent to a given vertex through sharing a common edge template -class Traversor1VVaE: public Traversor +class Traversor1VVaE { private: const MAP& m ; @@ -79,7 +78,7 @@ public: // Traverse the vertices incident to a given edge template -class Traversor1EV: public Traversor +class Traversor1EV { private: const MAP& m ; @@ -98,7 +97,7 @@ public: // Traverse the edges adjacent to a given edge through sharing a common vertex template -class Traversor1EEaV: public Traversor +class Traversor1EEaV { private: const MAP& m ; diff --git a/include/Topology/generic/traversor/traversor1Virt.h b/include/Topology/generic/traversor/traversor1Virt.h new file mode 100644 index 00000000..e14feced --- /dev/null +++ b/include/Topology/generic/traversor/traversor1Virt.h @@ -0,0 +1,122 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2012, 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.unistra.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +#ifndef __VTraversor1_VIRT_H__ +#define __VTraversor1_VIRT_H__ + +#include "Topology/generic/dart.h" +#include "Topology/generic/traversor/traversorGen.h" + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// Traverse the edges incident to a given vertex +template +class VTraversor1VE : public Traversor +{ +private: + const MAP& m ; + Dart start ; + Dart current ; + + Dart d2 ; + +public: + VTraversor1VE(const MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +// Traverse the vertices adjacent to a given vertex through sharing a common edge +template +class VTraversor1VVaE : public Traversor +{ +private: + const MAP& m ; + Dart start ; + Dart current ; + + Dart d2 ; + +public: + VTraversor1VVaE(const MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +/******************************************************************************* + EDGE CENTERED TRAVERSALS +*******************************************************************************/ + +// Traverse the vertices incident to a given edge +template +class VTraversor1EV : public Traversor +{ +private: + const MAP& m ; + Dart start ; + Dart current ; + + Dart d2 ; + +public: + VTraversor1EV(const MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +// Traverse the edges adjacent to a given edge through sharing a common vertex +template +class VTraversor1EEaV : public Traversor +{ +private: + const MAP& m ; + Dart start ; + Dart current ; + + Dart d2 ; + +public: + VTraversor1EEaV(const MAP& map, Dart dart) ; + + Dart begin() ; + Dart end() ; + Dart next() ; +} ; + +} // namespace CGoGN + +#include "Topology/generic/traversor/traversor1Virt.hpp" + +#endif diff --git a/include/Topology/generic/traversor/traversor1Virt.hpp b/include/Topology/generic/traversor/traversor1Virt.hpp new file mode 100644 index 00000000..7856bfcc --- /dev/null +++ b/include/Topology/generic/traversor/traversor1Virt.hpp @@ -0,0 +1,192 @@ +/******************************************************************************* +* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps * +* version 0.1 * +* Copyright (C) 2009-2012, 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.unistra.fr/ * +* Contact information: cgogn@unistra.fr * +* * +*******************************************************************************/ + +namespace CGoGN +{ + +/******************************************************************************* + VERTEX CENTERED TRAVERSALS +*******************************************************************************/ + +// VTraversor1VE + +template +VTraversor1VE::VTraversor1VE(const MAP& map, Dart dart) : m(map), start(dart) +{ + d2 = m.phi_1(start) ; + if(d2 == start) // 1 edge loop case + d2 = NIL ; +} + +template +Dart VTraversor1VE::begin() +{ + current = start ; + return current ; +} + +template +Dart VTraversor1VE::end() +{ + return NIL ; +} + +template +Dart VTraversor1VE::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +// VTraversor1VVaE + +template +VTraversor1VVaE::VTraversor1VVaE(const 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 VTraversor1VVaE::begin() +{ + current = start ; + return current ; +} + +template +Dart VTraversor1VVaE::end() +{ + return NIL ; +} + +template +Dart VTraversor1VVaE::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +/******************************************************************************* + EDGE CENTERED TRAVERSALS +*******************************************************************************/ + +// VTraversor1EV + +template +VTraversor1EV::VTraversor1EV(const MAP& map, Dart dart) : m(map), start(dart) +{ + d2 = m.phi1(start) ; + if(d2 == start) // 1 edge loop case + d2 = NIL ; +} + +template +Dart VTraversor1EV::begin() +{ + current = start ; + return current ; +} + +template +Dart VTraversor1EV::end() +{ + return NIL ; +} + +template +Dart VTraversor1EV::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +// VTraversor1EEaV + +template +VTraversor1EEaV::VTraversor1EEaV(const 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 VTraversor1EEaV::begin() +{ + current = start ; + return current ; +} + +template +Dart VTraversor1EEaV::end() +{ + return NIL ; +} + +template +Dart VTraversor1EEaV::next() +{ + if(current != NIL) + { + if(current == start) + current = d2 ; + else + current = NIL ; + } + return current ; +} + +} // namespace CGoGN diff --git a/include/Topology/generic/traversor/traversor2.h b/include/Topology/generic/traversor/traversor2.h index ff2ac1c8..7263522f 100644 --- a/include/Topology/generic/traversor/traversor2.h +++ b/include/Topology/generic/traversor/traversor2.h @@ -26,9 +26,7 @@ #define __TRAVERSOR2_H__ #include "Topology/generic/dart.h" -//#include "Topology/generic/traversorGen.h" #include "Topology/generic/cells.h" -#include namespace CGoGN { @@ -39,7 +37,7 @@ namespace CGoGN // Traverse the edges incident to a given vertex template -class Traversor2VE//: public Traversor +class Traversor2VE { private: const MAP& m ; @@ -57,7 +55,7 @@ public: // Traverse the faces incident to a given vertex template -class Traversor2VF //: public Traversor +class Traversor2VF { private: const MAP& m ; @@ -75,7 +73,7 @@ public: // Traverse the vertices adjacent to a given vertex through sharing a common edge template -class Traversor2VVaE //: public Traversor +class Traversor2VVaE { private: const MAP& m ; @@ -93,7 +91,7 @@ public: // Traverse the vertices adjacent to a given vertex through sharing a common face template -class Traversor2VVaF //: public Traversor +class Traversor2VVaF { private: const MAP& m ; @@ -117,7 +115,7 @@ public: // Traverse the vertices incident to a given edge template -class Traversor2EV //: public Traversor +class Traversor2EV { private: const MAP& m ; @@ -135,7 +133,7 @@ public: // Traverse the faces incident to a given edge template -class Traversor2EF //: public Traversor +class Traversor2EF { private: const MAP& m ; @@ -153,7 +151,7 @@ public: // Traverse the edges adjacent to a given edge through sharing a common vertex template -class Traversor2EEaV //: public Traversor +class Traversor2EEaV { private: const MAP& m ; @@ -173,7 +171,7 @@ public: // Traverse the edges adjacent to a given edge through sharing a common face template -class Traversor2EEaF //: public Traversor +class Traversor2EEaF { private: const MAP& m ; @@ -197,7 +195,7 @@ public: // Traverse the vertices incident to a given face template -class Traversor2FV //: public Traversor +class Traversor2FV { private: const MAP& m ; @@ -224,7 +222,7 @@ public: // Traverse the vertices incident to a given face template -class Traversor2FE //: public Traversor +class Traversor2FE { private: const MAP& m ; @@ -243,7 +241,7 @@ public: // Traverse the faces adjacent to a given face through sharing a common vertex template -class Traversor2FFaV //: public Traversor +class Traversor2FFaV { private: const MAP& m ; @@ -264,7 +262,7 @@ public: // Traverse the faces adjacent to a given face through sharing a common edge // Warning mult-incidence is not managed (some faces can be send several times) template -class Traversor2FFaE //: public Traversor +class Traversor2FFaE { private: const MAP& m ; @@ -413,8 +411,6 @@ inline void foreach_adjacent2(MAP& map, Cell c, FUNC f) f(c); } - - } // namespace CGoGN #include "Topology/generic/traversor/traversor2.hpp" diff --git a/include/Topology/generic/traversor/traversor2.hpp b/include/Topology/generic/traversor/traversor2.hpp index 83a9457b..b2830dd3 100644 --- a/include/Topology/generic/traversor/traversor2.hpp +++ b/include/Topology/generic/traversor/traversor2.hpp @@ -708,67 +708,4 @@ Face Traversor2FFaE::next() return current ; } -//template -//Traversor2* Traversor2::createIncident(MAP& map, Dart dart, unsigned int orbX, unsigned int orbY) -//{ -// int code = 0x100*(orbX-VERTEX) + orbY-VERTEX; -// -// switch(code) -// { -// case 0x0001: -// return new Traversor2VE(map,dart); -// break; -// case 0x0002: -// return new Traversor2VF(map,dart); -// break; -// case 0x0100: -// return new Traversor2EV(map,dart); -// break; -// case 0x0102: -// return new Traversor2EF(map,dart); -// break; -// case 0x0200: -// return new Traversor2FV(map,dart); -// break; -// case 0x0201: -// return new Traversor2FE(map,dart); -// break; -// default: -// return NULL; -// break; -// } -// return NULL; -//} -// -//template -//Traversor2* Traversor2::createAdjacent(MAP& map, Dart dart, unsigned int orbX, unsigned int orbY) -//{ -// int code = 0x100*(orbX-VERTEX) + orbY-VERTEX; -// switch(code) -// { -// case 0x0001: -// return new Traversor2VVaE(map,dart); -// break; -// case 0x0002: -// return new Traversor2VVaF(map,dart); -// break; -// case 0x0100: -// return new Traversor2EEaV(map,dart); -// break; -// case 0x0102: -// return new Traversor2EEaF(map,dart); -// break; -// case 0x0200: -// return new Traversor2FFaV(map,dart); -// break; -// case 0x0201: -// return new Traversor2FFaE(map,dart); -// break; -// default: -// return NULL; -// break; -// } -// return NULL; -//} - } // namespace CGoGN diff --git a/include/Topology/generic/traversor/traversor3.h b/include/Topology/generic/traversor/traversor3.h index a9afa3b9..b2f84cbf 100644 --- a/include/Topology/generic/traversor/traversor3.h +++ b/include/Topology/generic/traversor/traversor3.h @@ -26,9 +26,9 @@ #define __TRAVERSOR3_H__ #include "Topology/generic/dart.h" +#include "Topology/generic/cells.h" #include "Topology/generic/cellmarker.h" #include "Topology/generic/traversor/traversorCell.h" -//#include "Topology/generic/traversor/traversorGen.h" #include "Topology/generic/traversor/traversorDoO.h" namespace CGoGN @@ -62,7 +62,7 @@ public: * Traverse all Y incident to X */ template -class Traversor3XY//: public Traversor +class Traversor3XY { private: const MAP& m_map ; @@ -92,7 +92,7 @@ public: * Traverse all X adjacent to X by an Y */ template -class Traversor3XXaY//: public Traversor +class Traversor3XXaY { private: const MAP& m_map ; diff --git a/include/Topology/generic/traversor/traversorFactory.hpp b/include/Topology/generic/traversor/traversorFactory.hpp index d94a31e4..0b3f2d8a 100644 --- a/include/Topology/generic/traversor/traversorFactory.hpp +++ b/include/Topology/generic/traversor/traversorFactory.hpp @@ -22,7 +22,7 @@ * * *******************************************************************************/ -#include "Topology/generic/traversor/traversor1.h" +#include "Topology/generic/traversor/traversor1Virt.h" #include "Topology/generic/traversor/traversor2Virt.h" #include "Topology/generic/traversor/traversor3Virt.h" #include "Topology/generic/traversor/traversorCellVirt.h" @@ -97,12 +97,11 @@ Traversor* TraversorFactory::createIncident(MAP& map, Dart dart, unsigned i return new VTraversor2FE(map,dart); break; - case 0x101: - return new Traversor1VE(map,dart); + return new VTraversor1VE(map,dart); break; case 0x110: - return new Traversor1EV(map,dart); + return new VTraversor1EV(map,dart); break; default: return NULL; @@ -178,10 +177,10 @@ Traversor* TraversorFactory::createAdjacent(MAP& map, Dart dart, unsigned i break; case 0x101: - return new Traversor1VVaE(map,dart); + return new VTraversor1VVaE(map,dart); break; case 0x110: - return new Traversor1EEaV(map,dart); + return new VTraversor1EEaV(map,dart); break; default: return NULL; -- GitLab