From 6f918536ca70bd753f3811613d091435dcafd9c0 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sun, 12 Mar 2017 16:23:03 +0000
Subject: [PATCH] fix parametric coordinates of vertices if curve is not
 parametrized in [0,1]

---
 Mesh/meshGEdgeExtruded.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/Mesh/meshGEdgeExtruded.cpp b/Mesh/meshGEdgeExtruded.cpp
index 7b408839a9..a3ad1bcf75 100644
--- a/Mesh/meshGEdgeExtruded.cpp
+++ b/Mesh/meshGEdgeExtruded.cpp
@@ -18,8 +18,11 @@ static void extrudeMesh(GVertex *from, GEdge *to)
     for(int k = 0; k < ep->mesh.NbElmLayer[j]; k++) {
       double x = v->x(), y = v->y(), z = v->z();
       ep->Extrude(j, k + 1, x, y, z);
-      if(j != ep->mesh.NbLayer - 1 || k != ep->mesh.NbElmLayer[j] - 1)
-        to->mesh_vertices.push_back(new MEdgeVertex(x, y, z, to, ep->u(j, k + 1)));
+      if(j != ep->mesh.NbLayer - 1 || k != ep->mesh.NbElmLayer[j] - 1){
+        Range<double> r = to->parBounds(0);
+        double t = r.low() + ep->u(j, k + 1) * (r.high() - r.low());
+        to->mesh_vertices.push_back(new MEdgeVertex(x, y, z, to, t));
+      }
     }
   }
 }
@@ -38,7 +41,7 @@ static void copyMesh(GEdge *from, GEdge *to)
     int index = (direction < 0) ? (from->mesh_vertices.size() - 1 - i) : i;
     MVertex *v = from->mesh_vertices[index];
     double x = v->x(), y = v->y(), z = v->z();
-    ep->Extrude(ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], 
+    ep->Extrude(ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1],
                 x, y, z);
     double u;
     v->getParameter(0, u);
@@ -77,9 +80,9 @@ int MeshExtrudedCurve(GEdge *ge)
 
   // create elements
   for(unsigned int i = 0; i < ge->mesh_vertices.size() + 1; i++){
-    MVertex *v0 = (i == 0) ? 
+    MVertex *v0 = (i == 0) ?
       ge->getBeginVertex()->mesh_vertices[0] : ge->mesh_vertices[i - 1];
-    MVertex *v1 = (i == ge->mesh_vertices.size()) ? 
+    MVertex *v1 = (i == ge->mesh_vertices.size()) ?
       ge->getEndVertex()->mesh_vertices[0] : ge->mesh_vertices[i];
     MLine* newElem = new MLine(v0, v1);
     ge->lines.push_back(newElem);
-- 
GitLab