Commit 344bd87b authored by Thery Sylvain's avatar Thery Sylvain

Merge branch 'master' of cgogn:~jund/CGoGN

Conflicts:
	include/Algo/BooleanOperator/mergeVertices.hpp
	include/Algo/Export/exportPov.h
	include/Algo/MovingObjects/particle_cell_2D.h
parents 3f03bce5 1572c7ca
...@@ -53,15 +53,16 @@ void mergeVertex(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>& po ...@@ -53,15 +53,16 @@ void mergeVertex(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>& po
Dart e1 = map.alpha1(e) ; // e1 stores next dart of vertex of e Dart e1 = map.alpha1(e) ; // e1 stores next dart of vertex of e
if (e1 == e) if (e1 == e)
notempty = false ; // last dart of vertex of e notempty = false ; // last dart of vertex of e
else { else
{
map.removeEdgeFromVertex(e) ; // detach e from its vertex map.removeEdgeFromVertex(e) ; // detach e from its vertex
} }
// Searchs where e may be inserted in the vertex of d // Searchs where e may be inserted in the vertex of d
Dart d1 = d ; Dart d1 = d ;
do do
{ {
if (BooleanOperator::isBetween<PFP>(map, positions, e, d, if (isBetween<PFP>(map, positions, e, d, map.alpha1(d)))
map.alpha1(d))) break ; break ;
d = map.alpha1(d) ; d = map.alpha1(d) ;
} while (d != d1) ; } while (d != d1) ;
...@@ -91,8 +92,10 @@ void mergeVertices(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>& ...@@ -91,8 +92,10 @@ void mergeVertices(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>&
{ {
if(positions[d1].isNear(positions[d2], precision)) if(positions[d1].isNear(positions[d2], precision))
{ {
if (map.sameVertex(d1,d2)) std::cout << "fusion: sameVertex" << std::endl ; if (map.sameVertex(d1,d2))
if (!map.sameVertex(d1,d2)) mergeVertex<PFP>(map,positions,d1,d2,precision); std::cout << "fusion: sameVertex" << std::endl ;
if (!map.sameVertex(d1,d2))
mergeVertex<PFP>(map,positions,d1,d2,precision);
} }
} }
} }
......
...@@ -46,7 +46,7 @@ public: ...@@ -46,7 +46,7 @@ public:
unsigned int crossCell ; unsigned int crossCell ;
ParticleCell2D(MAP& map, Dart belonging_cell, const VEC3& pos, const TAB_POS& tabPos) : ParticleCell2D(MAP& map, Dart belonging_cell, const VEC3& pos, const TAB_POS& tabPos) :
ParticleBase<PFP>(pos), Algo::MovingObjects::ParticleBase<PFP>(pos),
m(map), m(map),
positionAttribut(tabPos), positionAttribut(tabPos),
d(belonging_cell), d(belonging_cell),
...@@ -105,7 +105,7 @@ public: ...@@ -105,7 +105,7 @@ public:
else else
{ {
// TODO Des petits pas répétés peuvent faire sortir de la cellule actuelle // TODO Des petits pas répétés peuvent faire sortir de la cellule actuelle
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
} }
} }
} ; } ;
......
...@@ -104,7 +104,7 @@ void ParticleCell2D<PFP>::vertexState(const VEC3& goal) ...@@ -104,7 +104,7 @@ void ParticleCell2D<PFP>::vertexState(const VEC3& goal)
if (Geometry::isPointOnVertex < PFP > (m, d, positionAttribut, goal)) if (Geometry::isPointOnVertex < PFP > (m, d, positionAttribut, goal))
{ {
this->setState(VERTEX) ; this->setState(VERTEX) ;
this->ParticleBase < PFP > ::move(goal) ; this->Algo::MovingObjects::ParticleBase < PFP > ::move(goal) ;
return ; return ;
} }
else else
...@@ -147,7 +147,7 @@ void ParticleCell2D<PFP>::vertexState(const VEC3& goal) ...@@ -147,7 +147,7 @@ void ParticleCell2D<PFP>::vertexState(const VEC3& goal)
this->setState(VERTEX) ; this->setState(VERTEX) ;
this->ParticleBase < PFP > ::move(goal) ; this->Algo::MovingObjects::ParticleBase < PFP > ::move(goal) ;
return ; return ;
} }
} }
...@@ -212,19 +212,19 @@ void ParticleCell2D<PFP>::edgeState(const VEC3& goal, Geom::Orientation2D sideOf ...@@ -212,19 +212,19 @@ void ParticleCell2D<PFP>::edgeState(const VEC3& goal, Geom::Orientation2D sideOf
if (!Geometry::isPointOnHalfEdge < PFP > (m, d, positionAttribut, goal)) if (!Geometry::isPointOnHalfEdge < PFP > (m, d, positionAttribut, goal))
{ {
this->ParticleBase < PFP > ::move(positionAttribut[d]) ; this->Algo::MovingObjects::ParticleBase < PFP > ::move(positionAttribut[d]) ;
vertexState(goal) ; vertexState(goal) ;
return ; return ;
} }
else if (!Geometry::isPointOnHalfEdge < PFP > (m, m.phi2(d), positionAttribut, goal)) else if (!Geometry::isPointOnHalfEdge < PFP > (m, m.phi2(d), positionAttribut, goal))
{ {
d = m.phi2(d) ; d = m.phi2(d) ;
this->ParticleBase < PFP > ::move(positionAttribut[d]) ; this->Algo::MovingObjects::ParticleBase < PFP > ::move(positionAttribut[d]) ;
vertexState(goal) ; vertexState(goal) ;
return ; return ;
} }
this->ParticleBase < PFP > ::move(goal) ; this->Algo::MovingObjects::ParticleBase < PFP > ::move(goal) ;
} }
template <typename PFP> template <typename PFP>
...@@ -341,16 +341,16 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal) ...@@ -341,16 +341,16 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal)
d = m.phi1(d) ; d = m.phi1(d) ;
break ; break ;
case Geom::ALIGNED : case Geom::ALIGNED :
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
edgeState(goal) ; edgeState(goal) ;
return ; return ;
case Geom::RIGHT : case Geom::RIGHT :
this->ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ;
edgeState(goal, Geom::RIGHT) ; edgeState(goal, Geom::RIGHT) ;
return ; return ;
} }
} while (d != dd) ; } while (d != dd) ;
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
this->setState(FACE) ; this->setState(FACE) ;
// m_position = Geometry::faceCentroid<PFP>(m,d,m_positions); // m_position = Geometry::faceCentroid<PFP>(m,d,m_positions);
...@@ -387,19 +387,19 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal) ...@@ -387,19 +387,19 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal)
break ; break ;
case Geom::ALIGNED : case Geom::ALIGNED :
// CGoGNout << "pic" << CGoGNendl; // CGoGNout << "pic" << CGoGNendl;
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
edgeState(goal) ; edgeState(goal) ;
return ; return ;
case Geom::RIGHT : case Geom::RIGHT :
// CGoGNout << "smthg went bad(2) " << m_position << CGoGNendl; // CGoGNout << "smthg went bad(2) " << m_position << CGoGNendl;
this->ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ;
// CGoGNout << " " << m_position << CGoGNendl; // CGoGNout << " " << m_position << CGoGNendl;
edgeState(goal, Geom::RIGHT) ; edgeState(goal, Geom::RIGHT) ;
return ; return ;
} }
} while (d != dd) ; } while (d != dd) ;
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
this->setState(FACE) ; this->setState(FACE) ;
return ; return ;
} }
...@@ -409,7 +409,7 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal) ...@@ -409,7 +409,7 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal)
switch (getOrientationEdge(goal, d)) switch (getOrientationEdge(goal, d))
{ {
case Geom::LEFT : case Geom::LEFT :
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
this->setState(FACE) ; this->setState(FACE) ;
; ;
break ; break ;
...@@ -428,12 +428,12 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal) ...@@ -428,12 +428,12 @@ void ParticleCell2D<PFP>::faceState(const VEC3& goal)
if (wsoe == Geom::ALIGNED) if (wsoe == Geom::ALIGNED)
{ {
d = m.phi1(d) ; //to check d = m.phi1(d) ; //to check
this->ParticleBase<PFP>::move(positionAttribut[d]) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(positionAttribut[d]) ;
vertexState(goal) ; vertexState(goal) ;
} }
else else
{ {
this->ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(intersectLineEdge(goal, this->getPosition(), d)) ;
edgeState(goal, Geom::RIGHT) ; edgeState(goal, Geom::RIGHT) ;
} }
break ; break ;
......
...@@ -59,7 +59,7 @@ std::vector<Dart> ParticleCell2DMemo<PFP>::move(const VEC3& goal) ...@@ -59,7 +59,7 @@ std::vector<Dart> ParticleCell2DMemo<PFP>::move(const VEC3& goal)
return memo_cross.get_markedCells(); return memo_cross.get_markedCells();
} }
else else
this->ParticleBase<PFP>::move(goal) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(goal) ;
std::vector<Dart> res; std::vector<Dart> res;
res.push_back(this->d); res.push_back(this->d);
...@@ -87,7 +87,7 @@ void ParticleCell2DMemo<PFP>::vertexState(const VEC3& current, CellMarkerMemo<FA ...@@ -87,7 +87,7 @@ void ParticleCell2DMemo<PFP>::vertexState(const VEC3& current, CellMarkerMemo<FA
if (Geometry::isPointOnVertex < PFP > (this->m, this->d, this->positionAttribut, current)) if (Geometry::isPointOnVertex < PFP > (this->m, this->d, this->positionAttribut, current))
{ {
this->setState(VERTEX) ; this->setState(VERTEX) ;
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
return ; return ;
} }
else else
...@@ -130,7 +130,7 @@ void ParticleCell2DMemo<PFP>::vertexState(const VEC3& current, CellMarkerMemo<FA ...@@ -130,7 +130,7 @@ void ParticleCell2DMemo<PFP>::vertexState(const VEC3& current, CellMarkerMemo<FA
this->d = this->m.phi2_1(this->d) ; this->d = this->m.phi2_1(this->d) ;
} while (this->getOrientationEdge(current, this->m.phi2_1(this->d)) != Geom::RIGHT && dd_vert != this->d) ; } while (this->getOrientationEdge(current, this->m.phi2_1(this->d)) != Geom::RIGHT && dd_vert != this->d) ;
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
this->setState(VERTEX) ; this->setState(VERTEX) ;
return ; return ;
} }
...@@ -199,7 +199,7 @@ void ParticleCell2DMemo<PFP>::edgeState(const VEC3& current, CellMarkerMemo<FACE ...@@ -199,7 +199,7 @@ void ParticleCell2DMemo<PFP>::edgeState(const VEC3& current, CellMarkerMemo<FACE
if (!Geometry::isPointOnHalfEdge < PFP if (!Geometry::isPointOnHalfEdge < PFP
> (this->m, this->d, this->positionAttribut, current)) > (this->m, this->d, this->positionAttribut, current))
{ {
this->ParticleBase<PFP>::move(this->positionAttribut[this->d]) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->positionAttribut[this->d]) ;
vertexState(current,memo_cross) ; vertexState(current,memo_cross) ;
return ; return ;
} }
...@@ -207,12 +207,12 @@ void ParticleCell2DMemo<PFP>::edgeState(const VEC3& current, CellMarkerMemo<FACE ...@@ -207,12 +207,12 @@ void ParticleCell2DMemo<PFP>::edgeState(const VEC3& current, CellMarkerMemo<FACE
> (this->m, this->m.phi2(this->d), this->positionAttribut, current)) > (this->m, this->m.phi2(this->d), this->positionAttribut, current))
{ {
this->d = this->m.phi2(this->d) ; this->d = this->m.phi2(this->d) ;
this->ParticleBase<PFP>::move(this->positionAttribut[this->d]) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->positionAttribut[this->d]) ;
vertexState(current,memo_cross) ; vertexState(current,memo_cross) ;
return ; return ;
} }
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
} }
template <typename PFP> template <typename PFP>
...@@ -253,20 +253,20 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE ...@@ -253,20 +253,20 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE
this->d = this->m.phi1(this->d) ; this->d = this->m.phi1(this->d) ;
break ; break ;
case Geom::ALIGNED : case Geom::ALIGNED :
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
edgeState(current,memo_cross) ; edgeState(current,memo_cross) ;
return ; return ;
case Geom::RIGHT : case Geom::RIGHT :
// CGoGNout << "smthg went bad " << m_position << " " << current << CGoGNendl; // CGoGNout << "smthg went bad " << m_position << " " << current << CGoGNendl;
// CGoGNout << "d1 " << m_positions[d] << " d2 " << m_positions[m.phi1(d)] << CGoGNendl; // CGoGNout << "d1 " << m_positions[d] << " d2 " << m_positions[m.phi1(d)] << CGoGNendl;
this->ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ;
// CGoGNout << " " << m_position << CGoGNendl; // CGoGNout << " " << m_position << CGoGNendl;
edgeState(current,memo_cross, Geom::RIGHT) ; edgeState(current,memo_cross, Geom::RIGHT) ;
return ; return ;
} }
} while (this->d != dd) ; } while (this->d != dd) ;
this->ParticleBase<PFP>::move(current); this->Algo::MovingObjects::ParticleBase<PFP>::move(current);
this->setState(FACE) ; this->setState(FACE) ;
// m_position = Geometry::faceCentroid<PFP>(m,d,m_positions); // m_position = Geometry::faceCentroid<PFP>(m,d,m_positions);
...@@ -303,19 +303,19 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE ...@@ -303,19 +303,19 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE
break ; break ;
case Geom::ALIGNED : case Geom::ALIGNED :
// CGoGNout << "pic" << CGoGNendl; // CGoGNout << "pic" << CGoGNendl;
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
edgeState(current,memo_cross) ; edgeState(current,memo_cross) ;
return ; return ;
case Geom::RIGHT : case Geom::RIGHT :
// CGoGNout << "smthg went bad(2) " << m_position << CGoGNendl; // CGoGNout << "smthg went bad(2) " << m_position << CGoGNendl;
this->ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ;
// CGoGNout << " " << m_position << CGoGNendl; // CGoGNout << " " << m_position << CGoGNendl;
edgeState(current,memo_cross ,Geom::RIGHT) ; edgeState(current,memo_cross ,Geom::RIGHT) ;
return ; return ;
} }
} while (this->d != dd) ; } while (this->d != dd) ;
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
this->setState(FACE) ; this->setState(FACE) ;
return ; return ;
} }
...@@ -325,7 +325,7 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE ...@@ -325,7 +325,7 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE
switch (this->getOrientationEdge(current, this->d)) switch (this->getOrientationEdge(current, this->d))
{ {
case Geom::LEFT : case Geom::LEFT :
this->ParticleBase<PFP>::move(current) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(current) ;
this->setState(FACE) ; this->setState(FACE) ;
; ;
break ; break ;
...@@ -345,12 +345,12 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE ...@@ -345,12 +345,12 @@ void ParticleCell2DMemo<PFP>::faceState(const VEC3& current, CellMarkerMemo<FACE
{ {
this->d = this->m.phi1(this->d) ; //to check this->d = this->m.phi1(this->d) ; //to check
this->ParticleBase<PFP>::move(this->positionAttribut[this->d]) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->positionAttribut[this->d]) ;
vertexState(current,memo_cross) ; vertexState(current,memo_cross) ;
} }
else else
{ {
this->ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ; this->Algo::MovingObjects::ParticleBase<PFP>::move(this->intersectLineEdge(current, this->getPosition(), this->d)) ;
edgeState(current,memo_cross, Geom::RIGHT) ; edgeState(current,memo_cross, Geom::RIGHT) ;
} }
} }
......
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