Salome HOME
Merge from V6_3_BR 06/06/2011
[modules/smesh.git] / src / SMESHDS / SMESHDS_Script.cxx
1 // Copyright (C) 2007-2011  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 : AddPolygonalFace
230 //purpose  : 
231 //=======================================================================
232 void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector<int> nodes_ids)
233 {
234   if(myIsEmbeddedMode){
235     myIsModified = true;
236     return;
237   }
238   getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids);
239 }
240
241 //=======================================================================
242 //function : AddPolyhedralVolume
243 //purpose  : 
244 //=======================================================================
245 void SMESHDS_Script::AddPolyhedralVolume (int NewID,
246                                           std::vector<int> nodes_ids,
247                                           std::vector<int> quantities)
248 {
249   if(myIsEmbeddedMode){
250     myIsModified = true;
251     return;
252   }
253   getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume
254     (NewID, nodes_ids, quantities);
255 }
256
257 //=======================================================================
258 //function : 
259 //purpose  : 
260 //=======================================================================
261 void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
262 {
263   if(myIsEmbeddedMode){
264     myIsModified = true;
265     return;
266   }
267   getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z);
268 }
269
270 //=======================================================================
271 //function : 
272 //purpose  : 
273 //=======================================================================
274 void SMESHDS_Script::RemoveNode(int ID)
275 {
276   if(myIsEmbeddedMode){
277     myIsModified = true;
278     return;
279   }
280   getCommand(SMESHDS_RemoveNode)->RemoveNode(ID);
281 }
282
283 //=======================================================================
284 //function : 
285 //purpose  : 
286 //=======================================================================
287 void SMESHDS_Script::RemoveElement(int ElementID)
288 {
289   if(myIsEmbeddedMode){
290     myIsModified = true;
291     return;
292   }
293   getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID);
294 }
295
296 //=======================================================================
297 //function : ChangeElementNodes
298 //purpose  : 
299 //=======================================================================
300
301 void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
302 {
303   if(myIsEmbeddedMode){
304     myIsModified = true;
305     return;
306   }
307   getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes );
308 }
309
310 //=======================================================================
311 //function : ChangePolyhedronNodes
312 //purpose  : 
313 //=======================================================================
314 void SMESHDS_Script::ChangePolyhedronNodes (const int        ElementID,
315                                             std::vector<int> nodes_ids,
316                                             std::vector<int> quantities)
317 {
318   if(myIsEmbeddedMode){
319     myIsModified = true;
320     return;
321   }
322   getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes
323     (ElementID, nodes_ids, quantities);
324 }
325
326 //=======================================================================
327 //function : Renumber
328 //purpose  : 
329 //=======================================================================
330 void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
331 {
332   if(myIsEmbeddedMode){
333     myIsModified = true;
334     return;
335   }
336   getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID );
337 }
338
339 //=======================================================================
340 //function : ClearMesh
341 //purpose  : 
342 //=======================================================================
343 void SMESHDS_Script::ClearMesh ()
344 {
345   if(myIsEmbeddedMode){
346     myIsModified = true;
347     return;
348   }
349   Clear();// previous commands become useless to reproduce on client side
350   getCommand(SMESHDS_ClearAll);
351 }
352
353 //=======================================================================
354 //function : 
355 //purpose  : 
356 //=======================================================================
357 void SMESHDS_Script::Clear()
358 {
359   list<SMESHDS_Command*>::iterator anIt = myCommands.begin();
360   for (; anIt != myCommands.end(); anIt++) {
361     delete (*anIt);
362   }
363   myCommands.clear();
364 }
365
366 //=======================================================================
367 //function : 
368 //purpose  : 
369 //=======================================================================
370 const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
371 {
372   return myCommands;
373 }
374
375
376 //********************************************************************
377 //*****             Methods for quadratic elements              ******
378 //********************************************************************
379
380 //=======================================================================
381 //function : AddEdge
382 //purpose  : 
383 //=======================================================================
384 void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
385 {
386   if(myIsEmbeddedMode){
387     myIsModified = true;
388     return;
389   }
390   getCommand(SMESHDS_AddQuadEdge)->AddEdge(NewEdgeID, n1, n2, n12);
391 }
392
393 //=======================================================================
394 //function : AddFace
395 //purpose  : 
396 //=======================================================================
397 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
398                              int n12, int n23, int n31)
399 {
400   if(myIsEmbeddedMode){
401     myIsModified = true;
402     return;
403   }
404   getCommand(SMESHDS_AddQuadTriangle)->AddFace(NewFaceID, n1, n2, n3,
405                                                n12, n23, n31);
406 }
407
408 //=======================================================================
409 //function : AddFace
410 //purpose  : 
411 //=======================================================================
412 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
413                              int n12, int n23, int n34, int n41)
414 {
415   if(myIsEmbeddedMode){
416     myIsModified = true;
417     return;
418   }
419   getCommand(SMESHDS_AddQuadQuadrangle)->AddFace(NewFaceID, n1, n2, n3, n4,
420                                                  n12, n23, n34, n41);
421 }
422
423 //=======================================================================
424 //function : AddVolume
425 //purpose  : 
426 //=======================================================================
427 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
428                                int n12, int n23, int n31,
429                                int n14, int n24, int n34)
430 {
431   if(myIsEmbeddedMode){
432     myIsModified = true;
433     return;
434   }
435   getCommand(SMESHDS_AddQuadTetrahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
436                                                     n12, n23, n31,
437                                                     n14, n24, n34);
438 }
439
440 //=======================================================================
441 //function : AddVolume
442 //purpose  : 
443 //=======================================================================
444 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
445                                int n5, int n12, int n23, int n34, int n41,
446                                int n15, int n25, int n35, int n45)
447 {
448   if(myIsEmbeddedMode){
449     myIsModified = true;
450     return;
451   }
452   getCommand(SMESHDS_AddQuadPyramid)->AddVolume(NewVolID, n1, n2, n3, n4, n5,
453                                                 n12, n23, n34, n41,
454                                                 n15, n25, n35, n45);
455 }
456
457 //=======================================================================
458 //function : AddVolume
459 //purpose  : 
460 //=======================================================================
461 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
462                                 int n5,int n6, int n12, int n23, int n31,
463                                 int n45, int n56, int n64,
464                                 int n14, int n25, int n36)
465 {
466   if(myIsEmbeddedMode){
467     myIsModified = true;
468     return;
469   }
470   getCommand(SMESHDS_AddQuadPentahedron)->AddVolume(NewVolID, n1,n2,n3,n4,n5,n6,
471                                                     n12, n23, n31,
472                                                     n45, n56, n64,
473                                                     n14, n25, n36);
474 }
475
476 //=======================================================================
477 //function : AddVolume
478 //purpose  : 
479 //=======================================================================
480 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
481                                int n4, int n5, int n6, int n7, int n8,
482                                int n12, int n23, int n34, int n41,
483                                int n56, int n67, int n78, int n85,
484                                int n15, int n26, int n37, int n48)
485 {
486   if(myIsEmbeddedMode){
487     myIsModified = true;
488     return;
489   }
490   getCommand(SMESHDS_AddQuadHexahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
491                                                    n5, n6, n7, n8,
492                                                    n12, n23, n34, n41,
493                                                    n56, n67, n78, n85,
494                                                    n15, n26, n37, n48);
495 }
496