1 // Copyright (C) 2007-2011 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
23 // SMESH SMESHDS : management of mesh data and SMESH document
24 // File : SMESH_Command.cxx
25 // Author : Yves FRICAUD, OCC
29 #include "SMESHDS_Command.hxx"
31 #include "utilities.h"
35 //=======================================================================
36 //function : Constructor
38 //=======================================================================
39 SMESHDS_Command::SMESHDS_Command(const SMESHDS_CommandType aType):myType(aType),
44 //=======================================================================
45 //function : Destructor
47 //=======================================================================
48 SMESHDS_Command::~SMESHDS_Command()
52 //=======================================================================
55 //=======================================================================
56 void SMESHDS_Command::AddNode(int NewNodeID, double x, double y, double z)
58 if (!myType == SMESHDS_AddNode)
60 MESSAGE("SMESHDS_Command::AddNode : Bad Type");
63 myIntegers.push_back(NewNodeID);
70 //=======================================================================
73 //=======================================================================
74 void SMESHDS_Command::MoveNode(int NodeID, double x, double y, double z)
76 if (!myType == SMESHDS_MoveNode)
78 MESSAGE("SMESHDS_Command::MoveNode : Bad Type");
81 myIntegers.push_back(NodeID);
88 //=======================================================================
91 //=======================================================================
92 void SMESHDS_Command::Add0DElement(int New0DElementID, int idnode)
94 if (!myType == SMESHDS_Add0DElement)
96 MESSAGE("SMESHDS_Command::Add0DElement : Bad Type");
99 myIntegers.push_back(New0DElementID);
100 myIntegers.push_back(idnode);
104 //=======================================================================
107 //=======================================================================
108 void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2)
110 if (!myType == SMESHDS_AddEdge)
112 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
115 myIntegers.push_back(NewEdgeID);
116 myIntegers.push_back(idnode1);
117 myIntegers.push_back(idnode2);
121 //=======================================================================
124 //=======================================================================
125 void SMESHDS_Command::AddFace(int NewFaceID,
126 int idnode1, int idnode2, int idnode3)
128 if (!myType == SMESHDS_AddTriangle)
130 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
133 myIntegers.push_back(NewFaceID);
134 myIntegers.push_back(idnode1);
135 myIntegers.push_back(idnode2);
136 myIntegers.push_back(idnode3);
140 //=======================================================================
143 //=======================================================================
144 void SMESHDS_Command::AddFace(int NewFaceID,
145 int idnode1, int idnode2, int idnode3, int idnode4)
147 if (!myType == SMESHDS_AddQuadrangle)
149 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
152 myIntegers.push_back(NewFaceID);
153 myIntegers.push_back(idnode1);
154 myIntegers.push_back(idnode2);
155 myIntegers.push_back(idnode3);
156 myIntegers.push_back(idnode4);
160 //=======================================================================
163 //=======================================================================
164 void SMESHDS_Command::AddVolume(int NewVolID,
165 int idnode1, int idnode2, int idnode3, int idnode4)
167 if (!myType == SMESHDS_AddTetrahedron)
169 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
172 myIntegers.push_back(NewVolID);
173 myIntegers.push_back(idnode1);
174 myIntegers.push_back(idnode2);
175 myIntegers.push_back(idnode3);
176 myIntegers.push_back(idnode4);
180 //=======================================================================
183 //=======================================================================
184 void SMESHDS_Command::AddVolume(int NewVolID,
185 int idnode1, int idnode2, int idnode3, int idnode4, int idnode5)
187 if (!myType == SMESHDS_AddPyramid)
189 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
192 myIntegers.push_back(NewVolID);
193 myIntegers.push_back(idnode1);
194 myIntegers.push_back(idnode2);
195 myIntegers.push_back(idnode3);
196 myIntegers.push_back(idnode4);
197 myIntegers.push_back(idnode5);
201 //=======================================================================
204 //=======================================================================
205 void SMESHDS_Command::AddVolume(int NewVolID,
207 int idnode2, int idnode3, int idnode4, int idnode5, int idnode6)
209 if (!myType == SMESHDS_AddPrism)
211 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
214 myIntegers.push_back(NewVolID);
215 myIntegers.push_back(idnode1);
216 myIntegers.push_back(idnode2);
217 myIntegers.push_back(idnode3);
218 myIntegers.push_back(idnode4);
219 myIntegers.push_back(idnode5);
220 myIntegers.push_back(idnode6);
224 //=======================================================================
227 //=======================================================================
228 void SMESHDS_Command::AddVolume(int NewVolID,
232 int idnode4, int idnode5, int idnode6, int idnode7, int idnode8)
234 if (!myType == SMESHDS_AddHexahedron)
236 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
239 myIntegers.push_back(NewVolID);
240 myIntegers.push_back(idnode1);
241 myIntegers.push_back(idnode2);
242 myIntegers.push_back(idnode3);
243 myIntegers.push_back(idnode4);
244 myIntegers.push_back(idnode5);
245 myIntegers.push_back(idnode6);
246 myIntegers.push_back(idnode7);
247 myIntegers.push_back(idnode8);
251 void SMESHDS_Command::AddVolume(int NewVolID,
252 int idnode1,int idnode2,int idnode3,int idnode4,
253 int idnode5, int idnode6, int idnode7, int idnode8,
254 int idnode9, int idnode10, int idnode11, int idnode12)
256 if (myType != SMESHDS_AddHexagonalPrism)
258 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
261 myIntegers.push_back(NewVolID);
262 myIntegers.push_back(idnode1);
263 myIntegers.push_back(idnode2);
264 myIntegers.push_back(idnode3);
265 myIntegers.push_back(idnode4);
266 myIntegers.push_back(idnode5);
267 myIntegers.push_back(idnode6);
268 myIntegers.push_back(idnode7);
269 myIntegers.push_back(idnode8);
270 myIntegers.push_back(idnode9);
271 myIntegers.push_back(idnode10);
272 myIntegers.push_back(idnode11);
273 myIntegers.push_back(idnode12);
277 //=======================================================================
278 //function : AddPolygonalFace
280 //=======================================================================
281 void SMESHDS_Command::AddPolygonalFace (const int ElementID,
282 std::vector<int> nodes_ids)
284 if (!myType == SMESHDS_AddPolygon) {
285 MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type");
288 myIntegers.push_back(ElementID);
290 int i, nbNodes = nodes_ids.size();
291 myIntegers.push_back(nbNodes);
292 for (i = 0; i < nbNodes; i++) {
293 myIntegers.push_back(nodes_ids[i]);
299 //=======================================================================
300 //function : AddPolyhedralVolume
302 //=======================================================================
303 void SMESHDS_Command::AddPolyhedralVolume (const int ElementID,
304 std::vector<int> nodes_ids,
305 std::vector<int> quantities)
307 if (!myType == SMESHDS_AddPolyhedron) {
308 MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
311 myIntegers.push_back(ElementID);
313 int i, nbNodes = nodes_ids.size();
314 myIntegers.push_back(nbNodes);
315 for (i = 0; i < nbNodes; i++) {
316 myIntegers.push_back(nodes_ids[i]);
319 int nbFaces = quantities.size();
320 myIntegers.push_back(nbFaces);
321 for (i = 0; i < nbFaces; i++) {
322 myIntegers.push_back(quantities[i]);
328 //=======================================================================
331 //=======================================================================
332 void SMESHDS_Command::RemoveNode(int NodeID)
334 if (!myType == SMESHDS_RemoveNode)
336 MESSAGE("SMESHDS_Command::RemoveNode : Bad Type");
339 myIntegers.push_back(NodeID);
343 //=======================================================================
346 //=======================================================================
347 void SMESHDS_Command::RemoveElement(int ElementID)
349 if (!myType == SMESHDS_RemoveElement)
351 MESSAGE("SMESHDS_Command::RemoveElement : Bad Type");
354 myIntegers.push_back(ElementID);
358 //=======================================================================
359 //function : ChangeElementNodes
361 //=======================================================================
363 void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
365 if (!myType == SMESHDS_ChangeElementNodes)
367 MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type");
370 myIntegers.push_back(ElementID);
371 myIntegers.push_back(nbnodes);
372 for ( int i = 0; i < nbnodes; i++ )
373 myIntegers.push_back( nodes[ i ] );
378 //=======================================================================
379 //function : ChangePolyhedronNodes
381 //=======================================================================
382 void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID,
383 std::vector<int> nodes_ids,
384 std::vector<int> quantities)
386 if (myType != SMESHDS_ChangePolyhedronNodes)
388 MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type");
391 myIntegers.push_back(ElementID);
393 int i, nbNodes = nodes_ids.size();
394 myIntegers.push_back(nbNodes);
395 for (i = 0; i < nbNodes; i++) {
396 myIntegers.push_back(nodes_ids[i]);
399 int nbFaces = quantities.size();
400 myIntegers.push_back(nbFaces);
401 for (i = 0; i < nbFaces; i++) {
402 myIntegers.push_back(quantities[i]);
408 //=======================================================================
409 //function : Renumber
411 //=======================================================================
413 void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
415 if (!myType == SMESHDS_Renumber)
417 MESSAGE("SMESHDS_Command::Renumber : Bad Type");
420 myIntegers.push_back(isNodes);
421 myIntegers.push_back(startID);
422 myIntegers.push_back(deltaID);
426 //=======================================================================
429 //=======================================================================
430 SMESHDS_CommandType SMESHDS_Command::GetType()
435 //=======================================================================
438 //=======================================================================
439 int SMESHDS_Command::GetNumber()
444 //=======================================================================
447 //=======================================================================
448 const list < int >&SMESHDS_Command::GetIndexes()
453 //=======================================================================
456 //=======================================================================
457 const list < double >&SMESHDS_Command::GetCoords()
463 //********************************************************************
464 //***** Methods for quadratic elements ******
465 //********************************************************************
467 //=======================================================================
470 //=======================================================================
471 void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
473 if (!myType == SMESHDS_AddQuadEdge) {
474 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
477 myIntegers.push_back(NewEdgeID);
478 myIntegers.push_back(n1);
479 myIntegers.push_back(n2);
480 myIntegers.push_back(n12);
484 //=======================================================================
487 //=======================================================================
488 void SMESHDS_Command::AddFace(int NewFaceID,
489 int n1, int n2, int n3,
490 int n12, int n23, int n31)
492 if (!myType == SMESHDS_AddQuadTriangle) {
493 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
496 myIntegers.push_back(NewFaceID);
497 myIntegers.push_back(n1);
498 myIntegers.push_back(n2);
499 myIntegers.push_back(n3);
500 myIntegers.push_back(n12);
501 myIntegers.push_back(n23);
502 myIntegers.push_back(n31);
506 //=======================================================================
509 //=======================================================================
510 void SMESHDS_Command::AddFace(int NewFaceID,
511 int n1, int n2, int n3, int n4,
512 int n12, int n23, int n34, int n41)
514 if (!myType == SMESHDS_AddQuadQuadrangle) {
515 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
518 myIntegers.push_back(NewFaceID);
519 myIntegers.push_back(n1);
520 myIntegers.push_back(n2);
521 myIntegers.push_back(n3);
522 myIntegers.push_back(n4);
523 myIntegers.push_back(n12);
524 myIntegers.push_back(n23);
525 myIntegers.push_back(n34);
526 myIntegers.push_back(n41);
530 //=======================================================================
533 //=======================================================================
534 void SMESHDS_Command::AddFace(int NewFaceID,
535 int n1, int n2, int n3, int n4,
536 int n12, int n23, int n34, int n41, int nCenter)
538 if (myType != SMESHDS_AddBiQuadQuadrangle) {
539 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
542 myIntegers.push_back(NewFaceID);
543 myIntegers.push_back(n1);
544 myIntegers.push_back(n2);
545 myIntegers.push_back(n3);
546 myIntegers.push_back(n4);
547 myIntegers.push_back(n12);
548 myIntegers.push_back(n23);
549 myIntegers.push_back(n34);
550 myIntegers.push_back(n41);
551 myIntegers.push_back(nCenter);
555 //=======================================================================
556 //function : AddVolume
558 //=======================================================================
559 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
560 int n12, int n23, int n31,
561 int n14, int n24, int n34)
563 if (!myType == SMESHDS_AddQuadTetrahedron) {
564 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
567 myIntegers.push_back(NewVolID);
568 myIntegers.push_back(n1);
569 myIntegers.push_back(n2);
570 myIntegers.push_back(n3);
571 myIntegers.push_back(n4);
572 myIntegers.push_back(n12);
573 myIntegers.push_back(n23);
574 myIntegers.push_back(n31);
575 myIntegers.push_back(n14);
576 myIntegers.push_back(n24);
577 myIntegers.push_back(n34);
581 //=======================================================================
582 //function : AddVolume
584 //=======================================================================
585 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
586 int n3, int n4, int n5,
587 int n12, int n23, int n34, int n41,
588 int n15, int n25, int n35, int n45)
590 if (!myType == SMESHDS_AddQuadPyramid) {
591 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
594 myIntegers.push_back(NewVolID);
595 myIntegers.push_back(n1);
596 myIntegers.push_back(n2);
597 myIntegers.push_back(n3);
598 myIntegers.push_back(n4);
599 myIntegers.push_back(n5);
600 myIntegers.push_back(n12);
601 myIntegers.push_back(n23);
602 myIntegers.push_back(n34);
603 myIntegers.push_back(n41);
604 myIntegers.push_back(n15);
605 myIntegers.push_back(n25);
606 myIntegers.push_back(n35);
607 myIntegers.push_back(n45);
611 //=======================================================================
612 //function : AddVolume
614 //=======================================================================
615 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
616 int n3, int n4, int n5,int n6,
617 int n12, int n23, int n31,
618 int n45, int n56, int n64,
619 int n14, int n25, int n36)
621 if (!myType == SMESHDS_AddQuadPentahedron) {
622 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
625 myIntegers.push_back(NewVolID);
626 myIntegers.push_back(n1);
627 myIntegers.push_back(n2);
628 myIntegers.push_back(n3);
629 myIntegers.push_back(n4);
630 myIntegers.push_back(n5);
631 myIntegers.push_back(n6);
632 myIntegers.push_back(n12);
633 myIntegers.push_back(n23);
634 myIntegers.push_back(n31);
635 myIntegers.push_back(n45);
636 myIntegers.push_back(n56);
637 myIntegers.push_back(n64);
638 myIntegers.push_back(n14);
639 myIntegers.push_back(n25);
640 myIntegers.push_back(n36);
644 //=======================================================================
645 //function : AddVolume
647 //=======================================================================
648 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
649 int n4, int n5, int n6, int n7, int n8,
650 int n12, int n23, int n34, int n41,
651 int n56, int n67, int n78, int n85,
652 int n15, int n26, int n37, int n48)
654 if (!myType == SMESHDS_AddQuadHexahedron) {
655 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
658 myIntegers.push_back(NewVolID);
659 myIntegers.push_back(n1);
660 myIntegers.push_back(n2);
661 myIntegers.push_back(n3);
662 myIntegers.push_back(n4);
663 myIntegers.push_back(n5);
664 myIntegers.push_back(n6);
665 myIntegers.push_back(n7);
666 myIntegers.push_back(n8);
667 myIntegers.push_back(n12);
668 myIntegers.push_back(n23);
669 myIntegers.push_back(n34);
670 myIntegers.push_back(n41);
671 myIntegers.push_back(n56);
672 myIntegers.push_back(n67);
673 myIntegers.push_back(n78);
674 myIntegers.push_back(n85);
675 myIntegers.push_back(n15);
676 myIntegers.push_back(n26);
677 myIntegers.push_back(n37);
678 myIntegers.push_back(n48);
682 //=======================================================================
683 //function : AddVolume
685 //=======================================================================
686 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
687 int n4, int n5, int n6, int n7, int n8,
688 int n12, int n23, int n34, int n41,
689 int n56, int n67, int n78, int n85,
690 int n15, int n26, int n37, int n48,
691 int n1234,int n1256,int n2367,int n3478,
692 int n1458,int n5678,int nCenter)
694 if (!myType == SMESHDS_AddQuadHexahedron) {
695 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
698 myIntegers.push_back(NewVolID);
699 myIntegers.push_back(n1);
700 myIntegers.push_back(n2);
701 myIntegers.push_back(n3);
702 myIntegers.push_back(n4);
703 myIntegers.push_back(n5);
704 myIntegers.push_back(n6);
705 myIntegers.push_back(n7);
706 myIntegers.push_back(n8);
707 myIntegers.push_back(n12);
708 myIntegers.push_back(n23);
709 myIntegers.push_back(n34);
710 myIntegers.push_back(n41);
711 myIntegers.push_back(n56);
712 myIntegers.push_back(n67);
713 myIntegers.push_back(n78);
714 myIntegers.push_back(n85);
715 myIntegers.push_back(n15);
716 myIntegers.push_back(n26);
717 myIntegers.push_back(n37);
718 myIntegers.push_back(n48);
719 myIntegers.push_back(n1234);
720 myIntegers.push_back(n1256);
721 myIntegers.push_back(n2367);
722 myIntegers.push_back(n3478);
723 myIntegers.push_back(n1458);
724 myIntegers.push_back(n5678);
725 myIntegers.push_back(nCenter);