Commit 192f8eaf authored by untereiner's avatar untereiner

Begin Implicit vertex attributes in ihm3

parent 4887cf73
......@@ -162,6 +162,11 @@ public:
void deleteVertexSubdividedFace(Dart d);
//@}
void setVertexVertexFunctor(FunctorType* f) { vertexVertexFunctor = f ; }
void setEdgeVertexFunctor(FunctorType* f) { edgeVertexFunctor = f ; }
void setFaceVertexFunctor(FunctorType* f) { faceVertexFunctor = f ; }
void setVolumeVertexFunctor(FunctorType* f) { volumeVertexFunctor = f ; }
void computeVertexVertexFunctor(Dart d) { (*vertexVertexFunctor)(d); }
void computeEdgeVertexFunctor(Dart d) { (*edgeVertexFunctor)(d); }
void computeFaceVertexFunctor(Dart d) { (*faceVertexFunctor)(d); }
......@@ -373,7 +378,8 @@ public:
virtual bool foreach_dart_of_face2(Dart d, FunctorType& f, unsigned int thread = 0);
//@}
template <unsigned int ORBIT>
unsigned int getEmbedding(Dart d);
} ;
template <typename T, unsigned int ORBIT>
......@@ -398,9 +404,9 @@ public:
return AttributeHandler<T, ORBIT>::isValid() ;
}
T& operator[](Dart d) ;
virtual T& operator[](Dart d) ;
const T& operator[](Dart d) const ;
virtual const T& operator[](Dart d) const ;
T& operator[](unsigned int a)
{
......@@ -411,6 +417,7 @@ public:
{
return AttributeHandler<T, ORBIT>::operator[](a) ;
}
} ;
template <typename T>
......
......@@ -601,6 +601,25 @@ inline unsigned int ImplicitHierarchicalMap3::edgeLevel(Dart d)
return r;
}
template <unsigned int ORBIT>
inline unsigned int ImplicitHierarchicalMap3::getEmbedding(Dart d)
{
unsigned int nbSteps = m_curLevel - vertexInsertionLevel(d);
unsigned int index = EmbeddedMap3::getEmbedding<ORBIT>(d);
unsigned int step = 0;
while(step < nbSteps)
{
step++;
unsigned int next = m_nextLevelCell[ORBIT]->operator[](index);
index = next;
//if(next != EMBNULL) index = next;
//else break;
}
return index;
}
/***************************************************
* ATTRIBUTE HANDLER *
......@@ -613,14 +632,20 @@ T& AttributeHandler_IHM<T, ORBIT>::operator[](Dart d)
assert(m->m_dartLevel[d] <= m->m_curLevel || !"Access to a dart introduced after current level") ;
assert(m->vertexInsertionLevel(d) <= m->m_curLevel || !"Access to the embedding of a vertex inserted after current level") ;
unsigned int orbit = this->getOrbit() ;
std::cout << std::endl << "vertexInsertionLevel[" << d <<"] = " << m->vertexInsertionLevel(d) << "\t";
unsigned int nbSteps = m->m_curLevel - m->vertexInsertionLevel(d) ;
unsigned int index = m->getEmbedding<ORBIT>(d) ;
unsigned int index = m->EmbeddedMap3::getEmbedding<ORBIT>(d) ;
// std::cout << " m->vertexInsertionLevel(d) = " << m->vertexInsertionLevel(d) << std::endl;
// std::cout << "m_curLevel = " << m->m_curLevel << std::endl;
// std::cout << " nbSteps = " << nbSteps << std::endl;
// std::cout << "index EmbMap3 = " << index << std::endl;
if(index == EMBNULL)
{
index = m->setOrbitEmbeddingOnNewCell<ORBIT>(d) ;
m->m_nextLevelCell[orbit]->operator[](index) = EMBNULL ;
m->m_nextLevelCell[ORBIT]->operator[](index) = EMBNULL ;
}
AttributeContainer& cont = m->getAttributeContainer<ORBIT>() ;
......@@ -628,17 +653,24 @@ T& AttributeHandler_IHM<T, ORBIT>::operator[](Dart d)
while(step < nbSteps)
{
step++ ;
unsigned int nextIdx = m->m_nextLevelCell[orbit]->operator[](index) ;
unsigned int nextIdx = m->m_nextLevelCell[ORBIT]->operator[](index) ;
if (nextIdx == EMBNULL)
{
nextIdx = m->newCell<ORBIT>() ;
m->copyCell<ORBIT>(nextIdx, index) ;
m->m_nextLevelCell[orbit]->operator[](index) = nextIdx ;
m->m_nextLevelCell[orbit]->operator[](nextIdx) = EMBNULL ;
m->m_nextLevelCell[ORBIT]->operator[](index) = nextIdx ;
m->m_nextLevelCell[ORBIT]->operator[](nextIdx) = EMBNULL ;
cont.refLine(index) ;
}
index = nextIdx ;
}
std::cout << "emb = " << index << std::endl;
// std::cout << "index IHM = " << index << std::endl;
// if(index != EMBNULL)
// std::cout << " emb = " << this->m_attrib->operator[](index) << std::endl << std::endl;
return this->m_attrib->operator[](index);
}
......@@ -649,21 +681,30 @@ const T& AttributeHandler_IHM<T, ORBIT>::operator[](Dart d) const
assert(m->m_dartLevel[d] <= m->m_curLevel || !"Access to a dart introduced after current level") ;
assert(m->vertexInsertionLevel(d) <= m->m_curLevel || !"Access to the embedding of a vertex inserted after current level") ;
unsigned int orbit = this->getOrbit() ;
unsigned int nbSteps = m->m_curLevel - m->vertexInsertionLevel(d) ;
unsigned int index = m->getEmbedding<ORBIT>(d) ;
unsigned int index = m->EmbeddedMap3::getEmbedding<ORBIT>(d) ;
// std::cout << "(const) m->vertexInsertionLevel(d) = " << m->vertexInsertionLevel(d) << std::endl;
// std::cout << "(const) m_curLevel = " << m->m_curLevel << std::endl;
// std::cout << "(const) nbSteps = " << nbSteps << std::endl;
// std::cout << "(const) index EmbMap3 = " << index << std::endl;
unsigned int step = 0 ;
while(step < nbSteps)
{
step++ ;
unsigned int next = m->m_nextLevelCell[orbit]->operator[](index) ;
if(next != EMBNULL) index = next ;
unsigned int nextIdx = m->m_nextLevelCell[ORBIT]->operator[](index) ;
if(nextIdx != EMBNULL) index = nextIdx ;
else break ;
}
// if(index != EMBNULL)
// std::cout << "(const) emb = " << this->m_attrib->operator[](index) << std::endl << std::endl;
return this->m_attrib->operator[](index);
}
} //namespace IHM
} // Volume
} //namespace Algo
......
......@@ -65,8 +65,8 @@ void subdivideEdge(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
map.setFaceId(EDGE, d) ; //mise a jour de l'id de face sur chaque brin de chaque moitie d'arete
map.setFaceId(EDGE, dd) ;
position[map.phi1(d)] = (p1 + p2) * typename PFP::REAL(0.5) ;
//map.computeEdgeVertexFunctor(map.phi1(d));
// position[map.phi1(d)] = (p1 + p2) * typename PFP::REAL(0.5) ;
map.computeEdgeVertexFunctor(map.phi1(d));
map.setCurrentLevel(cur) ;
}
......@@ -121,8 +121,8 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
Dart dd = map.phi1(old) ;
Dart e = map.phi1(map.phi1(dd)) ;
map.splitFace(dd, e) ; // insert a new edge
//unsigned int id = map.getNewEdgeId() ;
//map.setEdgeId(map.phi_1(dd), id, EDGE) ; // set the edge id of the inserted edge to the next available id
unsigned int id = map.getNewEdgeId() ;
map.setEdgeId(map.phi_1(dd), id, EDGE) ; // set the edge id of the inserted edge to the next available id
unsigned int idface = map.getFaceId(old);
map.setFaceId(dd, idface, FACE) ;
......@@ -131,8 +131,8 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
dd = e ;
e = map.phi1(map.phi1(dd)) ;
map.splitFace(dd, e) ;
//id = map.getNewEdgeId() ;
//map.setEdgeId(map.phi_1(dd), id, EDGE) ;
id = map.getNewEdgeId() ;
map.setEdgeId(map.phi_1(dd), id, EDGE) ;
map.setFaceId(dd, idface, FACE) ;
map.setFaceId(e, idface, FACE) ;
......@@ -140,8 +140,8 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
dd = e ;
e = map.phi1(map.phi1(dd)) ;
map.splitFace(dd, e) ;
//id = map.getNewEdgeId() ;
//map.setEdgeId(map.phi_1(dd), id, EDGE) ;
id = map.getNewEdgeId() ;
map.setEdgeId(map.phi_1(dd), id, EDGE) ;
map.setFaceId(dd, idface, FACE) ;
map.setFaceId(e, idface, FACE) ;
......@@ -202,8 +202,7 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
id = map.getNewEdgeId() ;
map.setEdgeId(ne2, id, EDGE) ;
position[map.phi1(ne)] = p ;
//map.computeFaceVertexFunctor(map.phi1(ne));
//position[map.phi1(ne)] = p ;
dd = map.phi1(map.phi1(map.phi1(map.phi1(ne)))) ;
while(dd != ne)
......@@ -227,6 +226,9 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
dd = map.phi2(map.phi1(dd));
}
while(dd != ne);
map.computeFaceVertexFunctor(map.phi1(ne));
//position[map.phi1(ne)] = p ;
}
map.setCurrentLevel(cur) ;
......@@ -353,14 +355,14 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, AttributeHandler<typ
//Second step : deconnect each corner, close each hole, subdivide each new face into 3
for (std::vector<Dart>::iterator edge = oldEdges.begin(); edge != oldEdges.end(); ++edge)
{
Dart e = *edge;
std::vector<Dart> v ;
do
{
v.push_back(map.phi1(map.phi1(e)));
v.push_back(map.phi1(e));
v.push_back(map.phi1(map.phi1(e)));
e = map.phi2(map.phi_1(e));
}
......@@ -378,7 +380,7 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, AttributeHandler<typ
Dart ne = map.phi1(map.phi1(old)) ;
map.cutEdge(ne);
position[map.phi1(ne)] = volCenter; //plonger a la fin de la boucle ????
//position[map.phi1(ne)] = volCenter; //plonger a la fin de la boucle ????
centralDart = map.phi1(ne);
newEdges.push_back(ne);
newEdges.push_back(map.phi1(ne));
......@@ -403,12 +405,11 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, AttributeHandler<typ
}
while(dd != stop);
//map.computeVertexVertexFunctor(e);
}
map.deleteVolume(map.phi3(map.phi2(map.phi1(oldEdges.front()))));
//map.computerVolumeVertexFunctor(oldEdges.front());
//Third step : 3-sew internal faces
for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedfaces.begin(); it != subdividedfaces.end(); ++it)
{
......@@ -445,6 +446,20 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, AttributeHandler<typ
}
}
// std::cout << map.getCurrentLevel() << std::endl;
// //Second step : deconnect each corner, close each hole, subdivide each new face into 3
for (std::vector<Dart>::iterator edge = oldEdges.begin(); edge != oldEdges.end(); ++edge)
{
Dart e = *edge;
//std::cout << "emb ? " << map.template getEmbedding<VERTEX>(e) << std::endl;
//if(map.template getEmbedding<VERTEX>(e) == EMBNULL)
map.computeVertexVertexFunctor(e);
//std::cout << "emb = " << map.template getEmbedding<VERTEX>(e) << " / dartlevel = " << map.getDartLevel(e) << std::endl;
}
std::cout << std::endl;
map.computerVolumeVertexFunctor(centralDart);
map.setCurrentLevel(cur) ;
return centralDart; //subdividedfaces.begin()->first;
......
......@@ -41,7 +41,7 @@ namespace MovingObjects
template <typename PFP>
class ParticleBase
{
private:
protected:
typename PFP::VEC3 m_position ;
unsigned int m_state ;
......
#ifndef PARTCELL_H
#define PARTCELL_H
#include "particle_base.h"
#include "Algo/MovingObjects/particle_base.h"
#include "Algo/Geometry/inclusion.h"
#include "Geometry/intersection.h"
......@@ -31,12 +31,12 @@ enum {
};
template <typename PFP>
class ParticleCell3D : public Algo::MovingObjects::ParticleBase
class ParticleCell3D : public Algo::MovingObjects::ParticleBase<PFP>
{
public :
typedef typename PFP::MAP Map;
typedef typename PFP::VEC3 VEC3;
typedef VertexAttribute<typename PFP::VEC3> TAB_POS;
typedef VertexAttribute<VEC3> TAB_POS;
Map& m;
......@@ -55,7 +55,11 @@ public :
{}
ParticleCell3D(Map& map, Dart belonging_cell, VEC3 pos, const TAB_POS& tabPos) :
Algo::MovingObjects::ParticleBase(pos), m(map), position(tabPos), d(belonging_cell), state(3)
Algo::MovingObjects::ParticleBase<PFP>(pos),
m(map),
position(tabPos),
d(belonging_cell),
state(3)
{
m_positionFace = pointInFace(d);
}
......@@ -107,7 +111,7 @@ public :
{
crossCell = NO_CROSS ;
if(!Geom::arePointsEquals(newCurrent, m_position))
if(!Geom::arePointsEquals(newCurrent, this->getPosition()))
{
switch(state) {
case VERTEX : vertexState(newCurrent); break;
......@@ -121,10 +125,10 @@ public :
}
};
}
}
}
}
} //MovingObjects
} //Volume
} //Algo
} //CGoGN
#include "particle_cell_3D.hpp"
......
......@@ -42,22 +42,22 @@ namespace MovingObjects
template <typename PFP>
void ParticleCell3D<PFP>::display()
{
// std::cout << "position : " << m_position << std::endl;
// std::cout << "position : " << this->m_position << std::endl;
}
template <typename PFP>
typename PFP::VEC3 ParticleCell3D<PFP>::pointInFace(Dart d)
{
return Algo::Surface::Geometry::faceCentroid<PFP>(m,d,position);
// const VEC3& p1(m_positions[d]);
// const VEC3& p1(this->m_positions[d]);
// Dart dd=m.phi1(d);
// const VEC3& p2(m_positions[dd]);
// const VEC3& p2(this->m_positions[dd]);
// dd=m.phi1(dd);
// VEC3& p3(m_positions[dd]);
// VEC3& p3(this->m_positions[dd]);
//
// while(Geom::testOrientation2D(p3,p1,p2)==Geom::ALIGNED) {
// dd = m.phi1(dd);
// p3 = m_positions[dd];
// p3 = this->m_positions[dd];
// }
//
// CGoGNout << "pointInFace " << (p1+p3)*0.5f << CGoGNendl;
......@@ -365,8 +365,8 @@ void ParticleCell3D<PFP>::vertexState(const VEC3& current)
VEC3 som = position[d];
if(Geom::arePointsEquals(current, m_position)) {
m_position = m_positionFace = som;
if(Geom::arePointsEquals(current, this->m_position)) {
this->m_position = this->m_positionFace = som;
state = VERTEX;
return;
}
......@@ -442,8 +442,8 @@ void ParticleCell3D<PFP>::vertexState(const VEC3& current)
std::cout << "numerical rounding ?" << std::endl;
d = dd;
m_position = pointInFace(d);
m_positionFace = m_position;
this->m_position = pointInFace(d);
this->m_positionFace = this->m_position;
volumeState(current);
return;
}
......@@ -453,9 +453,9 @@ void ParticleCell3D<PFP>::vertexState(const VEC3& current)
if(wsof!=0)
{
m_position = pointInFace(d);
this->m_position = pointInFace(d);
d = nextNonPlanar(d);
m_positionFace = pointInFace(d);
this->m_positionFace = pointInFace(d);
volumeState(current);
}
else
......@@ -470,7 +470,7 @@ template <typename PFP>
void ParticleCell3D<PFP>::edgeState(const VEC3& current)
{
#ifdef DEBUG
std::cout << "edgeState" << d << " " << m_position << std::endl;
std::cout << "edgeState" << d << " " << this->m_position << std::endl;
#endif
......@@ -521,9 +521,9 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
if(wsof==-1) {
m_position = pointInFace(d);
this->m_position = pointInFace(d);
d = nextNonPlanar(m.phi1(d));
m_positionFace = pointInFace(d);
this->m_positionFace = pointInFace(d);
volumeState(current);
return;
}
......@@ -532,7 +532,7 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
if(isOnHalfEdge(current,d))
if (isOnHalfEdge(current,m.phi3(d))) {
state=2;
m_position = m_positionFace = current;
this->m_position = this->m_positionFace = current;
}
else {
d=m.phi1(d);
......@@ -543,7 +543,7 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
}
}
else {
m_positionFace = m_position;
this->m_positionFace = this->m_position;
d=m.phi1(d);
faceState(current,wsof);
}
......@@ -565,13 +565,13 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
if (wsof==Geom::OVER) {
d = m.phi3(d);
d = nextNonPlanar(d);
m_positionFace = pointInFace(d);
this->m_positionFace = pointInFace(d);
volumeState(current);
return;
}
else if(wsof==Geom::UNDER) {
d = nextNonPlanar(d);
m_positionFace = pointInFace(d);
this->m_positionFace = pointInFace(d);
volumeState(current);
return;
}
......@@ -579,9 +579,9 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
VEC3 norm = Algo::Surface::Geometry::faceNormal<PFP>(m,d,position);
Dart dd=d;
if(isLeftL1DFace(current,d,m_positionFace,norm)!=Geom::UNDER) {
if(isLeftL1DFace(current,d,this->m_positionFace,norm)!=Geom::UNDER) {
d = m.phi_1(d);
while(isLeftL1DFace(current,d,m_positionFace,norm)!=Geom::UNDER && dd!=d)
while(isLeftL1DFace(current,d,this->m_positionFace,norm)!=Geom::UNDER && dd!=d)
d = m.phi_1(d);
if(dd==d) {
......@@ -590,29 +590,29 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
switch (whichSideOfEdge(current,d)) {
case Geom::OVER : d=m.phi_1(d);
break;
case Geom::ON :m_position = current;
case Geom::ON :this->m_position = current;
state = EDGE;
return;
default :
Geom::Plane3D<typename PFP::REAL> pl = Algo::Surface::Geometry::facePlane<PFP>(m,d,position);
VEC3 p3 = pl.normal()+m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(m_position,current,p3);
VEC3 p3 = pl.normal()+this->m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(this->m_position,current,p3);
VEC3 e(position[m.phi1(d)]-position[d]);
Geom::intersectionPlaneRay(plOrtho,m_position,current-m_position,m_position);
Geom::intersectionPlaneRay(plOrtho,this->m_position,current-this->m_position,this->m_position);
edgeState(current);
return;
}
} while(d!=dd);
m_position = m_positionFace = current;
this->m_position = this->m_positionFace = current;
state = FACE;
return;
}
}
else {
while(isRightDFace(current,d,m_positionFace,norm) && m.phi1(d)!=dd)
while(isRightDFace(current,d,this->m_positionFace,norm) && m.phi1(d)!=dd)
d = m.phi1(d);
if(m.phi_1(d)==dd) {
......@@ -623,22 +623,22 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
case Geom::OVER :
d=m.phi_1(d);
break;
case Geom::ON :m_position = current;
case Geom::ON :this->m_position = current;
state = EDGE;
return;
default :
Geom::Plane3D<typename PFP::REAL> pl = Algo::Surface::Geometry::facePlane<PFP>(m,d,position);
VEC3 p3 = pl.normal()+m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(m_position,current,p3);
VEC3 p3 = pl.normal()+this->m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(this->m_position,current,p3);
VEC3 e(position[m.phi1(d)]-position[d]);
Geom::intersectionPlaneRay(plOrtho,m_position,current-m_position,m_position);
Geom::intersectionPlaneRay(plOrtho,this->m_position,current-this->m_position,this->m_position);
edgeState(current);
return;
}
}while(d!=dd);
m_position = m_positionFace = current;
this->m_position = this->m_positionFace = current;
state = FACE;
return;
}
......@@ -648,22 +648,22 @@ void ParticleCell3D<PFP>::edgeState(const VEC3& current)
switch (whichSideOfEdge(current,d))
{
case Geom::OVER :
m_position = m_positionFace = current;
this->m_position = this->m_positionFace = current;
state = FACE;
break;
case Geom::ON :
m_position = m_positionFace = current;
this->m_position = this->m_positionFace = current;
state = EDGE;
break;
default :
Geom::Plane3D<typename PFP::REAL> pl = Algo::Surface::Geometry::facePlane<PFP>(m,d,position);
VEC3 p3 = pl.normal()+m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(m_position,current,p3);
VEC3 p3 = pl.normal()+this->m_position;
Geom::Plane3D<typename PFP::REAL> plOrtho(this->m_position,current,p3);
VEC3 e(position[m.phi1(d)]-position[d]);
Geom::intersectionPlaneRay(plOrtho,m_position,current-m_position,m_position);
Geom::intersectionPlaneRay(plOrtho,this->m_position,current-this->m_position,this->m_position);
m_positionFace = m_position;
this->m_positionFace = this->m_position;
edgeState(current);
}
......@@ -686,13 +686,13 @@ void ParticleCell3D<PFP>::volumeState(const VEC3& current)
Dart dd=d;
bool particularcase=false;
Geom::Orientation3D testLeft = isLeftL1DVol(current,d,m_positionFace,m_position);
Geom::Orientation3D testLeft = isLeftL1DVol(current,d,this->m_positionFace,this->m_position);
if(testLeft!=Geom::UNDER) {
d = m.phi_1(d);
while(dd!=d && isLeftL1DVol(current,d,m_positionFace,m_position)!=Geom::UNDER)
while(dd!=d && isLeftL1DVol(current,d,this->m_positionFace,this->m_position)!=Geom::UNDER)
d = m.phi_1(d);
if(dd==d)
......@@ -700,26 +700,26 @@ void ParticleCell3D<PFP>::volumeState(const VEC3& current)
}
else {
testRight = isRightDVol(current,d,m_positionFace,m_position);
testRight = isRightDVol(current,d,this->m_positionFace,this->m_position);
while(testRight!=Geom::OVER && dd!=m.phi1(d)) {
d = m.phi1(d);
testRight = isRightDVol(current,d,m_positionFace,m_position);
testRight = isRightDVol(current,d,this->m_positionFace,this->m_position);
}
if(testLeft==0 && dd==m.phi1(d))
particularcase=true;
}
if(particularcase) //(m_position,m_positionFace,c) presque alignés et si c est proche de la face
if(particularcase) //(this->m_position,this->m_positionFace,c) presque alignés et si c est proche de la face
//aucun des "above" sur les dart ne va donner de résultats concluant (proche de 0 pour tous)
{
if(isnan(current[0]) || isnan(current[1]) || isnan(current[2]))
{
std::cout << __FILE__ << " " << __LINE__ << " NaN !" << std::endl;
display();
m_position = current;
this->m_position = current;
return;
}
......@@ -727,9 +727,9 @@ void ParticleCell3D<PFP>::volumeState(const VEC3& current)
return;
}
Geom::Orientation3D testAbove = isAbove(current,d,m_position);
Geom::Orientation3D testAbove = isAbove(current,d,this->m_position);
if(testAbove!=Geom::UNDER || (testRight==Geom::ON && isAbove(current,m.phi_1(d),m_position)!=Geom::UNDER)) {
if(testAbove!=Geom::UNDER || (testRight==Geom::ON && isAbove(current,m.phi_1(d),this->m_position)!=Geom::UNDER)) {
if(testAbove==Geom::OVER || whichSideOfFace(current,d)==Geom::UNDER) {
......@@ -749,7 +749,7 @@ void ParticleCell3D<PFP>::volumeState(const VEC3& current)
}
}
m_positionFace = pointInFace(d);
this->m_positionFace = pointInFace(d);
}
}
} while(above);
......@@ -757,28 +757,28 @@ void ParticleCell3D<PFP>::volumeState(const VEC3& current)
Geom::Orientation3D wsof = whichSideOfFace(current,d);
if(wsof==Geom::UNDER) {
m_position = current;
this->m_position = current;
state = VOLUME;
}