X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshInfo.hxx;h=66e96c169a41022501abe2547cb96038c7421640;hp=026590a2e58a91c7aee552f3b3c1c9b033a7f828;hb=82b050103fbd5ec63177dc33ed739f96245d26ec;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx index 026590a2e..66e96c169 100644 --- a/src/SMDS/SMDS_MeshInfo.hxx +++ b/src/SMDS/SMDS_MeshInfo.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -39,8 +39,12 @@ public: inline SMDS_MeshInfo& operator=(const SMDS_MeshInfo& other); inline void Clear(); - inline int NbElements(SMDSAbs_ElementType type=SMDSAbs_All) const; + inline int NbElements(SMDSAbs_ElementType type=SMDSAbs_All) const; + inline int NbElements(SMDSAbs_EntityType type) const { return NbEntities(type); } + inline int NbElements(SMDSAbs_GeometryType type) const { return NbElementsOfGeom(type); } + inline int NbEntities(SMDSAbs_EntityType type) const; + inline int NbElementsOfGeom(SMDSAbs_GeometryType geom) const; int NbNodes() const { return myNbNodes; } int Nb0DElements() const { return myNb0DElements; } @@ -50,6 +54,7 @@ public: 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 NbBiQuadTriangles() const { return myNbBiQuadTriangles; } int NbBiQuadQuadrangles() const { return myNbBiQuadQuadrangles; } int NbPolygons() const { return myNbPolygons; } @@ -83,7 +88,7 @@ private: int myNb0DElements; int myNbBalls; int myNbEdges , myNbQuadEdges ; - int myNbTriangles , myNbQuadTriangles ; + int myNbTriangles , myNbQuadTriangles, myNbBiQuadTriangles ; int myNbQuadrangles, myNbQuadQuadrangles, myNbBiQuadQuadrangles; int myNbPolygons; @@ -103,7 +108,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myNb0DElements (0), myNbBalls (0), myNbEdges (0), myNbQuadEdges (0), - myNbTriangles (0), myNbQuadTriangles (0), + myNbTriangles (0), myNbQuadTriangles (0), myNbBiQuadTriangles(0), myNbQuadrangles(0), myNbQuadQuadrangles(0), myNbBiQuadQuadrangles(0), myNbPolygons (0), myNbTetras (0), myNbQuadTetras (0), @@ -127,7 +132,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // 4 * . . // 5 * // 6 * . - // 7 * + // 7 . * // 8 * . // 9 . * // 10 * @@ -136,15 +141,15 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // 13 * // 14 // 15 * - // 16 * - // 17 * - // 18 + // 16 + // 17 + // 18 * // 19 * - // 20 * + // 20 * // 21 * // 22 * - // 23 - // 24 + // 23 * + // 24 * // 25 // 26 // 27 * @@ -152,10 +157,10 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // So to have a unique index for each type basing on nb of nodes, we use a shift: 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 - myShift[ SMDSAbs_Ball ] = +1; // 1->2 + myShift[ SMDSAbs_Face ] = +15;// 3->18, 4->19, etc. + myShift[ SMDSAbs_Edge ] = +5; // 2->7, 4->9 + myShift[ SMDSAbs_0DElement ] = +2; // 1->3 + myShift[ SMDSAbs_Ball ] = +1; // 1->2 myNb.resize( index( SMDSAbs_Volume,27 ) + 1, NULL); @@ -169,6 +174,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myNb[ index( SMDSAbs_Face,3 )] = & myNbTriangles; myNb[ index( SMDSAbs_Face,4 )] = & myNbQuadrangles; myNb[ index( SMDSAbs_Face,6 )] = & myNbQuadTriangles; + myNb[ index( SMDSAbs_Face,7 )] = & myNbBiQuadTriangles; myNb[ index( SMDSAbs_Face,8 )] = & myNbQuadQuadrangles; myNb[ index( SMDSAbs_Face,9 )] = & myNbBiQuadQuadrangles; @@ -230,47 +236,47 @@ inline void // RemoveVolume SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el) { if ( el->IsPoly() ) --myNbPolyhedrons; else remove( el ); } -inline int // NbEdges +inline int // NbEdges SMDS_MeshInfo::NbEdges (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; } -inline int // NbFaces +inline int // NbFaces SMDS_MeshInfo::NbFaces (SMDSAbs_ElementOrder order) const { return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_QUADRATIC ? 0 : myNbPolygons); } -inline int // NbTriangles +inline int // NbTriangles SMDS_MeshInfo::NbTriangles (SMDSAbs_ElementOrder order) const -{ return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles; } +{ return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles+myNbBiQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles+myNbBiQuadTriangles; } -inline int // NbQuadrangles +inline int // NbQuadrangles SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles+myNbBiQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles+myNbBiQuadQuadrangles; } -inline int // NbVolumes +inline int // NbVolumes SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const { return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + NbHexPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); } -inline int // NbTetras +inline int // NbTetras SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; } -inline int // NbHexas +inline int // NbHexas SMDS_MeshInfo::NbHexas (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbHexas+myNbQuadHexas+myNbTriQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas+myNbTriQuadHexas; } -inline int // NbPyramids +inline int // NbPyramids SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; } -inline int // NbPrisms +inline int // NbPrisms SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; } -inline int // NbHexPrisms +inline int // NbHexPrisms SMDS_MeshInfo::NbHexPrisms (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbHexPrism : order == ORDER_LINEAR ? myNbHexPrism : 0; } -inline int // NbElements +inline int // NbElements SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const { int nb = 0; @@ -280,13 +286,14 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const nb += myNbPolygons + myNbPolyhedrons; break; case SMDSAbs_Volume: - nb = myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ myNbHexPrism+ - myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+ myNbTriQuadHexas+ - myNbPolyhedrons; + nb = ( myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ myNbHexPrism+ + myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+ myNbTriQuadHexas+ + myNbPolyhedrons ); break; case SMDSAbs_Face: - nb = myNbTriangles+ myNbQuadrangles+ - myNbQuadTriangles+ myNbQuadQuadrangles+ myNbBiQuadQuadrangles+ myNbPolygons; + nb = ( myNbTriangles+ myNbQuadrangles+ + myNbQuadTriangles+ myNbBiQuadTriangles+ + myNbQuadQuadrangles+ myNbBiQuadQuadrangles+ myNbPolygons ); break; case SMDSAbs_Edge: nb = myNbEdges + myNbQuadEdges; @@ -305,7 +312,7 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const return nb; } -int // NbEntities +inline int // NbEntities SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const { switch (type) { @@ -314,6 +321,7 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const case SMDSEntity_Quad_Edge: return myNbQuadEdges; case SMDSEntity_Triangle: return myNbTriangles; case SMDSEntity_Quad_Triangle: return myNbQuadTriangles; + case SMDSEntity_BiQuad_Triangle: return myNbBiQuadTriangles; case SMDSEntity_Quadrangle: return myNbQuadrangles; case SMDSEntity_Quad_Quadrangle: return myNbQuadQuadrangles; case SMDSEntity_BiQuad_Quadrangle:return myNbBiQuadQuadrangles; @@ -338,7 +346,45 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const return 0; } -void // set +inline int // NbElementsOfGeom +SMDS_MeshInfo::NbElementsOfGeom(SMDSAbs_GeometryType geom) const +{ + switch ( geom ) { + // 0D: + case SMDSGeom_POINT: return myNb0DElements; + // 1D: + case SMDSGeom_EDGE: return (myNbEdges + + myNbQuadEdges); + // 2D: + case SMDSGeom_TRIANGLE: return (myNbTriangles + + myNbQuadTriangles + + myNbBiQuadTriangles ); + case SMDSGeom_QUADRANGLE: return (myNbQuadrangles + + myNbQuadQuadrangles + + myNbBiQuadQuadrangles ); + case SMDSGeom_POLYGON: return myNbPolygons; + // 3D: + case SMDSGeom_TETRA: return (myNbTetras + + myNbQuadTetras); + case SMDSGeom_PYRAMID: return (myNbPyramids + + myNbQuadPyramids); + case SMDSGeom_HEXA: return (myNbHexas + + myNbQuadHexas + + myNbTriQuadHexas); + case SMDSGeom_PENTA: return (myNbPrisms + + myNbQuadPrisms); + case SMDSGeom_HEXAGONAL_PRISM: return myNbHexPrism; + case SMDSGeom_POLYHEDRA: return myNbPolyhedrons; + // Discrete: + case SMDSGeom_BALL: return myNbBalls; + // + case SMDSGeom_NONE: + default:; + } + return 0; +} + +inline void // setNb SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const int nb) { switch (geomType) { @@ -346,6 +392,7 @@ SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const int nb) case SMDSEntity_0D: myNb0DElements = nb; break; case SMDSEntity_Ball: myNbBalls = nb; break; case SMDSEntity_BiQuad_Quadrangle:myNbBiQuadQuadrangles = nb; break; + case SMDSEntity_BiQuad_Triangle: myNbBiQuadTriangles = nb; break; case SMDSEntity_Edge: myNbEdges = nb; break; case SMDSEntity_Hexa: myNbHexas = nb; break; case SMDSEntity_Hexagonal_Prism: myNbHexPrism = nb; break;