From e9e9949c2fccbdaaa9c9adf423d494aa8fcbc412 Mon Sep 17 00:00:00 2001 From: Pierre Kraemer Date: Thu, 9 Feb 2012 13:33:11 +0100 Subject: [PATCH] d.index -> dartIndex(d) !!! --- include/Topology/generic/genericmap.h | 5 + include/Topology/generic/genericmap.hpp | 4 +- include/Topology/generic/traversorCell.h | 188 +-------------------- include/Topology/generic/traversorCell.hpp | 17 +- include/Topology/map/map2.hpp | 5 +- src/Topology/generic/genericmap.cpp | 38 ++++- 6 files changed, 50 insertions(+), 207 deletions(-) diff --git a/include/Topology/generic/genericmap.h b/include/Topology/generic/genericmap.h index f28319da7..c147159cb 100644 --- a/include/Topology/generic/genericmap.h +++ b/include/Topology/generic/genericmap.h @@ -198,6 +198,11 @@ public: */ void addLevel() ; + /** + * add a resolution level and duplicate all darts (use only in MRMaps) + */ + void addLevelDuplicate() ; + /** * get the insertion level of a dart (use only in MRMaps) */ diff --git a/include/Topology/generic/genericmap.hpp b/include/Topology/generic/genericmap.hpp index 20cbfac0e..f144ba96a 100644 --- a/include/Topology/generic/genericmap.hpp +++ b/include/Topology/generic/genericmap.hpp @@ -46,7 +46,7 @@ inline void GenericMap::setCurrentLevel(unsigned int l) if(l < m_mrDarts.size()) m_mrCurrentLevel = l ; else - CGoGNout << "setCurrentLevel : try to access inexisting resolution level" << CGoGNendl ; + CGoGNout << "setCurrentLevel : try to access nonexistent resolution level" << CGoGNendl ; } inline void GenericMap::pushLevel() @@ -284,7 +284,7 @@ inline void GenericMap::next(Dart& d) do { m_mrattribs.next(d.index) ; - } while ((d.index != m_mrattribs.end() ) && (getDartLevel(d.index) > m_mrCurrentLevel)) ; + } while (d.index != m_mrattribs.end() && getDartLevel(d) > m_mrCurrentLevel) ; } else m_attribs[DART].next(d.index) ; diff --git a/include/Topology/generic/traversorCell.h b/include/Topology/generic/traversorCell.h index c25c97e1e..4c3f1dfad 100644 --- a/include/Topology/generic/traversorCell.h +++ b/include/Topology/generic/traversorCell.h @@ -31,189 +31,6 @@ namespace CGoGN { -// -//template -//class TraversorCell -//{ -//private: -// MAP& m ; -// unsigned int m_orbit ; -// DartMarker* dmark ; -// CellMarker* cmark ; -// Dart current ; -// bool firstTraversal ; -// const FunctorSelect& m_good ; -// -//public: -// TraversorCell(MAP& map, unsigned int orbit, const FunctorSelect& good = allDarts, bool forceDartMarker = false, unsigned int thread = 0) : -// m(map), m_orbit(orbit), dmark(NULL), cmark(NULL), current(NIL), firstTraversal(true), m_good(good) -// { -// if(!forceDartMarker && map.isOrbitEmbedded(m_orbit)) -// cmark = new CellMarker(map, m_orbit, thread) ; -// else -// dmark = new DartMarker(map, thread) ; -// } -// -// ~TraversorCell() -// { -// if(dmark) -// delete dmark ; -// else -// delete cmark ; -// } -// -// Dart begin() -// { -// if(!firstTraversal) -// { -// if(dmark) -// dmark->unmarkAll() ; -// else -// cmark->unmarkAll() ; -// } -// -// current = m.begin() ; -// while(current != m.end() && (m.isBoundaryMarked(current) || !m_good(current))) -// m.next(current) ; -// -// if(current == m.end()) -// current = NIL ; -// else -// { -// if(dmark) -// dmark->markOrbit(m_orbit, current) ; -// else -// cmark->mark(current) ; -// } -// -// firstTraversal = false ; -// return current ; -// } -// -// Dart end() { return NIL ; } -// -// Dart next() -// { -// if(current != NIL) -// { -// bool ismarked ; -// if(dmark) -// ismarked = dmark->isMarked(current) ; -// else -// ismarked = cmark->isMarked(current) ; -// -// while(current != NIL && (ismarked || m.isBoundaryMarked(current) || !m_good(current))) -// { -// m.next(current) ; -// if(current == m.end()) -// current = NIL ; -// else -// { -// if(dmark) -// ismarked = dmark->isMarked(current) ; -// else -// ismarked = cmark->isMarked(current) ; -// } -// } -// -// if(current != NIL) -// { -// if(dmark) -// dmark->markOrbit(m_orbit, current) ; -// else -// cmark->mark(current) ; -// } -// } -// return current ; -// } -// -// void mark(Dart d) -// { -// if(dmark) -// dmark->markOrbit(m_orbit, d) ; -// else -// cmark->mark(d) ; -// } -//} ; -// -//template -//class TraversorV : public TraversorCell -//{ -//public: -// TraversorV(MAP& m, const FunctorSelect& good = allDarts, unsigned int thread = 0) : TraversorCell(m, VERTEX, good, thread) -// {} -//}; -// -//template -//class TraversorE : public TraversorCell -//{ -//public: -// TraversorE(MAP& m, const FunctorSelect& good = allDarts, unsigned int thread = 0) : TraversorCell(m, EDGE, good, thread) -// {} -//}; -// -////template -////class TraversorOF : public TraversorCell -////{ -////public: -//// TraversorOF(MAP& m, const FunctorSelect& good = allDarts, unsigned int thread = 0) : TraversorCell(m, ORIENTED_FACE, good, thread) -//// {} -////}; -// -// -//template -//class TraversorF : public TraversorCell -//{ -//public: -// TraversorF(MAP& m, const FunctorSelect& good = allDarts, unsigned int thread = 0) : TraversorCell(m, FACE, good, thread) -// {} -//}; -// -//template -//class TraversorW : public TraversorCell -//{ -//public: -// TraversorW(MAP& m, const FunctorSelect& good = allDarts, unsigned int thread = 0) : TraversorCell(m, VOLUME, good, thread) -// {} -//}; -// -// -// -//template -//class TraversorDartsOfOrbit -//{ -//private: -// std::vector::iterator m_current; -// std::vector m_vd; -// -//public: -// TraversorDartsOfOrbit(MAP& map, unsigned int orbit, Dart d, unsigned int thread = 0) -// { -// m_vd.reserve(16); -// FunctorStoreNotBoundary fs(map,m_vd); -// map.foreach_dart_of_orbit(orbit, d, fs, thread); -// m_vd.push_back(NIL); -// m_current=m_vd.begin(); -// } -// -// Dart begin() -// { -// m_current=m_vd.begin(); -// return *m_current; -// } -// -// Dart end(){ return NIL;} -// -// Dart next() -// { -// if (*m_current != NIL) -// m_current++; -// return *m_current; -// } -//} ; - - - template class TraversorCell @@ -275,13 +92,12 @@ public: }; - template class TraversorDartsOfOrbit { private: - std::vector::iterator m_current; - std::vector m_vd; + std::vector::iterator m_current ; + std::vector m_vd ; public: TraversorDartsOfOrbit(MAP& map, unsigned int orbit, Dart d, unsigned int thread = 0) ; diff --git a/include/Topology/generic/traversorCell.hpp b/include/Topology/generic/traversorCell.hpp index c00e129f9..25192c1f3 100644 --- a/include/Topology/generic/traversorCell.hpp +++ b/include/Topology/generic/traversorCell.hpp @@ -27,7 +27,7 @@ namespace CGoGN template TraversorCell::TraversorCell(MAP& map, unsigned int orbit, const FunctorSelect& good, bool forceDartMarker, unsigned int thread) : -m(map), m_orbit(orbit), dmark(NULL), cmark(NULL), current(NIL), firstTraversal(true), m_good(good) + m(map), m_orbit(orbit), dmark(NULL), cmark(NULL), current(NIL), firstTraversal(true), m_good(good) { if(!forceDartMarker && map.isOrbitEmbedded(m_orbit)) cmark = new CellMarker(map, m_orbit, thread) ; @@ -73,10 +73,11 @@ Dart TraversorCell::begin() return current ; } - template -Dart TraversorCell::end() { return NIL ; } - +Dart TraversorCell::end() +{ + return NIL ; +} template Dart TraversorCell::next() @@ -124,12 +125,11 @@ void TraversorCell::mark(Dart d) } - template TraversorDartsOfOrbit::TraversorDartsOfOrbit(MAP& map, unsigned int orbit, Dart d, unsigned int thread) { m_vd.reserve(16); - FunctorStoreNotBoundary fs(map,m_vd); + FunctorStoreNotBoundary fs(map, m_vd); map.foreach_dart_of_orbit(orbit, d, fs, thread); m_vd.push_back(NIL); } @@ -137,7 +137,7 @@ TraversorDartsOfOrbit::TraversorDartsOfOrbit(MAP& map, unsigned int orbit, template Dart TraversorDartsOfOrbit::begin() { - m_current=m_vd.begin(); + m_current = m_vd.begin(); return *m_current; } @@ -155,5 +155,4 @@ Dart TraversorDartsOfOrbit::next() return *m_current; } -} - +} // namespace CGoGN diff --git a/include/Topology/map/map2.hpp b/include/Topology/map/map2.hpp index 7bb0c7ae7..b9109e630 100644 --- a/include/Topology/map/map2.hpp +++ b/include/Topology/map/map2.hpp @@ -67,14 +67,12 @@ inline void Map2::update_topo_shortcuts() inline Dart Map2::newDart() { Dart d = Map1::newDart() ; -// unsigned int d_index = dartIndex(d); (*m_phi2)[dartIndex(d)] = d ; return d ; } inline Dart Map2::phi2(Dart d) { -// unsigned int d_index = dartIndex(d); return (*m_phi2)[dartIndex(d)] ; } @@ -139,8 +137,7 @@ inline void Map2::phi2unsew(Dart d) unsigned int d_index = dartIndex(d); Dart e = (*m_phi2)[d_index] ; (*m_phi2)[d_index] = d ; - unsigned int e_index = dartIndex(e); - (*m_phi2)[e_index] = e ; + (*m_phi2)[dartIndex(e)] = e ; } /*! @name Topological Queries diff --git a/src/Topology/generic/genericmap.cpp b/src/Topology/generic/genericmap.cpp index 11df43e70..46f892fa8 100644 --- a/src/Topology/generic/genericmap.cpp +++ b/src/Topology/generic/genericmap.cpp @@ -168,17 +168,43 @@ void GenericMap::clear(bool removeAttrib) void GenericMap::addLevel() { - unsigned int level = m_mrDarts.size() ; + unsigned int newLevel = m_mrDarts.size() ; std::stringstream ss ; - ss << "MRdart_"<< level ; + ss << "MRdart_"<< newLevel ; AttributeMultiVector* amvMR = m_mrattribs.addAttribute(ss.str()) ; m_mrDarts.push_back(amvMR) ; + // copy the darts pointers of the previous level if(m_mrDarts.size() > 1) m_mrattribs.copyAttribute(amvMR->getIndex(), m_mrDarts[m_mrDarts.size() - 2]->getIndex()) ; } +void GenericMap::addLevelDuplicate() +{ + unsigned int newLevel = m_mrDarts.size() ; + std::stringstream ss ; + ss << "MRdart_"<< newLevel ; + AttributeMultiVector* amvMR = m_mrattribs.addAttribute(ss.str()) ; + + m_mrDarts.push_back(amvMR) ; + + // copy the darts pointers of the previous level + if(m_mrDarts.size() > 1) + m_mrattribs.copyAttribute(amvMR->getIndex(), m_mrDarts[newLevel - 1]->getIndex()) ; + + // duplicate all the darts in the new level + for(unsigned int i = m_mrattribs.begin(); i != m_mrattribs.end(); m_mrattribs.next(i)) + { + unsigned int oldi = amvMR->operator[](i) ; + unsigned int newi = m_attribs[DART].insertLine() ; + m_attribs[DART].copyLine(newi, oldi) ; + amvMR->operator[](i) = newi ; + for(unsigned int t = 0; t < m_nbThreads; ++t) + m_markTables[DART][t]->operator[](newi).clear() ; + } +} + /**************************************** * EMBEDDING MANAGEMENT * ****************************************/ @@ -204,7 +230,7 @@ void GenericMap::setDartEmbedding(unsigned int orbit, Dart d, unsigned int emb) if (emb != EMBNULL) m_attribs[orbit].refLine(emb); // affect the embedding to the dart - (*m_embeddings[orbit])[d.index] = emb ; + (*m_embeddings[orbit])[dartIndex(d)] = emb ; } /**************************************** @@ -783,17 +809,17 @@ void GenericMap::viewAttributesTables() void GenericMap::boundaryMark(Dart d) { - m_markTables[DART][0]->operator[](d.index).setMark(m_boundaryMarker); + m_markTables[DART][0]->operator[](dartIndex(d)).setMark(m_boundaryMarker); } void GenericMap::boundaryUnmark(Dart d) { - m_markTables[DART][0]->operator[](d.index).unsetMark(m_boundaryMarker); + m_markTables[DART][0]->operator[](dartIndex(d)).unsetMark(m_boundaryMarker); } bool GenericMap::isBoundaryMarked(Dart d) { - return m_markTables[DART][0]->operator[](d.index).testMark(m_boundaryMarker); + return m_markTables[DART][0]->operator[](dartIndex(d)).testMark(m_boundaryMarker); } void GenericMap::boundaryMarkOrbit(unsigned int orbit, Dart d) -- GitLab