Salome HOME
Merge from V5_1_4_BR 07/05/2010
[modules/smesh.git] / src / SMDS / SMDS_Mesh0DElement.cxx
1 //  Copyright (C) 2007-2010  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.
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 //  Author : Jean-Michel BOULCOURT
23 //  Module : SMESH
24 //
25 #ifdef _MSC_VER
26 #pragma warning(disable:4786)
27 #endif
28
29 #include "SMDS_Mesh0DElement.hxx"
30 #include "SMDS_IteratorOfElements.hxx"
31 #include "SMDS_MeshNode.hxx"
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 //=======================================================================
81 //function : elementsIterator
82 //purpose  :
83 //=======================================================================
84 class SMDS_Mesh0DElement_MyNodeIterator: public SMDS_ElemIterator
85 {
86   const SMDS_MeshNode * myNode;
87   int myIndex;
88  public:
89   SMDS_Mesh0DElement_MyNodeIterator(const SMDS_MeshNode * node):
90     myNode(node),myIndex(0) {}
91
92   bool more()
93   {
94     return myIndex < 1;
95   }
96
97   const SMDS_MeshElement* next()
98   {
99     myIndex++;
100     if (myIndex == 1)
101       return myNode;
102     return NULL;
103   }
104 };
105
106 SMDS_ElemIteratorPtr SMDS_Mesh0DElement::elementsIterator (SMDSAbs_ElementType type) const
107 {
108   switch(type)
109   {
110   case SMDSAbs_0DElement:
111     return SMDS_MeshElement::elementsIterator(SMDSAbs_0DElement);
112   case SMDSAbs_Node:
113     return SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode));
114   default:
115     return SMDS_ElemIteratorPtr
116       (new SMDS_IteratorOfElements
117        (this,type, SMDS_ElemIteratorPtr(new SMDS_Mesh0DElement_MyNodeIterator(myNode))));
118   }
119 }
120
121 //=======================================================================
122 //function : operator<
123 //purpose  :
124 //=======================================================================
125 bool operator< (const SMDS_Mesh0DElement & e1, const SMDS_Mesh0DElement & e2)
126 {
127   int id1 = e1.myNode->GetID();
128   int id2 = e2.myNode->GetID();
129
130   return (id1 < id2);
131 }
132
133 /*!
134  * \brief Return node by its index
135  * \param ind - node index
136  * \retval const SMDS_MeshNode* - the node
137  */
138 const SMDS_MeshNode* SMDS_Mesh0DElement::GetNode(const int ind) const
139 {
140   if (ind == 0)
141     return myNode;
142   return NULL;
143 }
144
145 //=======================================================================
146 //function : ChangeNode
147 //purpose  :
148 //=======================================================================
149 bool SMDS_Mesh0DElement::ChangeNode (const SMDS_MeshNode * node)
150 {
151   myNode = node;
152   return true;
153 }