Salome HOME
7ce6fda8bd11d8c8a38183e7a7d4c59fbbf24a8f
[modules/smesh.git] / src / SMDS / SMDS_Mesh0DElement.cxx
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_Mesh0DElement.cxx
24 //  Author : Jean-Michel BOULCOURT
25 //  Module : SMESH
26
27 #ifdef _MSC_VER
28 #pragma warning(disable:4786)
29 #endif
30
31 #include "SMDS_Mesh0DElement.hxx"
32 #include "SMDS_IteratorOfElements.hxx"
33 #include "SMDS_MeshNode.hxx"
34
35 using namespace std;
36
37 //=======================================================================
38 //function : SMDS_Mesh0DElement
39 //purpose  :
40 //=======================================================================
41 SMDS_Mesh0DElement::SMDS_Mesh0DElement (const SMDS_MeshNode * node)
42 {       
43   myNode = node;
44 }
45
46 //=======================================================================
47 //function : Print
48 //purpose  :
49 //=======================================================================
50 void SMDS_Mesh0DElement::Print (ostream & OS) const
51 {
52   OS << "0D Element <" << GetID() << "> : (" << myNode << ") " << endl;
53 }
54
55 //=======================================================================
56 //function : NbNodes
57 //purpose  :
58 //=======================================================================
59 int SMDS_Mesh0DElement::NbNodes() const
60 {
61   return 1;
62 }
63
64 //=======================================================================
65 //function : NbEdges
66 //purpose  :
67 //=======================================================================
68 int SMDS_Mesh0DElement::NbEdges() const
69 {
70   return 0;
71 }
72
73 //=======================================================================
74 //function : GetType
75 //purpose  :
76 //=======================================================================
77 SMDSAbs_ElementType SMDS_Mesh0DElement::GetType() const
78 {
79   return SMDSAbs_0DElement;
80 }
81
82 //=======================================================================
83 //function : elementsIterator
84 //purpose  :
85 //=======================================================================
86 class SMDS_Mesh0DElement_MyNodeIterator: public SMDS_ElemIterator
87 {
88   const SMDS_MeshNode * myNode;
89   int myIndex;
90  public:
91   SMDS_Mesh0DElement_MyNodeIterator(const SMDS_MeshNode * node):
92     myNode(node),myIndex(0) {}
93
94   bool more()
95   {
96     return myIndex < 1;
97   }
98
99   const SMDS_MeshElement* next()
100   {
101     myIndex++;
102     if (myIndex == 1)
103       return myNode;
104     return NULL;
105   }
106 };
107
108 SMDS_ElemIteratorPtr SMDS_Mesh0DElement::elementsIterator (SMDSAbs_ElementType type) const
109 {
110   switch(type)
111   {
112   case SMDSAbs_0DElement:
113     return SMDS_MeshElement::elementsIterator(SMDSAbs_0DElement);
114   case SMDSAbs_Node:
115     return SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode));
116   default:
117     return SMDS_ElemIteratorPtr
118       (new SMDS_IteratorOfElements
119        (this,type, SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode))));
120   }
121 }
122
123 //=======================================================================
124 //function : operator<
125 //purpose  :
126 //=======================================================================
127 bool operator< (const SMDS_Mesh0DElement & e1, const SMDS_Mesh0DElement & e2)
128 {
129   int id1 = e1.myNode->GetID();
130   int id2 = e2.myNode->GetID();
131
132   return (id1 < id2);
133 }
134
135 /*!
136  * \brief Return node by its index
137  * \param ind - node index
138  * \retval const SMDS_MeshNode* - the node
139  */
140 const SMDS_MeshNode* SMDS_Mesh0DElement::GetNode(const int ind) const
141 {
142   if (ind == 0)
143     return myNode;
144   return NULL;
145 }
146
147 //=======================================================================
148 //function : ChangeNode
149 //purpose  :
150 //=======================================================================
151 bool SMDS_Mesh0DElement::ChangeNode (const SMDS_MeshNode * node)
152 {
153   myNode = node;
154   return true;
155 }