diff --git a/Mesh/meshRecombine2D.h b/Mesh/meshRecombine2D.h index 4199a5eea182676f3e454a573f7e77aeacedd405..5c624db8e584fd81aa8e4f3c8c1fd470b2bab031 100644 --- a/Mesh/meshRecombine2D.h +++ b/Mesh/meshRecombine2D.h @@ -180,9 +180,17 @@ class TrianglesUnion { _NumVert -= _numEmbVert; for (int i = 0; i < _numBoundVert; i++) { _ValVert += _vertices[i]->getReward(-1); + _vertices[i]->changeNumEl(-1); } _RECOMPUTE++; } MQuadrangle *createQuad() const; + void print() { + Msg::Info("Printing TU (%d,%d,%d,%d)", _numEmbVert, _numBoundVert, _numEmbEdge, _numTri); + for (int i = 0; i < _numTri; i++) + Msg::Info("Triangle %d", _triangles[i]->getNum()); + } + static inline void addRec() {_RECOMPUTE++;} + inline double getReturn() {return _globValIfExecuted;} }; #endif diff --git a/Mesh/meshRecombine2D_2.cpp b/Mesh/meshRecombine2D_2.cpp index 270fd8af9f18c61c31db515e0cd5ebee519f176f..1543764f200ee781e8a56af7255e7ec5ff81d01c 100644 --- a/Mesh/meshRecombine2D_2.cpp +++ b/Mesh/meshRecombine2D_2.cpp @@ -148,6 +148,7 @@ Recombine2D::Recombine2D(GFace *gf) else ;//Msg::Info("[bord] %d", (*itedge).second.size()); } + TrianglesUnion::addRec(); _setQuads.sort(lessTriUnion()); _recombine(true); @@ -156,11 +157,25 @@ Recombine2D::Recombine2D(GFace *gf) void Recombine2D::_recombine(bool a) -{ +{ + SetBoundingBox(); + int i = 0; - while (!_setQuads.empty()) { + while (!_setQuads.empty() && i < 1000) { std::list<TrianglesUnion*>::iterator it = _setQuads.begin(); - + Msg::Info("------------------ %d", _setQuads.size()); + { + Msg::Info("Expected return %lf", (*it)->getReturn()); + _applied = false; + apply(); + _applied = false; + CTX::instance()->mesh.changed = (ENT_ALL); + //drawContext::global()->draw(); + //FlGui::instance()->check(); + drawContext::global()->draw(); + //if (!Msg::GetAnswer("Continue ?", 1, "no", "yes")) + // Msg::Info("I continue anyway :p"); + } (*it)->select(); _quads.push_back((*it)->createQuad()); @@ -239,10 +254,14 @@ int Recombine2D::apply(bool a) std::vector<MTriangle*> triangles2; for (int i = 0; i < _gf->triangles.size(); i++) { - delete _gf->triangles[i]; + if (_isolated.find(_gf->triangles[i]) != _isolated.end()) + delete _gf->triangles[i]; + else + triangles2.push_back(_gf->triangles[i]); } _gf->triangles = triangles2; _gf->quadrangles = _quads; + _isolated.clear(); _applied = true; return 1; @@ -262,8 +281,12 @@ void Recombine2D::_removeImpossible(std::list<TrianglesUnion*>::iterator it) if (touched.find((*it)->getTriangle(i)) != touched.end()) b = true; } - if (b) + if (b) { + for (int i = 0; i < (*it)->getNumTriangles(); i++) { + _isolated.insert((*it)->getTriangle(i)); + } _setQuads.erase(it++); + } else it++; } @@ -455,8 +478,7 @@ TrianglesUnion::TrianglesUnion(GFace *gf, for (_numEmbVert = 0; itv != v.end(); itv++, _numEmbVert++) _embVertValue += (*itv)->getReward(); - _computation = _RECOMPUTE - 1; - _update(); + _computation = _RECOMPUTE; } @@ -514,6 +536,7 @@ void TrianglesUnion::_update() { if (_computation >= _RECOMPUTE) return; + double r = _globValIfExecuted; double alpha = _ValVert - _embVertValue; for (int i = 0; i < _numBoundVert; i++) { alpha += _vertices[i]->getReward(-1);