diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp index 563843c90aebe26048752a2eb0d30aba4a873a00..1333a3ba868dcffa5e3c9338b0d2ca7cc5338927 100644 --- a/Geo/GFace.cpp +++ b/Geo/GFace.cpp @@ -878,7 +878,8 @@ SPoint2 GFace::parFromPoint(const SPoint3 &p, bool onSurface) const GPoint GFace::closestPoint(const SPoint3 &queryPoint, const double initialGuess[2]) const { Msg::Error("Closest point not implemented for this type of surface"); - return GPoint(0, 0, 0); + SPoint2 p = parFromPoint(queryPoint, false); + return point(p); } bool GFace::containsParam(const SPoint2 &pt) const diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp index 37b4bbc87841f82e5a7f42d81529fd7fe6869831..2221cd6887d499210f675a82cc59dd2cd27cd165 100644 --- a/Geo/GFaceCompound.cpp +++ b/Geo/GFaceCompound.cpp @@ -1019,14 +1019,14 @@ SPoint2 GFaceCompound::getCoordinates(MVertex *v) const vR = ge->mesh_vertices[j]; vR->getParameter(0,tR); if(!vR->getParameter(0,tR)) { - Msg::Error("vertex vr %p not MedgeVertex \n", vR); + Msg::Error("vertex vr %p not MedgeVertex", vR); Msg::Exit(1); } if(tLoc > tL && tLoc < tR){ found = true; itR = coordinates.find(vR); if(itR == coordinates.end()){ - Msg::Error("vertex %p (%g %g %g) not found\n", vR, vR->x(), vR->y(), vR->z()); + Msg::Error("vertex %p (%g %g %g) not found", vR, vR->x(), vR->y(), vR->z()); Msg::Exit(1); } break; diff --git a/Mesh/highOrderTools.cpp b/Mesh/highOrderTools.cpp index f017ceeeffd70e6616d8837adf0bc4749fba41a0..2de0dd41beb4221774c2c794c7780eca18acac35 100644 --- a/Mesh/highOrderTools.cpp +++ b/Mesh/highOrderTools.cpp @@ -112,8 +112,8 @@ static void getDistordedElements(const std::vector<MElement*> &v, } static void addOneLayer(const std::vector<MElement*> &v, - std::vector<MElement*> &d, - std::vector<MElement*> &layer) + std::vector<MElement*> &d, + std::vector<MElement*> &layer) { std::set<MVertex*> all; for (unsigned int i = 0; i < d.size(); i++){ diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp index d166913081869e9ab61ecbd61c9dd856f387e1bc..12b11684f80d7cd91e3b2f28fb21f11edeea5e0e 100644 --- a/Mesh/meshGFaceDelaunayInsertion.cpp +++ b/Mesh/meshGFaceDelaunayInsertion.cpp @@ -912,10 +912,105 @@ void bowyerWatsonFrontal(GFace *gf) transferDataStructure(gf, AllTris, Us, Vs); } -void addBoundaryLayers(GFace *gf) { - // first compute the distance function u on the existing mesh - // then compute the dual function v that has gradients orthogonal everywhere - // build a set of points in the boundary layer - // connect everybody with delaunay +// give it a try : add one quad layer on the + /* +void addOneLayerOnContour(GFace *gf, GVertex *gv){ +, int nbLayers, double hplus, double factor){ + // for each vertex + std::map<MVertex*,std::vector<MVertex*> >layers; + std::vector<MQuadrangle*> newQuads; + std::vector<MTriangle*> newTris; + + std::list<GEdgeLoop>::iterator it = gf->edgeLoops.begin(); + for (; it != gf->edgeLoops.end(); ++it){ + bool found = false; + std::list<GEdge*> ed; + for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){ + if (it2->ge->getBeginVertex() == gv || it2->ge->getEndVertex() == gv) { + found = true; + } + ed.push_back(it2->ge); + } + // we found an edge loop with the GVertex that was specified + if (found){ + // compute model vertices that will produce fans + for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){ + GEdgeLoop::iter it3 = it2; ++it3; + GVertex *gv = it2->getEndVertex(); + GEdgeSigned *before,*after = *it2; + if (it3 == it->end()){ + before = *(it->begin()); + } + else{ + before = *it2; + } + } + + for (std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); ++it){ + GEdge *ge = *it; + for (int i=0;i<ge->lines.size();i++){ + SPoint2 p[2]; + reparamMeshEdgeOnFace ( ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),gf,p[0],p[1]); + MVertex *vd[2]; + for (int j=0;j<2;j++){ + MVertex *v = ge->lines[i]->getVertex(j); + std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); + if (itv == duplicates.end()){ + vd[j] = new MFaceVertex(v->x(),v->y(),v->z(),gf,p[j].x(),p[j].y()); + duplicates[v] = vd[j]; + gf->mesh_vertices.push_back(vd[j]); + } + else + vd[j] = itv->second; + } + newQuads.push_back(new MQuadrangle(ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),vd[1],vd[0])); + } + } + for (int i=0;i<gf->quadrangles.size();i++){ + MQuadrangle *q = gf->quadrangles[i]; + MVertex *vs[4]; + for (int j=0;j<4;j++){ + MVertex *v = q->getVertex(j); + std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); + if (itv == duplicates.end()){ + vs[j] = v; + } + else{ + vs[j] = itv->second; + } + } + newQuads.push_back(new MQuadrangle(vs[0],vs[1],vs[2],vs[3])); + delete q; + } + for (int i=0;i<gf->triangles.size();i++){ + MTriangle *t = gf->triangles[i]; + MVertex *vs[3]; + for (int j=0;j<3;j++){ + MVertex *v = t->getVertex(j); + std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); + if (itv == duplicates.end()){ + vs[j] = v; + } + else{ + vs[j] = itv->second; + } + } + newTris.push_back(new MTriangle(vs[0],vs[1],vs[2])); + delete t; + } + gf->triangles = newTris; + gf->quadrangles = newQuads; + } + } +} +*/ + +void addBoundaryLayers(GFace *gf) +{ + if (backgroundMesh::current()){ + } + // first compute the cross field if it is not computed yet + // start from a selection of edges and create points in the boundary layer + // connect everybody with delaunay } diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp index 911f522b669c0bfea356af8fe8ed2a35d891df68..4b052b64714e77bdf0c73944e918d66b1b95924c 100644 --- a/Mesh/meshGFaceOptimize.cpp +++ b/Mesh/meshGFaceOptimize.cpp @@ -1920,100 +1920,6 @@ void recombineIntoQuads(GFace *gf, Msg::Info("Simple recombination algorithm completed (%g s)", t2 - t1); } -// give it a try : add one quad layer on the - /* -void addOneLayerOnContour(GFace *gf, GVertex *gv){ -, int nbLayers, double hplus, double factor){ - // for each vertex - std::map<MVertex*,std::vector<MVertex*> >layers; - std::vector<MQuadrangle*> newQuads; - std::vector<MTriangle*> newTris; - - std::list<GEdgeLoop>::iterator it = gf->edgeLoops.begin(); - for (; it != gf->edgeLoops.end(); ++it){ - bool found = false; - std::list<GEdge*> ed; - for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){ - if (it2->ge->getBeginVertex() == gv || it2->ge->getEndVertex() == gv) { - found = true; - } - ed.push_back(it2->ge); - } - // we found an edge loop with the GVertex that was specified - if (found){ - // compute model vertices that will produce fans - for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){ - GEdgeLoop::iter it3 = it2; ++it3; - GVertex *gv = it2->getEndVertex(); - GEdgeSigned *before,*after = *it2; - if (it3 == it->end()){ - before = *(it->begin()); - } - else{ - before = *it2; - } - } - - for (std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); ++it){ - GEdge *ge = *it; - for (int i=0;i<ge->lines.size();i++){ - SPoint2 p[2]; - reparamMeshEdgeOnFace ( ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),gf,p[0],p[1]); - MVertex *vd[2]; - for (int j=0;j<2;j++){ - MVertex *v = ge->lines[i]->getVertex(j); - std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); - if (itv == duplicates.end()){ - vd[j] = new MFaceVertex(v->x(),v->y(),v->z(),gf,p[j].x(),p[j].y()); - duplicates[v] = vd[j]; - gf->mesh_vertices.push_back(vd[j]); - } - else - vd[j] = itv->second; - } - newQuads.push_back(new MQuadrangle(ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),vd[1],vd[0])); - } - } - for (int i=0;i<gf->quadrangles.size();i++){ - MQuadrangle *q = gf->quadrangles[i]; - MVertex *vs[4]; - for (int j=0;j<4;j++){ - MVertex *v = q->getVertex(j); - std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); - if (itv == duplicates.end()){ - vs[j] = v; - } - else{ - vs[j] = itv->second; - } - } - newQuads.push_back(new MQuadrangle(vs[0],vs[1],vs[2],vs[3])); - delete q; - } - for (int i=0;i<gf->triangles.size();i++){ - MTriangle *t = gf->triangles[i]; - MVertex *vs[3]; - for (int j=0;j<3;j++){ - MVertex *v = t->getVertex(j); - std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v); - if (itv == duplicates.end()){ - vs[j] = v; - } - else{ - vs[j] = itv->second; - } - } - newTris.push_back(new MTriangle(vs[0],vs[1],vs[2])); - delete t; - } - - gf->triangles = newTris; - gf->quadrangles = newQuads; - } - } -} -*/ - void quadsToTriangles(GFace *gf, double minqual = -10000.) { std::vector<MQuadrangle*> qds;