From cd5ece5055e39f9d0578fe10894a17fb2ea85101 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 8 Feb 2017 09:29:55 +0000 Subject: [PATCH] patch from W. Merks-Swolfs --- Mesh/meshGFace.cpp | 63 +++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index bb235265a3..f653464e82 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -1813,31 +1813,48 @@ static bool buildConsecutiveListOfVertices(GFace *gf, GEdgeLoop &gel, for(unsigned int i = 0; i < edgeLoop.size(); i++){ MVertex *here = edgeLoop[i]; GEntity *ge = here->onWhat(); - double U, V; - SPoint2 param = coords[i]; - U = param.x() / m->scalingU ; - V = param.y() / m->scalingV; - BDS_Point *pp = m->add_point(count + countTot, U, V, gf); - if(ge->dim() == 0){ - pp->lcBGM() = BGM_MeshSize(ge, 0, 0, here->x(), here->y(), here->z()); - } - else if(ge->dim() == 1){ - double u; - here->getParameter(0, u); - pp->lcBGM() = BGM_MeshSize(ge, u, 0,here->x(), here->y(), here->z()); + + BDS_Point *pp = nullptr; + if (ge->dim() == 0){ + // Point might already be part of other loop + for (std::map<BDS_Point*, MVertex*, PointLessThan>::iterator it = recoverMap.begin(); + it != recoverMap.end(); ++it){ + if (it->second == here) + { + pp = it->first; + break; + } + } } - else - pp->lcBGM() = MAX_LC; - pp->lc() = pp->lcBGM(); - m->add_geom (ge->tag(), ge->dim()); - BDS_GeomEntity *g = m->get_geom(ge->tag(), ge->dim()); - pp->g = g; - if(MYDEBUG) - printf("point %3d (%8.5f %8.5f : %8.5f %8.5f) (%2d,%2d)\n", - count, pp->u, pp->v, param.x(), param.y(), pp->g->classif_tag, - pp->g->classif_degree); - bbox += SPoint3(U, V, 0); + if (pp == nullptr) + { + double U, V; + SPoint2 param = coords[i]; + U = param.x() / m->scalingU; + V = param.y() / m->scalingV; + pp = m->add_point(count + countTot, U, V, gf); + if (ge->dim() == 0){ + pp->lcBGM() = BGM_MeshSize(ge, 0, 0, here->x(), here->y(), here->z()); + } + else if (ge->dim() == 1){ + double u; + here->getParameter(0, u); + pp->lcBGM() = BGM_MeshSize(ge, u, 0, here->x(), here->y(), here->z()); + } + else + pp->lcBGM() = MAX_LC; + + pp->lc() = pp->lcBGM(); + m->add_geom(ge->tag(), ge->dim()); + BDS_GeomEntity *g = m->get_geom(ge->tag(), ge->dim()); + pp->g = g; + if (MYDEBUG) + printf("point %3d (%8.5f %8.5f : %8.5f %8.5f) (%2d,%2d)\n", + count, pp->u, pp->v, param.x(), param.y(), pp->g->classif_tag, + pp->g->classif_degree); + bbox += SPoint3(U, V, 0); + } edgeLoop_BDS.push_back(pp); recoverMapLocal[pp] = here; count++; -- GitLab