Coupure prévue mardi 3 Août au matin pour maintenance du serveur. Nous faisons au mieux pour que celle-ci soit la plus brève possible.

Commit abc26d95 authored by untereiner's avatar untereiner
Browse files

bug correction : mr dart duplication in container

parent ab23f706
...@@ -279,20 +279,9 @@ public: ...@@ -279,20 +279,9 @@ public:
void operator() () void operator() ()
{ {
std::cout << "lerp edges" << std::endl;
TraversorE<typename PFP::MAP> trav(m_map) ; TraversorE<typename PFP::MAP> trav(m_map) ;
std::cout << "begin = " << m_map.begin() << std::endl;
std::cout << "end = " << m_map.end() << std::endl;
std::cout << "begin = " << trav.begin() << std::endl;
std::cout << "end = " << trav.end() << std::endl;
std::cout << "next = " << trav.next() << std::endl;
for (Dart d = trav.begin(); d != trav.end(); d = trav.next()) for (Dart d = trav.begin(); d != trav.end(); d = trav.next())
{ {
std::cout << "edges" << std::endl;
typename PFP::VEC3 p = (m_position[d] + m_position[m_map.phi2(d)]) * typename PFP::REAL(0.5); typename PFP::VEC3 p = (m_position[d] + m_position[m_map.phi2(d)]) * typename PFP::REAL(0.5);
m_map.incCurrentLevel() ; m_map.incCurrentLevel() ;
...@@ -318,7 +307,6 @@ public: ...@@ -318,7 +307,6 @@ public:
void operator() () void operator() ()
{ {
std::cout << "lerp faces" << std::endl;
TraversorF<typename PFP::MAP> trav(m_map) ; TraversorF<typename PFP::MAP> trav(m_map) ;
for (Dart d = trav.begin(); d != trav.end(); d = trav.next()) for (Dart d = trav.begin(); d != trav.end(); d = trav.next())
{ {
...@@ -349,7 +337,6 @@ public: ...@@ -349,7 +337,6 @@ public:
void operator() () void operator() ()
{ {
std::cout << "lerp volumes" << std::endl;
TraversorW<typename PFP::MAP> trav(m_map) ; TraversorW<typename PFP::MAP> trav(m_map) ;
for (Dart d = trav.begin(); d != trav.end(); d = trav.next()) for (Dart d = trav.begin(); d != trav.end(); d = trav.next())
{ {
......
...@@ -85,7 +85,7 @@ public: ...@@ -85,7 +85,7 @@ public:
//! //!
/* /*
*/ */
//void addNewLevelHexa(bool embedNewVertices); void addNewLevelHexa(bool embedNewVertices);
//! //!
/* /*
......
...@@ -94,15 +94,12 @@ void Map3MR_PrimalRegular<PFP>::splitSurfaceInVolume(std::vector<Dart>& vd, bool ...@@ -94,15 +94,12 @@ void Map3MR_PrimalRegular<PFP>::splitSurfaceInVolume(std::vector<Dart>& vd, bool
// embed the vertex embedded from the origin volume to the new darts // embed the vertex embedded from the origin volume to the new darts
if(m_map.template isOrbitEmbedded<VERTEX>()) if(m_map.template isOrbitEmbedded<VERTEX>())
{ {
m_map.copyDartEmbedding<VERTEX>(m_map.phi2(dit), m_map.phi1(dit)); m_map.template copyDartEmbedding<VERTEX>(m_map.phi2(dit), m_map.phi1(dit));
m_map.copyDartEmbedding<VERTEX>(m_map.phi2(dit2), m_map.phi1(dit2)); m_map.template copyDartEmbedding<VERTEX>(m_map.phi2(dit2), m_map.phi1(dit2));
} }
} }
} }
//Algo::Modelisation::Tetrahedralization::isTetrahedron<PFP>(m_map, d);
/************************************************************************ /************************************************************************
* Level creation * * Level creation *
************************************************************************/ ************************************************************************/
...@@ -137,148 +134,147 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices) ...@@ -137,148 +134,147 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// embedNewCell<VERTEX>(d) ; // embedNewCell<VERTEX>(d) ;
// } // }
std::cout << "cut edge" << std::endl;
m_map.cutEdge(d) ; m_map.cutEdge(d) ;
travE.skip(d) ; travE.skip(d) ;
travE.skip(m_map.phi1(d)) ; travE.skip(m_map.phi1(d)) ;
// When importing MR files // When importing MR files
if(embedNewVertices) // if(embedNewVertices)
m_map.template embedNewCell<VERTEX>(m_map.phi1(d)) ; // m_map.template embedNewCell<VERTEX>(m_map.phi1(d)) ;
} }
// //2. split faces - triangular faces //2. split faces - triangular faces
// TraversorF<typename PFP::MAP> travF(m_map) ; TraversorF<typename PFP::MAP> travF(m_map) ;
// for (Dart d = travF.begin(); d != travF.end(); d = travF.next()) for (Dart d = travF.begin(); d != travF.end(); d = travF.next())
// { {
// Dart old = d ; Dart old = d ;
// if(m_map.getDartLevel(old) == m_map.getMaxLevel()) if(m_map.getDartLevel(old) == m_map.getMaxLevel())
// old = m_map.phi1(old) ; old = m_map.phi1(old) ;
//
// Dart dd = m_map.phi1(old) ; Dart dd = m_map.phi1(old) ;
// Dart e = m_map.phi1(m_map.phi1(dd)) ; Dart e = m_map.phi1(m_map.phi1(dd)) ;
// m_map.splitFace(dd, e) ; m_map.splitFace(dd, e) ;
// travF.skip(dd) ; travF.skip(dd) ;
//
// dd = e ; dd = e ;
// e = m_map.phi1(m_map.phi1(dd)) ; e = m_map.phi1(m_map.phi1(dd)) ;
// m_map.splitFace(dd, e) ; m_map.splitFace(dd, e) ;
// travF.skip(dd) ; travF.skip(dd) ;
//
// dd = e ; dd = e ;
// e = m_map.phi1(m_map.phi1(dd)) ; e = m_map.phi1(m_map.phi1(dd)) ;
// m_map.splitFace(dd, e) ; m_map.splitFace(dd, e) ;
// travF.skip(dd) ; travF.skip(dd) ;
//
// travF.skip(e) ; travF.skip(e) ;
// } }
// //3. create inside volumes //3. create inside volumes
// m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ; m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
// TraversorW<typename PFP::MAP> traW(m_map); TraversorW<typename PFP::MAP> traW(m_map);
// for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next()) for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
// { {
// Traversor3WV<typename PFP::MAP> traWV(m_map, dit); Traversor3WV<typename PFP::MAP> traWV(m_map, dit);
//
// for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next()) for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
// { {
// m_map.setCurrentLevel(m_map.getMaxLevel()) ; m_map.setCurrentLevel(m_map.getMaxLevel()) ;
// Dart f1 = m_map.phi1(ditWV); Dart f1 = m_map.phi1(ditWV);
// Dart e = ditWV; Dart e = ditWV;
// std::vector<Dart> v ; std::vector<Dart> v ;
//
// do do
// { {
// v.push_back(m_map.phi1(e)); v.push_back(m_map.phi1(e));
// e = m_map.phi2(m_map.phi_1(e)); e = m_map.phi2(m_map.phi_1(e));
// } }
// while(e != ditWV); while(e != ditWV);
//
// m_map.splitVolume(v) ; m_map.splitVolume(v) ;
//
// //if is not a tetrahedron //if is not a tetrahedron
// unsigned int fdeg = m_map.faceDegree(m_map.phi2(f1)); unsigned int fdeg = m_map.faceDegree(m_map.phi2(f1));
// if(fdeg > 3) if(fdeg > 3)
// { {
// Dart old = m_map.phi2(m_map.phi1(ditWV)); Dart old = m_map.phi2(m_map.phi1(ditWV));
// Dart dd = m_map.phi1(old) ; Dart dd = m_map.phi1(old) ;
// m_map.splitFace(old,dd) ; m_map.splitFace(old,dd) ;
//
// Dart ne = m_map.phi1(old); Dart ne = m_map.phi1(old);
//
// m_map.cutEdge(ne); m_map.cutEdge(ne);
//
// Dart stop = m_map.phi2(m_map.phi1(ne)); Dart stop = m_map.phi2(m_map.phi1(ne));
// ne = m_map.phi2(ne); ne = m_map.phi2(ne);
// do do
// { {
// dd = m_map.phi1(m_map.phi1(ne)); dd = m_map.phi1(m_map.phi1(ne));
//
// m_map.splitFace(ne, dd) ; m_map.splitFace(ne, dd) ;
//
// ne = m_map.phi2(m_map.phi_1(ne)); ne = m_map.phi2(m_map.phi_1(ne));
// dd = m_map.phi1(dd); dd = m_map.phi1(dd);
// } }
// while(dd != stop); while(dd != stop);
// } }
//
// m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ; m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
// } }
// } }
//
// m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ; m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
// for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next()) for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
// { {
// Traversor3WV<typename PFP::MAP> traWV(m_map, dit); Traversor3WV<typename PFP::MAP> traWV(m_map, dit);
//
// for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next()) for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
// { {
// m_map.setCurrentLevel(m_map.getMaxLevel()) ; m_map.setCurrentLevel(m_map.getMaxLevel()) ;
// Dart x = m_map.phi_1(m_map.phi2(m_map.phi1(ditWV))); Dart x = m_map.phi_1(m_map.phi2(m_map.phi1(ditWV)));
//
// if(!Algo::Modelisation::Tetrahedralization::isTetrahedron<PFP>(m_map,x)) if(!Algo::Modelisation::Tetrahedralization::isTetrahedron<PFP>(m_map,x))
// { {
// DartMarkerStore me(m_map); DartMarkerStore me(m_map);
//
// Dart f = x; Dart f = x;
//
// do do
// { {
// Dart f3 = m_map.phi3(f); Dart f3 = m_map.phi3(f);
//
// if(!me.isMarked(f3)) if(!me.isMarked(f3))
// { {
// Dart tmp = m_map.phi_1(m_map.phi2(m_map.phi_1(m_map.phi2(m_map.phi_1(f3))))); //future voisin par phi2 Dart tmp = m_map.phi_1(m_map.phi2(m_map.phi_1(m_map.phi2(m_map.phi_1(f3))))); //future voisin par phi2
//
// Dart f32 = m_map.phi2(f3); Dart f32 = m_map.phi2(f3);
// swapEdges(f3, tmp); swapEdges(f3, tmp);
//
// me.markOrbit<EDGE>(f3); me.markOrbit<EDGE>(f3);
// me.markOrbit<EDGE>(f32); me.markOrbit<EDGE>(f32);
// } }
//
// f = m_map.phi2(m_map.phi_1(f)); f = m_map.phi2(m_map.phi_1(f));
// }while(f != x); }while(f != x);
//
// // When importing MR files // When importing MR files
// if(embedNewVertices) //if(embedNewVertices)
// m_map.template embedNewCell<VERTEX>(x) ; // m_map.template embedNewCell<VERTEX>(x) ;
// } }
// m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ; m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
// } }
// } }
m_map.popLevel() ; m_map.popLevel() ;
} }
//void Map3MR_PrimalRegular::addNewLevelHexa(bool embedNewVertices) template <typename PFP>
//{ void Map3MR_PrimalRegular<PFP>::addNewLevelHexa(bool embedNewVertices)
// pushLevel(); {
// m_map.pushLevel();
// addLevel();
// setCurrentLevel(getMaxLevel()); m_map.addLevel();
// m_map.setCurrentLevel(m_map.getMaxLevel());
// if(!shareVertexEmbeddings) // if(!shareVertexEmbeddings)
// { // {
// //create the new level with the old one // //create the new level with the old one
...@@ -288,12 +284,12 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices) ...@@ -288,12 +284,12 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// (*m_embeddings[VERTEX])[index] = EMBNULL ; // set vertex embedding to EMBNULL if no sharing // (*m_embeddings[VERTEX])[index] = EMBNULL ; // set vertex embedding to EMBNULL if no sharing
// } // }
// } // }
//
// //subdivision //subdivision
// //1. cut edges //1. cut edges
// TraversorE<Map3MR_PrimalRegular> travE(*this); TraversorE<typename PFP::MAP> travE(m_map);
// for (Dart d = travE.begin(); d != travE.end(); d = travE.next()) for (Dart d = travE.begin(); d != travE.end(); d = travE.next())
// { {
// if(!shareVertexEmbeddings) // if(!shareVertexEmbeddings)
// { // {
// if(getEmbedding<VERTEX>(d) == EMBNULL) // if(getEmbedding<VERTEX>(d) == EMBNULL)
...@@ -301,140 +297,140 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices) ...@@ -301,140 +297,140 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// if(getEmbedding<VERTEX>(phi1(d)) == EMBNULL) // if(getEmbedding<VERTEX>(phi1(d)) == EMBNULL)
// embedNewCell<VERTEX>(phi1(d)) ; // embedNewCell<VERTEX>(phi1(d)) ;
// } // }
//
// cutEdge(d) ; m_map.cutEdge(d) ;
// travE.skip(d) ; travE.skip(d) ;
// travE.skip(phi1(d)) ; travE.skip(m_map.phi1(d)) ;
//
//// When importing MR files : activated for DEBUG // When importing MR files : activated for DEBUG
// if(embedNewVertices) // if(embedNewVertices)
// embedNewCell<VERTEX>(phi1(d)) ; // embedNewCell<VERTEX>(phi1(d)) ;
// } }
//
//// //2. split faces - quadrangule faces //2. split faces - quadrangule faces
//// TraversorF<Map3MR_PrimalRegular> travF(*this) ; TraversorF<typename PFP::MAP> travF(m_map) ;
//// for (Dart d = travF.begin(); d != travF.end(); d = travF.next()) for (Dart d = travF.begin(); d != travF.end(); d = travF.next())
//// { {
//// Dart old = d; Dart old = d;
//// if(getDartLevel(old) == getMaxLevel()) if(m_map.getDartLevel(old) == m_map.getMaxLevel())
//// old = phi1(old) ; old = m_map.phi1(old) ;
////
//// Dart dd = phi1(old) ; Dart dd = m_map.phi1(old) ;
//// Dart next = phi1(phi1(dd)) ; Dart next = m_map.phi1(m_map.phi1(dd)) ;
//// splitFace(dd, next) ; // insert a first edge m_map.splitFace(dd, next) ; // insert a first edge
////
//// Dart ne = phi2(phi_1(dd)) ; Dart ne = m_map.phi2(m_map.phi_1(dd)) ;
//// cutEdge(ne) ; // cut the new edge to insert the central vertex m_map.cutEdge(ne) ; // cut the new edge to insert the central vertex
//// travF.skip(dd) ; travF.skip(dd) ;
////
////// When importing MR files : activated for DEBUG // When importing MR files : activated for DEBUG
//// if(embedNewVertices) // if(embedNewVertices)
//// embedNewCell<VERTEX>(phi1(ne)) ; // embedNewCell<VERTEX>(phi1(ne)) ;
////
//// dd = phi1(phi1(next)) ; dd = m_map.phi1(m_map.phi1(next)) ;
//// while(dd != ne) // turn around the face and insert new edges while(dd != ne) // turn around the face and insert new edges
//// { // linked to the central vertex { // linked to the central vertex
//// Dart tmp = phi1(ne) ; Dart tmp = m_map.phi1(ne) ;
//// splitFace(tmp, dd) ; m_map.splitFace(tmp, dd) ;
//// travF.skip(tmp) ; travF.skip(tmp) ;
//// dd = phi1(phi1(dd)) ; dd = m_map.phi1(m_map.phi1(dd)) ;
//// } }
//// travF.skip(ne) ; travF.skip(ne) ;
//// } }
//
//// //3. create inside volumes //3. create inside volumes
//// setCurrentLevel(getMaxLevel() - 1) ; m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
//// TraversorW<Map3MR_PrimalRegular> traW(*this); TraversorW<typename PFP::MAP> traW(m_map);
//// for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next()) for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
//// { {
//// std::vector<std::pair<Dart, Dart> > subdividedFaces; std::vector<std::pair<Dart, Dart> > subdividedFaces;
//// subdividedFaces.reserve(64); subdividedFaces.reserve(64);
//// Dart centralDart = NIL; Dart centralDart = NIL;
////
//// Traversor3WV<Map3MR_PrimalRegular> traWV(*this, dit); Traversor3WV<typename PFP::MAP> traWV(m_map, dit);
//// for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next()) for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
//// { {
//// setCurrentLevel(getMaxLevel()) ; //Utile ? m_map.setCurrentLevel(m_map.getMaxLevel()) ; //Utile ?
////
//// Dart e = ditWV; Dart e = ditWV;
//// std::vector<Dart> v ; std::vector<Dart> v ;
////
//// do do
//// { {
//// v.push_back(phi1(e)); v.push_back(m_map.phi1(e));
//// v.push_back(phi1(phi1(e))); v.push_back(m_map.phi1(m_map.phi1(e)));
////
//// if(!Map2::isBoundaryEdge(phi1(e))) if(!m_map.PFP::MAP::ParentMap::isBoundaryEdge(m_map.phi1(e)))
//// subdividedFaces.push_back(std::pair<Dart,Dart>(phi1(e),phi2(phi1(e)))); subdividedFaces.push_back(std::pair<Dart,Dart>(m_map.phi1(e),m_map.phi2(m_map.phi1(e))));
////
//// if(!Map2::isBoundaryEdge(phi1(phi1(e)))) if(!m_map.PFP::MAP::ParentMap::isBoundaryEdge(m_map.phi1(m_map.phi1(e))))
//// subdividedFaces.push_back(std::pair<Dart,Dart>(phi1(phi1(e)),phi2(phi1(phi1(e))))); subdividedFaces.push_back(std::pair<Dart,Dart>(m_map.phi1(m_map.phi1(e)),m_map.phi2(m_map.phi1(m_map.phi1(e)))));
////
//// e = phi2(phi_1(e)); e = m_map.phi2(m_map.phi_1(e));
//// } }
//// while(e != ditWV); while(e != ditWV);
////
//// splitSurfaceInVolume(v); splitSurfaceInVolume(v);
////
//// Dart dd = phi2(phi1(ditWV)); Dart dd = m_map.phi2(m_map.phi1(ditWV));
//// Dart next = phi1(phi1(dd)) ; Dart next = m_map.phi1(m_map.phi1(dd)) ;
//// Map2::splitFace(dd, next) ; m_map.PFP::MAP::ParentMap::splitFace(dd, next) ;
////
//// Dart ne = phi2(phi_1(dd)); Dart ne = m_map.phi2(m_map.phi_1(dd));
//// Map2::cutEdge(ne) ; m_map.PFP::MAP::ParentMap::cutEdge(ne) ;
//// centralDart = phi1(ne); centralDart = m_map.phi1(ne);
////
//// dd = phi1(phi1(next)) ; dd = m_map.phi1(m_map.phi1(next)) ;
//// while(dd != ne) while(dd != ne)
//// { {
//// Dart tmp = phi1(ne) ; Dart tmp = m_map.phi1(ne) ;
//// Map2::splitFace(tmp, dd) ; m_map.PFP::MAP::ParentMap::splitFace(tmp, dd) ;
//// dd = phi1(phi1(dd)) ; dd = m_map.phi1(m_map.phi1(dd)) ;
//// } }
////
//// setCurrentLevel(getMaxLevel() - 1) ; //Utile ? m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ; //Utile ?
//// } }
////
//// setCurrentLevel(getMaxLevel()) ; m_map.setCurrentLevel(m_map.getMaxLevel()) ;
//// //4 couture des relations precedemment sauvegarde //4 couture des relations precedemment sauvegarde
//// for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedFaces.begin(); it != subdividedFaces.end(); ++it) for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedFaces.begin(); it != subdividedFaces.end(); ++it)
//// { {
//// Dart f1 = phi2((*it).first); Dart f1 = m_map.phi2((*it).first);
//// Dart f2 = phi2((*it).second); Dart f2 = m_map.phi2((*it).second);
////
//// //if(isBoundaryFace(f1) && isBoundaryFace(f2)) //if(isBoundaryFace(f1) && isBoundaryFace(f2))
//// if(phi3(f1) == f1 && phi3(f2) == f2) if(m_map.phi3(f1) == f1 && m_map.phi3(f2) == f2)