Salome HOME
PAL14858 (The Mesh Info Dialog Box is too slow)
[modules/smesh.git] / src / SMDS / SMDS_MeshInfo.hxx
1 // File      : SMDS_MeshInfo.hxx
2 // Created   : Mon Sep 24 18:32:41 2007
3 // Author    : Edward AGAPOV (eap)
4
5
6 #ifndef SMDS_MeshInfo_HeaderFile
7 #define SMDS_MeshInfo_HeaderFile
8
9 #include "SMDS_MeshElement.hxx"
10
11 class SMDS_MeshInfo
12 {
13 public:
14
15   inline SMDS_MeshInfo();
16
17   int NbNodes() const { return myNbNodes; }
18
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; }
24
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; }
31
32 private:
33   friend class SMDS_Mesh;
34
35   inline void RemoveEdge(const SMDS_MeshElement* el);
36   inline void RemoveFace(const SMDS_MeshElement* el);
37   inline void RemoveVolume(const SMDS_MeshElement* el);
38
39   int myNbNodes;
40
41   int myNbEdges      , myNbQuadEdges      ;
42   int myNbTriangles  , myNbQuadTriangles  ;
43   int myNbQuadrangles, myNbQuadQuadrangles;
44   int myNbPolygons;
45
46   int myNbTetras  , myNbQuadTetras  ;
47   int myNbHexas   , myNbQuadHexas   ;
48   int myNbPyramids, myNbQuadPyramids;
49   int myNbPrisms  , myNbQuadPrisms  ;
50   int myNbPolyhedrons;
51   
52 };
53
54 inline SMDS_MeshInfo::SMDS_MeshInfo():
55   myNbNodes(0),
56   myNbEdges      (0), myNbQuadEdges      (0),
57   myNbTriangles  (0), myNbQuadTriangles  (0),
58   myNbQuadrangles(0), myNbQuadQuadrangles(0),
59   myNbPolygons(0),
60   myNbTetras  (0), myNbQuadTetras  (0),
61   myNbHexas   (0), myNbQuadHexas   (0),
62   myNbPyramids(0), myNbQuadPyramids(0),
63   myNbPrisms  (0), myNbQuadPrisms  (0),
64   myNbPolyhedrons(0)
65 {}
66
67 inline int // NbEdges
68 SMDS_MeshInfo::NbEdges      (SMDSAbs_ElementOrder order) const
69 { return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; }
70
71 inline int // NbFaces
72 SMDS_MeshInfo::NbFaces      (SMDSAbs_ElementOrder order) const
73 { return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_QUADRATIC ? 0 : myNbPolygons); }
74
75 inline int // NbTriangles
76 SMDS_MeshInfo::NbTriangles  (SMDSAbs_ElementOrder order) const
77 { return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles; }
78
79 inline int // NbQuadrangles
80 SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const
81 { return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles; }
82
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); }
86
87 inline int // NbTetras
88 SMDS_MeshInfo::NbTetras  (SMDSAbs_ElementOrder order) const
89 { return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; }
90
91 inline int // NbHexas
92 SMDS_MeshInfo::NbHexas   (SMDSAbs_ElementOrder order) const
93 { return order == ORDER_ANY ? myNbHexas+myNbQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas; }
94
95 inline int // NbPyramids
96 SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
97 { return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; }
98
99 inline int // NbPrisms
100 SMDS_MeshInfo::NbPrisms  (SMDSAbs_ElementOrder order) const
101 { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; }
102
103 // RemoveEdge
104 inline void SMDS_MeshInfo::RemoveEdge(const SMDS_MeshElement* el)
105 {
106   if ( el->IsQuadratic() ) --myNbQuadEdges; else --myNbEdges;
107 }
108
109 // RemoveFace
110 inline void SMDS_MeshInfo::RemoveFace(const SMDS_MeshElement* el)
111 {
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;
118 }
119
120 // RemoveVolume
121 inline void SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el)
122 {
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;   
133 }
134
135 #endif