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