Commit 98430ec3 authored by Thomas Pitiot 's avatar Thomas Pitiot

merged

parents 8b3aad18 9daeca4c
...@@ -47,6 +47,7 @@ public: ...@@ -47,6 +47,7 @@ public:
void init(int argc, char **argv) ; void init(int argc, char **argv) ;
bool checkPointInMap(VEC3 pos,Dart neighborhood); bool checkPointInMap(VEC3 pos,Dart neighborhood);
bool insideVolume(VEC3 pos, Dart d); bool insideVolume(VEC3 pos, Dart d);
REAL volumeMaxdistance(Vol volume);
VEC3 normaleFromVolume(Dart volume,Dart face); VEC3 normaleFromVolume(Dart volume,Dart face);
void open_file(std::string filename); void open_file(std::string filename);
VEC3 mapMinX; VEC3 mapMinX;
......
...@@ -47,7 +47,6 @@ void EnvMap::init(int argc, char **argv) ...@@ -47,7 +47,6 @@ void EnvMap::init(int argc, char **argv)
int nb = 1; int nb = 1;
Algo::Volume::Tilings::Cubic::Grid<PFP> cubic(map, nb, nb, nb); Algo::Volume::Tilings::Cubic::Grid<PFP> cubic(map, nb, nb, nb);
Algo::Volume::
cubic.embedIntoGrid(position, 1.0f, 1.0f, 1.0f); cubic.embedIntoGrid(position, 1.0f, 1.0f, 1.0f);
// subdivideVolume(map.begin()); // subdivideVolume(map.begin());
...@@ -130,14 +129,28 @@ void EnvMap::init(int argc, char **argv) ...@@ -130,14 +129,28 @@ void EnvMap::init(int argc, char **argv)
// std::cout << "level :"<<map.getCurrentLevel() << std::endl ; // std::cout << "level :"<<map.getCurrentLevel() << std::endl ;
}
}
} REAL EnvMap::volumeMaxdistance(Vol volume)
{
Dart d = volume;
VEC3 center = Algo::Surface::Geometry::volumeCentroid<PFP,VertexAttribute<VEC3,MAP>>(map,volume,position);
REAL res = (position[d]-center).norm2();
for ( Vertex vert : verticesIncidentToVolume3(map,volume))
{
REAL size=(position[vert]-center).norm2();
if(size>res)
{
res=size;
}
}
return res;
} }
VEC3 EnvMap::normaleFromVolume(Dart volume,Dart face) // renvoie la normale a la face pointant vers l'extérieur du volume VEC3 EnvMap::normaleFromVolume(Dart volume,Dart face) // renvoie la normale a la face pointant vers l'extérieur du volume
{ {
VEC3 center = Algo::Surface::Geometry::volumeCentroid<PFP,VertexAttribute<VEC3,MAP>>(map,volume,position); VEC3 center = Algo::Surface::Geometry::volumeCentroid<PFP,VertexAttribute<VEC3,MAP>>(map,volume,position);
...@@ -538,14 +551,19 @@ bool EnvMap::subdivideVolume(Dart dglobal) ...@@ -538,14 +551,19 @@ bool EnvMap::subdivideVolume(Dart dglobal)
map.setCurrentLevel(map.getMaxLevel()) ; map.setCurrentLevel(map.getMaxLevel()) ;
unsigned int vLevel = map.volumeLevel(dglobal); unsigned int vLevel = map.volumeLevel(dglobal);
Dart old = map.volumeOldestDart(dglobal); Dart old = map.volumeOldestDart(dglobal);
#ifdef DEBUG_affichage
int count = 0;
#endif
// la subdivision ne doit pas mettre plus d'un level de différence entre des cellules adjacentes // la subdivision ne doit pas mettre plus d'un level de différence entre des cellules adjacentes
// on commence donc par subdiviser les voisins qui ont trop de différence // on commence donc par subdiviser les voisins qui ont trop de différence
// Traversor3WF<typename PFP::MAP> traF(map, old, true);
// for(Dart dit = traF.begin(); dit != traF.end(); dit = traF.next())
// {
for ( Face dit : facesIncidentToVolume3(map,old)) for ( Face dit : facesIncidentToVolume3(map,old))
{ {
#ifdef DEBUG_affichage
count++;
#endif
Dart nv = map.phi3(dit); Dart nv = map.phi3(dit);
if(!map.isBoundaryMarked(3, nv)) if(!map.isBoundaryMarked(3, nv))
{ {
...@@ -554,18 +572,22 @@ bool EnvMap::subdivideVolume(Dart dglobal) ...@@ -554,18 +572,22 @@ bool EnvMap::subdivideVolume(Dart dglobal)
#ifdef DEBUG_affichage #ifdef DEBUG_affichage
std::cout << "OK pour cascade en : "<<nv<< std::endl; std::cout << "OK pour cascade en : "<<nv<< std::endl;
#endif #endif
int currentLevel = map.getCurrentLevel();
subdivideVolume(nv); subdivideVolume(nv);
map.setCurrentLevel(currentLevel);
} }
} }
} }
// on commence ensuite a subdiviser // on commence ensuite a subdiviser
// map.check(); // map.check();
map.setCurrentLevel(map.getMaxLevel()) ; map.setCurrentLevel(map.getMaxLevel()) ;
#ifdef DEBUG_affichage #ifdef DEBUG_affichage
CGoGNout<<"debut refine"<<CGoGNendl; CGoGNout<<"debut refine"<<CGoGNendl;
std::cout << "dglobal = " << dglobal << "level = "<< map.getDartLevel(dglobal) << std::endl; std::cout << "dglobal = " << dglobal << "level = "<< map.getDartLevel(dglobal) << " nombre de faces verifiées : "<<count<< std::endl;
#endif #endif
ARETES oldobst(RegisteredEdges[dglobal]) ; ARETES oldobst(RegisteredEdges[dglobal]) ;
......
...@@ -253,9 +253,9 @@ void Needle::refine() ...@@ -253,9 +253,9 @@ void Needle::refine()
{ {
#ifdef IHMap #ifdef IHMap
Dart volume = parts_[0]->d; Dart volume = parts_[0]->d;
volume = sim_->envMap_.map.volu0eOldestDart(volume);
PFP::VEC3 edge = Algo::Surface::Geometry::vectorOutOfDart<PFP>(sim_->envMap_.map, volume, sim_->envMap_.position) ; REAL rayon = sim_->envMap_.volumeMaxdistance(volume) ;
if(edge.norm2() > 2.0f ) if(rayon > 2.0f )
{ {
if(sim_->envMap_.subdivideVolume(volume)) if(sim_->envMap_.subdivideVolume(volume))
{ {
......
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