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