1 // File: SMDS_QuadraticVolumeOfNodes.cxx
2 // Created: 17.01.06 09:46:11
4 // Copyright: Open CASCADE 2006
6 #include "SMDS_QuadraticVolumeOfNodes.hxx"
8 #include "SMDS_IteratorOfElements.hxx"
9 #include "SMDS_MeshNode.hxx"
11 #include "utilities.h"
16 //=======================================================================
17 //function : SMDS_QuadraticVolumeOfNodes()
18 //purpose : Constructor tetrahedron of 10 nodes
19 //=======================================================================
21 SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
22 (const SMDS_MeshNode * n1,
23 const SMDS_MeshNode * n2,
24 const SMDS_MeshNode * n3,
25 const SMDS_MeshNode * n4,
26 const SMDS_MeshNode * n12,
27 const SMDS_MeshNode * n23,
28 const SMDS_MeshNode * n31,
29 const SMDS_MeshNode * n14,
30 const SMDS_MeshNode * n24,
31 const SMDS_MeshNode * n34)
33 myNodes.push_back(n1);
34 myNodes.push_back(n2);
35 myNodes.push_back(n3);
36 myNodes.push_back(n4);
37 myNodes.push_back(n12);
38 myNodes.push_back(n23);
39 myNodes.push_back(n31);
40 myNodes.push_back(n14);
41 myNodes.push_back(n24);
42 myNodes.push_back(n34);
46 //=======================================================================
47 //function : SMDS_QuadraticVolumeOfNodes()
48 //purpose : Constructor pyramid of 13 nodes
49 //=======================================================================
51 SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
52 (const SMDS_MeshNode * n1,
53 const SMDS_MeshNode * n2,
54 const SMDS_MeshNode * n3,
55 const SMDS_MeshNode * n4,
56 const SMDS_MeshNode * n5,
57 const SMDS_MeshNode * n12,
58 const SMDS_MeshNode * n23,
59 const SMDS_MeshNode * n34,
60 const SMDS_MeshNode * n41,
61 const SMDS_MeshNode * n15,
62 const SMDS_MeshNode * n25,
63 const SMDS_MeshNode * n35,
64 const SMDS_MeshNode * n45)
66 myNodes.push_back(n1);
67 myNodes.push_back(n2);
68 myNodes.push_back(n3);
69 myNodes.push_back(n4);
70 myNodes.push_back(n5);
71 myNodes.push_back(n12);
72 myNodes.push_back(n23);
73 myNodes.push_back(n34);
74 myNodes.push_back(n41);
75 myNodes.push_back(n15);
76 myNodes.push_back(n25);
77 myNodes.push_back(n35);
78 myNodes.push_back(n45);
82 //=======================================================================
83 //function : SMDS_QuadraticVolumeOfNodes()
84 //purpose : Constructor Pentahedron with 15 nodes
85 //=======================================================================
87 SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
88 (const SMDS_MeshNode * n1,
89 const SMDS_MeshNode * n2,
90 const SMDS_MeshNode * n3,
91 const SMDS_MeshNode * n4,
92 const SMDS_MeshNode * n5,
93 const SMDS_MeshNode * n6,
94 const SMDS_MeshNode * n12,
95 const SMDS_MeshNode * n23,
96 const SMDS_MeshNode * n31,
97 const SMDS_MeshNode * n45,
98 const SMDS_MeshNode * n56,
99 const SMDS_MeshNode * n64,
100 const SMDS_MeshNode * n14,
101 const SMDS_MeshNode * n25,
102 const SMDS_MeshNode * n36)
104 myNodes.push_back(n1);
105 myNodes.push_back(n2);
106 myNodes.push_back(n3);
107 myNodes.push_back(n4);
108 myNodes.push_back(n5);
109 myNodes.push_back(n6);
110 myNodes.push_back(n12);
111 myNodes.push_back(n23);
112 myNodes.push_back(n31);
113 myNodes.push_back(n45);
114 myNodes.push_back(n56);
115 myNodes.push_back(n64);
116 myNodes.push_back(n14);
117 myNodes.push_back(n25);
118 myNodes.push_back(n36);
122 //=======================================================================
123 //function : SMDS_QuadraticVolumeOfNodes()
124 //purpose : Constructor Hexahedrons with 20 nodes
125 //=======================================================================
127 SMDS_QuadraticVolumeOfNodes::SMDS_QuadraticVolumeOfNodes
128 (const SMDS_MeshNode * n1,
129 const SMDS_MeshNode * n2,
130 const SMDS_MeshNode * n3,
131 const SMDS_MeshNode * n4,
132 const SMDS_MeshNode * n5,
133 const SMDS_MeshNode * n6,
134 const SMDS_MeshNode * n7,
135 const SMDS_MeshNode * n8,
136 const SMDS_MeshNode * n12,
137 const SMDS_MeshNode * n23,
138 const SMDS_MeshNode * n34,
139 const SMDS_MeshNode * n41,
140 const SMDS_MeshNode * n56,
141 const SMDS_MeshNode * n67,
142 const SMDS_MeshNode * n78,
143 const SMDS_MeshNode * n85,
144 const SMDS_MeshNode * n15,
145 const SMDS_MeshNode * n26,
146 const SMDS_MeshNode * n37,
147 const SMDS_MeshNode * n48)
149 myNodes.push_back(n1);
150 myNodes.push_back(n2);
151 myNodes.push_back(n3);
152 myNodes.push_back(n4);
153 myNodes.push_back(n5);
154 myNodes.push_back(n6);
155 myNodes.push_back(n7);
156 myNodes.push_back(n8);
157 myNodes.push_back(n12);
158 myNodes.push_back(n23);
159 myNodes.push_back(n34);
160 myNodes.push_back(n41);
161 myNodes.push_back(n56);
162 myNodes.push_back(n67);
163 myNodes.push_back(n78);
164 myNodes.push_back(n85);
165 myNodes.push_back(n15);
166 myNodes.push_back(n26);
167 myNodes.push_back(n37);
168 myNodes.push_back(n48);
172 //=======================================================================
173 //function : IsMediumNode
175 //=======================================================================
177 bool SMDS_QuadraticVolumeOfNodes::IsMediumNode(const SMDS_MeshNode* node) const
182 if(myNodes[i]==node) return true;
185 else if(NbNodes()==13) {
188 if(myNodes[i]==node) return true;
191 else if(NbNodes()==15) {
194 if(myNodes[i]==node) return true;
200 if(myNodes[i]==node) return true;
207 //=======================================================================
208 //function : ChangeNodes
210 //=======================================================================
212 bool SMDS_QuadraticVolumeOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[],
215 if( nbNodes==10 || nbNodes==13 || nbNodes==15 || nbNodes==20 ) {
216 myNodes.resize(nbNodes);
218 for(; i<nbNodes; i++) {
219 myNodes[i] = nodes[i];
227 //=======================================================================
230 //=======================================================================
231 int SMDS_QuadraticVolumeOfNodes::NbNodes() const
233 return myNodes.size();
237 //=======================================================================
240 //=======================================================================
241 int SMDS_QuadraticVolumeOfNodes::NbEdges() const
245 else if(NbNodes()==13)
247 else if(NbNodes()==15)
254 //=======================================================================
257 //=======================================================================
258 int SMDS_QuadraticVolumeOfNodes::NbFaces() const
262 else if(NbNodes()==20)
268 //=======================================================================
271 //=======================================================================
272 void SMDS_QuadraticVolumeOfNodes::Print(ostream & OS) const
274 OS << "quadratic volume <" << GetID() << " > : ";
275 int i, nbNodes = myNodes.size();
276 for (i = 0; i < nbNodes - 1; i++)
277 OS << myNodes[i] << ",";
278 OS << myNodes[i] << ") " << endl;
282 //=======================================================================
283 //function : elementsIterator
285 //=======================================================================
286 class SMDS_QuadraticVolumeOfNodes_MyIterator:public SMDS_ElemIterator
288 const std::vector<const SMDS_MeshNode *> mySet;
291 SMDS_QuadraticVolumeOfNodes_MyIterator(const std::vector<const SMDS_MeshNode *> s):
296 return index < mySet.size();
299 const SMDS_MeshElement* next()
302 return mySet[index-1];
306 SMDS_ElemIteratorPtr SMDS_QuadraticVolumeOfNodes::elementsIterator
307 (SMDSAbs_ElementType type) const
312 return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
314 return SMDS_ElemIteratorPtr(new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes));
316 MESSAGE("Error : edge iterator for SMDS_QuadraticVolumeOfNodes not implemented");
319 MESSAGE("Error : face iterator for SMDS_QuadraticVolumeOfNodes not implemented");
322 return SMDS_ElemIteratorPtr
323 (new SMDS_IteratorOfElements
324 (this,type,SMDS_ElemIteratorPtr
325 (new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes))));
327 return SMDS_ElemIteratorPtr();