1 // File: SMDS_QuadraticFaceOfNodes.cxx
2 // Created: 16.01.06 17:12:58
4 // Copyright: Open CASCADE 2006
6 #include "SMDS_QuadraticFaceOfNodes.hxx"
8 #include "SMDS_IteratorOfElements.hxx"
9 #include "SMDS_MeshNode.hxx"
11 #include "utilities.h"
16 //=======================================================================
17 //function : SMDS_QuadraticFaceOfNodes()
18 //purpose : Constructor
19 //=======================================================================
21 SMDS_QuadraticFaceOfNodes::SMDS_QuadraticFaceOfNodes(const SMDS_MeshNode * n1,
22 const SMDS_MeshNode * n2,
23 const SMDS_MeshNode * n3,
24 const SMDS_MeshNode * n12,
25 const SMDS_MeshNode * n23,
26 const SMDS_MeshNode * n31)
28 myNodes.push_back(n1);
29 myNodes.push_back(n2);
30 myNodes.push_back(n3);
31 myNodes.push_back(n12);
32 myNodes.push_back(n23);
33 myNodes.push_back(n31);
37 //=======================================================================
38 //function : SMDS_QuadraticFaceOfNodes()
39 //purpose : Constructor
40 //=======================================================================
42 SMDS_QuadraticFaceOfNodes::SMDS_QuadraticFaceOfNodes(const SMDS_MeshNode * n1,
43 const SMDS_MeshNode * n2,
44 const SMDS_MeshNode * n3,
45 const SMDS_MeshNode * n4,
46 const SMDS_MeshNode * n12,
47 const SMDS_MeshNode * n23,
48 const SMDS_MeshNode * n34,
49 const SMDS_MeshNode * n41)
51 myNodes.push_back(n1);
52 myNodes.push_back(n2);
53 myNodes.push_back(n3);
54 myNodes.push_back(n4);
55 myNodes.push_back(n12);
56 myNodes.push_back(n23);
57 myNodes.push_back(n34);
58 myNodes.push_back(n41);
62 //=======================================================================
63 //function : IsMediumNode
65 //=======================================================================
67 bool SMDS_QuadraticFaceOfNodes::IsMediumNode(const SMDS_MeshNode * node) const
70 for(; i<NbNodes(); i++) {
71 if(myNodes[i]==node) return true;
77 //=======================================================================
78 //function : ChangeNodes
80 //=======================================================================
82 bool SMDS_QuadraticFaceOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
85 if( nbNodes==6 || nbNodes==8 ) {
86 myNodes.resize(nbNodes);
88 for(; i<nbNodes; i++) {
89 myNodes[i] = nodes[i];
97 //=======================================================================
100 //=======================================================================
101 int SMDS_QuadraticFaceOfNodes::NbNodes() const
103 return myNodes.size();
107 //=======================================================================
110 //=======================================================================
111 int SMDS_QuadraticFaceOfNodes::NbEdges() const
117 //=======================================================================
120 //=======================================================================
121 int SMDS_QuadraticFaceOfNodes::NbFaces() const
127 //=======================================================================
130 //=======================================================================
131 void SMDS_QuadraticFaceOfNodes::Print(ostream & OS) const
133 OS << "quadratic face <" << GetID() << " > : ";
134 int i, nbNodes = myNodes.size();
135 for (i = 0; i < nbNodes - 1; i++)
136 OS << myNodes[i] << ",";
137 OS << myNodes[i] << ") " << endl;
141 //=======================================================================
142 //function : interlacedNodesIterator
144 //=======================================================================
145 class SMDS_QuadraticFaceOfNodes_MyInterlacedNodeIterator:public SMDS_NodeIterator
147 const std::vector<const SMDS_MeshNode *> mySet;
150 SMDS_QuadraticFaceOfNodes_MyInterlacedNodeIterator(const std::vector<const SMDS_MeshNode *> s):
155 return index < mySet.size();
158 const SMDS_MeshNode* next()
162 if(mySet.size()==6) {
164 else if(index==3) num=1;
165 else if(index==4) num=4;
166 else if(index==5) num=2;
167 else if(index==6) num=5;
171 else if(index==3) num=1;
172 else if(index==4) num=5;
173 else if(index==5) num=2;
174 else if(index==6) num=6;
175 else if(index==7) num=3;
176 else if(index==8) num=7;
182 SMDS_NodeIteratorPtr SMDS_QuadraticFaceOfNodes::interlacedNodesIterator() const
184 return SMDS_NodeIteratorPtr
185 (new SMDS_QuadraticFaceOfNodes_MyInterlacedNodeIterator(myNodes));
190 //=======================================================================
191 //function : elementsIterator
193 //=======================================================================
194 class SMDS_QuadraticFaceOfNodes_MyIterator:public SMDS_ElemIterator
196 const std::vector<const SMDS_MeshNode *> mySet;
199 SMDS_QuadraticFaceOfNodes_MyIterator(const std::vector<const SMDS_MeshNode *> s):
204 return index < mySet.size();
207 const SMDS_MeshElement* next()
210 return mySet[index-1];
214 SMDS_ElemIteratorPtr SMDS_QuadraticFaceOfNodes::elementsIterator
215 (SMDSAbs_ElementType type) const
220 return SMDS_MeshElement::elementsIterator(SMDSAbs_Face);
222 return SMDS_ElemIteratorPtr(new SMDS_QuadraticFaceOfNodes_MyIterator(myNodes));
224 MESSAGE("Error : edge iterator for SMDS_QuadraticFaceOfNodes not implemented");
227 return SMDS_ElemIteratorPtr
228 (new SMDS_IteratorOfElements
229 (this,type,SMDS_ElemIteratorPtr
230 (new SMDS_QuadraticFaceOfNodes_MyIterator(myNodes))));
232 return SMDS_ElemIteratorPtr();