From 5be770a4493e025753e9fa1b52f55d1906930f3f Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Wed, 14 Mar 2012 17:10:12 +0000
Subject: [PATCH] clean up

---
 Mesh/meshGFaceRecombine.cpp | 192 ++++++++++++++++++-----------------
 Mesh/meshGFaceRecombine.h   | 195 +++++++++++++++++++-----------------
 2 files changed, 203 insertions(+), 184 deletions(-)

diff --git a/Mesh/meshGFaceRecombine.cpp b/Mesh/meshGFaceRecombine.cpp
index c4e1c09120..bc7fad0891 100644
--- a/Mesh/meshGFaceRecombine.cpp
+++ b/Mesh/meshGFaceRecombine.cpp
@@ -109,7 +109,7 @@ Recombine2D::Recombine2D(GFace *gf) : _gf(gf), _strategy(0), _numChange(0)
           mapVert[v] = rv[j];
         }
       }
-      Rec2DEdge *re[3];
+      const Rec2DEdge *re[3];
       for (int j = 0; j < 3; ++j) {
         if ( !(re[j] = Rec2DVertex::getCommonEdge(rv[j], rv[(j+1)%3])) )
           re[j] = new Rec2DEdge(rv[j], rv[(j+1)%3]);
@@ -138,7 +138,7 @@ Recombine2D::Recombine2D(GFace *gf) : _gf(gf), _strategy(0), _numChange(0)
           mapVert[v] = rv[j];
         }
       }
-      Rec2DEdge *re[4];
+      const Rec2DEdge *re[4];
       for (int j = 0; j < 4; ++j) {
         if ( !(re[j] = Rec2DVertex::getCommonEdge(rv[i], rv[(i+1)%3])) )
           re[j] = new Rec2DEdge(rv[i], rv[(i+1)%3]);
@@ -211,7 +211,7 @@ Recombine2D::~Recombine2D()
 bool Recombine2D::recombine()
 {
   Rec2DAction *nextAction;
-  while (nextAction = Rec2DData::getBestAction()) {
+  while ((nextAction = Rec2DData::getBestAction())) {
 #ifdef REC2D_DRAW
     FlGui::instance()->check();
     double time = Cpu();
@@ -322,10 +322,11 @@ bool Recombine2D::developTree()
   Rec2DData::sortEndNode();
   Rec2DData::drawEndNode(100);
   //_gf->triangles.clear();
+  return 1;
 }
 
 void Recombine2D::nextTreeActions(std::vector<Rec2DAction*> &actions,
-                                  std::vector<Rec2DElement*> &neighbourEl)
+                                  const std::vector<Rec2DElement*> &neighbourEl)
 {
   std::vector<Rec2DElement*> elements;
   actions.clear();
@@ -385,7 +386,7 @@ void Recombine2D::nextTreeActions(std::vector<Rec2DAction*> &actions,
   }
 }
 
-void Recombine2D::drawState(double shiftx, double shifty)
+void Recombine2D::drawState(double shiftx, double shifty) const
 {
   _data->drawTriangles(shiftx, shifty);
   _data->drawChanges(shiftx, shifty);
@@ -393,14 +394,14 @@ void Recombine2D::drawState(double shiftx, double shifty)
   drawContext::global()->draw();
 }
 
-void Recombine2D::printState()
+void Recombine2D::printState() const
 {
   _data->printState();
 }
 
-double Recombine2D::_geomAngle(MVertex *v,
-                               std::vector<GEdge*> &gEdge,
-                               std::vector<MElement*> &elem) //*
+double Recombine2D::_geomAngle(const MVertex *v,
+                               const std::vector<GEdge*> &gEdge,
+                               const std::vector<MElement*> &elem) const //*
 {
   if (gEdge.size() != 2) {
     Msg::Error("[Recombine2D] Wrong number of edge : %d, returning pi/2",
@@ -457,7 +458,7 @@ double Recombine2D::_geomAngle(MVertex *v,
   return angle2;
 }
 
-bool Recombine2D::_remainAllQuad(Rec2DAction *action)
+bool Recombine2D::_remainAllQuad(const Rec2DAction *action) const
 {
   if (action->isAssumedObsolete()) {
     static int a = -1;
@@ -476,13 +477,17 @@ bool Recombine2D::_remainAllQuad(Rec2DAction *action)
     return true;
   }
   
-  int min = Rec2DData::getNewParity(), index;
+  int min = Rec2DData::getNewParity(), index = -1;
   for (int i = 0; i < 4; ++i) {
     if (p[i] && min > p[i]) {
       min = p[i];
       index = i;
     }
   }
+  if (index == -1) {
+    Msg::Error("[Recombine2D] Please, fixme !");
+    return false;
+  }
   
   std::set<Rec2DElement*> neighbours;
   std::vector<Rec2DVertex*> touched;
@@ -513,7 +518,7 @@ bool Recombine2D::_remainAllQuad(Rec2DAction *action)
   return _remainAllQuad(neighbours);
 }
 
-bool Recombine2D::_remainAllQuad(std::set<Rec2DElement*> &elem)
+bool Recombine2D::_remainAllQuad(std::set<Rec2DElement*> &elem) const
 {
   std::vector<Rec2DVertex*> touched;
   
@@ -637,7 +642,7 @@ void Rec2DData::add(Rec2DElement *rel)
   
 }
 #endif
-void Rec2DData::remove(Rec2DEdge *re)
+void Rec2DData::remove(const Rec2DEdge *re)
 {
   /*bool b = false;
   unsigned int i = 0;
@@ -655,18 +660,18 @@ void Rec2DData::remove(Rec2DEdge *re)
   if (!b)
     Msg::Error("[Rec2DData] No edge");
   */
-  _current->_edges.erase(re);
+  _current->_edges.erase((Rec2DEdge*)re);
 }
 
-void Rec2DData::remove(Rec2DVertex *rv)
+void Rec2DData::remove(const Rec2DVertex *rv)
 {
-  _current->_vertices.erase(rv);
+  _current->_vertices.erase((Rec2DVertex*)rv);
   static int a = -1;
   if (++a < 1)
     Msg::Warning("FIXME Verifier element supprimŽ");
 }
 
-void Rec2DData::remove(Rec2DElement *rel)
+void Rec2DData::remove(/*const*/ Rec2DElement *rel)
 {
   /*bool b = false;
   unsigned int i = 0;
@@ -711,7 +716,7 @@ void Rec2DData::remove(Rec2DElement *rel)
 #endif
 }
 
-void Rec2DData::remove(Rec2DAction *ra)
+void Rec2DData::remove(const Rec2DAction *ra)
 {
   std::list<Rec2DAction*>::iterator it = _current->_actions.begin();
   while (it != _current->_actions.end()) {
@@ -727,7 +732,7 @@ void Rec2DData::remove(Rec2DAction *ra)
   Msg::Error("[Rec2DData] removing too much action");
 }
 
-void Rec2DData::printState()
+void Rec2DData::printState() const
 {
   Msg::Info(" ");
   Msg::Info("State");
@@ -737,7 +742,7 @@ void Rec2DData::printState()
   Msg::Info("Element (%d)", _elements.size());
   Msg::Info("global Value %g", Rec2DData::getGlobalQuality());
   Msg::Info("num action %d", _actions.size());
-  std::map<int, std::vector<Rec2DVertex*> >::iterator it = _parities.begin();
+  std::map<int, std::vector<Rec2DVertex*> >::const_iterator it = _parities.begin();
   for (; it != _parities.end(); ++it) {
     Msg::Info("par %d, #%d", it->first, it->second.size());
   }
@@ -758,10 +763,10 @@ void Rec2DData::printState()
   Msg::Info("valVert : %g >< %g", (double)valVert, (double)_valVert);
 }
 
-void Rec2DData::printActions()
+void Rec2DData::printActions() const
 {
   std::map<int, std::vector<double> > data;
-  std::list<Rec2DAction*>::iterator it = _actions.begin();
+  std::list<Rec2DAction*>::const_iterator it = _actions.begin();
   for (; it != _actions.end(); ++it) {
     std::vector<Rec2DElement*> tri;
     (*it)->getElements(tri);
@@ -811,7 +816,7 @@ void Rec2DData::clearChanges()
   _current->_changes.clear();
 }
 
-void Rec2DData::removeParity(Rec2DVertex *rv, int p)
+void Rec2DData::removeParity(const Rec2DVertex *rv, int p)
 {
   std::map<int, std::vector<Rec2DVertex*> >::iterator it;
   if ( (it = _current->_parities.find(p)) == _current->_parities.end() ) {
@@ -890,7 +895,7 @@ void Rec2DData::associateParity(int pOld, int pNew, Rec2DDataChange *rdc)
   }
 }
 
-void Rec2DData::removeAssumedParity(Rec2DVertex *rv, int p)
+void Rec2DData::removeAssumedParity(const Rec2DVertex *rv, int p)
 {
   std::map<int, std::vector<Rec2DVertex*> >::iterator it;
   it = _current->_assumedParities.find(p);
@@ -916,15 +921,15 @@ void Rec2DData::removeAssumedParity(Rec2DVertex *rv, int p)
     Msg::Error("[Rec2DData] No vertex 2");
 }
 
-void Rec2DData::saveAssumedParity(Rec2DVertex *rv, int p)
+void Rec2DData::saveAssumedParity(const Rec2DVertex *rv, int p)
 {
   static int a = -1;
   if (++a < 1)
     Msg::Warning("FIXME Do you have cleared _oldParity ?");
-  std::map<Rec2DVertex*, int>::iterator it;
-  it = _current->_oldParity.find(rv);
+  std::map<Rec2DVertex*, int>::iterator it =
+      _current->_oldParity.find((Rec2DVertex*)rv);
   if (it == _current->_oldParity.end())
-    _current->_oldParity[rv] = p;
+    _current->_oldParity[(Rec2DVertex*)rv] = p;
 }
 
 void Rec2DData::associateAssumedParity(int pOld, int pNew,
@@ -1033,7 +1038,7 @@ Rec2DAction* Rec2DData::getRandomAction()
   for (int i = 0; i < index; ++i) ++it;
   return *it;
 }
-void Rec2DData::drawTriangles(double shiftx, double shifty)
+void Rec2DData::drawTriangles(double shiftx, double shifty) const
 {
   iter_rel it = firstElement();
   for (; it != lastElement(); ++it) {
@@ -1042,7 +1047,7 @@ void Rec2DData::drawTriangles(double shiftx, double shifty)
   }
 }
 
-void Rec2DData::drawChanges(double shiftx, double shifty)
+void Rec2DData::drawChanges(double shiftx, double shifty) const
 {
   std::map<int, std::vector<double> > data;
   int k = 0;
@@ -1055,7 +1060,7 @@ void Rec2DData::drawChanges(double shiftx, double shifty)
 void Rec2DData::drawEndNode(int num)
 {
   double dx = .0, dy = .0;
-  for (unsigned int i = 0; i < num && i < _current->_endNodes.size(); ++i) {
+  for (int i = 0; i < num && i < (int)_current->_endNodes.size(); ++i) {
     std::map<int, std::vector<double> > data;
     Rec2DNode *currentNode = _current->_endNodes[i];
     Msg::Info("%d -> %g", i+1, currentNode->getGlobQual());
@@ -1111,9 +1116,9 @@ void Rec2DDataChange::hide(Rec2DAction *action)
   action->hide();
 }
 
-void Rec2DDataChange::append(Rec2DElement *rel)
+void Rec2DDataChange::append(const Rec2DElement *rel)
 {
-  _newElement.push_back(rel);
+  _newElement.push_back((Rec2DElement*)rel);
 }
 
 void Rec2DDataChange::changeParity(Rec2DVertex *rv, int par)
@@ -1131,7 +1136,7 @@ void Rec2DDataChange::saveParity(std::vector<Rec2DVertex*> &vect)
   int sizeOldParity = _oldParity.size();
   for (unsigned int i = 0; i < vect.size(); ++i) {
     bool notThere = true;
-    for (unsigned int j = 0; j < sizeOldParity; ++j) {
+    for (int j = 0; j < sizeOldParity; ++j) {
       if (_oldParity[j].first == vect[i])
         notThere = false;
     }
@@ -1203,9 +1208,9 @@ bool gterRec2DAction::operator()(Rec2DAction *ra1, Rec2DAction *ra2) const
 }
 
 Rec2DAction::Rec2DAction()
-: _lastUpdate(Recombine2D::getNumChange()-1), _globQualIfExecuted(.0)
+: _globQualIfExecuted(.0), _lastUpdate(Recombine2D::getNumChange()-1)
 {
-  static int num = 0;
+  
 }
 
 bool Rec2DAction::operator<(Rec2DAction &other)
@@ -1301,7 +1306,7 @@ void Rec2DTwoTri2Quad::_computeGlobQual()
   _lastUpdate = Recombine2D::getNumChange();
 }
 
-void Rec2DTwoTri2Quad::color(int a, int b, int c)
+void Rec2DTwoTri2Quad::color(int a, int b, int c) const
 {
 #ifdef REC2D_DRAW
   unsigned int col = CTX::instance()->packColor(a, b, c, 255);
@@ -1362,12 +1367,12 @@ void Rec2DTwoTri2Quad::apply(std::vector<Rec2DVertex*> &newPar)
   _triangles[1] = NULL;
   delete _edges[4];
   
-  new Rec2DElement((MQuadrangle*)NULL, _edges);
+  new Rec2DElement((MQuadrangle*)NULL, (const Rec2DEdge**)_edges);
   
   Recombine2D::incNumChange();
 }
 
-void Rec2DTwoTri2Quad::apply(Rec2DDataChange *rdc)
+void Rec2DTwoTri2Quad::apply(Rec2DDataChange *rdc) const
 {
   if (isObsolete()) {
     Msg::Error("[Rec2DTwoTri2Quad] I was obsolete !");
@@ -1385,11 +1390,11 @@ void Rec2DTwoTri2Quad::apply(Rec2DDataChange *rdc)
   rdc->hide(_triangles[0]);
   rdc->hide(_triangles[1]);
   rdc->hide(_edges[4]);
-  rdc->append(new Rec2DElement((MQuadrangle*)NULL, _edges));
+  rdc->append(new Rec2DElement((MQuadrangle*)NULL, (const Rec2DEdge**)_edges));
   Recombine2D::incNumChange();
 }
 
-void Rec2DTwoTri2Quad::_doWhatYouHaveToDoWithParity(Rec2DDataChange *rdc)
+void Rec2DTwoTri2Quad::_doWhatYouHaveToDoWithParity(Rec2DDataChange *rdc) const
 {
   int parMin = Rec2DData::getNewParity(), index = -1;
   for (int i = 0; i < 4; ++i) {
@@ -1422,7 +1427,7 @@ void Rec2DTwoTri2Quad::_doWhatYouHaveToDoWithParity(Rec2DDataChange *rdc)
   }
 }
 
-bool Rec2DTwoTri2Quad::isObsolete()
+bool Rec2DTwoTri2Quad::isObsolete() const
 {
   int p[4];
   p[0] = _vertices[0]->getParity();
@@ -1432,7 +1437,7 @@ bool Rec2DTwoTri2Quad::isObsolete()
   return Rec2DTwoTri2Quad::isObsolete(p);
 }
 
-bool Rec2DTwoTri2Quad::isAssumedObsolete()
+bool Rec2DTwoTri2Quad::isAssumedObsolete() const
 {
   int p[4];
   p[0] = _vertices[0]->getAssumedParity();
@@ -1442,7 +1447,7 @@ bool Rec2DTwoTri2Quad::isAssumedObsolete()
   return Rec2DTwoTri2Quad::isObsolete(p);
 }
 
-bool Rec2DTwoTri2Quad::isObsolete(int *p)
+bool Rec2DTwoTri2Quad::isObsolete(const int *p)
 {
   if (p[0] && p[0]/2 == p[1]/2 && p[0]%2 != p[1]%2 ||
       p[2] && p[2]/2 == p[3]/2 && p[2]%2 != p[3]%2 ||
@@ -1452,7 +1457,7 @@ bool Rec2DTwoTri2Quad::isObsolete(int *p)
   return false;
 }
 
-void Rec2DTwoTri2Quad::getAssumedParities(int *par)
+void Rec2DTwoTri2Quad::getAssumedParities(int *par) const
 {
   par[0] = _vertices[0]->getAssumedParity();
   par[1] = _vertices[1]->getAssumedParity();
@@ -1499,14 +1504,14 @@ bool Rec2DTwoTri2Quad::whatWouldYouDo
   return true;
 }
 
-void Rec2DTwoTri2Quad::getElements(std::vector<Rec2DElement*> &elem)
+void Rec2DTwoTri2Quad::getElements(std::vector<Rec2DElement*> &elem) const
 {
   elem.clear();
   elem.push_back(_triangles[0]);
   elem.push_back(_triangles[1]);
 }
 
-void Rec2DTwoTri2Quad::getNeighbourElements(std::vector<Rec2DElement*> &elem)
+void Rec2DTwoTri2Quad::getNeighbourElements(std::vector<Rec2DElement*> &elem) const
 {
   elem.clear();
   _triangles[0]->getMoreNeighbours(elem);
@@ -1546,7 +1551,7 @@ int Rec2DTwoTri2Quad::getNum(double shiftx, double shifty)
   return quad->getNum();
 }
 
-Rec2DElement* Rec2DTwoTri2Quad::getRandomElement()
+Rec2DElement* Rec2DTwoTri2Quad::getRandomElement() const
 {
   return _triangles[rand() % 2];
 }
@@ -1555,8 +1560,8 @@ Rec2DElement* Rec2DTwoTri2Quad::getRandomElement()
 /**  Rec2DEdge  **/
 /*****************/
 Rec2DEdge::Rec2DEdge(Rec2DVertex *rv0, Rec2DVertex *rv1)
-: _rv0(rv0), _rv1(rv1), _boundary(-1), _lastUpdate(-2),
-  _weight(REC2D_EDGE_BASE+2*REC2D_EDGE_QUAD)
+: _rv0(rv0), _rv1(rv1), _lastUpdate(-2),
+  _weight(REC2D_EDGE_BASE+2*REC2D_EDGE_QUAD), _boundary(-1)
 {
   reveal();
 }
@@ -1587,23 +1592,22 @@ void Rec2DEdge::_computeQual() //*
   _lastUpdate = Recombine2D::getNumChange();
 }
 
-double Rec2DEdge::getQual()
+double Rec2DEdge::getQual() const
 {
   if (_rv0->getLastMove() > _lastUpdate ||
       _rv1->getLastMove() > _lastUpdate   ) {
-    _computeQual();
-    Msg::Warning("Imhere");
+    ((Rec2DEdge*)this)->_computeQual();
   }
   return _qual;
 }
 
-double Rec2DEdge::getWeightedQual()
+double Rec2DEdge::getWeightedQual() const
 {
   if (_weight != .0                             &&
       _lastUpdate < Recombine2D::getNumChange() &&
       (_rv0->getLastMove() > _lastUpdate ||
        _rv1->getLastMove() > _lastUpdate   )      ) {
-    _computeQual(); 
+    ((Rec2DEdge*)this)->_computeQual(); 
   }
   return (double)_weight * _qual;
 }
@@ -1620,7 +1624,7 @@ void Rec2DEdge::_addWeight(int w)
   Rec2DData::addEdge(w, (double)w*getQual());
 }
 
-Rec2DElement* Rec2DEdge::getUniqueElement(Rec2DEdge *re)
+Rec2DElement* Rec2DEdge::getUniqueElement(const Rec2DEdge *re)
 {
   std::vector<Rec2DElement*> elem;
   Rec2DVertex::getCommonElements(re->getVertex(0), re->getVertex(1), elem);
@@ -1681,7 +1685,7 @@ double Rec2DEdge::_straightAlignment() const
   return (alpha0/lc0 + alpha1/lc1) / (1./lc0 + 1./lc1);
 }
 
-Rec2DVertex* Rec2DEdge::getOtherVertex(Rec2DVertex *rv) const
+Rec2DVertex* Rec2DEdge::getOtherVertex(const Rec2DVertex *rv) const
 {
   if (rv == _rv0)
     return _rv1;
@@ -1715,7 +1719,7 @@ Rec2DVertex::Rec2DVertex(Rec2DVertex *rv, double ang)
   static int a = -1;
   if (++a < -1) Msg::Warning("FIXME Edges really necessary ?");
   
-  for (int i = 0; i < _edges.size(); ++i) {
+  for (unsigned int i = 0; i < _edges.size(); ++i) {
     _edges[i]->swap(rv, this);
   }
   Rec2DData::add(this);
@@ -1779,7 +1783,8 @@ void Rec2DVertex::initStaticTable()
   }
 }
 
-Rec2DEdge* Rec2DVertex::getCommonEdge(Rec2DVertex *rv0, Rec2DVertex *rv1)
+Rec2DEdge* Rec2DVertex::getCommonEdge(const Rec2DVertex *rv0,
+                                      const Rec2DVertex *rv1 )
 {
   for (unsigned int i = 0; i < rv0->_edges.size(); ++i) {
     if (rv1->has(rv0->_edges[i]))
@@ -1789,8 +1794,9 @@ Rec2DEdge* Rec2DVertex::getCommonEdge(Rec2DVertex *rv0, Rec2DVertex *rv1)
   return NULL;
 }
 
-void Rec2DVertex::getCommonElements(Rec2DVertex *rv0, Rec2DVertex *rv1,
-                                    std::vector<Rec2DElement*> &elem   )
+void Rec2DVertex::getCommonElements(const Rec2DVertex *rv0,
+                                    const Rec2DVertex *rv1,
+                                    std::vector<Rec2DElement*> &elem)
 {
   for (unsigned int i = 0; i < rv0->_elements.size(); ++i) {
     if (rv1->has(rv0->_elements[i]))
@@ -1821,7 +1827,7 @@ bool Rec2DVertex::setBoundaryParity(int p0, int p1)
   return false;
 }
 
-bool Rec2DVertex::_recursiveBoundParity(Rec2DVertex *prevRV, int p0, int p1)
+bool Rec2DVertex::_recursiveBoundParity(const Rec2DVertex *prevRV, int p0, int p1)
 {
   if (_parity == p0)
     return true;
@@ -1952,7 +1958,7 @@ void Rec2DVertex::revertAssumedParity(int p)
   }
 }
 
-void Rec2DVertex::getTriangles(std::set<Rec2DElement*> &tri)
+void Rec2DVertex::getTriangles(std::set<Rec2DElement*> &tri) const
 {
   for (unsigned int i = 0; i < _elements.size(); ++i) {
     if (_elements[i]->isTri())
@@ -2008,7 +2014,8 @@ double Rec2DVertex::getGainDegree(int n) const
          - fabs(2./M_PI * _angle/(double)(_elements.size() + n) - 1.);
 }
 
-double Rec2DVertex::getGainMerge(Rec2DElement *rel1, Rec2DElement *rel2)
+double Rec2DVertex::getGainMerge(const Rec2DElement *rel1,
+                                 const Rec2DElement *rel2 ) const
 {
   double qualAngle = _sumQualAngle;
   qualAngle -= _angle2Qual(rel1->getAngle(this));
@@ -2118,14 +2125,14 @@ void Rec2DVertex::getUniqueActions(std::vector<Rec2DAction*> &actions) const
 
 /**  Rec2DElement  **/
 /********************/
-Rec2DElement::Rec2DElement(MTriangle *t, Rec2DEdge **re, Rec2DVertex **rv)
+Rec2DElement::Rec2DElement(MTriangle *t, const Rec2DEdge **re, Rec2DVertex **rv)
 : _mEl((MElement *)t), _numEdge(3)
 {
   _edges[3] = NULL;
   _elements[3] = NULL;
   
   for (int i = 0; i < 3; ++i) {
-    _edges[i] = re[i];
+    _edges[i] = (Rec2DEdge*)re[i];
     _edges[i]->addHasTri();
   }
   
@@ -2149,11 +2156,11 @@ Rec2DElement::Rec2DElement(MTriangle *t, Rec2DEdge **re, Rec2DVertex **rv)
   Rec2DData::add(this);
 }
 
-Rec2DElement::Rec2DElement(MQuadrangle *q, Rec2DEdge **re, Rec2DVertex **rv)
+Rec2DElement::Rec2DElement(MQuadrangle *q, const Rec2DEdge **re, Rec2DVertex **rv)
 : _mEl((MElement *)q), _numEdge(4)
 {
   for (int i = 0; i < 4; ++i) {
-    _edges[i] = re[i];
+    _edges[i] = (Rec2DEdge*)re[i];
     _edges[i]->addHasQuad();
   }
   
@@ -2191,7 +2198,7 @@ void Rec2DElement::hide()
   }
   std::vector<Rec2DVertex*> vertices(_numEdge);
   getVertices(vertices);
-  for (unsigned int i = 0; i < _numEdge; ++i) {
+  for (int i = 0; i < _numEdge; ++i) {
     vertices[i]->rmv(this);
   }
   Rec2DData::remove(this);
@@ -2209,7 +2216,7 @@ void Rec2DElement::reveal()
   }
   std::vector<Rec2DVertex*> vertices(_numEdge);
   getVertices(vertices);
-  for (unsigned int i = 0; i < _numEdge; ++i) {
+  for (int i = 0; i < _numEdge; ++i) {
     vertices[i]->add(this);
   }
   Rec2DData::add(this);
@@ -2237,16 +2244,16 @@ void Rec2DElement::add(Rec2DEdge *re)
     re->addHasQuad();
 }
 
-bool Rec2DElement::has(Rec2DEdge *re) const
+bool Rec2DElement::has(const Rec2DEdge *re) const
 {
-  for (unsigned int i = 0; i < _numEdge; ++i) {
+  for (int i = 0; i < _numEdge; ++i) {
     if (_edges[i] == re)
       return true;
   }
   return false;
 }
 
-void Rec2DElement::add(Rec2DAction *ra)
+void Rec2DElement::add(const Rec2DAction *ra)
 {
   for (unsigned int i = 0; i < _actions.size(); ++i) {
     if (_actions[i] == ra) {
@@ -2254,10 +2261,10 @@ void Rec2DElement::add(Rec2DAction *ra)
       return;
     }
   }
-  _actions.push_back(ra);
+  _actions.push_back((Rec2DAction*)ra);
 }
 
-void Rec2DElement::remove(Rec2DAction *ra)
+void Rec2DElement::remove(const Rec2DAction *ra)
 {
   unsigned int i = 0;
   while (i < _actions.size()) {
@@ -2271,13 +2278,13 @@ void Rec2DElement::remove(Rec2DAction *ra)
   Msg::Error("[Rec2DElement] Didn't removed action, didn't have it");
 }
 
-void Rec2DElement::addNeighbour(Rec2DEdge *re, Rec2DElement *rel)
+void Rec2DElement::addNeighbour(const Rec2DEdge *re, const Rec2DElement *rel)
 {
   for (int i = 0; i < _numEdge; ++i) {
     if (_edges[i] == re) {
       if (_elements[i] != NULL && _elements[i] != rel)
         Msg::Error("[Rec2DElement] Have already a neighbour element");
-      _elements[i] = rel;
+      _elements[i] = (Rec2DElement*)rel;
       return;
     }
   }
@@ -2285,7 +2292,7 @@ void Rec2DElement::addNeighbour(Rec2DEdge *re, Rec2DElement *rel)
 }
 
 
-void Rec2DElement::rmvNeighbour(Rec2DEdge *re, Rec2DElement *rel)
+void Rec2DElement::rmvNeighbour(const Rec2DEdge *re, const Rec2DElement *rel)
 {
   for (int i = 0; i < _numEdge; ++i) {
     if (_edges[i] == re) {
@@ -2300,7 +2307,7 @@ void Rec2DElement::rmvNeighbour(Rec2DEdge *re, Rec2DElement *rel)
 }
 
 
-double Rec2DElement::getAngle(Rec2DVertex *rv)
+double Rec2DElement::getAngle(const Rec2DVertex *rv) const
 {
   std::vector<Rec2DVertex*> vert;
   getVertices(vert);
@@ -2361,7 +2368,7 @@ void Rec2DElement::getVertices(std::vector<Rec2DVertex*> &verts) const
   while (k < _numEdge) {
     verts[k] = _edges[i/2]->getVertex(i%2);
     bool b = true;
-    for (unsigned int j = 0; j < k; ++j) {
+    for (int j = 0; j < k; ++j) {
       if (verts[k] == verts[j])
         b = false;
     }
@@ -2396,9 +2403,10 @@ void Rec2DElement::getUniqueActions(std::vector<Rec2DAction*> &vectRA) const
   }
 }
 
-Rec2DEdge* Rec2DElement::getCommonEdge(Rec2DElement *rel0, Rec2DElement *rel1)
+Rec2DEdge* Rec2DElement::getCommonEdge(const Rec2DElement *rel0,
+                                       const Rec2DElement *rel1 )
 {
-  for (unsigned int i = 0; i < rel0->_numEdge; ++i) {
+  for (int i = 0; i < rel0->_numEdge; ++i) {
     if (rel1->has(rel0->_edges[i]))
       return rel0->_edges[i];
   }
@@ -2406,7 +2414,8 @@ Rec2DEdge* Rec2DElement::getCommonEdge(Rec2DElement *rel0, Rec2DElement *rel1)
   return NULL;
 }
 
-Rec2DVertex* Rec2DElement::getOtherVertex(Rec2DVertex *rv1, Rec2DVertex *rv2) const
+Rec2DVertex* Rec2DElement::getOtherVertex(const Rec2DVertex *rv1,
+                                          const Rec2DVertex *rv2 ) const
 {
   if (_numEdge == 4) {
     Msg::Error("[Rec2DElement] I'm not a triangle");
@@ -2429,7 +2438,6 @@ void Rec2DElement::createElement(double shiftx, double shifty) const
   if (_numEdge != 3) {
     Msg::Error("[Rec2DElement] Need definition");
   }
-  static int a = 0;
   
   std::vector<Rec2DVertex*> v;
   getVertices(v);
@@ -2454,11 +2462,11 @@ MQuadrangle* Rec2DElement::_createQuad() const
     Msg::Error("[Rec2DElement] Why do you ask me to do this ? You know I can't do it ! COULD YOU LEAVE ME KNOW ?");
     return new MQuadrangle(NULL, NULL, NULL, NULL);
   }
-  MVertex *v1, *v2, *v3, *v4;
+  MVertex *v1, *v2, *v3 = NULL, *v4 = NULL;
   v1 = _edges[0]->getVertex(0)->getMVertex();
   v2 = _edges[0]->getVertex(1)->getMVertex();
-  int I;
-  for (unsigned int i = 1; i < 4; ++i) {
+  int I = -1;
+  for (int i = 1; i < 4; ++i) {
     if (v2 == _edges[i]->getVertex(0)->getMVertex()) {
       v3 = _edges[i]->getVertex(1)->getMVertex();
       I = i;
@@ -2470,7 +2478,11 @@ MQuadrangle* Rec2DElement::_createQuad() const
       break;
     }
   }
-  for (unsigned int i = 1; i < 4; ++i) {
+  if (I == -1) {
+    Msg::Error("[Rec2DElement] Edges not connected");
+    return NULL;
+  }
+  for (int i = 1; i < 4; ++i) {
     if (i == I) continue;
     if (v3 == _edges[i]->getVertex(0)->getMVertex()) {
       v4 = _edges[i]->getVertex(1)->getMVertex();
@@ -2535,7 +2547,7 @@ Rec2DNode::Rec2DNode(Rec2DNode *father, Rec2DAction *ra,
         Rec2DData::addEndNode(this);
     }
     else {
-      for (int i = 0; i < actions.size(); ++i) {
+      for (unsigned int i = 0; i < actions.size(); ++i) {
         double bestSonEGQ;
         _son[i] = new Rec2DNode(this, actions[i], bestSonEGQ, depth-1);
         if (bestSonEGQ > _bestEndGlobQual) {
@@ -2631,7 +2643,7 @@ void Rec2DNode::develop(int depth, double &bestEndGlobQual)
     Recombine2D::nextTreeActions(actions, neighbours);
     
     if (actions.size()) {
-      for (int i = 0; i < actions.size(); ++i) {
+      for (unsigned int i = 0; i < actions.size(); ++i) {
         double bestSonEGQ;
         _son[i] = new Rec2DNode(this, actions[i], bestSonEGQ, depth-1);
         if (bestSonEGQ > _bestEndGlobQual) {
diff --git a/Mesh/meshGFaceRecombine.h b/Mesh/meshGFaceRecombine.h
index 799f48c9dd..a84b6679b5 100644
--- a/Mesh/meshGFaceRecombine.h
+++ b/Mesh/meshGFaceRecombine.h
@@ -53,8 +53,7 @@ class Recombine2D {
     Rec2DData *_data;
     static Recombine2D *_current;
     
-    int _numChange;
-    int _strategy;
+    int _strategy, _numChange;
     
   public :
     Recombine2D(GFace*);
@@ -64,11 +63,11 @@ class Recombine2D {
     double recombine(int depth);
     bool developTree();
     static void nextTreeActions(std::vector<Rec2DAction*>&,
-                                std::vector<Rec2DElement*> &neighbours);
+                                const std::vector<Rec2DElement*> &neighbours);
     
     inline void setStrategy(int s) {_strategy = s;}
-    void drawState(double shiftx, double shifty);
-    void printState();
+    void drawState(double shiftx, double shifty) const;
+    void printState() const;
     
     static inline GFace* getGFace() {return _current->_gf;}
     static inline int getNumChange() {return _current->_numChange;}
@@ -80,11 +79,11 @@ class Recombine2D {
     static void clearChanges();
     
   private :
-    double _geomAngle(MVertex*,
-                      std::vector<GEdge*>&,
-                      std::vector<MElement*>&);
-    bool _remainAllQuad(Rec2DAction *action);
-    bool _remainAllQuad(std::set<Rec2DElement*>&);
+    double _geomAngle(const MVertex*,
+                      const std::vector<GEdge*>&,
+                      const std::vector<MElement*>&) const;
+    bool _remainAllQuad(const Rec2DAction *action) const;
+    bool _remainAllQuad(std::set<Rec2DElement*>&) const;
 };
 
 class Rec2DData {
@@ -109,18 +108,16 @@ class Rec2DData {
     Rec2DData();
     ~Rec2DData();
     
-    void printState();
-    void printActions();
+    void printState() const;
+    void printActions() const;
     void sortActions() {_actions.sort(lessRec2DAction());}
-    void drawTriangles(double shiftx, double shifty);
-    void drawChanges(double shiftx, double shifty);
+    void drawTriangles(double shiftx, double shifty) const;
+    void drawChanges(double shiftx, double shifty) const;
 #ifdef REC2D_DRAW
     std::vector<MTriangle*> _tri;
     std::vector<MQuadrangle*> _quad;
 #endif
 
-    static int getNumChange() {return _current->_changes.size();}
-    
     static inline int getNumEndNode() {return _current->_endNodes.size();}
     static inline int getNumElement() {return _current->_elements.size();}
     static Rec2DDataChange* getNewDataChange();
@@ -130,7 +127,7 @@ class Rec2DData {
     
     static double getGlobalQuality();
     static double getGlobalQuality(int numEdge, double valEdge,
-                                 int numVert, double valVert );
+                                 int numVert, double valVert   );
     static inline void addVert(int num, double val) {
       _current->_numVert += num;
       _current->_valVert += (long double)val;
@@ -161,36 +158,44 @@ class Rec2DData {
     static inline iter_rv lastVertex() {return _current->_vertices.end();}
     static inline iter_rel lastElement() {return _current->_elements.end();}
     
-    static inline void add(Rec2DEdge *re) {_current->_edges.insert(re);}
-    static inline void add(Rec2DVertex *rv) {_current->_vertices.insert(rv);}
+    static inline void add(const Rec2DEdge *re) {
+      _current->_edges.insert((Rec2DEdge*)re);
+    }
+    static inline void add(const Rec2DVertex *rv) {
+      _current->_vertices.insert((Rec2DVertex*)rv);
+    }
 #ifndef REC2D_DRAW
-    static inline void add(Rec2DElement *rel) {_current->_elements.insert(rel);}
+    static inline void add(const Rec2DElement *rel) {
+      _current->_elements.insert((Rec2DElement*)rel);
+      }
 #else
     static void add(Rec2DElement *rel);
 #endif
-    static inline void add(Rec2DAction *ra) {_current->_actions.push_back(ra);}
-    static void remove(Rec2DEdge*);
-    static void remove(Rec2DVertex*);
-    static void remove(Rec2DElement*);
-    static void remove(Rec2DAction*);
-    
-    static inline void addEndNode(Rec2DNode *rn) {
-      _current->_endNodes.push_back(rn);
+    static inline void add(const Rec2DAction *ra) {
+      _current->_actions.push_back((Rec2DAction*)ra);
+    }
+    static void remove(const Rec2DEdge*);
+    static void remove(const Rec2DVertex*);
+    static void remove(/*const*/ Rec2DElement*);
+    static void remove(const Rec2DAction*);
+    
+    static inline void addEndNode(const Rec2DNode *rn) {
+      _current->_endNodes.push_back((Rec2DNode*)rn);
     }
     static void sortEndNode();
     static inline void drawEndNode(int num);
     
     static int getNewParity();
-    static void removeParity(Rec2DVertex*, int);
-    static inline void addParity(Rec2DVertex *rv, int p) {
-      _current->_parities[p].push_back(rv);
+    static void removeParity(const Rec2DVertex*, int);
+    static inline void addParity(const Rec2DVertex *rv, int p) {
+      _current->_parities[p].push_back((Rec2DVertex*)rv);
     }
     static void associateParity(int pOld, int pNew, Rec2DDataChange *rdc = NULL);
-    static void removeAssumedParity(Rec2DVertex*, int);
-    static inline void addAssumedParity(Rec2DVertex *rv, int p) {
-      _current->_assumedParities[p].push_back(rv);
+    static void removeAssumedParity(const Rec2DVertex*, int);
+    static inline void addAssumedParity(const Rec2DVertex *rv, int p) {
+      _current->_assumedParities[p].push_back((Rec2DVertex*)rv);
     }
-    static void saveAssumedParity(Rec2DVertex*, int);
+    static void saveAssumedParity(const Rec2DVertex*, int);
     static void associateAssumedParity(int pOld, int pNew,
                                        std::vector<Rec2DVertex*>&);
     static inline void clearAssumedParities() {_current->_oldParity.clear();}
@@ -214,7 +219,7 @@ class Rec2DDataChange {
     void hide(Rec2DAction*);
     void hide(std::vector<Rec2DAction*>);
     
-    void append(Rec2DElement*);
+    void append(const Rec2DElement*);
     
     void changeParity(Rec2DVertex*, int);
     void saveParity(std::vector<Rec2DVertex*>&);
@@ -222,8 +227,8 @@ class Rec2DDataChange {
     
     void revert();
     
-    void setAction(Rec2DAction *action) {_ra = action;}
-    Rec2DAction* getAction() {return _ra;}
+    void setAction(const Rec2DAction *action) {_ra = (Rec2DAction*)action;}
+    Rec2DAction* getAction() const {return _ra;}
 };
 
 class Rec2DAction {
@@ -239,19 +244,19 @@ class Rec2DAction {
     
     bool operator<(Rec2DAction&);
     double getReward();
-    virtual void color(int, int, int) = 0;
+    virtual void color(int, int, int) const = 0;
     virtual void apply(std::vector<Rec2DVertex*> &newPar) = 0;
-    virtual void apply(Rec2DDataChange*) = 0;
-    virtual bool isObsolete() = 0;
-    virtual bool isAssumedObsolete() = 0;
-    virtual void getAssumedParities(int*) = 0;
+    virtual void apply(Rec2DDataChange*) const = 0;
+    virtual bool isObsolete() const = 0;
+    virtual bool isAssumedObsolete() const = 0;
+    virtual void getAssumedParities(int*) const = 0;
     virtual bool whatWouldYouDo(std::map<Rec2DVertex*, std::vector<int> >&) = 0;
-    virtual Rec2DVertex* getVertex(int) = 0;
+    virtual Rec2DVertex* getVertex(int) const = 0;
     virtual int getNumElement() = 0;
-    virtual void getElements(std::vector<Rec2DElement*>&) = 0;
-    virtual void getNeighbourElements(std::vector<Rec2DElement*>&) = 0;
+    virtual void getElements(std::vector<Rec2DElement*>&) const = 0;
+    virtual void getNeighbourElements(std::vector<Rec2DElement*>&) const = 0;
     virtual int getNum(double shiftx, double shifty) = 0;
-    virtual Rec2DElement* getRandomElement() = 0;
+    virtual Rec2DElement* getRandomElement() const = 0;
     
   private :
     virtual void _computeGlobQual() = 0;
@@ -269,26 +274,26 @@ class Rec2DTwoTri2Quad : public Rec2DAction {
     virtual void hide();
     virtual void reveal();
     
-    virtual void color(int, int, int);
+    virtual void color(int, int, int) const;
     virtual void apply(std::vector<Rec2DVertex*> &newPar);
-    virtual void apply(Rec2DDataChange*);
+    virtual void apply(Rec2DDataChange*) const;
     
-    virtual bool isObsolete();
-    virtual bool isAssumedObsolete();
-    static bool isObsolete(int*);
-    virtual void getAssumedParities(int*);
+    virtual bool isObsolete() const;
+    virtual bool isAssumedObsolete() const;
+    static bool isObsolete(const int*);
+    virtual void getAssumedParities(int*) const;
     virtual bool whatWouldYouDo(std::map<Rec2DVertex*, std::vector<int> >&);
     
-    virtual inline Rec2DVertex* getVertex(int i) {return _vertices[i];} //-
+    virtual inline Rec2DVertex* getVertex(int i) const {return _vertices[i];} //-
     virtual inline int getNumElement() {return 2;}
-    virtual void getElements(std::vector<Rec2DElement*>&);
-    virtual void getNeighbourElements(std::vector<Rec2DElement*>&);
+    virtual void getElements(std::vector<Rec2DElement*>&) const;
+    virtual void getNeighbourElements(std::vector<Rec2DElement*>&) const;
     virtual int getNum(double shiftx, double shifty);
-    virtual Rec2DElement* getRandomElement();
+    virtual Rec2DElement* getRandomElement() const;
     
   private :
     virtual void _computeGlobQual();
-    void _doWhatYouHaveToDoWithParity(Rec2DDataChange*);
+    void _doWhatYouHaveToDoWithParity(Rec2DDataChange*) const;
 };
 
 class Rec2DEdge {
@@ -304,18 +309,18 @@ class Rec2DEdge {
     void hide();
     void reveal();
     
-    double getQual();
-    double getWeightedQual();
+    double getQual() const;
+    double getWeightedQual() const;
     
-    inline double addHasTri() {_addWeight(-REC2D_EDGE_QUAD); ++_boundary;}
-    inline double remHasTri() {_addWeight(REC2D_EDGE_QUAD); --_boundary;}
-    inline double addHasQuad() {++_boundary;}
-    inline double remHasQuad() {--_boundary;}
+    inline void addHasTri() {_addWeight(-REC2D_EDGE_QUAD); ++_boundary;}
+    inline void remHasTri() {_addWeight(REC2D_EDGE_QUAD); --_boundary;}
+    inline void addHasQuad() {++_boundary;}
+    inline void remHasQuad() {--_boundary;}
     inline bool isOnBoundary() const {return !_boundary;}
     
     inline Rec2DVertex* getVertex(int i) const {if (i) return _rv1; return _rv0;}
-    Rec2DVertex* getOtherVertex(Rec2DVertex*) const;
-    static Rec2DElement* getUniqueElement(Rec2DEdge*);
+    Rec2DVertex* getOtherVertex(const Rec2DVertex*) const;
+    static Rec2DElement* getUniqueElement(const Rec2DEdge*);
     
     void swap(Rec2DVertex *oldRV, Rec2DVertex *newRV);
     
@@ -338,11 +343,11 @@ class Rec2DVertex {
   private :
     MVertex *_v;
     const double _angle;
+    int _onWhat; // _onWhat={-1:corner,0:edge,1:face}
+    int _parity, _assumedParity, _lastMove;
+    double _sumQualAngle;
     std::vector<Rec2DEdge*> _edges;
     std::vector<Rec2DElement*> _elements;
-    double _sumQualAngle;
-    int _lastMove, _onWhat; // _onWhat={-1:corner,0:edge,1:face}
-    int _parity, _assumedParity;
     SPoint2 _param;
     
     static double **_qualVSnum;
@@ -360,7 +365,7 @@ class Rec2DVertex {
     inline double getQualAngle() const {return _sumQualAngle/(double)_elements.size();}
     double getQualDegree(int numEl = -1) const;
     double getGainDegree(int) const;
-    double getGainMerge(Rec2DElement*, Rec2DElement*);
+    double getGainMerge(const Rec2DElement*, const Rec2DElement*) const;
     
     inline void setOnBoundary();
     inline bool getOnBoundary() const {return _onWhat < 1;}
@@ -375,7 +380,7 @@ class Rec2DVertex {
     void revertAssumedParity(int);
     
     inline int getNumElements() const {return _elements.size();}
-    void getTriangles(std::set<Rec2DElement*>&);
+    void getTriangles(std::set<Rec2DElement*>&) const;
     inline MVertex* getMVertex() const {return _v;}
     
     inline int getLastMove() const {return _lastMove;}
@@ -398,39 +403,41 @@ class Rec2DVertex {
     void getUniqueActions(std::vector<Rec2DAction*>&) const;
     
     static void initStaticTable();
-    static Rec2DEdge* getCommonEdge(Rec2DVertex*, Rec2DVertex*);
-    static void getCommonElements(Rec2DVertex*, Rec2DVertex*,
-                                  std::vector<Rec2DElement*>&);
+    static Rec2DEdge* getCommonEdge(const Rec2DVertex*, const Rec2DVertex*);
+    static void getCommonElements(const Rec2DVertex*, const Rec2DVertex*,
+                                  std::vector<Rec2DElement*>&            );
     
   private :
-    bool _recursiveBoundParity(Rec2DVertex *prev, int p0, int p1);
-    inline double _angle2Qual(double ang) {return 1. - fabs(ang*2./M_PI - 1.);}
+    bool _recursiveBoundParity(const Rec2DVertex *prev, int p0, int p1);
+    inline double _angle2Qual(double ang) const {
+      return 1. - fabs(ang*2./M_PI - 1.);
+    }
 };
 
 class Rec2DElement {
   private :
+    MElement *_mEl;       // can be NULL
     int _numEdge;
     Rec2DEdge *_edges[4];
     Rec2DElement *_elements[4];  // NULL if no neighbour
-    MElement *_mEl;       // can be NULL
     std::vector<Rec2DAction*> _actions;
     
   public :
-    Rec2DElement(MTriangle*, Rec2DEdge**, Rec2DVertex **rv = NULL);
-    Rec2DElement(MQuadrangle*, Rec2DEdge**, Rec2DVertex **rv = NULL);
+    Rec2DElement(MTriangle*, const Rec2DEdge**, Rec2DVertex **rv = NULL);
+    Rec2DElement(MQuadrangle*, const Rec2DEdge**, Rec2DVertex **rv = NULL);
     ~Rec2DElement() {hide();}
     void hide();
     void reveal();
     
-    bool inline isTri() {return _numEdge == 3;}
-    bool inline isQuad() {return _numEdge == 4;}
+    bool inline isTri() const {return _numEdge == 3;}
+    bool inline isQuad() const {return _numEdge == 4;}
     
     void add(Rec2DEdge*);
-    bool has(Rec2DEdge*) const;
-    void add(Rec2DAction*);
-    void remove(Rec2DAction*);
-    void addNeighbour(Rec2DEdge*, Rec2DElement*);
-    void rmvNeighbour(Rec2DEdge*, Rec2DElement*);
+    bool has(const Rec2DEdge*) const;
+    void add(const Rec2DAction*);
+    void remove(const Rec2DAction*);
+    void addNeighbour(const Rec2DEdge*, const Rec2DElement*);
+    void rmvNeighbour(const Rec2DEdge*, const Rec2DElement*);
     
     inline MElement* getMElement() const {return _mEl;}
 #ifdef REC2D_DRAW
@@ -454,7 +461,7 @@ class Rec2DElement {
 #endif
     void createElement(double shiftx, double shifty) const;
     
-    double getAngle(Rec2DVertex*);
+    double getAngle(const Rec2DVertex*) const;
     
     inline int getNumActions() const {return _actions.size();}
     inline Rec2DAction* getAction(int i) const {return _actions[i];}
@@ -464,8 +471,8 @@ class Rec2DElement {
     void getMoreEdges(std::vector<Rec2DEdge*>&) const;
     void getVertices(std::vector<Rec2DVertex*>&) const;
     void getMoreNeighbours(std::vector<Rec2DElement*>&) const;
-    Rec2DVertex* getOtherVertex(Rec2DVertex*, Rec2DVertex*) const;
-    static Rec2DEdge* getCommonEdge(Rec2DElement*, Rec2DElement*);
+    Rec2DVertex* getOtherVertex(const Rec2DVertex*, const Rec2DVertex*) const;
+    static Rec2DEdge* getCommonEdge(const Rec2DElement*, const Rec2DElement*);
     
     inline int getNum() const {return _mEl->getNum();}
     
@@ -492,14 +499,14 @@ class Rec2DNode {
     void recoverSequence();
     void rmvSon(Rec2DNode*);
     void develop(int depth, double &bestEndGlobQual);
-    inline bool hasSon() {return _son[0];}
+    inline bool hasSon() const {return _son[0];}
     bool makeChanges();
     
     bool operator<(Rec2DNode&);
-    inline Rec2DNode* getFather() {return _father;}
-    inline Rec2DAction* getAction() {return _ra;}
-    inline double getGlobQual() {return _globalQuality;}
-    inline int getNumTri() {return _remainingTri;}
+    inline Rec2DNode* getFather() const {return _father;}
+    inline Rec2DAction* getAction() const {return _ra;}
+    inline double getGlobQual() const {return _globalQuality;}
+    inline int getNumTri() const {return _remainingTri;}
 };
 
 
-- 
GitLab