SALOME - SMESH
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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;
67 
68  virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
69 
70  friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
72 
73  // ===========================
74  // Access to nodes by index
75  // ===========================
81  virtual const SMDS_MeshNode* GetNode(const int ind) const;
82 
90  const SMDS_MeshNode* GetNodeWrap(const int ind) const { return GetNode( WrappedIndex( ind )); }
91 
97  virtual bool IsValidIndex(const int ind) const;
98 
104  int WrappedIndex(const int ind) const {
105  if ( ind < 0 ) return NbNodes() + ind % NbNodes();
106  if ( ind >= NbNodes() ) return ind % NbNodes();
107  return ind;
108  }
109 
115  int GetNodeIndex( const SMDS_MeshNode* node ) const;
116 
117 protected:
118  SMDS_MeshElement(int ID=-1);
119  virtual void Print(std::ostream & OS) const;
120 
121 private:
122  int myID;
123 };
124 
125 // ============================================================
129 // ============================================================
130 
131 struct TIDCompare {
132  bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const
133  { return e1->GetID() < e2->GetID(); }
134 };
135 
136 #endif
bool BindID(int ID, SMDS_MeshElement *elem)
#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.
bool operator()(const SMDS_MeshElement *e1, const SMDS_MeshElement *e2) const
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.