Salome HOME
0019957: EDF 785 SMESH: Convert Quadratic and Group on GEOM
[modules/smesh.git] / src / SMESHDS / SMESHDS_Script.cxx
1 //  SMESH SMESHDS : management of mesh data and SMESH document
2 //
3 //  Copyright (C) 2003  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 //
23 //
24 //  File   : SMESH_Script.cxx
25 //  Author : Yves FRICAUD, OCC
26 //  Module : SMESH
27 //  $Header: 
28
29 #include "SMESHDS_Script.hxx"
30
31 using namespace std;
32
33 //=======================================================================
34 //function : Constructor
35 //purpose  : 
36 //=======================================================================
37 SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode):
38   myIsEmbeddedMode(theIsEmbeddedMode)
39 {}
40
41 //=======================================================================
42 //function : Destructor
43 //purpose  : 
44 //=======================================================================
45 SMESHDS_Script::~SMESHDS_Script()
46 {
47   Clear();
48 }
49
50 //=======================================================================
51 void SMESHDS_Script::SetModified(bool theModified)
52 {
53   myIsModified = theModified;
54 }
55
56 //=======================================================================
57 bool SMESHDS_Script::IsModified()
58 {
59   return myIsModified;
60 }
61
62 //=======================================================================
63 //function : getCommand
64 //purpose  : 
65 //=======================================================================
66 SMESHDS_Command* SMESHDS_Script::getCommand(const SMESHDS_CommandType aType)
67 {
68   SMESHDS_Command* com;
69   if (myCommands.empty())
70   {
71     com = new SMESHDS_Command(aType);
72     myCommands.insert(myCommands.end(),com);
73   }
74   else
75   {
76     com = myCommands.back();
77     if (com->GetType() != aType)
78     {
79       com = new SMESHDS_Command(aType);
80       myCommands.insert(myCommands.end(),com);
81     }
82   }
83   return com;
84 }
85
86 //=======================================================================
87 //function : 
88 //purpose  : 
89 //=======================================================================
90 void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z)
91 {
92   if(myIsEmbeddedMode){
93     myIsModified = true;
94     return;
95   }
96   getCommand(SMESHDS_AddNode)->AddNode(NewNodeID, x, y, z);
97 }
98
99 //=======================================================================
100 //function : 
101 //purpose  : 
102 //=======================================================================
103 void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
104 {
105   if(myIsEmbeddedMode){
106     myIsModified = true;
107     return;
108   }
109   getCommand(SMESHDS_AddEdge)->AddEdge(NewEdgeID, idnode1, idnode2);
110 }
111
112 //=======================================================================
113 //function : 
114 //purpose  : 
115 //=======================================================================
116 void SMESHDS_Script::AddFace(int NewFaceID,
117                              int idnode1, int idnode2, int idnode3)
118 {
119   if(myIsEmbeddedMode){
120     myIsModified = true;
121     return;
122   }
123   getCommand(SMESHDS_AddTriangle)->AddFace(NewFaceID,
124                                            idnode1, idnode2, idnode3);
125 }
126
127 //=======================================================================
128 //function : 
129 //purpose  : 
130 //=======================================================================
131 void SMESHDS_Script::AddFace(int NewFaceID,
132                              int idnode1, int idnode2,
133                              int idnode3, int idnode4)
134 {
135   if(myIsEmbeddedMode){
136     myIsModified = true;
137     return;
138   }
139   getCommand(SMESHDS_AddQuadrangle)->AddFace(NewFaceID,
140                                              idnode1, idnode2,
141                                              idnode3, idnode4);
142 }
143
144 //=======================================================================
145 //function : 
146 //purpose  : 
147 //=======================================================================
148 void SMESHDS_Script::AddVolume(int NewID,
149                                int idnode1, int idnode2,
150                                int idnode3, int idnode4)
151 {
152   if(myIsEmbeddedMode){
153     myIsModified = true;
154     return;
155   }
156   getCommand(SMESHDS_AddTetrahedron)->AddVolume(NewID,
157                                                 idnode1, idnode2,
158                                                 idnode3, idnode4);
159 }
160
161 //=======================================================================
162 //function : 
163 //purpose  : 
164 //=======================================================================
165 void SMESHDS_Script::AddVolume(int NewID,
166                                int idnode1, int idnode2,
167                                int idnode3, int idnode4, int idnode5)
168 {
169   if(myIsEmbeddedMode){
170     myIsModified = true;
171     return;
172   }
173   getCommand(SMESHDS_AddPyramid)->AddVolume(NewID,
174                                             idnode1, idnode2,
175                                             idnode3, idnode4, idnode5);
176 }
177
178 //=======================================================================
179 //function : 
180 //purpose  : 
181 //=======================================================================
182 void SMESHDS_Script::AddVolume(int NewID,
183                                int idnode1, int idnode2, int idnode3,
184                                int idnode4, int idnode5, int idnode6)
185 {
186   if(myIsEmbeddedMode){
187     myIsModified = true;
188     return;
189   }
190   getCommand(SMESHDS_AddPrism)->AddVolume(NewID,
191                                           idnode1, idnode2, idnode3,
192                                           idnode4, idnode5, idnode6);
193 }
194
195 //=======================================================================
196 //function : 
197 //purpose  : 
198 //=======================================================================
199 void SMESHDS_Script::AddVolume(int NewID,
200                                int idnode1, int idnode2, int idnode3, int idnode4,
201                                int idnode5, int idnode6, int idnode7, int idnode8)
202 {
203   if(myIsEmbeddedMode){
204     myIsModified = true;
205     return;
206   }
207   getCommand(SMESHDS_AddHexahedron)->AddVolume(NewID,
208                                                idnode1, idnode2, idnode3, idnode4,
209                                                idnode5, idnode6, idnode7, idnode8);
210 }
211
212 //=======================================================================
213 //function : AddPolygonalFace
214 //purpose  : 
215 //=======================================================================
216 void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector<int> nodes_ids)
217 {
218   if(myIsEmbeddedMode){
219     myIsModified = true;
220     return;
221   }
222   getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids);
223 }
224
225 //=======================================================================
226 //function : AddPolyhedralVolume
227 //purpose  : 
228 //=======================================================================
229 void SMESHDS_Script::AddPolyhedralVolume (int NewID,
230                                           std::vector<int> nodes_ids,
231                                           std::vector<int> quantities)
232 {
233   if(myIsEmbeddedMode){
234     myIsModified = true;
235     return;
236   }
237   getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume
238     (NewID, nodes_ids, quantities);
239 }
240
241 //=======================================================================
242 //function : 
243 //purpose  : 
244 //=======================================================================
245 void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
246 {
247   if(myIsEmbeddedMode){
248     myIsModified = true;
249     return;
250   }
251   getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z);
252 }
253
254 //=======================================================================
255 //function : 
256 //purpose  : 
257 //=======================================================================
258 void SMESHDS_Script::RemoveNode(int ID)
259 {
260   if(myIsEmbeddedMode){
261     myIsModified = true;
262     return;
263   }
264   getCommand(SMESHDS_RemoveNode)->RemoveNode(ID);
265 }
266
267 //=======================================================================
268 //function : 
269 //purpose  : 
270 //=======================================================================
271 void SMESHDS_Script::RemoveElement(int ElementID)
272 {
273   if(myIsEmbeddedMode){
274     myIsModified = true;
275     return;
276   }
277   getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID);
278 }
279
280 //=======================================================================
281 //function : ChangeElementNodes
282 //purpose  : 
283 //=======================================================================
284
285 void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
286 {
287   if(myIsEmbeddedMode){
288     myIsModified = true;
289     return;
290   }
291   getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes );
292 }
293
294 //=======================================================================
295 //function : ChangePolyhedronNodes
296 //purpose  : 
297 //=======================================================================
298 void SMESHDS_Script::ChangePolyhedronNodes (const int        ElementID,
299                                             std::vector<int> nodes_ids,
300                                             std::vector<int> quantities)
301 {
302   if(myIsEmbeddedMode){
303     myIsModified = true;
304     return;
305   }
306   getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes
307     (ElementID, nodes_ids, quantities);
308 }
309
310 //=======================================================================
311 //function : Renumber
312 //purpose  : 
313 //=======================================================================
314 void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
315 {
316   if(myIsEmbeddedMode){
317     myIsModified = true;
318     return;
319   }
320   getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID );
321 }
322
323 //=======================================================================
324 //function : ClearMesh
325 //purpose  : 
326 //=======================================================================
327 void SMESHDS_Script::ClearMesh ()
328 {
329   if(myIsEmbeddedMode){
330     myIsModified = true;
331     return;
332   }
333   Clear();// previous commands become useless to reproduce on client side
334   getCommand(SMESHDS_ClearAll);
335 }
336
337 //=======================================================================
338 //function : 
339 //purpose  : 
340 //=======================================================================
341 void SMESHDS_Script::Clear()
342 {
343   list<SMESHDS_Command*>::iterator anIt = myCommands.begin();
344   for (; anIt != myCommands.end(); anIt++) {
345     delete (*anIt);
346   }
347   myCommands.clear();
348 }
349
350 //=======================================================================
351 //function : 
352 //purpose  : 
353 //=======================================================================
354 const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
355 {
356   return myCommands;
357 }
358
359
360 //********************************************************************
361 //*****             Methods for quadratic elements              ******
362 //********************************************************************
363
364 //=======================================================================
365 //function : AddEdge
366 //purpose  : 
367 //=======================================================================
368 void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
369 {
370   if(myIsEmbeddedMode){
371     myIsModified = true;
372     return;
373   }
374   getCommand(SMESHDS_AddQuadEdge)->AddEdge(NewEdgeID, n1, n2, n12);
375 }
376
377 //=======================================================================
378 //function : AddFace
379 //purpose  : 
380 //=======================================================================
381 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
382                              int n12, int n23, int n31)
383 {
384   if(myIsEmbeddedMode){
385     myIsModified = true;
386     return;
387   }
388   getCommand(SMESHDS_AddQuadTriangle)->AddFace(NewFaceID, n1, n2, n3,
389                                                n12, n23, n31);
390 }
391
392 //=======================================================================
393 //function : AddFace
394 //purpose  : 
395 //=======================================================================
396 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
397                              int n12, int n23, int n34, int n41)
398 {
399   if(myIsEmbeddedMode){
400     myIsModified = true;
401     return;
402   }
403   getCommand(SMESHDS_AddQuadQuadrangle)->AddFace(NewFaceID, n1, n2, n3, n4,
404                                                  n12, n23, n34, n41);
405 }
406
407 //=======================================================================
408 //function : AddVolume
409 //purpose  : 
410 //=======================================================================
411 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
412                                int n12, int n23, int n31,
413                                int n14, int n24, int n34)
414 {
415   if(myIsEmbeddedMode){
416     myIsModified = true;
417     return;
418   }
419   getCommand(SMESHDS_AddQuadTetrahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
420                                                     n12, n23, n31,
421                                                     n14, n24, n34);
422 }
423
424 //=======================================================================
425 //function : AddVolume
426 //purpose  : 
427 //=======================================================================
428 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
429                                int n5, int n12, int n23, int n34, int n41,
430                                int n15, int n25, int n35, int n45)
431 {
432   if(myIsEmbeddedMode){
433     myIsModified = true;
434     return;
435   }
436   getCommand(SMESHDS_AddQuadPyramid)->AddVolume(NewVolID, n1, n2, n3, n4, n5,
437                                                 n12, n23, n34, n41,
438                                                 n15, n25, n35, n45);
439 }
440
441 //=======================================================================
442 //function : AddVolume
443 //purpose  : 
444 //=======================================================================
445 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
446                                 int n5,int n6, int n12, int n23, int n31,
447                                 int n45, int n56, int n64,
448                                 int n14, int n25, int n36)
449 {
450   if(myIsEmbeddedMode){
451     myIsModified = true;
452     return;
453   }
454   getCommand(SMESHDS_AddQuadPentahedron)->AddVolume(NewVolID, n1,n2,n3,n4,n5,n6,
455                                                     n12, n23, n31,
456                                                     n45, n56, n64,
457                                                     n14, n25, n36);
458 }
459
460 //=======================================================================
461 //function : AddVolume
462 //purpose  : 
463 //=======================================================================
464 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
465                                int n4, int n5, int n6, int n7, int n8,
466                                int n12, int n23, int n34, int n41,
467                                int n56, int n67, int n78, int n85,
468                                int n15, int n26, int n37, int n48)
469 {
470   if(myIsEmbeddedMode){
471     myIsModified = true;
472     return;
473   }
474   getCommand(SMESHDS_AddQuadHexahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
475                                                    n5, n6, n7, n8,
476                                                    n12, n23, n34, n41,
477                                                    n56, n67, n78, n85,
478                                                    n15, n26, n37, n48);
479 }
480