diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index 50ffe11dad6d8854ee0539493995130e96efbd85..50e4f519c9edd127ce0f2fdd49ef3036380c7673 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -77,6 +77,7 @@ void MElement::_getEdgeRep(MVertex *v0, MVertex *v1, } } +#if defined(HAVE_VISUDEV) void MElement::_getFaceRepQuad(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, double *x, double *y, double *z, SVector3 *n) { @@ -89,6 +90,7 @@ void MElement::_getFaceRepQuad(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v normal.normalize(); for(int i = 0; i < 3; i++) n[i] = normal; } +#endif void MElement::_getFaceRep(MVertex *v0, MVertex *v1, MVertex *v2, double *x, double *y, double *z, SVector3 *n) diff --git a/Geo/MElement.h b/Geo/MElement.h index fc841446370c4d140368c37c4e70bfb0e30cafff..f9e20c25ce9964a0b6524f4f87c4f5da4f082199 100644 --- a/Geo/MElement.h +++ b/Geo/MElement.h @@ -43,8 +43,10 @@ class MElement int faceIndex=-1); void _getFaceRep(MVertex *v0, MVertex *v1, MVertex *v2, double *x, double *y, double *z, SVector3 *n); +#if defined(HAVE_VISUDEV) void _getFaceRepQuad(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, double *x, double *y, double *z, SVector3 *n); +#endif public : MElement(int num=0, int part=0); virtual ~MElement(){} diff --git a/Geo/MHexahedron.cpp b/Geo/MHexahedron.cpp index c7075e7717e1cb826406bcebba3793b71d5e3c44..eb7e9d4a98ce37aaf80fdcb2ca1937df97aa1e9c 100644 --- a/Geo/MHexahedron.cpp +++ b/Geo/MHexahedron.cpp @@ -370,6 +370,39 @@ void _myGetFaceRep(MHexahedron *hex, int num, double *x, double *y, double *z, n[2] = n[0]; } +void MHexahedron::getFaceRep(bool curved, int num, + double *x, double *y, double *z, SVector3 *n) +{ +#if defined(HAVE_VISUDEV) + static const int fquad[24][4] = { + {0, 3, 2, 1}, {3, 2, 1, 0}, {2, 1, 0, 3}, {1, 0, 3, 2}, + {0, 1, 5, 4}, {1, 5, 4, 0}, {5, 4, 0, 1}, {4, 0, 1, 5}, + {0, 4, 7, 3}, {4, 7, 3, 0}, {7, 3, 0, 4}, {3, 0, 4, 7}, + {1, 2, 6, 5}, {2, 6, 5, 1}, {6, 5, 1, 2}, {5, 1, 2, 6}, + {2, 3, 7, 6}, {3, 7, 6, 2}, {7, 6, 2, 3}, {6, 2, 3, 7}, + {4, 5, 6, 7}, {5, 6, 7, 4}, {6, 7, 4, 5}, {7, 4, 5, 6} + }; + if (CTX::instance()->heavyVisu) { + if (CTX::instance()->mesh.numSubEdges > 1) { + _myGetFaceRep(this, num, x, y, z, n, CTX::instance()->mesh.numSubEdges); + return; + } + _getFaceRepQuad(getVertex(fquad[num][0]), getVertex(fquad[num][1]), + getVertex(fquad[num][2]), getVertex(fquad[num][3]), + x, y, z, n); + return; + } +#endif + static const int f[12][3] = { + {0, 3, 2}, {0, 2, 1}, + {0, 1, 5}, {0, 5, 4}, + {0, 4, 7}, {0, 7, 3}, + {1, 2, 6}, {1, 6, 5}, + {2, 3, 7}, {2, 7, 6}, + {4, 5, 6}, {4, 6, 7} + }; + _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); +} void MHexahedron20::getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) @@ -392,13 +425,24 @@ void MHexahedronN::getFaceRep(bool curved, int num, else MHexahedron::getFaceRep(false, num, x, y, z, n); } +int MHexahedron::getNumFacesRep(bool curved) +{ +#if defined(HAVE_VISUDEV) + if (CTX::instance()->heavyVisu) { + if (CTX::instance()->mesh.numSubEdges == 1) return 24; + return 6 * 2 * CTX::instance()->mesh.numSubEdges + * CTX::instance()->mesh.numSubEdges; + } +#endif + return 12; +} + int MHexahedron20::getNumFacesRep(bool curved) { return curved ? 6 * (CTX::instance()->mesh.numSubEdges * CTX::instance()->mesh.numSubEdges * 2) : 12; } - int MHexahedron27::getNumFacesRep(bool curved) { return curved ? 6 * (CTX::instance()->mesh.numSubEdges * @@ -411,41 +455,6 @@ int MHexahedronN::getNumFacesRep(bool curved) CTX::instance()->mesh.numSubEdges * 2) : 12; } -int MHexahedron::getNumFacesRep(bool curved) -{ - if (CTX::instance()->mesh.numSubEdges == 1) return 24; - return 6 * (CTX::instance()->mesh.numSubEdges * - CTX::instance()->mesh.numSubEdges * 2); -} - -void MHexahedron::getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) -{ -// static const int f[12][3] = { -// {0, 3, 2}, {0, 2, 1}, -// {0, 1, 5}, {0, 5, 4}, -// {0, 4, 7}, {0, 7, 3}, -// {1, 2, 6}, {1, 6, 5}, -// {2, 3, 7}, {2, 7, 6}, -// {4, 5, 6}, {4, 6, 7} -// }; -// _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); - if (CTX::instance()->mesh.numSubEdges > 1) { - _myGetFaceRep(this, num, x, y, z, n, CTX::instance()->mesh.numSubEdges); - return; - } - static const int f[24][4] = { - {0, 3, 2, 1}, {3, 2, 1, 0}, {2, 1, 0, 3}, {1, 0, 3, 2}, - {0, 1, 5, 4}, {1, 5, 4, 0}, {5, 4, 0, 1}, {4, 0, 1, 5}, - {0, 4, 7, 3}, {4, 7, 3, 0}, {7, 3, 0, 4}, {3, 0, 4, 7}, - {1, 2, 6, 5}, {2, 6, 5, 1}, {6, 5, 1, 2}, {5, 1, 2, 6}, - {2, 3, 7, 6}, {3, 7, 6, 2}, {7, 6, 2, 3}, {6, 2, 3, 7}, - {4, 5, 6, 7}, {5, 6, 7, 4}, {6, 7, 4, 5}, {7, 4, 5, 6} - }; - _getFaceRepQuad(getVertex(f[num][0]), getVertex(f[num][1]), - getVertex(f[num][2]), getVertex(f[num][3]), - x, y, z, n); -} - void _getIndicesReversedHex(int order, indicesReversed &indices) { fullMatrix<double> ref = gmshGenerateMonomialsHexahedron(order); diff --git a/Geo/MPrism.h b/Geo/MPrism.h index 428a438b2f7a66130f25ea590453f95f8eb5c3d0..6592f1f406e84bcdb9ed2e762704213d1eb88d22 100644 --- a/Geo/MPrism.h +++ b/Geo/MPrism.h @@ -8,6 +8,10 @@ #include "MElement.h" +#if defined(HAVE_VISUDEV) +#include <Context.h> +#endif + /* * MPrism * @@ -92,31 +96,37 @@ class MPrism : public MElement { _v[faces_prism(num, 2)], _v[faces_prism(num, 3)]); } - virtual int getNumFacesRep(bool curved){ return 14; } + virtual int getNumFacesRep(bool curved) + { +#if defined(HAVE_VISUDEV) + if (CTX::instance()->heavyVisu) return 14; +#endif + return 8; + } virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) { -// static const int f[8][3] = { -// {0, 2, 1}, -// {3, 4, 5}, -// {0, 1, 4}, {0, 4, 3}, -// {0, 3, 5}, {0, 5, 2}, -// {1, 2, 5}, {1, 5, 4} -// }; -// _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); - static const int f[14][4] = { - {0, 2, 1, -1}, - {3, 4, 5, -1}, - {0, 1, 4, 3}, {1, 4, 3, 0}, {4, 3, 0, 1}, {3, 0, 1, 4}, - {1, 2, 5, 4}, {2, 5, 4, 1}, {5, 4, 1, 2}, {4, 1, 2, 5}, - {2, 0, 3, 5}, {0, 3, 5, 2}, {3, 5, 2, 0}, {5, 2, 0, 3} +#if defined(HAVE_VISUDEV) + static const int fquad[12][4] = { + {0, 1, 4, 3}, {1, 4, 3, 0}, {4, 3, 0, 1}, {3, 0, 1, 4}, + {1, 2, 5, 4}, {2, 5, 4, 1}, {5, 4, 1, 2}, {4, 1, 2, 5}, + {2, 0, 3, 5}, {0, 3, 5, 2}, {3, 5, 2, 0}, {5, 2, 0, 3} }; - if (num < 2) - _getFaceRep(getVertex(f[num][0]), getVertex(f[num][1]), getVertex(f[num][2]), - x, y, z, n); - else - _getFaceRepQuad(getVertex(f[num][0]), getVertex(f[num][1]), - getVertex(f[num][2]), getVertex(f[num][3]), + if (CTX::instance()->heavyVisu && num > 1) { + int i = num - 2; + _getFaceRepQuad(getVertex(fquad[i][0]), getVertex(fquad[i][1]), + getVertex(fquad[i][2]), getVertex(fquad[i][3]), x, y, z, n); + return; + } +#endif + static const int f[8][3] = { + {0, 2, 1}, + {3, 4, 5}, + {0, 1, 4}, {0, 4, 3}, + {0, 3, 5}, {0, 5, 2}, + {1, 2, 5}, {1, 5, 4} + }; + _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { diff --git a/Geo/MPyramid.h b/Geo/MPyramid.h index 9bf4c6ac6605f8c3c28291d4b04c379a61ab654b..c56db5eb57aee1fbe364bdf1c7e45661c78c70bf 100644 --- a/Geo/MPyramid.h +++ b/Geo/MPyramid.h @@ -8,6 +8,10 @@ #include "MElement.h" +#if defined(HAVE_VISUDEV) +#include <Context.h> +#endif + /* * MPyramid * @@ -97,10 +101,28 @@ class MPyramid : public MElement { else return MFace(_v[0], _v[3], _v[2], _v[1]); } - virtual int getNumFacesRep(bool curved){ return 8; } + virtual int getNumFacesRep(bool curved) + { +#if defined(HAVE_VISUDEV) + if (CTX::instance()->heavyVisu) return 8; +#endif + return 6; + } virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) { +#if defined(HAVE_VISUDEV) + static const int fquad[4][4] = { + {0, 3, 2, 1}, {3, 2, 1, 0}, {2, 1, 0, 3}, {1, 0, 3, 2} + }; + if (CTX::instance()->heavyVisu && num > 3) { + int i = num - 4; + _getFaceRepQuad(getVertex(fquad[i][0]), getVertex(fquad[i][1]), + getVertex(fquad[i][2]), getVertex(fquad[i][3]), + x, y, z, n); + return; + } +#endif static const int f[6][3] = { {0, 1, 4}, {3, 0, 4}, @@ -110,20 +132,6 @@ class MPyramid : public MElement { }; _getFaceRep(getVertex(f[num][0]), getVertex(f[num][1]), getVertex(f[num][2]), x, y, z, n); -// static const int f[8][4] = { -// {0, 1, 4, -1}, -// {1, 2, 4, -1}, -// {2, 3, 4, -1}, -// {3, 0, 4, -1}, -// {0, 3, 2, 1}, {3, 2, 1, 0}, {2, 1, 0, 3}, {1, 0, 3, 2} -// }; -// if (num < 4) -// _getFaceRep(getVertex(f[num][0]), getVertex(f[num][1]), getVertex(f[num][2]), -// x, y, z, n); -// else -// _getFaceRepQuad(getVertex(f[num][0]), getVertex(f[num][1]), -// getVertex(f[num][2]), getVertex(f[num][3]), -// x, y, z, n); } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { diff --git a/Geo/MQuadrangle.h b/Geo/MQuadrangle.h index da5f351de0b325d1970196f826fce93ef9b812e9..643f4fdf77486182893b3b9b3d6e3689ba058eb3 100644 --- a/Geo/MQuadrangle.h +++ b/Geo/MQuadrangle.h @@ -8,6 +8,10 @@ #include "MElement.h" +#if defined(HAVE_VISUDEV) +#include <Context.h> +#endif + /* * MQuadrangle * @@ -91,20 +95,30 @@ class MQuadrangle : public MElement { } virtual int getNumFaces(){ return 1; } virtual MFace getFace(int num){ return MFace(_v[0], _v[1], _v[2], _v[3]); } - virtual int getNumFacesRep(bool curved){ return 4; } + virtual int getNumFacesRep(bool curved) + { +#if defined(HAVE_VISUDEV) + if (CTX::instance()->heavyVisu) return 4; +#endif + return 2; + } virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) { -// static const int f[2][3] = { -// {0, 1, 2}, {0, 2, 3} -// }; -// _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); - - static const int f[4][4] = { - {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}, {3, 0, 1, 2} +#if defined(HAVE_VISUDEV) + static const int fquad[4][4] = { + {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}, {3, 0, 1, 2} + }; + if (CTX::instance()->heavyVisu) { + _getFaceRepQuad(getVertex(fquad[num][0]), getVertex(fquad[num][1]), + getVertex(fquad[num][2]), getVertex(fquad[num][3]), + x, y, z, n); + return; + } +#endif + static const int f[2][3] = { + {0, 1, 2}, {0, 2, 3} }; - _getFaceRepQuad(getVertex(f[num][0]), getVertex(f[num][1]), - getVertex(f[num][2]), getVertex(f[num][3]), - x, y, z, n); + _getFaceRep(_v[f[num][0]], _v[f[num][1]], _v[f[num][2]], x, y, z, n); } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const {