]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMDS/SMDS_MeshElement.hxx
Salome HOME
0020672: EDF 1243 SMESH : Be able to transform mixed mesh
[modules/smesh.git] / src / SMDS / SMDS_MeshElement.hxx
index 2716456d34cfcf70f4a6057412c176be096f5c4e..2609b720c2f05295bb2493da0a365f54daeb6419 100644 (file)
 #define _SMDS_MeshElement_HeaderFile
 
 #include "SMESH_SMDS.hxx"
-       
+        
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshObject.hxx"
 #include "SMDS_ElemIterator.hxx"
 #include "SMDS_MeshElementIDFactory.hxx"
+#include "SMDS_StdIterator.hxx"
 
 #include <vector>
 #include <iostream>
 
 class SMDS_MeshNode;
 class SMDS_MeshEdge;
-class SMDS_MeshFace;   
+class SMDS_MeshFace;    
+
+// ============================================================
+/*!
+ * \brief Base class for elements
+ */
+// ============================================================
 
-///////////////////////////////////////////////////////////////////////////////
-/// Base class for elements
-///////////////////////////////////////////////////////////////////////////////
 class SMDS_EXPORT SMDS_MeshElement:public SMDS_MeshObject
 {
 public:
@@ -52,6 +56,11 @@ public:
   SMDS_ElemIteratorPtr facesIterator() const;
   virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
 
+  // std-like iteration on nodes
+  typedef SMDS_StdIterator< const SMDS_MeshNode*, SMDS_ElemIteratorPtr > iterator;
+  iterator begin_nodes() const { return iterator( nodesIterator() ); }
+  iterator end_nodes()   const { return iterator(); }
+
   virtual int NbNodes() const;
   virtual int NbEdges() const;
   virtual int NbFaces() const;
@@ -61,8 +70,11 @@ public:
   virtual SMDSAbs_ElementType GetType() const = 0;
   virtual bool IsPoly() const { return false; };
   virtual bool IsQuadratic() const;
+  //! Return type of entity
+  virtual SMDSAbs_EntityType  GetEntityType() const = 0;
 
   virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
+  virtual int  NbCornerNodes() const;
 
   friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
   friend SMDS_EXPORT bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem);
@@ -70,6 +82,13 @@ public:
   // ===========================
   //  Access to nodes by index
   // ===========================
+  /*!
+   * \brief Return node by its index
+    * \param ind - node index
+    * \retval const SMDS_MeshNode* - the node
+   */
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+
   /*!
    * \brief Return node by its index
     * \param ind - node index
@@ -77,7 +96,7 @@ public:
    * 
    * Index is wrapped if it is out of a valid range
    */
-  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+  const SMDS_MeshNode* GetNodeWrap(const int ind) const { return GetNode( WrappedIndex( ind )); }
 
   /*!
    * \brief Return true if index of node is valid (0 <= ind < NbNodes())
@@ -112,4 +131,15 @@ private:
   int myID;
 };
 
+// ============================================================
+/*!
+ * \brief Comparator of elements by ID for usage in std containers
+ */
+// ============================================================
+
+struct TIDCompare {
+  bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const
+  { return e1->GetID() < e2->GetID(); }
+};
+
 #endif