diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index 65b8ff13cc094c60aa7af73f53a0f0e16a187ad8..499e0389675027dc5d51ab63a3aa72a19b7a6884 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -1,4 +1,4 @@ -// $Id: MElement.cpp,v 1.56 2008-02-21 12:49:49 geuzaine Exp $ +// $Id: MElement.cpp,v 1.57 2008-02-21 15:08:22 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -750,28 +750,31 @@ void MTriangle::jac(double uu, double vv, double j[2][3]) jac(1, 0, uu, vv, j); } -void MTriangle::pnt(double uu, double vv, SPoint3 &p){ +void MTriangle::pnt(double uu, double vv, SPoint3 &p) +{ MTriangle::pnt(1, 0, uu, vv, p); } -int MTriangle6::getNumEdgesRep(){ return 30; } +int MTriangle6::getNumEdgesRep(){ return 3 * 9; } -void MTriangle6::getEdgeRep (int num, double *x, double *y, double *z, SVector3 *n) +void MTriangle6::getEdgeRep(int num, double *x, double *y, double *z, SVector3 *n) { - if (num < 10){ + n[0] = n[1] = getFace(0).normal(); + int N = getNumEdgesRep() / 3; + if (num < N){ SPoint3 pnt1, pnt2; - pnt((double)num / 10., 0., pnt1); - pnt((double)(num + 1) / 10., 0., pnt2); + pnt((double)num / N, 0., pnt1); + pnt((double)(num + 1) / N, 0., pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); return; } - if (num < 20){ + if (num < 2 * N){ SPoint3 pnt1, pnt2; - num -= 10; - pnt(1. - (double)num / 10., (double)num / 10., pnt1); - pnt(1. - (double)(num + 1) / 10., (double)(num + 1) / 10., pnt2); + num -= N; + pnt(1. - (double)num / N, (double)num / N, pnt1); + pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); @@ -779,33 +782,35 @@ void MTriangle6::getEdgeRep (int num, double *x, double *y, double *z, SVector3 } { SPoint3 pnt1, pnt2; - num -= 20; - pnt(0, (double)num / 10., pnt1); - pnt(0, (double)(num + 1) / 10., pnt2); + num -= 2 * N; + pnt(0, (double)num / N, pnt1); + pnt(0, (double)(num + 1) / N, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); } } -int MTriangleN::getNumEdgesRep(){ return 120; } +int MTriangleN::getNumEdgesRep(){ return 3 * 9; } void MTriangleN::getEdgeRep (int num, double *x, double *y, double *z, SVector3 *n) { - if (num < 40){ + n[0] = n[1] = getFace(0).normal(); + int N = getNumEdgesRep() / 3; + if (num < N){ SPoint3 pnt1, pnt2; - pnt((double)num / 40., 0., pnt1); - pnt((double)(num + 1) / 40., 0., pnt2); + pnt((double)num / N, 0., pnt1); + pnt((double)(num + 1) / N, 0., pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); return; } - if (num < 80){ + if (num < 2 * N){ SPoint3 pnt1, pnt2; - num -= 40; - pnt(1. - (double)num / 40., (double)num / 40., pnt1); - pnt(1. - (double)(num + 1) / 40., (double)(num + 1) / 40., pnt2); + num -= N; + pnt(1. - (double)num / N, (double)num / N, pnt1); + pnt(1. - (double)(num + 1) / N, (double)(num + 1) / N, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z(); @@ -813,9 +818,9 @@ void MTriangleN::getEdgeRep (int num, double *x, double *y, double *z, SVector3 } { SPoint3 pnt1, pnt2; - num -= 80; - pnt(0, (double)num / 40., pnt1); - pnt(0, (double)(num + 1) / 40., pnt2); + num -= 2 * N; + pnt(0, (double)num / N, pnt1); + pnt(0, (double)(num + 1) / N, pnt2); x[0] = pnt1.x(); x[1] = pnt2.x(); y[0] = pnt1.y(); y[1] = pnt2.y(); z[0] = pnt1.z(); z[1] = pnt2.z();