diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp index 3082dcf958476629d49d238c5a3ce115f4177b49..51aee4affc0196d4ab8d0a8b4ed42d8a4a9d338f 100644 --- a/Geo/ExtrudeParams.cpp +++ b/Geo/ExtrudeParams.cpp @@ -1,4 +1,4 @@ -// $Id: ExtrudeParams.cpp,v 1.15 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: ExtrudeParams.cpp,v 1.16 2004-04-18 03:09:01 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -67,55 +67,8 @@ void ExtrudeParams::fill(int type, void ExtrudeParams::Extrude(int iLayer, int iElemLayer, double &x, double &y, double &z) { - double dx0, dy0, dz0, dx1, dy1, dz1; - double dx, dy, dz, angle; - - if(!iLayer) { - dx0 = dy0 = dz0 = 0.0; - dx1 = mesh.hLayer[0]; - dy1 = mesh.hLayer[0]; - dz1 = mesh.hLayer[0]; - } - else { - dx0 = mesh.hLayer[iLayer - 1]; - dy0 = mesh.hLayer[iLayer - 1]; - dz0 = mesh.hLayer[iLayer - 1]; - dx1 = mesh.hLayer[iLayer]; - dy1 = mesh.hLayer[iLayer]; - dz1 = mesh.hLayer[iLayer]; - } - double t = (double)iElemLayer / (double)mesh.NbElmLayer[iLayer]; - switch (geo.Type) { - case TRANSLATE: - dx = geo.trans[0] * (dx0 + t * (dx1 - dx0)); - dy = geo.trans[1] * (dy0 + t * (dy1 - dy0)); - dz = geo.trans[2] * (dz0 + t * (dz1 - dz0)); - x += dx; - y += dy; - z += dz; - break; - case ROTATE: - angle = geo.angle; - geo.angle = geo.angle * (dx0 + t * (dx1 - dx0)); - ProtudeXYZ(x, y, z, this); - geo.angle = angle; - break; - case TRANSLATE_ROTATE: - angle = geo.angle; - geo.angle = geo.angle * (dx0 + t * (dx1 - dx0)); - ProtudeXYZ(x, y, z, this); - geo.angle = angle; - dx = geo.trans[0] * (dx0 + t * (dx1 - dx0)); - dy = geo.trans[1] * (dy0 + t * (dy1 - dy0)); - dz = geo.trans[2] * (dz0 + t * (dz1 - dz0)); - x += dx; - y += dy; - z += dz; - break; - default: - Msg(GERROR, "Unknown extrusion type"); - break; - } + double t = u(iLayer, iElemLayer); + Extrude(t, x, y, z); } void ExtrudeParams::Rotate(double matr[3][3]) @@ -162,3 +115,19 @@ void ExtrudeParams::Extrude(double t, double &x, double &y, double &z) break; } } + +double ExtrudeParams::u(int iLayer, int iElemLayer) +{ + double t0, t1; + + if(!iLayer) { + t0 = 0.0; + t1 = mesh.hLayer[0]; + } + else { + t0 = mesh.hLayer[iLayer - 1]; + t1 = mesh.hLayer[iLayer]; + } + double t = (double)iElemLayer / (double)mesh.NbElmLayer[iLayer]; + return t0 + t * (t1 - t0); +} diff --git a/Geo/ExtrudeParams.h b/Geo/ExtrudeParams.h index 2e9966bd6b71047c4debcc63d0a1cf164c966e37..907fddd6b5e4c147d0ff153f5f9c560977013bb7 100644 --- a/Geo/ExtrudeParams.h +++ b/Geo/ExtrudeParams.h @@ -38,6 +38,7 @@ public : double T0, double T1, double T2, double A0, double A1, double A2, double X0, double X1, double X2, double angle); + double u(int iLayer, int iElemLayer); void Extrude(int iLayer, int iElemLayer, double &dx, double &dy, double &dz); void Extrude(double t, double &x, double &y, double &z);