diff --git a/Geo/GeomMeshMatcher.cpp b/Geo/GeomMeshMatcher.cpp index e1bfed7b5b07dc0a4310d0dd4589b347b531bb22..22bdddf500c2090cebd90d095a423396bdf43d1f 100644 --- a/Geo/GeomMeshMatcher.cpp +++ b/Geo/GeomMeshMatcher.cpp @@ -567,9 +567,10 @@ int GeomMeshMatcher::forceTomatch(GModel *geom, GModel *mesh, const double TOL) } static void copy_vertices (GVertex *to, GVertex *from, std::map<MVertex*,MVertex*> &_mesh_to_geom){ + to->deleteMesh(); if (from) { - to->deleteMesh(); - for (unsigned int i=0;i<from->mesh_vertices.size();i++){ + //to->deleteMesh(); + for (unsigned int i=0;i<1;i++){ MVertex *v_from = from->mesh_vertices[i]; MVertex *v_to = new MVertex (v_from->x(),v_from->y(),v_from->z(), to); to->mesh_vertices.push_back(v_to); @@ -597,15 +598,6 @@ static void copy_vertices (GEdge* to, GEdge* from, std::map<MVertex*,MVertex*> & return; } - if (from->getBeginVertex() == from->getEndVertex()) { - MVertex *v_from = from->getBeginVertex()->mesh_vertices[0]; - double t; - GPoint gp = to->closestPoint(SPoint3(v_from->x(),v_from->y(),v_from->z()), t ); - MEdgeVertex *v_to = new MEdgeVertex (gp.x(),gp.y(),gp.z(), to, gp.u() ); - to->mesh_vertices.push_back(v_to); - _mesh_to_geom[v_from] = v_to; - } - for (unsigned int i=0;i<from->mesh_vertices.size();i++){ MVertex *v_from = from->mesh_vertices[i]; double t; @@ -719,7 +711,5 @@ int GeomMeshMatcher::match(GModel *geom, GModel *mesh) copy_vertices(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f); copy_elements(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f); - geom->removeDuplicateMeshVertices(1e-8); - return 1; } diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp index 7d1a2483a028f4c79b6f7d0322b3b1d384ded60d..b8e0dfe5070265d345a6515ec38cca119256e626 100644 --- a/Mesh/HighOrder.cpp +++ b/Mesh/HighOrder.cpp @@ -128,6 +128,7 @@ static bool computeEquidistantParameters(GEdge *ge, double u0, double uN, int N, return computeEquidistantParameters0(ge,u0,uN,N,u,underRelax); else if (method_for_computing_intermediary_points == 1) // use projection return computeEquidistantParameters1(ge,u0,uN,N,u,underRelax); + return false; } static double mylength(GFace *gf, int i, double *u, double *v) @@ -251,6 +252,7 @@ static bool computeEquidistantParameters(GFace *gf, double u0, double uN, return computeEquidistantParameters0(gf,u0,uN,v0,vN,N,u,v); else if (method_for_computing_intermediary_points == 1) // use projection return computeEquidistantParameters1(gf,u0,uN,v0,vN,N,u,v); + return false; } @@ -288,6 +290,7 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve, if(computeEquidistantParameters(ge, std::min(u0,u1), std::max(u0,u1), nPts + 2, US, relax)) break; + relax /= 2.0; if(relax < 1.e-2) break; @@ -585,7 +588,7 @@ static void reorientQuadPoints(std::vector<MVertex*> &vtcs, int orientation, } order -= 2; - if (start >= vtcs.size()) break; + if (start >= (int) vtcs.size()) break; } } @@ -1331,6 +1334,7 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete) v.insert(v.begin(), (*it)->triangles.begin(), (*it)->triangles.end()); v.insert(v.end(), (*it)->quadrangles.begin(), (*it)->quadrangles.end()); hot.applySmoothingTo(v, (*it)); + //hot.applySmoothingTo(v, .1,0); } // hot.ensureMinimumDistorsion(0.1); checkHighOrderTriangles("Final surface mesh", m, bad, worst);