diff --git a/include/Topology/map/map2.h b/include/Topology/map/map2.h index 5906379c15dd739f43cfd1bc7be3f09760251728..82c877bfff443af3c5fdf3ff2bcd04b68d937562 100644 --- a/include/Topology/map/map2.h +++ b/include/Topology/map/map2.h @@ -95,6 +95,14 @@ protected: */ void phi2unsew(Dart d); + + //! merge a face that has been tag as boundary with existing boundary if needed + /* @param d a dart of the face + */ + void mergeFacewithBoundary(Dart d); + + + /*! @name Generator and Deletor * To generate or delete faces in a 2-map *************************************************************************/ diff --git a/include/Topology/map/map2.hpp b/include/Topology/map/map2.hpp index 6ec61a88122cdde0ec45f94eba897541a4359371..a5e5cc8cde31a1d1df0643f4ccf9a4caea441258 100644 --- a/include/Topology/map/map2.hpp +++ b/include/Topology/map/map2.hpp @@ -96,57 +96,55 @@ inline Dart Map2::alpha0(Dart d) return phi2(d) ; } -#ifdef NO_BOUND_MAP + inline Dart Map2::alpha1(Dart d) { return phi2(phi_1(d)) ; } -#else -// alpha1 avec bord -inline Dart Map2::alpha1(Dart d) -{ - Dart e = phi_1(d); - Dart f = phi2(e); - if (f != e) - return f; +// alpha1 avec bord: bye bye +//inline Dart Map2::alpha1(Dart d) +//{ +// Dart e = phi_1(d); +// Dart f = phi2(e); +// +// if (f != e) +// return f; +// +// f = d; +// e = phi2(f); +// while (e != f) +// { +// f = phi1(e); +// e = phi2(f); +// } +// return f; +//} - f = d; - e = phi2(f); - while (e != f) - { - f = phi1(e); - e = phi2(f); - } - return f; -} -#endif -#ifdef NO_BOUND_MAP inline Dart Map2::alpha_1(Dart d) { return phi1(phi2(d)) ; } -#else -// alpha_1 avec bord -inline Dart Map2::alpha_1(Dart d) -{ - Dart e = phi2(d); - - if (e != d) - return phi1(e); +// alpha_1 avec bord : bye bye !! +//inline Dart Map2::alpha_1(Dart d) +//{ +// Dart e = phi2(d); +// +// if (e != d) +// return phi1(e); +// +// e = d; +// Dart f = phi_1(d); +// while (phi2(f) != f) +// { +// e = phi2(f); +// f = phi_1(e); +// } +// return e; +//} - e = d; - Dart f = phi_1(d); - while (phi2(f) != f) - { - e = phi2(f); - f = phi_1(e); - } - return e; -} -#endif inline void Map2::phi2sew(Dart d, Dart e) { diff --git a/src/Topology/map/map2.cpp b/src/Topology/map/map2.cpp index 6775d58cd5c7440db9d0c5394a9b8fe2b9b85f2a..601edb088a7a2633ef5bcbe07e6a336dd724e722 100644 --- a/src/Topology/map/map2.cpp +++ b/src/Topology/map/map2.cpp @@ -31,15 +31,34 @@ namespace CGoGN * To generate or delete faces in a 2-map *************************************************************************/ -void Map2::deleteOrientedFace(Dart d) +void Map2::mergeFacewithBoundary(Dart d) { Dart e = d ; - do + do // foreach edge of face { - phi2unsew(e) ; // unsew the face of d - e = phi1(e) ; // from all its adjacent faces + Dart f = phi2(e); + if (isBoundaryMarked(f)) // if sewed to boundary + { + phi2unsew(e);// ?? not necessary + Dart ff = phi_1(f); + if (e != ff) + phi1sew(e, ff) ; // merge with it + Dart ee = phi_1(e); + if (f != ee) + phi1sew(f, ee) ; + deleteOrientedFace(e) ; + } + e = phi1(e) ; } while (e != d) ; - Map1::deleteOrientedFace(d); // delete the face +} + + +void Map2::deleteOrientedFace(Dart d) +{ + // tag face in boundary + boundaryMarkOrbit(FACE,d); + mergeFacewithBoundary(d); + } /*! @name Topological Operators