1 // File : SMDS_MeshInfo.hxx
2 // Created : Mon Sep 24 18:32:41 2007
3 // Author : Edward AGAPOV (eap)
6 #ifndef SMDS_MeshInfo_HeaderFile
7 #define SMDS_MeshInfo_HeaderFile
9 #include "SMDS_MeshElement.hxx"
15 inline SMDS_MeshInfo();
17 int NbNodes() const { return myNbNodes; }
19 inline int NbEdges (SMDSAbs_ElementOrder order = ORDER_ANY) const;
20 inline int NbFaces (SMDSAbs_ElementOrder order = ORDER_ANY) const;
21 inline int NbTriangles (SMDSAbs_ElementOrder order = ORDER_ANY) const;
22 inline int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
23 int NbPolygons() const { return myNbPolygons; }
25 inline int NbVolumes (SMDSAbs_ElementOrder order = ORDER_ANY) const;
26 inline int NbTetras (SMDSAbs_ElementOrder order = ORDER_ANY) const;
27 inline int NbHexas (SMDSAbs_ElementOrder order = ORDER_ANY) const;
28 inline int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const;
29 inline int NbPrisms (SMDSAbs_ElementOrder order = ORDER_ANY) const;
30 int NbPolyhedrons() const { return myNbPolyhedrons; }
33 friend class SMDS_Mesh;
35 inline void RemoveEdge(const SMDS_MeshElement* el);
36 inline void RemoveFace(const SMDS_MeshElement* el);
37 inline void RemoveVolume(const SMDS_MeshElement* el);
41 int myNbEdges , myNbQuadEdges ;
42 int myNbTriangles , myNbQuadTriangles ;
43 int myNbQuadrangles, myNbQuadQuadrangles;
46 int myNbTetras , myNbQuadTetras ;
47 int myNbHexas , myNbQuadHexas ;
48 int myNbPyramids, myNbQuadPyramids;
49 int myNbPrisms , myNbQuadPrisms ;
54 inline SMDS_MeshInfo::SMDS_MeshInfo():
56 myNbEdges (0), myNbQuadEdges (0),
57 myNbTriangles (0), myNbQuadTriangles (0),
58 myNbQuadrangles(0), myNbQuadQuadrangles(0),
60 myNbTetras (0), myNbQuadTetras (0),
61 myNbHexas (0), myNbQuadHexas (0),
62 myNbPyramids(0), myNbQuadPyramids(0),
63 myNbPrisms (0), myNbQuadPrisms (0),
68 SMDS_MeshInfo::NbEdges (SMDSAbs_ElementOrder order) const
69 { return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; }
72 SMDS_MeshInfo::NbFaces (SMDSAbs_ElementOrder order) const
73 { return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_QUADRATIC ? 0 : myNbPolygons); }
75 inline int // NbTriangles
76 SMDS_MeshInfo::NbTriangles (SMDSAbs_ElementOrder order) const
77 { return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles; }
79 inline int // NbQuadrangles
80 SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const
81 { return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles; }
83 inline int // NbVolumes
84 SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const
85 { return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); }
87 inline int // NbTetras
88 SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const
89 { return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; }
92 SMDS_MeshInfo::NbHexas (SMDSAbs_ElementOrder order) const
93 { return order == ORDER_ANY ? myNbHexas+myNbQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas; }
95 inline int // NbPyramids
96 SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
97 { return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; }
99 inline int // NbPrisms
100 SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const
101 { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; }
104 inline void SMDS_MeshInfo::RemoveEdge(const SMDS_MeshElement* el)
106 if ( el->IsQuadratic() ) --myNbQuadEdges; else --myNbEdges;
110 inline void SMDS_MeshInfo::RemoveFace(const SMDS_MeshElement* el)
112 int nbnode = el->NbNodes();
113 if ( el->IsPoly() ) --myNbPolygons;
114 else if (nbnode == 3) --myNbTriangles;
115 else if (nbnode == 4) --myNbQuadrangles;
116 else if (nbnode == 6) --myNbQuadTriangles;
117 else if (nbnode == 8) --myNbQuadQuadrangles;
121 inline void SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el)
123 int nbnode = el->NbNodes();
124 if ( el->IsPoly() ) --myNbPolyhedrons;
125 else if (nbnode == 4) --myNbTetras;
126 else if (nbnode == 5) --myNbPyramids;
127 else if (nbnode == 6) --myNbPrisms;
128 else if (nbnode == 8) --myNbHexas;
129 else if (nbnode == 10) --myNbQuadTetras;
130 else if (nbnode == 13) --myNbQuadPyramids;
131 else if (nbnode == 15) --myNbQuadPrisms;
132 else if (nbnode == 20) --myNbQuadHexas;