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_Command.cxx
24 // Author : Yves FRICAUD, OCC
28 #include "SMESHDS_Command.hxx"
30 #include "utilities.h"
34 //=======================================================================
35 //function : Constructor
37 //=======================================================================
38 SMESHDS_Command::SMESHDS_Command(const SMESHDS_CommandType aType):myType(aType),
43 //=======================================================================
44 //function : Destructor
46 //=======================================================================
47 SMESHDS_Command::~SMESHDS_Command()
51 //=======================================================================
54 //=======================================================================
55 void SMESHDS_Command::AddNode(int NewNodeID, double x, double y, double z)
57 if (!myType == SMESHDS_AddNode)
59 MESSAGE("SMESHDS_Command::AddNode : Bad Type");
62 myIntegers.push_back(NewNodeID);
69 //=======================================================================
72 //=======================================================================
73 void SMESHDS_Command::MoveNode(int NodeID, double x, double y, double z)
75 if (!myType == SMESHDS_MoveNode)
77 MESSAGE("SMESHDS_Command::MoveNode : Bad Type");
80 myIntegers.push_back(NodeID);
87 //=======================================================================
90 //=======================================================================
91 void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2)
93 if (!myType == SMESHDS_AddEdge)
95 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
98 myIntegers.push_back(NewEdgeID);
99 myIntegers.push_back(idnode1);
100 myIntegers.push_back(idnode2);
104 //=======================================================================
107 //=======================================================================
108 void SMESHDS_Command::AddFace(int NewFaceID,
109 int idnode1, int idnode2, int idnode3)
111 if (!myType == SMESHDS_AddTriangle)
113 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
116 myIntegers.push_back(NewFaceID);
117 myIntegers.push_back(idnode1);
118 myIntegers.push_back(idnode2);
119 myIntegers.push_back(idnode3);
123 //=======================================================================
126 //=======================================================================
127 void SMESHDS_Command::AddFace(int NewFaceID,
128 int idnode1, int idnode2, int idnode3, int idnode4)
130 if (!myType == SMESHDS_AddQuadrangle)
132 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
135 myIntegers.push_back(NewFaceID);
136 myIntegers.push_back(idnode1);
137 myIntegers.push_back(idnode2);
138 myIntegers.push_back(idnode3);
139 myIntegers.push_back(idnode4);
143 //=======================================================================
146 //=======================================================================
147 void SMESHDS_Command::AddVolume(int NewVolID,
148 int idnode1, int idnode2, int idnode3, int idnode4)
150 if (!myType == SMESHDS_AddTetrahedron)
152 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
155 myIntegers.push_back(NewVolID);
156 myIntegers.push_back(idnode1);
157 myIntegers.push_back(idnode2);
158 myIntegers.push_back(idnode3);
159 myIntegers.push_back(idnode4);
163 //=======================================================================
166 //=======================================================================
167 void SMESHDS_Command::AddVolume(int NewVolID,
168 int idnode1, int idnode2, int idnode3, int idnode4, int idnode5)
170 if (!myType == SMESHDS_AddPyramid)
172 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
175 myIntegers.push_back(NewVolID);
176 myIntegers.push_back(idnode1);
177 myIntegers.push_back(idnode2);
178 myIntegers.push_back(idnode3);
179 myIntegers.push_back(idnode4);
180 myIntegers.push_back(idnode5);
184 //=======================================================================
187 //=======================================================================
188 void SMESHDS_Command::AddVolume(int NewVolID,
190 int idnode2, int idnode3, int idnode4, int idnode5, int idnode6)
192 if (!myType == SMESHDS_AddPrism)
194 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
197 myIntegers.push_back(NewVolID);
198 myIntegers.push_back(idnode1);
199 myIntegers.push_back(idnode2);
200 myIntegers.push_back(idnode3);
201 myIntegers.push_back(idnode4);
202 myIntegers.push_back(idnode5);
203 myIntegers.push_back(idnode6);
207 //=======================================================================
210 //=======================================================================
211 void SMESHDS_Command::AddVolume(int NewVolID,
215 int idnode4, int idnode5, int idnode6, int idnode7, int idnode8)
217 if (!myType == SMESHDS_AddHexahedron)
219 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
222 myIntegers.push_back(NewVolID);
223 myIntegers.push_back(idnode1);
224 myIntegers.push_back(idnode2);
225 myIntegers.push_back(idnode3);
226 myIntegers.push_back(idnode4);
227 myIntegers.push_back(idnode5);
228 myIntegers.push_back(idnode6);
229 myIntegers.push_back(idnode7);
230 myIntegers.push_back(idnode8);
234 //=======================================================================
235 //function : AddPolygonalFace
237 //=======================================================================
238 void SMESHDS_Command::AddPolygonalFace (const int ElementID,
239 std::vector<int> nodes_ids)
241 if (!myType == SMESHDS_AddPolygon) {
242 MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type");
245 myIntegers.push_back(ElementID);
247 int i, nbNodes = nodes_ids.size();
248 myIntegers.push_back(nbNodes);
249 for (i = 0; i < nbNodes; i++) {
250 myIntegers.push_back(nodes_ids[i]);
256 //=======================================================================
257 //function : AddPolyhedralVolume
259 //=======================================================================
260 void SMESHDS_Command::AddPolyhedralVolume (const int ElementID,
261 std::vector<int> nodes_ids,
262 std::vector<int> quantities)
264 if (!myType == SMESHDS_AddPolyhedron) {
265 MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
268 myIntegers.push_back(ElementID);
270 int i, nbNodes = nodes_ids.size();
271 myIntegers.push_back(nbNodes);
272 for (i = 0; i < nbNodes; i++) {
273 myIntegers.push_back(nodes_ids[i]);
276 int nbFaces = quantities.size();
277 myIntegers.push_back(nbFaces);
278 for (i = 0; i < nbFaces; i++) {
279 myIntegers.push_back(quantities[i]);
285 //=======================================================================
288 //=======================================================================
289 void SMESHDS_Command::RemoveNode(int NodeID)
291 if (!myType == SMESHDS_RemoveNode)
293 MESSAGE("SMESHDS_Command::RemoveNode : Bad Type");
296 myIntegers.push_back(NodeID);
300 //=======================================================================
303 //=======================================================================
304 void SMESHDS_Command::RemoveElement(int ElementID)
306 if (!myType == SMESHDS_RemoveElement)
308 MESSAGE("SMESHDS_Command::RemoveElement : Bad Type");
311 myIntegers.push_back(ElementID);
315 //=======================================================================
316 //function : ChangeElementNodes
318 //=======================================================================
320 void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
322 if (!myType == SMESHDS_ChangeElementNodes)
324 MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type");
327 myIntegers.push_back(ElementID);
328 myIntegers.push_back(nbnodes);
329 for ( int i = 0; i < nbnodes; i++ )
330 myIntegers.push_back( nodes[ i ] );
335 //=======================================================================
336 //function : ChangePolyhedronNodes
338 //=======================================================================
339 void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID,
340 std::vector<int> nodes_ids,
341 std::vector<int> quantities)
343 if (myType != SMESHDS_ChangePolyhedronNodes)
345 MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type");
348 myIntegers.push_back(ElementID);
350 int i, nbNodes = nodes_ids.size();
351 myIntegers.push_back(nbNodes);
352 for (i = 0; i < nbNodes; i++) {
353 myIntegers.push_back(nodes_ids[i]);
356 int nbFaces = quantities.size();
357 myIntegers.push_back(nbFaces);
358 for (i = 0; i < nbFaces; i++) {
359 myIntegers.push_back(quantities[i]);
365 //=======================================================================
366 //function : Renumber
368 //=======================================================================
370 void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
372 if (!myType == SMESHDS_Renumber)
374 MESSAGE("SMESHDS_Command::Renumber : Bad Type");
377 myIntegers.push_back(isNodes);
378 myIntegers.push_back(startID);
379 myIntegers.push_back(deltaID);
383 //=======================================================================
386 //=======================================================================
387 SMESHDS_CommandType SMESHDS_Command::GetType()
392 //=======================================================================
395 //=======================================================================
396 int SMESHDS_Command::GetNumber()
401 //=======================================================================
404 //=======================================================================
405 const list < int >&SMESHDS_Command::GetIndexes()
410 //=======================================================================
413 //=======================================================================
414 const list < double >&SMESHDS_Command::GetCoords()
420 //********************************************************************
421 //***** Methods for quadratic elements ******
422 //********************************************************************
424 //=======================================================================
427 //=======================================================================
428 void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
430 if (!myType == SMESHDS_AddQuadEdge) {
431 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
434 myIntegers.push_back(NewEdgeID);
435 myIntegers.push_back(n1);
436 myIntegers.push_back(n2);
437 myIntegers.push_back(n12);
441 //=======================================================================
444 //=======================================================================
445 void SMESHDS_Command::AddFace(int NewFaceID,
446 int n1, int n2, int n3,
447 int n12, int n23, int n31)
449 if (!myType == SMESHDS_AddQuadTriangle) {
450 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
453 myIntegers.push_back(NewFaceID);
454 myIntegers.push_back(n1);
455 myIntegers.push_back(n2);
456 myIntegers.push_back(n3);
457 myIntegers.push_back(n12);
458 myIntegers.push_back(n23);
459 myIntegers.push_back(n31);
463 //=======================================================================
466 //=======================================================================
467 void SMESHDS_Command::AddFace(int NewFaceID,
468 int n1, int n2, int n3, int n4,
469 int n12, int n23, int n34, int n41)
471 if (!myType == SMESHDS_AddQuadQuadrangle) {
472 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
475 myIntegers.push_back(NewFaceID);
476 myIntegers.push_back(n1);
477 myIntegers.push_back(n2);
478 myIntegers.push_back(n3);
479 myIntegers.push_back(n4);
480 myIntegers.push_back(n12);
481 myIntegers.push_back(n23);
482 myIntegers.push_back(n34);
483 myIntegers.push_back(n41);
487 //=======================================================================
488 //function : AddVolume
490 //=======================================================================
491 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
492 int n12, int n23, int n31,
493 int n14, int n24, int n34)
495 if (!myType == SMESHDS_AddQuadTetrahedron) {
496 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
499 myIntegers.push_back(NewVolID);
500 myIntegers.push_back(n1);
501 myIntegers.push_back(n2);
502 myIntegers.push_back(n3);
503 myIntegers.push_back(n4);
504 myIntegers.push_back(n12);
505 myIntegers.push_back(n23);
506 myIntegers.push_back(n31);
507 myIntegers.push_back(n14);
508 myIntegers.push_back(n24);
509 myIntegers.push_back(n34);
513 //=======================================================================
514 //function : AddVolume
516 //=======================================================================
517 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
518 int n3, int n4, int n5,
519 int n12, int n23, int n34, int n41,
520 int n15, int n25, int n35, int n45)
522 if (!myType == SMESHDS_AddQuadPyramid) {
523 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
526 myIntegers.push_back(NewVolID);
527 myIntegers.push_back(n1);
528 myIntegers.push_back(n2);
529 myIntegers.push_back(n3);
530 myIntegers.push_back(n4);
531 myIntegers.push_back(n5);
532 myIntegers.push_back(n12);
533 myIntegers.push_back(n23);
534 myIntegers.push_back(n34);
535 myIntegers.push_back(n41);
536 myIntegers.push_back(n15);
537 myIntegers.push_back(n25);
538 myIntegers.push_back(n35);
539 myIntegers.push_back(n45);
543 //=======================================================================
544 //function : AddVolume
546 //=======================================================================
547 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
548 int n3, int n4, int n5,int n6,
549 int n12, int n23, int n31,
550 int n45, int n56, int n64,
551 int n14, int n25, int n36)
553 if (!myType == SMESHDS_AddQuadPentahedron) {
554 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
557 myIntegers.push_back(NewVolID);
558 myIntegers.push_back(n1);
559 myIntegers.push_back(n2);
560 myIntegers.push_back(n3);
561 myIntegers.push_back(n4);
562 myIntegers.push_back(n5);
563 myIntegers.push_back(n6);
564 myIntegers.push_back(n12);
565 myIntegers.push_back(n23);
566 myIntegers.push_back(n31);
567 myIntegers.push_back(n45);
568 myIntegers.push_back(n56);
569 myIntegers.push_back(n64);
570 myIntegers.push_back(n14);
571 myIntegers.push_back(n25);
572 myIntegers.push_back(n36);
576 //=======================================================================
577 //function : AddVolume
579 //=======================================================================
580 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
581 int n4, int n5, int n6, int n7, int n8,
582 int n12, int n23, int n34, int n41,
583 int n56, int n67, int n78, int n85,
584 int n15, int n26, int n37, int n48)
586 if (!myType == SMESHDS_AddQuadHexahedron) {
587 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
590 myIntegers.push_back(NewVolID);
591 myIntegers.push_back(n1);
592 myIntegers.push_back(n2);
593 myIntegers.push_back(n3);
594 myIntegers.push_back(n4);
595 myIntegers.push_back(n5);
596 myIntegers.push_back(n6);
597 myIntegers.push_back(n7);
598 myIntegers.push_back(n8);
599 myIntegers.push_back(n12);
600 myIntegers.push_back(n23);
601 myIntegers.push_back(n34);
602 myIntegers.push_back(n41);
603 myIntegers.push_back(n56);
604 myIntegers.push_back(n67);
605 myIntegers.push_back(n78);
606 myIntegers.push_back(n85);
607 myIntegers.push_back(n15);
608 myIntegers.push_back(n26);
609 myIntegers.push_back(n37);
610 myIntegers.push_back(n48);