Commit fd831b8a authored by Lionel Untereiner's avatar Lionel Untereiner

jout subdiv sqrt(3) volumique

parent bc65d8a4
......@@ -232,7 +232,7 @@ bool Map3MR<PFP>::faceIsSubdivided(Dart d)
if(edgesAreSubdivided)
{
m_map.incCurrentLevel() ;
if(m_map.getDartLevel(m_map.phi1(m_map.phi1(d))) == m_map.getCurrentLevel())
if(m_map.getDartLevel(m_map.phi1(m_map.phi1(d))) == m_map.getCurrentLevel()) //TODO a vérifier le phi1(phi1())
subd = true ;
m_map.decCurrentLevel() ;
}
......
......@@ -108,6 +108,8 @@ public:
*/
void addNewLevel();
void addNewLevelSqrt3(bool embedNewVertices = false);
//!
/*
*/
......
......@@ -133,85 +133,86 @@ void Map3MR<PFP>::splitSurfaceInVolume(std::vector<Dart>& vd, bool firstSideClos
/************************************************************************
* Level creation *
************************************************************************/
//template <typename PFP>
//void Map3MR<PFP>::addNewLevelSqrt3(bool embedNewVertices)
//{
// m_map.pushLevel();
//
// m_map.addLevelBack();
// m_map.duplicateDarts(m_map.getMaxLevel());
// m_map.setCurrentLevel(m_map.getMaxLevel());
//
// DartMarkerStore m(m_map);
//
// //
// // 1-4 flip of all tetrahedra
// //
// TraversorW<typename PFP::MAP> tW(m_map);
// for(Dart dit = tW.begin() ; dit != tW.end() ; dit = tW.next())
// {
// Traversor3WF<typename PFP::MAP> tWF(m_map, dit);
// for(Dart ditWF = tWF.begin() ; ditWF != tWF.end() ; ditWF = tWF.next())
// {
// if(!m_map.isBoundaryFace(ditWF))
// m.markOrbit<FACE>(ditWF);
// }
//
// Algo::Volume::Modelisation::Tetrahedralization::flip1To4<PFP>(m_map, dit);
// }
//
///*
// //
// // 2-3 swap of all old interior faces
// //
// TraversorF<typename PFP::MAP> tF(m_map);
// for(Dart dit = tF.begin() ; dit != tF.end() ; dit = tF.next())
// {
// if(m.isMarked(dit))
// {
// m.unmarkOrbit<FACE>(dit);
// Algo::Volume::Modelisation::Tetrahedralization::swap2To3<PFP>(m_map, dit);
// }
// }
//
// //
// // 1-3 flip of all boundary tetrahedra
// //
// TraversorW<typename PFP::MAP> tWb(m_map);
// for(Dart dit = tWb.begin() ; dit != tWb.end() ; dit = tWb.next())
// {
// if(m_map.isBoundaryVolume(dit))
// {
// Traversor3WE<typename PFP::MAP> tWE(m_map, dit);
// for(Dart ditWE = tWE.begin() ; ditWE != tWE.end() ; ditWE = tWE.next())
// {
// if(m_map.isBoundaryEdge(ditWE))
// m.markOrbit<EDGE>(ditWE);
// }
//
// Algo::Volume::Modelisation::Tetrahedralization::flip1To3<PFP>(m_map, dit);
// }
// }
//
// //
// // edge-removal on all old boundary edges
// //
// TraversorE<typename PFP::MAP> tE(m_map);
// for(Dart dit = tE.begin() ; dit != tE.end() ; dit = tE.next())
// {
// if(m.isMarked(dit))
// {
// m.unmarkOrbit<EDGE>(dit);
// Dart d = m_map.phi2(m_map.phi3(m_map.findBoundaryFaceOfEdge(dit)));
// Algo::Volume::Modelisation::Tetrahedralization::swapGen3To2<PFP>(m_map, d);
//
// }
// }
//*/
//
// m_map.setCurrentLevel(m_map.getMaxLevel());
// m_map.popLevel() ;
//}
template <typename PFP>
void Map3MR<PFP>::addNewLevelSqrt3(bool embedNewVertices)
{
m_map.pushLevel();
m_map.addLevelBack();
m_map.duplicateDarts(m_map.getMaxLevel());
m_map.setCurrentLevel(m_map.getMaxLevel());
DartMarkerStore m(m_map);
//
// 1-4 flip of all tetrahedra
//
TraversorW<typename PFP::MAP> tW(m_map);
for(Dart dit = tW.begin() ; dit != tW.end() ; dit = tW.next())
{
Traversor3WF<typename PFP::MAP> tWF(m_map, dit);
for(Dart ditWF = tWF.begin() ; ditWF != tWF.end() ; ditWF = tWF.next())
{
if(!m_map.isBoundaryFace(ditWF))
m.markOrbit<FACE>(ditWF);
}
Algo::Volume::Modelisation::Tetrahedralization::flip1To4<PFP>(m_map, dit);
}
//
// 2-3 swap of all old interior faces
//
TraversorF<typename PFP::MAP> tF(m_map);
for(Dart dit = tF.begin() ; dit != tF.end() ; dit = tF.next())
{
if(m.isMarked(dit))
{
m.unmarkOrbit<FACE>(dit);
Algo::Volume::Modelisation::Tetrahedralization::swap2To3<PFP>(m_map, dit);
}
}
/*
//
// 1-3 flip of all boundary tetrahedra
//
TraversorW<typename PFP::MAP> tWb(m_map);
for(Dart dit = tWb.begin() ; dit != tWb.end() ; dit = tWb.next())
{
if(m_map.isBoundaryVolume(dit))
{
Traversor3WE<typename PFP::MAP> tWE(m_map, dit);
for(Dart ditWE = tWE.begin() ; ditWE != tWE.end() ; ditWE = tWE.next())
{
if(m_map.isBoundaryEdge(ditWE))
m.markOrbit<EDGE>(ditWE);
}
Algo::Volume::Modelisation::Tetrahedralization::flip1To3<PFP>(m_map, dit);
}
}
//
// edge-removal on all old boundary edges
//
TraversorE<typename PFP::MAP> tE(m_map);
for(Dart dit = tE.begin() ; dit != tE.end() ; dit = tE.next())
{
if(m.isMarked(dit))
{
m.unmarkOrbit<EDGE>(dit);
Dart d = m_map.phi2(m_map.phi3(m_map.findBoundaryFaceOfEdge(dit)));
Algo::Volume::Modelisation::Tetrahedralization::swapGen3To2<PFP>(m_map, d);
}
}
*/
m_map.setCurrentLevel(m_map.getMaxLevel());
m_map.popLevel() ;
}
template <typename PFP>
void Map3MR<PFP>::addNewLevelTetraOcta()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment