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