From e344f111c7e8ca199315499f5982d8632e1a6eb6 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 28 Feb 2007 13:36:57 +0000
Subject: [PATCH] one more fix :-)

---
 Mesh/HighOrder.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index b3fed79c2a..fab0c84932 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -1,4 +1,4 @@
-// $Id: HighOrder.cpp,v 1.3 2007-02-28 13:00:57 geuzaine Exp $
+// $Id: HighOrder.cpp,v 1.4 2007-02-28 13:36:57 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -140,8 +140,7 @@ void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
 	}
       }
       else{
-	// using get{Min,Max}Vertex here is wrong! --CG
-	MVertex *v0 = edge.getVertex(0), *v1 = edge.getVertex(1);
+	MVertex *v0 = edge.getMinVertex(), *v1 = edge.getMaxVertex();            
 	for(int j = 0; j < nPts; j++){
 	  MVertex *v;
 	  double t = (double)(j + 1)/(nPts + 1);
@@ -165,13 +164,15 @@ void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
 	    else 
 	      v1->getParameter(0, u1);
 	    double uc = (1.-t) * u0 + t * u1;
-	    if(u0 < 1e6 && u1 < 1e6 && uc > u0 && uc < u1){
+	    if(u0 < 1e6 && u1 < 1e6 && 
+	       ((edge.getMinVertex() == edge.getVertex(0) && uc > u0 && uc < u1) ||
+		(edge.getMinVertex() == edge.getVertex(1) && uc < u0 && uc > u1))){
 	      GPoint pc = ge->point(uc);
 	      v = new MEdgeVertex(pc.x(), pc.y(), pc.z(), ge, uc);
 	    }
 	    else{
 	      // normally never here, but we don't treat periodic curves
-	      // properly, so we can get uc < u0 or uc > u1...
+	      // properly, so we can get uc outside u0,u1
 	      SPoint3 pc = edge.interpolate(t);
 	      v = new MVertex(pc.x(), pc.y(), pc.z(), ge);
 	    }
-- 
GitLab