From 2811c7afe38cb59f2f2912f0ec5436ff00674e4e Mon Sep 17 00:00:00 2001
From: Bastien Gorissen <bastien.gorissen@cenaero.be>
Date: Fri, 13 Nov 2009 13:54:57 +0000
Subject: [PATCH] Yesterday's commit broke mesh generation for order > 2 in
 some cases. This fixes the problem.

---
 Geo/GEdge.cpp      | 11 +++++++++++
 Geo/GEdge.h        |  2 +-
 Mesh/HighOrder.cpp |  7 +++----
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index bc07fcf05f..d693619f3d 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -39,6 +39,17 @@ void GEdge::deleteMesh()
   lines.clear();
 }
 
+void GEdge::reverse()
+{
+  GVertex* tmp=v0;
+  v0=v1;
+  v1=tmp;
+  for (std::vector<MLine*>::iterator line = lines.begin();
+       line != lines.end();
+       line++)
+    (*line)->revert();
+}
+
 unsigned int GEdge::getNumMeshElements()
 { 
   return lines.size();
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 074408fa24..2818522761 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -45,7 +45,7 @@ class GEdge : public GEntity {
   GVertex *getBeginVertex() const { return v0; }
   GVertex *getEndVertex() const { return v1; }
 
-  void swapVertices() {GVertex* tmp=v0; v0=v1; v1=tmp;}
+  void reverse();
 
   // add/delete a face bounded by this edge
   void addFace(GFace *f);
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index eecf866a62..a666efa23d 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -259,10 +259,9 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
           reparamOK &= reparamMeshVertexOnEdge(v1, ge, u1);
         if(reparamOK){
 	  if (u1 < u0) {
-	    ge->swapVertices();
-	    double tmp = u0;
-	    u0 = u1;
-	    u1 = tmp;
+	    ge->reverse();
+	    edge = ele->getEdge(i);
+	    double tmp = u0; u0 = u1; u1 = tmp;
 	  }
           double relax = 1.;
           while (1){
-- 
GitLab