Salome HOME
Merge from V5_1_main 14/05/2010
[modules/smesh.git] / src / SMESHDS / SMESHDS_Script.cxx
1 //  Copyright (C) 2007-2010  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
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::Add0DElement (int New0DElementID, int idnode)
104 {
105   if (myIsEmbeddedMode) {
106     myIsModified = true;
107     return;
108   }
109   getCommand(SMESHDS_Add0DElement)->Add0DElement(New0DElementID, idnode);
110 }
111
112 //=======================================================================
113 //function : 
114 //purpose  : 
115 //=======================================================================
116 void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
117 {
118   if(myIsEmbeddedMode){
119     myIsModified = true;
120     return;
121   }
122   getCommand(SMESHDS_AddEdge)->AddEdge(NewEdgeID, idnode1, idnode2);
123 }
124
125 //=======================================================================
126 //function : 
127 //purpose  : 
128 //=======================================================================
129 void SMESHDS_Script::AddFace(int NewFaceID,
130                              int idnode1, int idnode2, int idnode3)
131 {
132   if(myIsEmbeddedMode){
133     myIsModified = true;
134     return;
135   }
136   getCommand(SMESHDS_AddTriangle)->AddFace(NewFaceID,
137                                            idnode1, idnode2, idnode3);
138 }
139
140 //=======================================================================
141 //function : 
142 //purpose  : 
143 //=======================================================================
144 void SMESHDS_Script::AddFace(int NewFaceID,
145                              int idnode1, int idnode2,
146                              int idnode3, int idnode4)
147 {
148   if(myIsEmbeddedMode){
149     myIsModified = true;
150     return;
151   }
152   getCommand(SMESHDS_AddQuadrangle)->AddFace(NewFaceID,
153                                              idnode1, idnode2,
154                                              idnode3, idnode4);
155 }
156
157 //=======================================================================
158 //function : 
159 //purpose  : 
160 //=======================================================================
161 void SMESHDS_Script::AddVolume(int NewID,
162                                int idnode1, int idnode2,
163                                int idnode3, int idnode4)
164 {
165   if(myIsEmbeddedMode){
166     myIsModified = true;
167     return;
168   }
169   getCommand(SMESHDS_AddTetrahedron)->AddVolume(NewID,
170                                                 idnode1, idnode2,
171                                                 idnode3, idnode4);
172 }
173
174 //=======================================================================
175 //function : 
176 //purpose  : 
177 //=======================================================================
178 void SMESHDS_Script::AddVolume(int NewID,
179                                int idnode1, int idnode2,
180                                int idnode3, int idnode4, int idnode5)
181 {
182   if(myIsEmbeddedMode){
183     myIsModified = true;
184     return;
185   }
186   getCommand(SMESHDS_AddPyramid)->AddVolume(NewID,
187                                             idnode1, idnode2,
188                                             idnode3, idnode4, idnode5);
189 }
190
191 //=======================================================================
192 //function : 
193 //purpose  : 
194 //=======================================================================
195 void SMESHDS_Script::AddVolume(int NewID,
196                                int idnode1, int idnode2, int idnode3,
197                                int idnode4, int idnode5, int idnode6)
198 {
199   if(myIsEmbeddedMode){
200     myIsModified = true;
201     return;
202   }
203   getCommand(SMESHDS_AddPrism)->AddVolume(NewID,
204                                           idnode1, idnode2, idnode3,
205                                           idnode4, idnode5, idnode6);
206 }
207
208 //=======================================================================
209 //function : 
210 //purpose  : 
211 //=======================================================================
212 void SMESHDS_Script::AddVolume(int NewID,
213                                int idnode1, int idnode2, int idnode3, int idnode4,
214                                int idnode5, int idnode6, int idnode7, int idnode8)
215 {
216   if(myIsEmbeddedMode){
217     myIsModified = true;
218     return;
219   }
220   getCommand(SMESHDS_AddHexahedron)->AddVolume(NewID,
221                                                idnode1, idnode2, idnode3, idnode4,
222                                                idnode5, idnode6, idnode7, idnode8);
223 }
224
225 //=======================================================================
226 //function : AddPolygonalFace
227 //purpose  : 
228 //=======================================================================
229 void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector<int> nodes_ids)
230 {
231   if(myIsEmbeddedMode){
232     myIsModified = true;
233     return;
234   }
235   getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids);
236 }
237
238 //=======================================================================
239 //function : AddPolyhedralVolume
240 //purpose  : 
241 //=======================================================================
242 void SMESHDS_Script::AddPolyhedralVolume (int NewID,
243                                           std::vector<int> nodes_ids,
244                                           std::vector<int> quantities)
245 {
246   if(myIsEmbeddedMode){
247     myIsModified = true;
248     return;
249   }
250   getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume
251     (NewID, nodes_ids, quantities);
252 }
253
254 //=======================================================================
255 //function : 
256 //purpose  : 
257 //=======================================================================
258 void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
259 {
260   if(myIsEmbeddedMode){
261     myIsModified = true;
262     return;
263   }
264   getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z);
265 }
266
267 //=======================================================================
268 //function : 
269 //purpose  : 
270 //=======================================================================
271 void SMESHDS_Script::RemoveNode(int ID)
272 {
273   if(myIsEmbeddedMode){
274     myIsModified = true;
275     return;
276   }
277   getCommand(SMESHDS_RemoveNode)->RemoveNode(ID);
278 }
279
280 //=======================================================================
281 //function : 
282 //purpose  : 
283 //=======================================================================
284 void SMESHDS_Script::RemoveElement(int ElementID)
285 {
286   if(myIsEmbeddedMode){
287     myIsModified = true;
288     return;
289   }
290   getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID);
291 }
292
293 //=======================================================================
294 //function : ChangeElementNodes
295 //purpose  : 
296 //=======================================================================
297
298 void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
299 {
300   if(myIsEmbeddedMode){
301     myIsModified = true;
302     return;
303   }
304   getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes );
305 }
306
307 //=======================================================================
308 //function : ChangePolyhedronNodes
309 //purpose  : 
310 //=======================================================================
311 void SMESHDS_Script::ChangePolyhedronNodes (const int        ElementID,
312                                             std::vector<int> nodes_ids,
313                                             std::vector<int> quantities)
314 {
315   if(myIsEmbeddedMode){
316     myIsModified = true;
317     return;
318   }
319   getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes
320     (ElementID, nodes_ids, quantities);
321 }
322
323 //=======================================================================
324 //function : Renumber
325 //purpose  : 
326 //=======================================================================
327 void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
328 {
329   if(myIsEmbeddedMode){
330     myIsModified = true;
331     return;
332   }
333   getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID );
334 }
335
336 //=======================================================================
337 //function : ClearMesh
338 //purpose  : 
339 //=======================================================================
340 void SMESHDS_Script::ClearMesh ()
341 {
342   if(myIsEmbeddedMode){
343     myIsModified = true;
344     return;
345   }
346   Clear();// previous commands become useless to reproduce on client side
347   getCommand(SMESHDS_ClearAll);
348 }
349
350 //=======================================================================
351 //function : 
352 //purpose  : 
353 //=======================================================================
354 void SMESHDS_Script::Clear()
355 {
356   list<SMESHDS_Command*>::iterator anIt = myCommands.begin();
357   for (; anIt != myCommands.end(); anIt++) {
358     delete (*anIt);
359   }
360   myCommands.clear();
361 }
362
363 //=======================================================================
364 //function : 
365 //purpose  : 
366 //=======================================================================
367 const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
368 {
369   return myCommands;
370 }
371
372
373 //********************************************************************
374 //*****             Methods for quadratic elements              ******
375 //********************************************************************
376
377 //=======================================================================
378 //function : AddEdge
379 //purpose  : 
380 //=======================================================================
381 void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
382 {
383   if(myIsEmbeddedMode){
384     myIsModified = true;
385     return;
386   }
387   getCommand(SMESHDS_AddQuadEdge)->AddEdge(NewEdgeID, n1, n2, n12);
388 }
389
390 //=======================================================================
391 //function : AddFace
392 //purpose  : 
393 //=======================================================================
394 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
395                              int n12, int n23, int n31)
396 {
397   if(myIsEmbeddedMode){
398     myIsModified = true;
399     return;
400   }
401   getCommand(SMESHDS_AddQuadTriangle)->AddFace(NewFaceID, n1, n2, n3,
402                                                n12, n23, n31);
403 }
404
405 //=======================================================================
406 //function : AddFace
407 //purpose  : 
408 //=======================================================================
409 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
410                              int n12, int n23, int n34, int n41)
411 {
412   if(myIsEmbeddedMode){
413     myIsModified = true;
414     return;
415   }
416   getCommand(SMESHDS_AddQuadQuadrangle)->AddFace(NewFaceID, n1, n2, n3, n4,
417                                                  n12, n23, n34, n41);
418 }
419
420 //=======================================================================
421 //function : AddVolume
422 //purpose  : 
423 //=======================================================================
424 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
425                                int n12, int n23, int n31,
426                                int n14, int n24, int n34)
427 {
428   if(myIsEmbeddedMode){
429     myIsModified = true;
430     return;
431   }
432   getCommand(SMESHDS_AddQuadTetrahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
433                                                     n12, n23, n31,
434                                                     n14, n24, n34);
435 }
436
437 //=======================================================================
438 //function : AddVolume
439 //purpose  : 
440 //=======================================================================
441 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
442                                int n5, int n12, int n23, int n34, int n41,
443                                int n15, int n25, int n35, int n45)
444 {
445   if(myIsEmbeddedMode){
446     myIsModified = true;
447     return;
448   }
449   getCommand(SMESHDS_AddQuadPyramid)->AddVolume(NewVolID, n1, n2, n3, n4, n5,
450                                                 n12, n23, n34, n41,
451                                                 n15, n25, n35, n45);
452 }
453
454 //=======================================================================
455 //function : AddVolume
456 //purpose  : 
457 //=======================================================================
458 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
459                                 int n5,int n6, int n12, int n23, int n31,
460                                 int n45, int n56, int n64,
461                                 int n14, int n25, int n36)
462 {
463   if(myIsEmbeddedMode){
464     myIsModified = true;
465     return;
466   }
467   getCommand(SMESHDS_AddQuadPentahedron)->AddVolume(NewVolID, n1,n2,n3,n4,n5,n6,
468                                                     n12, n23, n31,
469                                                     n45, n56, n64,
470                                                     n14, n25, n36);
471 }
472
473 //=======================================================================
474 //function : AddVolume
475 //purpose  : 
476 //=======================================================================
477 void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
478                                int n4, int n5, int n6, int n7, int n8,
479                                int n12, int n23, int n34, int n41,
480                                int n56, int n67, int n78, int n85,
481                                int n15, int n26, int n37, int n48)
482 {
483   if(myIsEmbeddedMode){
484     myIsModified = true;
485     return;
486   }
487   getCommand(SMESHDS_AddQuadHexahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
488                                                    n5, n6, n7, n8,
489                                                    n12, n23, n34, n41,
490                                                    n56, n67, n78, n85,
491                                                    n15, n26, n37, n48);
492 }
493