SALOME - SMESH
SMDS_MeshElement.hxx
Go to the documentation of this file.
1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // SMESH SMDS : implementaion of Salome mesh data structure
23 // File : SMDS_MeshElement.hxx
24 // Module : SMESH
25 //
26 #ifndef _SMDS_MeshElement_HeaderFile
27 #define _SMDS_MeshElement_HeaderFile
28 
29 #include "SMESH_SMDS.hxx"
30 
31 #include "SMDSAbs_ElementType.hxx"
32 #include "SMDS_MeshObject.hxx"
33 #include "SMDS_ElemIterator.hxx"
35 
36 #include <vector>
37 #include <iostream>
38 
39 class SMDS_MeshNode;
40 class SMDS_MeshEdge;
41 class SMDS_MeshFace;
42 
43 // ============================================================
47 // ============================================================
48 
50 {
51 public:
52 
53  SMDS_ElemIteratorPtr nodesIterator() const;
54  SMDS_ElemIteratorPtr edgesIterator() const;
55  SMDS_ElemIteratorPtr facesIterator() const;
56  virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
57 
58  virtual int NbNodes() const;
59  virtual int NbEdges() const;
60  virtual int NbFaces() const;
61  int GetID() const;
62 
64  virtual SMDSAbs_ElementType GetType() const = 0;
65  virtual bool IsPoly() const { return false; };
66  virtual bool IsQuadratic() const;
68  virtual SMDSAbs_EntityType GetEntityType() const = 0;
69 
70  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
71 
72  friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
74 
75  // ===========================
76  // Access to nodes by index
77  // ===========================
83  virtual const SMDS_MeshNode* GetNode(const int ind) const;
84 
92  const SMDS_MeshNode* GetNodeWrap(const int ind) const { return GetNode( WrappedIndex( ind )); }
93 
99  virtual bool IsValidIndex(const int ind) const;
100 
106  int WrappedIndex(const int ind) const {
107  if ( ind < 0 ) return NbNodes() + ind % NbNodes();
108  if ( ind >= NbNodes() ) return ind % NbNodes();
109  return ind;
110  }
111 
117  int GetNodeIndex( const SMDS_MeshNode* node ) const;
118 
119 protected:
120  SMDS_MeshElement(int ID=-1);
121  virtual void Print(std::ostream & OS) const;
122 
123 private:
124  int myID;
125 };
126 
127 // ============================================================
131 // ============================================================
132 
133 struct TIDCompare {
134  bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const
135  { return e1->GetID() < e2->GetID(); }
136 };
137 
138 #endif
bool BindID(int ID, SMDS_MeshElement *elem)
SMDSAbs_EntityType
#define SMDS_EXPORT
Definition: SMESH_SMDS.hxx:36
boost::shared_ptr< SMDS_Iterator< const SMDS_MeshElement * > > SMDS_ElemIteratorPtr
SMDSAbs_ElementType
Type (node, edge, face or volume) of elements.
int WrappedIndex(const int ind) const
Return a valid node index, fixing the given one if necessary.
int GetID() const
virtual bool IsPoly() const
Base class for elements.
Comparator of elements by ID for usage in std containers.
const SMDS_MeshNode * GetNodeWrap(const int ind) const
Return node by its index.