X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshInfo.hxx;h=c54a56b454d9e0afcef13630c72691bfb82c2e3f;hb=43db13f33a1d75fae36db8f06fa378ed7906a332;hp=2227824883d2e7c722cf53b4774cf14b7a6ea02a;hpb=4592fecfcf7f19fbb7650f63c49947e0ac9b108b;p=modules%2Fsmesh.git diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx index 222782488..c54a56b45 100644 --- a/src/SMDS/SMDS_MeshInfo.hxx +++ b/src/SMDS/SMDS_MeshInfo.hxx @@ -1,24 +1,22 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // File : SMDS_MeshInfo.hxx // Created : Mon Sep 24 18:32:41 2007 // Author : Edward AGAPOV (eap) @@ -26,6 +24,7 @@ #ifndef SMDS_MeshInfo_HeaderFile #define SMDS_MeshInfo_HeaderFile +#include using namespace std; #include "SMESH_SMDS.hxx" @@ -37,16 +36,20 @@ class SMDS_EXPORT SMDS_MeshInfo public: inline SMDS_MeshInfo(); + inline SMDS_MeshInfo& operator=(const SMDS_MeshInfo& other); inline void Clear(); int NbNodes() const { return myNbNodes; } inline int NbElements(SMDSAbs_ElementType type=SMDSAbs_All) const; + inline int NbEntities(SMDSAbs_EntityType type) const; int Nb0DElements() const { return myNb0DElements; } inline int NbEdges (SMDSAbs_ElementOrder order = ORDER_ANY) const; + inline int NbFaces (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbTriangles (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const; + int NbBiQuadQuadrangles() const { return myNbBiQuadQuadrangles; } int NbPolygons() const { return myNbPolygons; } inline int NbVolumes (SMDSAbs_ElementOrder order = ORDER_ANY) const; @@ -54,8 +57,14 @@ public: inline int NbHexas (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbPrisms (SMDSAbs_ElementOrder order = ORDER_ANY) const; + inline int NbHexPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const; + int NbTriQuadHexas() const { return myNbTriQuadHexas; } int NbPolyhedrons() const { return myNbPolyhedrons; } +protected: + inline void addWithPoly(const SMDS_MeshElement* el); + inline void setNb(const SMDSAbs_EntityType geomType, const int nb); + private: friend class SMDS_Mesh; @@ -73,13 +82,14 @@ private: int myNb0DElements; int myNbEdges , myNbQuadEdges ; int myNbTriangles , myNbQuadTriangles ; - int myNbQuadrangles, myNbQuadQuadrangles; + int myNbQuadrangles, myNbQuadQuadrangles, myNbBiQuadQuadrangles; int myNbPolygons; int myNbTetras , myNbQuadTetras ; - int myNbHexas , myNbQuadHexas ; + int myNbHexas , myNbQuadHexas, myNbTriQuadHexas; int myNbPyramids, myNbQuadPyramids; int myNbPrisms , myNbQuadPrisms ; + int myNbHexPrism; int myNbPolyhedrons; std::vector myNb; // pointers to myNb... fields @@ -87,51 +97,64 @@ private: }; inline SMDS_MeshInfo::SMDS_MeshInfo(): - myNbNodes(0), - myNb0DElements(0), + myNbNodes (0), + myNb0DElements (0), myNbEdges (0), myNbQuadEdges (0), myNbTriangles (0), myNbQuadTriangles (0), - myNbQuadrangles(0), myNbQuadQuadrangles(0), - myNbPolygons(0), - myNbTetras (0), myNbQuadTetras (0), - myNbHexas (0), myNbQuadHexas (0), - myNbPyramids(0), myNbQuadPyramids(0), - myNbPrisms (0), myNbQuadPrisms (0), + myNbQuadrangles(0), myNbQuadQuadrangles(0), myNbBiQuadQuadrangles(0), + myNbPolygons (0), + myNbTetras (0), myNbQuadTetras (0), + myNbHexas (0), myNbQuadHexas (0), myNbTriQuadHexas(0), + myNbPyramids (0), myNbQuadPyramids(0), + myNbPrisms (0), myNbQuadPrisms (0), + myNbHexPrism (0), myNbPolyhedrons(0) { - // Number of nodes in standard element types - // n v f e 0 - // o o a d d - // d l c g - // e e e - // -------------- - // 1 * - // 2 * - // 3 * - // 4 * * * + // Number of nodes in standard element types (. - actual nb, * - after the shift) + // n v f e 0 n + // o o a d d o + // d l c g d + // e e e e + // s + // ================= + // 0 --------------- - DON't USE 0!!! + // 1 . * + // 2 . + // 3 . * + // 4 * . . // 5 * - // 6 * * - // 7 - // 8 * * - // 9 + // 6 * . + // 7 * + // 8 * . + // 9 . * // 10 * // 11 - // 12 + // 12 * // 13 * // 14 // 15 * - // 16 - // 17 + // 16 * + // 17 * // 18 - // 19 + // 19 * // 20 * + // 21 * + // 22 * + // 23 + // 24 + // 25 + // 26 + // 27 * // // So to have a unique index for each type basing on nb of nodes, we use a shift: - myShift.resize(SMDSAbs_Volume + 1, 0); - myShift[ SMDSAbs_Face ] = +8; // 3->11, 4->12, 6->14, 8->16 - myShift[ SMDSAbs_Edge ] = -2; // 2->0, 4->2 + myShift.resize(SMDSAbs_NbElementTypes, 0); + + myShift[ SMDSAbs_Face ] = +13;// 3->16, 4->17, 6->19, 8->21, 9->22 + myShift[ SMDSAbs_Edge ] = +5; // 2->7, 4->9 + myShift[ SMDSAbs_0DElement ] = +2; // 1->3 + + myNb.resize( index( SMDSAbs_Volume,27 ) + 1, NULL); - myNb.resize( index( SMDSAbs_Volume,20 ) + 1, NULL); myNb[ index( SMDSAbs_Node,1 )] = & myNbNodes; myNb[ index( SMDSAbs_0DElement,1 )] = & myNb0DElements; @@ -143,21 +166,34 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myNb[ index( SMDSAbs_Face,4 )] = & myNbQuadrangles; myNb[ index( SMDSAbs_Face,6 )] = & myNbQuadTriangles; myNb[ index( SMDSAbs_Face,8 )] = & myNbQuadQuadrangles; + myNb[ index( SMDSAbs_Face,9 )] = & myNbBiQuadQuadrangles; myNb[ index( SMDSAbs_Volume, 4)] = & myNbTetras; myNb[ index( SMDSAbs_Volume, 5)] = & myNbPyramids; myNb[ index( SMDSAbs_Volume, 6)] = & myNbPrisms; myNb[ index( SMDSAbs_Volume, 8)] = & myNbHexas; myNb[ index( SMDSAbs_Volume, 10)] = & myNbQuadTetras; + myNb[ index( SMDSAbs_Volume, 12)] = & myNbHexPrism; myNb[ index( SMDSAbs_Volume, 13)] = & myNbQuadPyramids; myNb[ index( SMDSAbs_Volume, 15)] = & myNbQuadPrisms; myNb[ index( SMDSAbs_Volume, 20)] = & myNbQuadHexas; + myNb[ index( SMDSAbs_Volume, 27)] = & myNbTriQuadHexas; +} + +inline SMDS_MeshInfo& // operator= +SMDS_MeshInfo::operator=(const SMDS_MeshInfo& other) +{ for ( int i=0; iGetType(), el->NbNodes()) ]); } +inline void // addWithPoly +SMDS_MeshInfo::addWithPoly(const SMDS_MeshElement* el) +{ + if ( el->IsPoly() ) + ++( el->GetType()==SMDSAbs_Face ? myNbPolygons : myNbPolyhedrons ); + else + add(el); +} inline void // RemoveEdge SMDS_MeshInfo::RemoveEdge(const SMDS_MeshElement* el) { if ( el->IsQuadratic() ) --myNbQuadEdges; else --myNbEdges; } @@ -196,11 +240,11 @@ SMDS_MeshInfo::NbTriangles (SMDSAbs_ElementOrder order) const inline int // NbQuadrangles SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const -{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles; } +{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles+myNbBiQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles+myNbBiQuadQuadrangles; } inline int // NbVolumes SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const -{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); } +{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + NbHexPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); } inline int // NbTetras SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const @@ -208,7 +252,7 @@ SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const inline int // NbHexas SMDS_MeshInfo::NbHexas (SMDSAbs_ElementOrder order) const -{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas; } +{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas+myNbTriQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas+myNbTriQuadHexas; } inline int // NbPyramids SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const @@ -218,6 +262,10 @@ inline int // NbPrisms SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; } +inline int // NbHexPrisms +SMDS_MeshInfo::NbHexPrisms (SMDSAbs_ElementOrder order) const +{ return order == ORDER_ANY ? myNbHexPrism : order == ORDER_LINEAR ? myNbHexPrism : 0; } + inline int // NbElements SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const { @@ -228,19 +276,89 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const nb += myNbPolygons + myNbPolyhedrons; break; case SMDSAbs_Volume: - nb = myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ - myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+myNbPolyhedrons; + nb = myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ myNbHexPrism+ + myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+ myNbTriQuadHexas+ + myNbPolyhedrons; break; case SMDSAbs_Face: - nb = myNbTriangles+ myNbQuadrangles+ myNbQuadTriangles+ myNbQuadQuadrangles + myNbPolygons; + nb = myNbTriangles+ myNbQuadrangles+ + myNbQuadTriangles+ myNbQuadQuadrangles+ myNbBiQuadQuadrangles+ myNbPolygons; break; case SMDSAbs_Edge: nb = myNbEdges + myNbQuadEdges; break; + case SMDSAbs_0DElement: + nb = myNb0DElements; + break; case SMDSAbs_Node: nb = myNbNodes; + break; default:; } return nb; } + +int // NbEntities +SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const +{ + switch (type) { + case SMDSEntity_Node: return myNbNodes; + case SMDSEntity_0D: return myNb0DElements; + case SMDSEntity_Edge: return myNbEdges; + case SMDSEntity_Quad_Edge: return myNbQuadEdges; + case SMDSEntity_Triangle: return myNbTriangles; + case SMDSEntity_Quad_Triangle: return myNbQuadTriangles; + case SMDSEntity_Quadrangle: return myNbQuadrangles; + case SMDSEntity_Quad_Quadrangle: return myNbQuadQuadrangles; + case SMDSEntity_BiQuad_Quadrangle:return myNbBiQuadQuadrangles; + case SMDSEntity_Polygon: return myNbPolygons; + case SMDSEntity_Tetra: return myNbTetras; + case SMDSEntity_Quad_Tetra: return myNbQuadTetras; + case SMDSEntity_Pyramid: return myNbPyramids; + case SMDSEntity_Quad_Pyramid: return myNbQuadPyramids; + case SMDSEntity_Hexa: return myNbHexas; + case SMDSEntity_Quad_Hexa: return myNbQuadHexas; + case SMDSEntity_TriQuad_Hexa: return myNbTriQuadHexas; + case SMDSEntity_Penta: return myNbPrisms; + case SMDSEntity_Quad_Penta: return myNbQuadPrisms; + case SMDSEntity_Hexagonal_Prism: return myNbHexPrism; + case SMDSEntity_Polyhedra: return myNbPolyhedrons; + case SMDSEntity_Quad_Polygon: + case SMDSEntity_Quad_Polyhedra: + break; + } + return 0; +} + +void // set +SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const int nb) +{ + switch (geomType) { + case SMDSEntity_Node: myNbNodes = nb; break; + case SMDSEntity_0D: myNb0DElements = nb; break; + case SMDSEntity_Edge: myNbEdges = nb; break; + case SMDSEntity_Quad_Edge: myNbQuadEdges = nb; break; + case SMDSEntity_Triangle: myNbTriangles = nb; break; + case SMDSEntity_Quad_Triangle: myNbQuadTriangles = nb; break; + case SMDSEntity_Quadrangle: myNbQuadrangles = nb; break; + case SMDSEntity_Quad_Quadrangle: myNbQuadQuadrangles = nb; break; + case SMDSEntity_BiQuad_Quadrangle:myNbBiQuadQuadrangles = nb; break; + case SMDSEntity_Polygon: myNbPolygons = nb; break; + case SMDSEntity_Tetra: myNbTetras = nb; break; + case SMDSEntity_Quad_Tetra: myNbQuadTetras = nb; break; + case SMDSEntity_Pyramid: myNbPyramids = nb; break; + case SMDSEntity_Quad_Pyramid: myNbQuadPyramids = nb; break; + case SMDSEntity_Hexa: myNbHexas = nb; break; + case SMDSEntity_Quad_Hexa: myNbQuadHexas = nb; break; + case SMDSEntity_TriQuad_Hexa: myNbTriQuadHexas = nb; break; + case SMDSEntity_Penta: myNbPrisms = nb; break; + case SMDSEntity_Quad_Penta: myNbQuadPrisms = nb; break; + case SMDSEntity_Hexagonal_Prism: myNbHexPrism = nb; break; + case SMDSEntity_Polyhedra: myNbPolyhedrons = nb; break; + case SMDSEntity_Quad_Polygon: + case SMDSEntity_Quad_Polyhedra: + break; + } +} + #endif