Salome HOME
Implement quadratic classes
[modules/smesh.git] / src / SMDS / SMDS_QuadraticEdge.cxx
1 // File:      SMDS_QuadraticEdge.cxx
2 // Created:   16.01.06 16:25:42
3 // Author:    Sergey KUUL
4 // Copyright: Open CASCADE 2006
5
6
7 #include "SMDS_QuadraticEdge.hxx"
8
9 #include "SMDS_IteratorOfElements.hxx"
10 #include "SMDS_MeshNode.hxx"
11
12 using namespace std;
13
14 //=======================================================================
15 //function : SMDS_QuadraticEdge
16 //purpose  : 
17 //=======================================================================
18
19 SMDS_QuadraticEdge::SMDS_QuadraticEdge(const SMDS_MeshNode * node1,
20                                        const SMDS_MeshNode * node2,
21                                        const SMDS_MeshNode * node12)
22      :SMDS_MeshEdge(node1,node2)
23 {       
24   myNodes[2]=node12;
25 }
26
27
28 //=======================================================================
29 //function : Print
30 //purpose  : 
31 //=======================================================================
32
33 void SMDS_QuadraticEdge::Print(ostream & OS) const
34 {
35   OS << "quadratic edge <" << GetID() << "> : ( first-" << myNodes[0]
36      << " , last-" << myNodes[1] << " , medium-" << myNodes[2] << ") " << endl;
37 }
38
39
40 //=======================================================================
41 //function : NbNodes
42 //purpose  : 
43 //=======================================================================
44
45 int SMDS_QuadraticEdge::NbNodes() const
46 {
47   return 3;
48 }
49
50
51 //=======================================================================
52 //function : Iterator
53 //purpose  : 
54 //=======================================================================
55
56 class SMDS_QuadraticEdge_MyNodeIterator:public SMDS_ElemIterator
57 {
58   const SMDS_MeshNode *const* myNodes;
59   int myIndex;
60  public:
61   SMDS_QuadraticEdge_MyNodeIterator(const SMDS_MeshNode * const* nodes):
62     myNodes(nodes),myIndex(0) {}
63
64   bool more()
65   {
66     return myIndex<3;
67   }
68
69   const SMDS_MeshElement* next()
70   {
71     myIndex++;
72     return myNodes[myIndex-1];
73   }
74 };
75
76 SMDS_ElemIteratorPtr SMDS_QuadraticEdge::
77         elementsIterator(SMDSAbs_ElementType type) const
78 {
79   switch(type)
80   {
81   case SMDSAbs_Edge:
82     return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge); 
83   case SMDSAbs_Node:
84     return SMDS_ElemIteratorPtr(new SMDS_QuadraticEdge_MyNodeIterator(myNodes));
85   default:
86     return SMDS_ElemIteratorPtr
87       (new SMDS_IteratorOfElements
88        (this,type, SMDS_ElemIteratorPtr(new SMDS_QuadraticEdge_MyNodeIterator(myNodes))));
89   }
90 }
91
92
93 //=======================================================================
94 //function : ChangeNodes
95 //purpose  : 
96 //=======================================================================
97
98 bool SMDS_QuadraticEdge::ChangeNodes(const SMDS_MeshNode * node1,
99                                      const SMDS_MeshNode * node2,
100                                      const SMDS_MeshNode * node12)
101 {
102   myNodes[0]=node1;
103   myNodes[1]=node2;
104   myNodes[2]=node12;
105   return true;
106 }
107
108
109 //=======================================================================
110 //function : IsMediumNode
111 //purpose  : 
112 //=======================================================================
113
114 bool SMDS_QuadraticEdge::IsMediumNode(const SMDS_MeshNode * node) const
115 {
116   return (myNodes[2]==node);
117 }
118
119
120