1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // SMESH SMESHDS : management of mesh data and SMESH document
23 // File : SMESH_Script.cxx
24 // Author : Yves FRICAUD, OCC
28 #include "SMESHDS_Script.hxx"
32 //=======================================================================
33 //function : Constructor
35 //=======================================================================
36 SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode):
37 myIsEmbeddedMode(theIsEmbeddedMode)
40 //=======================================================================
41 //function : Destructor
43 //=======================================================================
44 SMESHDS_Script::~SMESHDS_Script()
49 //=======================================================================
50 void SMESHDS_Script::SetModified(bool theModified)
52 myIsModified = theModified;
55 //=======================================================================
56 bool SMESHDS_Script::IsModified()
61 //=======================================================================
62 //function : getCommand
64 //=======================================================================
65 SMESHDS_Command* SMESHDS_Script::getCommand(const SMESHDS_CommandType aType)
68 if (myCommands.empty())
70 com = new SMESHDS_Command(aType);
71 myCommands.insert(myCommands.end(),com);
75 com = myCommands.back();
76 if (com->GetType() != aType)
78 com = new SMESHDS_Command(aType);
79 myCommands.insert(myCommands.end(),com);
85 //=======================================================================
88 //=======================================================================
89 void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z)
95 getCommand(SMESHDS_AddNode)->AddNode(NewNodeID, x, y, z);
98 //=======================================================================
101 //=======================================================================
102 void SMESHDS_Script::Add0DElement (int New0DElementID, int idnode)
104 if (myIsEmbeddedMode) {
108 getCommand(SMESHDS_Add0DElement)->Add0DElement(New0DElementID, idnode);
111 //=======================================================================
114 //=======================================================================
115 void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
117 if(myIsEmbeddedMode){
121 getCommand(SMESHDS_AddEdge)->AddEdge(NewEdgeID, idnode1, idnode2);
124 //=======================================================================
127 //=======================================================================
128 void SMESHDS_Script::AddFace(int NewFaceID,
129 int idnode1, int idnode2, int idnode3)
131 if(myIsEmbeddedMode){
135 getCommand(SMESHDS_AddTriangle)->AddFace(NewFaceID,
136 idnode1, idnode2, idnode3);
139 //=======================================================================
142 //=======================================================================
143 void SMESHDS_Script::AddFace(int NewFaceID,
144 int idnode1, int idnode2,
145 int idnode3, int idnode4)
147 if(myIsEmbeddedMode){
151 getCommand(SMESHDS_AddQuadrangle)->AddFace(NewFaceID,
156 //=======================================================================
159 //=======================================================================
160 void SMESHDS_Script::AddVolume(int NewID,
161 int idnode1, int idnode2,
162 int idnode3, int idnode4)
164 if(myIsEmbeddedMode){
168 getCommand(SMESHDS_AddTetrahedron)->AddVolume(NewID,
173 //=======================================================================
176 //=======================================================================
177 void SMESHDS_Script::AddVolume(int NewID,
178 int idnode1, int idnode2,
179 int idnode3, int idnode4, int idnode5)
181 if(myIsEmbeddedMode){
185 getCommand(SMESHDS_AddPyramid)->AddVolume(NewID,
187 idnode3, idnode4, idnode5);
190 //=======================================================================
193 //=======================================================================
194 void SMESHDS_Script::AddVolume(int NewID,
195 int idnode1, int idnode2, int idnode3,
196 int idnode4, int idnode5, int idnode6)
198 if(myIsEmbeddedMode){
202 getCommand(SMESHDS_AddPrism)->AddVolume(NewID,
203 idnode1, idnode2, idnode3,
204 idnode4, idnode5, idnode6);
207 //=======================================================================
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)
215 if(myIsEmbeddedMode){
219 getCommand(SMESHDS_AddHexahedron)->AddVolume(NewID,
220 idnode1, idnode2, idnode3, idnode4,
221 idnode5, idnode6, idnode7, idnode8);
224 //=======================================================================
225 //function : AddPolygonalFace
227 //=======================================================================
228 void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector<int> nodes_ids)
230 if(myIsEmbeddedMode){
234 getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids);
237 //=======================================================================
238 //function : AddPolyhedralVolume
240 //=======================================================================
241 void SMESHDS_Script::AddPolyhedralVolume (int NewID,
242 std::vector<int> nodes_ids,
243 std::vector<int> quantities)
245 if(myIsEmbeddedMode){
249 getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume
250 (NewID, nodes_ids, quantities);
253 //=======================================================================
256 //=======================================================================
257 void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
259 if(myIsEmbeddedMode){
263 getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z);
266 //=======================================================================
269 //=======================================================================
270 void SMESHDS_Script::RemoveNode(int ID)
272 if(myIsEmbeddedMode){
276 getCommand(SMESHDS_RemoveNode)->RemoveNode(ID);
279 //=======================================================================
282 //=======================================================================
283 void SMESHDS_Script::RemoveElement(int ElementID)
285 if(myIsEmbeddedMode){
289 getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID);
292 //=======================================================================
293 //function : ChangeElementNodes
295 //=======================================================================
297 void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
299 if(myIsEmbeddedMode){
303 getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes );
306 //=======================================================================
307 //function : ChangePolyhedronNodes
309 //=======================================================================
310 void SMESHDS_Script::ChangePolyhedronNodes (const int ElementID,
311 std::vector<int> nodes_ids,
312 std::vector<int> quantities)
314 if(myIsEmbeddedMode){
318 getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes
319 (ElementID, nodes_ids, quantities);
322 //=======================================================================
323 //function : Renumber
325 //=======================================================================
326 void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
328 if(myIsEmbeddedMode){
332 getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID );
335 //=======================================================================
336 //function : ClearMesh
338 //=======================================================================
339 void SMESHDS_Script::ClearMesh ()
341 if(myIsEmbeddedMode){
345 Clear();// previous commands become useless to reproduce on client side
346 getCommand(SMESHDS_ClearAll);
349 //=======================================================================
352 //=======================================================================
353 void SMESHDS_Script::Clear()
355 list<SMESHDS_Command*>::iterator anIt = myCommands.begin();
356 for (; anIt != myCommands.end(); anIt++) {
362 //=======================================================================
365 //=======================================================================
366 const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
372 //********************************************************************
373 //***** Methods for quadratic elements ******
374 //********************************************************************
376 //=======================================================================
379 //=======================================================================
380 void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
382 if(myIsEmbeddedMode){
386 getCommand(SMESHDS_AddQuadEdge)->AddEdge(NewEdgeID, n1, n2, n12);
389 //=======================================================================
392 //=======================================================================
393 void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
394 int n12, int n23, int n31)
396 if(myIsEmbeddedMode){
400 getCommand(SMESHDS_AddQuadTriangle)->AddFace(NewFaceID, n1, n2, n3,
404 //=======================================================================
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)
411 if(myIsEmbeddedMode){
415 getCommand(SMESHDS_AddQuadQuadrangle)->AddFace(NewFaceID, n1, n2, n3, n4,
419 //=======================================================================
420 //function : AddVolume
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)
427 if(myIsEmbeddedMode){
431 getCommand(SMESHDS_AddQuadTetrahedron)->AddVolume(NewVolID, n1, n2, n3, n4,
436 //=======================================================================
437 //function : AddVolume
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)
444 if(myIsEmbeddedMode){
448 getCommand(SMESHDS_AddQuadPyramid)->AddVolume(NewVolID, n1, n2, n3, n4, n5,
453 //=======================================================================
454 //function : AddVolume
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)
462 if(myIsEmbeddedMode){
466 getCommand(SMESHDS_AddQuadPentahedron)->AddVolume(NewVolID, n1,n2,n3,n4,n5,n6,
472 //=======================================================================
473 //function : AddVolume
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)
482 if(myIsEmbeddedMode){
486 getCommand(SMESHDS_AddQuadHexahedron)->AddVolume(NewVolID, n1, n2, n3, n4,