From 35666aa64d55baee93e7a509d54a400fdf228b7a Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 21 Apr 2007 22:26:51 +0000 Subject: [PATCH] 1D transfinite mesh algo was completely broken. sigh. --- Mesh/meshGEdge.cpp | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp index bee3dfd203..6a3def5bc4 100644 --- a/Mesh/meshGEdge.cpp +++ b/Mesh/meshGEdge.cpp @@ -1,4 +1,4 @@ -// $Id: meshGEdge.cpp,v 1.33 2007-04-16 11:46:27 remacle Exp $ +// $Id: meshGEdge.cpp,v 1.34 2007-04-21 22:26:51 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -236,21 +236,22 @@ void meshGEdge::operator() (GEdge *ge) } const double b = a / (double)(N - 1); - MVertex *v0 = ge->getBeginVertex()->mesh_vertices[0]; - MVertex *v1 = ge->getEndVertex()->mesh_vertices[0]; + MVertex *v0 = ge->getBeginVertex()->mesh_vertices[0]; + MVertex *v1 = ge->getEndVertex()->mesh_vertices[0]; // if the curve is periodic and if the begin vertex is identical to the end vertex // and if this vertex has only one model curve adjacent to it, then the vertex is // not connecting any other curve. So, the mesh vertex and its associated geom vertex // are not necessary at the same location GPoint beg_p,end_p; - if (ge->getBeginVertex() == ge->getEndVertex() && ge->getBeginVertex()->edges().size() == 1) - { - end_p=beg_p=ge->point(t_begin); - }else{ - beg_p=GPoint(v0->x(),v0->y(),v0->z()); - end_p=GPoint(v1->x(),v1->y(),v1->z()); - } + if(ge->getBeginVertex() == ge->getEndVertex() && + ge->getBeginVertex()->edges().size() == 1){ + end_p = beg_p = ge->point(t_begin); + } + else{ + beg_p = GPoint(v0->x(), v0->y(), v0->z()); + end_p = GPoint(v1->x(), v1->y(), v1->z()); + } int count = 1, NUMP = 1, NUMP2 = 1; IntPoint P1, P2; @@ -259,7 +260,7 @@ void meshGEdge::operator() (GEdge *ge) // classified on this mesh edge) if(N > 1){ ge->mesh_vertices.resize(N - 2); - GPoint last_p=beg_p; + GPoint last_p = beg_p; while(NUMP < N - 1) { List_Read(Points, count - 1, &P1); List_Read(Points, count, &P2); @@ -269,12 +270,19 @@ void meshGEdge::operator() (GEdge *ge) double dp = P2.p - P1.p; double t = P1.t + dt / dp * (d - P1.p); GPoint V = ge->point(t); - double lc=BGM_MeshSize(ge,t,0,V.x(),V.y(),V.z()); - if(GPointDist(V,last_p)>0.7*lc && !(NUMP==N-2 && GPointDist(V,end_p)<0.7*lc)){ - last_p=V; - ge->mesh_vertices[NUMP2 - 1] = new MEdgeVertex(V.x(), V.y(), V.z(), ge, t); - NUMP2++; - } + if(ge->meshAttributes.Method == TRANSFINI){ + ge->mesh_vertices[NUMP2 - 1] = new MEdgeVertex(V.x(), V.y(), V.z(), ge, t); + NUMP2++; + } + else{ + double lc = BGM_MeshSize(ge, t, 0, V.x(), V.y(), V.z()); + if(GPointDist(V, last_p) > 0.7 * lc && + !(NUMP == N - 2 && GPointDist(V, end_p) < 0.7 * lc)){ + last_p = V; + ge->mesh_vertices[NUMP2 - 1] = new MEdgeVertex(V.x(), V.y(), V.z(), ge, t); + NUMP2++; + } + } NUMP++; } else { -- GitLab