diff --git a/Geo/MHexahedron.cpp b/Geo/MHexahedron.cpp index 184dd63ac0793f24853a83678adb4ede8e90ae9d..a6be2acab421f3e2e6161784a1e9a2df835c58e3 100644 --- a/Geo/MHexahedron.cpp +++ b/Geo/MHexahedron.cpp @@ -36,20 +36,6 @@ void MHexahedron::getEdgeRep(bool curved, int num, double *x, double *y, double } } -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); -} - int MHexahedron::getVolumeSign() { double mat[3][3]; diff --git a/Geo/MHexahedron.h b/Geo/MHexahedron.h index d7609e79033bd170b249396f3a096b6d33302334..733eb3d310954999bac4a118dacc48356be8fe70 100644 --- a/Geo/MHexahedron.h +++ b/Geo/MHexahedron.h @@ -86,9 +86,20 @@ class MHexahedron : public MElement { } virtual double getInnerRadius(); virtual double angleShapeMeasure(); - virtual void getFaceInfo (const MFace & face, int &ithFace, int &sign, int &rot)const; + virtual void getFaceInfo(const MFace & face, int &ithFace, int &sign, int &rot) const; virtual int getNumFacesRep(bool curved){ return 12; } - virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n); + virtual void 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); + } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { v.resize(4); diff --git a/Geo/MPrism.cpp b/Geo/MPrism.cpp index 488da658577e2fd7ad931ed572cd241e87a673db..864f043e1d5197cb69f216f6726b10f65b327827 100644 --- a/Geo/MPrism.cpp +++ b/Geo/MPrism.cpp @@ -12,6 +12,14 @@ #include "qualityMeasures.h" #endif +void MPrism::getEdgeRep(bool curved, int num, double *x, double *y, double *z, + SVector3 *n) +{ + static const int f[9] = {0, 1, 2, 0, 2, 3, 1, 1, 1}; + MEdge e(getEdge(num)); + _getEdgeRep(e.getVertex(0), e.getVertex(1), x, y, z, n, f[num]); +} + int MPrism::getVolumeSign() { double mat[3][3]; diff --git a/Geo/MPrism.h b/Geo/MPrism.h index a9925a73af43c4a1f8bde4d429c2c96a2c0fe35c..eed632a9dab74d1b1e020d40833bc423d840eded 100644 --- a/Geo/MPrism.h +++ b/Geo/MPrism.h @@ -72,12 +72,7 @@ class MPrism : public MElement { return MEdge(_v[edges_prism(num, 0)], _v[edges_prism(num, 1)]); } virtual int getNumEdgesRep(bool curved){ return 9; } - virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) - { - static const int f[9] = {0, 1, 2, 0, 2, 3, 1, 1, 1}; - MEdge e(getEdge(num)); - _getEdgeRep(e.getVertex(0), e.getVertex(1), x, y, z, n, f[num]); - } + virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n); virtual void getEdgeVertices(const int num, std::vector<MVertex*> &v) const { v.resize(2); @@ -107,8 +102,7 @@ class MPrism : public MElement { {0, 3, 5}, {0, 5, 2}, {1, 2, 5}, {1, 5, 4} }; - _getFaceRep(getVertex(f[num][0]), getVertex(f[num][1]), getVertex(f[num][2]), - 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 { diff --git a/Geo/MQuadrangle.cpp b/Geo/MQuadrangle.cpp index 89f345394e9c8ce544ff57451545a908c5a831e6..d7a3bea47f579798c5e241a802d5ee8d1316ecba 100644 --- a/Geo/MQuadrangle.cpp +++ b/Geo/MQuadrangle.cpp @@ -40,15 +40,6 @@ void MQuadrangle::getEdgeRep(bool curved, int num, double *x, double *y, double } } -void MQuadrangle::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); -} - int MQuadrangleN::getNumEdgesRep(bool curved) { return curved ? 4 * CTX::instance()->mesh.numSubEdges : 4; diff --git a/Geo/MQuadrangle.h b/Geo/MQuadrangle.h index 092e44cbc525f33567947efca8d1df1aa562f165..37bad4302e44648ad8d053b57638f2c3330612cd 100644 --- a/Geo/MQuadrangle.h +++ b/Geo/MQuadrangle.h @@ -92,7 +92,13 @@ 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 2; } - virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n); + 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); + } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { v.resize(4); diff --git a/Geo/MTetrahedron.cpp b/Geo/MTetrahedron.cpp index 0bb4f764f861901c6f3562e56fff86b661d80257..f112e6806500017fb86775902e3741615af9758a 100644 --- a/Geo/MTetrahedron.cpp +++ b/Geo/MTetrahedron.cpp @@ -39,15 +39,6 @@ void MTetrahedron::getEdgeRep(bool curved, int num, double *x, double *y, double } } -void MTetrahedron::getFaceRep(bool curved, int num, double *x, double *y, double *z, - SVector3 *n) -{ - MVertex *v0 = _v[faces_tetra(num, 0)]; - MVertex *v1 = _v[faces_tetra(num, 1)]; - MVertex *v2 = _v[faces_tetra(num, 2)]; - _getFaceRep(v0, v1, v2, x, y, z, n); -} - SPoint3 MTetrahedron::circumcenter() { #if defined(HAVE_MESH) diff --git a/Geo/MTetrahedron.h b/Geo/MTetrahedron.h index 2adaf8aa354fd5eb83a357c9359a4186adba5bce..eebced566784c38a7b6c9e68279387fd66523a21 100644 --- a/Geo/MTetrahedron.h +++ b/Geo/MTetrahedron.h @@ -83,7 +83,11 @@ class MTetrahedron : public MElement { } virtual void getFaceInfo(const MFace & face, int &ithFace, int &sign, int &rot) const; virtual int getNumFacesRep(bool curved){ return 4; } - virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n); + virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) + { + _getFaceRep(_v[faces_tetra(num, 0)], _v[faces_tetra(num, 1)], _v[faces_tetra(num, 2)], + x, y, z, n); + } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { v.resize(3); diff --git a/Geo/MTriangle.cpp b/Geo/MTriangle.cpp index 203758f5766f29de7cf81fe8c4dbb66a1f7c31f0..534d60006c0c39da72417ba535d2237ec6ce72c8 100644 --- a/Geo/MTriangle.cpp +++ b/Geo/MTriangle.cpp @@ -39,12 +39,6 @@ void MTriangle::getEdgeRep(bool curved, int num, double *x, double *y, double *z } } -void MTriangle::getFaceRep(bool curved, int num, double *x, double *y, double *z, - SVector3 *n) -{ - _getFaceRep(_v[0], _v[1], _v[2], x, y, z, n); -} - SPoint3 MTriangle::circumcenter() { double p1[3] = {_v[0]->x(), _v[0]->y(), _v[0]->z()}; diff --git a/Geo/MTriangle.h b/Geo/MTriangle.h index a49ae4eb34e9a320df3dbc38e70a1a99bc2dcce2..0a7958f164ba2bb7bc0f56ac2b5a369b3396287b 100644 --- a/Geo/MTriangle.h +++ b/Geo/MTriangle.h @@ -99,7 +99,10 @@ class MTriangle : public MElement { return MFace(_v[0], _v[1], _v[2]); } virtual int getNumFacesRep(bool curved){ return 1; } - virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n); + virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n) + { + _getFaceRep(_v[0], _v[1], _v[2], x, y, z, n); + } virtual void getFaceVertices(const int num, std::vector<MVertex*> &v) const { v.resize(3);