From b7a888c577f7fbfb5cc08e2bec834ef04a60925a Mon Sep 17 00:00:00 2001 From: Jonathan Lambrechts <jonathan.lambrechts@uclouvain.be> Date: Fri, 24 Jul 2015 12:33:41 +0000 Subject: [PATCH] GEdge : do not consider closed multi-lines as degenerated --- Geo/gmshEdge.cpp | 4 +++- Mesh/meshGEdge.cpp | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp index 40aadcadc2..0921b05828 100644 --- a/Geo/gmshEdge.cpp +++ b/Geo/gmshEdge.cpp @@ -22,7 +22,9 @@ gmshEdge::gmshEdge(GModel *m, Curve *edge, GVertex *v1, GVertex *v2) bool gmshEdge::degenerate(int dim) const { - if (c->beg == c->end && c->Typ == MSH_SEGM_LINE){ + if (c->beg == c->end && + c->Typ == MSH_SEGM_LINE && + List_Nbr(c->Control_Points) == 0){ Msg::Info("Model Edge %d is degenerate", tag()); return true; } diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp index 7e11458416..a4ff906275 100644 --- a/Mesh/meshGEdge.cpp +++ b/Mesh/meshGEdge.cpp @@ -371,7 +371,10 @@ void meshGEdge::operator() (GEdge *ge) // first compute the length of the curve by integrating one double length; std::vector<IntPoint> Points; - if(ge->geomType() == GEntity::Line && ge->getBeginVertex() == ge->getEndVertex()) + if(ge->geomType() == GEntity::Line && + ge->getBeginVertex() == ge->getEndVertex() && + //do not consider closed lines as degenerated + (ge->position(0.5) - ge->getBeginVertex()->xyz()).norm() < CTX::instance()->geom.tolerance) length = 0.; // special case t avoid infinite loop in integration else length = Integration(ge, t_begin, t_end, F_One, Points, 1.e-8 * CTX::instance()->lc); -- GitLab