Salome HOME
Merge remote branch 'origin/gdd/translations'
[modules/smesh.git] / src / SMDS / SMDS_Mesh0DElement.cxx
1 // Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 //  SMESH SMDS : implementaion of Salome mesh data structure
21 //  File   : SMDS_Mesh0DElement.cxx
22 //  Module : SMESH
23 //
24 #ifdef _MSC_VER
25 #pragma warning(disable:4786)
26 #endif
27
28 #include "SMDS_Mesh0DElement.hxx"
29 #include "SMDS_IteratorOfElements.hxx"
30 #include "SMDS_MeshNode.hxx"
31 #include "utilities.h"
32
33 using namespace std;
34
35 //=======================================================================
36 //function : SMDS_Mesh0DElement
37 //purpose  :
38 //=======================================================================
39 SMDS_Mesh0DElement::SMDS_Mesh0DElement (const SMDS_MeshNode * node)
40 {
41   myNode = node;
42 }
43
44 //=======================================================================
45 //function : Print
46 //purpose  :
47 //=======================================================================
48 void SMDS_Mesh0DElement::Print (ostream & OS) const
49 {
50   OS << "0D Element <" << GetID() << "> : (" << myNode << ") " << endl;
51 }
52
53 //=======================================================================
54 //function : NbNodes
55 //purpose  :
56 //=======================================================================
57 int SMDS_Mesh0DElement::NbNodes() const
58 {
59   return 1;
60 }
61
62 //=======================================================================
63 //function : NbEdges
64 //purpose  :
65 //=======================================================================
66 int SMDS_Mesh0DElement::NbEdges() const
67 {
68   return 0;
69 }
70
71 //=======================================================================
72 //function : GetType
73 //purpose  :
74 //=======================================================================
75 SMDSAbs_ElementType SMDS_Mesh0DElement::GetType() const
76 {
77   return SMDSAbs_0DElement;
78 }
79
80 vtkIdType SMDS_Mesh0DElement::GetVtkType() const
81 {
82   return VTK_VERTEX;
83 }
84
85 //=======================================================================
86 //function : elementsIterator
87 //purpose  :
88 //=======================================================================
89 class SMDS_Mesh0DElement_MyNodeIterator: public SMDS_ElemIterator
90 {
91   const SMDS_MeshNode * myNode;
92   int myIndex;
93  public:
94   SMDS_Mesh0DElement_MyNodeIterator(const SMDS_MeshNode * node):
95     myNode(node),myIndex(0) {}
96
97   bool more()
98   {
99     return myIndex < 1;
100   }
101
102   const SMDS_MeshElement* next()
103   {
104     myIndex++;
105     if (myIndex == 1)
106       return myNode;
107     return NULL;
108   }
109 };
110
111 SMDS_ElemIteratorPtr SMDS_Mesh0DElement::elementsIterator (SMDSAbs_ElementType type) const
112 {
113   switch(type)
114   {
115   case SMDSAbs_0DElement:
116     return SMDS_MeshElement::elementsIterator(SMDSAbs_0DElement);
117   case SMDSAbs_Node:
118     return SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode));
119   default:
120     return SMDS_ElemIteratorPtr
121       (new SMDS_IteratorOfElements
122        (this,type, SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode))));
123   }
124 }
125
126 /*!
127  * \brief Return node by its index
128  * \param ind - node index
129  * \retval const SMDS_MeshNode* - the node
130  */
131 const SMDS_MeshNode* SMDS_Mesh0DElement::GetNode(const int ind) const
132 {
133   if (ind == 0)
134     return myNode;
135   return NULL;
136 }
137
138 //=======================================================================
139 //function : ChangeNode
140 //purpose  :
141 //=======================================================================
142 bool SMDS_Mesh0DElement::ChangeNode (const SMDS_MeshNode * node)
143 {
144   myNode = node;
145   return true;
146 }