1 // Copyright (C) 2007-2019 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, or (at your option) any later version.
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
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::Add0DElement(int New0DElementID, int idnode)
93 if ( myType != SMESHDS_Add0DElement)
95 MESSAGE("SMESHDS_Command::Add0DElement : Bad Type");
98 myIntegers.push_back(New0DElementID);
99 myIntegers.push_back(idnode);
103 //=======================================================================
106 //=======================================================================
107 void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2)
109 if ( myType != SMESHDS_AddEdge)
111 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
114 myIntegers.push_back(NewEdgeID);
115 myIntegers.push_back(idnode1);
116 myIntegers.push_back(idnode2);
120 //=======================================================================
123 //=======================================================================
124 void SMESHDS_Command::AddFace(int NewFaceID,
125 int idnode1, int idnode2, int idnode3)
127 if ( myType != SMESHDS_AddTriangle)
129 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
132 myIntegers.push_back(NewFaceID);
133 myIntegers.push_back(idnode1);
134 myIntegers.push_back(idnode2);
135 myIntegers.push_back(idnode3);
139 //=======================================================================
142 //=======================================================================
143 void SMESHDS_Command::AddFace(int NewFaceID,
144 int idnode1, int idnode2, int idnode3, int idnode4)
146 if ( myType != SMESHDS_AddQuadrangle)
148 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
151 myIntegers.push_back(NewFaceID);
152 myIntegers.push_back(idnode1);
153 myIntegers.push_back(idnode2);
154 myIntegers.push_back(idnode3);
155 myIntegers.push_back(idnode4);
159 //=======================================================================
162 //=======================================================================
163 void SMESHDS_Command::AddVolume(int NewVolID,
164 int idnode1, int idnode2, int idnode3, int idnode4)
166 if ( myType != SMESHDS_AddTetrahedron)
168 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
171 myIntegers.push_back(NewVolID);
172 myIntegers.push_back(idnode1);
173 myIntegers.push_back(idnode2);
174 myIntegers.push_back(idnode3);
175 myIntegers.push_back(idnode4);
179 //=======================================================================
182 //=======================================================================
183 void SMESHDS_Command::AddVolume(int NewVolID,
184 int idnode1, int idnode2, int idnode3, int idnode4, int idnode5)
186 if ( myType != SMESHDS_AddPyramid)
188 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
191 myIntegers.push_back(NewVolID);
192 myIntegers.push_back(idnode1);
193 myIntegers.push_back(idnode2);
194 myIntegers.push_back(idnode3);
195 myIntegers.push_back(idnode4);
196 myIntegers.push_back(idnode5);
200 //=======================================================================
203 //=======================================================================
204 void SMESHDS_Command::AddVolume(int NewVolID,
206 int idnode2, int idnode3, int idnode4, int idnode5, int idnode6)
208 if ( myType != SMESHDS_AddPrism)
210 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
213 myIntegers.push_back(NewVolID);
214 myIntegers.push_back(idnode1);
215 myIntegers.push_back(idnode2);
216 myIntegers.push_back(idnode3);
217 myIntegers.push_back(idnode4);
218 myIntegers.push_back(idnode5);
219 myIntegers.push_back(idnode6);
223 //=======================================================================
226 //=======================================================================
227 void SMESHDS_Command::AddVolume(int NewVolID,
231 int idnode4, int idnode5, int idnode6, int idnode7, int idnode8)
233 if ( myType != SMESHDS_AddHexahedron)
235 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
238 myIntegers.push_back(NewVolID);
239 myIntegers.push_back(idnode1);
240 myIntegers.push_back(idnode2);
241 myIntegers.push_back(idnode3);
242 myIntegers.push_back(idnode4);
243 myIntegers.push_back(idnode5);
244 myIntegers.push_back(idnode6);
245 myIntegers.push_back(idnode7);
246 myIntegers.push_back(idnode8);
250 void SMESHDS_Command::AddVolume(int NewVolID,
251 int idnode1,int idnode2,int idnode3,int idnode4,
252 int idnode5, int idnode6, int idnode7, int idnode8,
253 int idnode9, int idnode10, int idnode11, int idnode12)
255 if (myType != SMESHDS_AddHexagonalPrism)
257 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
260 myIntegers.push_back(NewVolID);
261 myIntegers.push_back(idnode1);
262 myIntegers.push_back(idnode2);
263 myIntegers.push_back(idnode3);
264 myIntegers.push_back(idnode4);
265 myIntegers.push_back(idnode5);
266 myIntegers.push_back(idnode6);
267 myIntegers.push_back(idnode7);
268 myIntegers.push_back(idnode8);
269 myIntegers.push_back(idnode9);
270 myIntegers.push_back(idnode10);
271 myIntegers.push_back(idnode11);
272 myIntegers.push_back(idnode12);
276 //=======================================================================
277 //function : AddPolygonalFace
279 //=======================================================================
280 void SMESHDS_Command::AddPolygonalFace (const int ElementID,
281 const std::vector<int>& nodes_ids)
283 if ( myType != SMESHDS_AddPolygon) {
284 MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type");
287 myIntegers.push_back(ElementID);
289 int i, nbNodes = nodes_ids.size();
290 myIntegers.push_back(nbNodes);
291 for (i = 0; i < nbNodes; i++) {
292 myIntegers.push_back(nodes_ids[i]);
298 //=======================================================================
299 //function : AddQuadPolygonalFace
301 //=======================================================================
302 void SMESHDS_Command::AddQuadPolygonalFace (const int ElementID,
303 const std::vector<int>& nodes_ids)
305 if ( myType != SMESHDS_AddQuadPolygon) {
306 MESSAGE("SMESHDS_Command::AddQuadraticPolygonalFace : Bad Type");
309 myIntegers.push_back(ElementID);
311 int i, nbNodes = nodes_ids.size();
312 myIntegers.push_back(nbNodes);
313 for (i = 0; i < nbNodes; i++) {
314 myIntegers.push_back(nodes_ids[i]);
320 //=======================================================================
321 //function : AddPolyhedralVolume
323 //=======================================================================
324 void SMESHDS_Command::AddPolyhedralVolume (const int ElementID,
325 const std::vector<int>& nodes_ids,
326 const std::vector<int>& quantities)
328 if ( myType != SMESHDS_AddPolyhedron) {
329 MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
332 myIntegers.push_back(ElementID);
334 int i, nbNodes = nodes_ids.size();
335 myIntegers.push_back(nbNodes);
336 for (i = 0; i < nbNodes; i++) {
337 myIntegers.push_back(nodes_ids[i]);
340 int nbFaces = quantities.size();
341 myIntegers.push_back(nbFaces);
342 for (i = 0; i < nbFaces; i++) {
343 myIntegers.push_back(quantities[i]);
349 //=======================================================================
352 //=======================================================================
353 void SMESHDS_Command::RemoveNode(int NodeID)
355 if ( myType != SMESHDS_RemoveNode)
357 MESSAGE("SMESHDS_Command::RemoveNode : Bad Type");
360 myIntegers.push_back(NodeID);
364 //=======================================================================
367 //=======================================================================
368 void SMESHDS_Command::RemoveElement(int ElementID)
370 if ( myType != SMESHDS_RemoveElement)
372 MESSAGE("SMESHDS_Command::RemoveElement : Bad Type");
375 myIntegers.push_back(ElementID);
379 //=======================================================================
380 //function : ChangeElementNodes
382 //=======================================================================
384 void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
386 if ( myType != SMESHDS_ChangeElementNodes)
388 MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type");
391 myIntegers.push_back(ElementID);
392 myIntegers.push_back(nbnodes);
393 for ( int i = 0; i < nbnodes; i++ )
394 myIntegers.push_back( nodes[ i ] );
399 //=======================================================================
400 //function : ChangePolyhedronNodes
402 //=======================================================================
403 void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID,
404 const std::vector<int>& nodes_ids,
405 const std::vector<int>& quantities)
407 if (myType != SMESHDS_ChangePolyhedronNodes)
409 MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type");
412 myIntegers.push_back(ElementID);
414 int i, nbNodes = nodes_ids.size();
415 myIntegers.push_back(nbNodes);
416 for (i = 0; i < nbNodes; i++) {
417 myIntegers.push_back(nodes_ids[i]);
420 int nbFaces = quantities.size();
421 myIntegers.push_back(nbFaces);
422 for (i = 0; i < nbFaces; i++) {
423 myIntegers.push_back(quantities[i]);
429 //=======================================================================
430 //function : Renumber
432 //=======================================================================
434 void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
436 if ( myType != SMESHDS_Renumber)
438 MESSAGE("SMESHDS_Command::Renumber : Bad Type");
441 myIntegers.push_back(isNodes);
442 myIntegers.push_back(startID);
443 myIntegers.push_back(deltaID);
447 //=======================================================================
450 //=======================================================================
451 SMESHDS_CommandType SMESHDS_Command::GetType()
456 //=======================================================================
459 //=======================================================================
460 int SMESHDS_Command::GetNumber()
465 //=======================================================================
468 //=======================================================================
469 const list < int >&SMESHDS_Command::GetIndexes()
474 //=======================================================================
477 //=======================================================================
478 const list < double >&SMESHDS_Command::GetCoords()
484 //********************************************************************
485 //***** Methods for quadratic elements ******
486 //********************************************************************
488 //=======================================================================
491 //=======================================================================
492 void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
494 if ( myType != SMESHDS_AddQuadEdge) {
495 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
498 myIntegers.push_back(NewEdgeID);
499 myIntegers.push_back(n1);
500 myIntegers.push_back(n2);
501 myIntegers.push_back(n12);
505 //=======================================================================
508 //=======================================================================
509 void SMESHDS_Command::AddFace(int NewFaceID,
510 int n1, int n2, int n3,
511 int n12, int n23, int n31)
513 if ( myType != SMESHDS_AddQuadTriangle) {
514 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
517 myIntegers.push_back(NewFaceID);
518 myIntegers.push_back(n1);
519 myIntegers.push_back(n2);
520 myIntegers.push_back(n3);
521 myIntegers.push_back(n12);
522 myIntegers.push_back(n23);
523 myIntegers.push_back(n31);
527 //=======================================================================
530 //=======================================================================
531 void SMESHDS_Command::AddFace(int NewFaceID,
532 int n1, int n2, int n3,
533 int n12, int n23, int n31, int nCenter)
535 if ( myType != SMESHDS_AddBiQuadTriangle) {
536 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
539 myIntegers.push_back(NewFaceID);
540 myIntegers.push_back(n1);
541 myIntegers.push_back(n2);
542 myIntegers.push_back(n3);
543 myIntegers.push_back(n12);
544 myIntegers.push_back(n23);
545 myIntegers.push_back(n31);
546 myIntegers.push_back(nCenter);
550 //=======================================================================
553 //=======================================================================
554 void SMESHDS_Command::AddFace(int NewFaceID,
555 int n1, int n2, int n3, int n4,
556 int n12, int n23, int n34, int n41)
558 if ( myType != SMESHDS_AddQuadQuadrangle) {
559 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
562 myIntegers.push_back(NewFaceID);
563 myIntegers.push_back(n1);
564 myIntegers.push_back(n2);
565 myIntegers.push_back(n3);
566 myIntegers.push_back(n4);
567 myIntegers.push_back(n12);
568 myIntegers.push_back(n23);
569 myIntegers.push_back(n34);
570 myIntegers.push_back(n41);
574 //=======================================================================
577 //=======================================================================
578 void SMESHDS_Command::AddFace(int NewFaceID,
579 int n1, int n2, int n3, int n4,
580 int n12, int n23, int n34, int n41, int nCenter)
582 if (myType != SMESHDS_AddBiQuadQuadrangle) {
583 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
586 myIntegers.push_back(NewFaceID);
587 myIntegers.push_back(n1);
588 myIntegers.push_back(n2);
589 myIntegers.push_back(n3);
590 myIntegers.push_back(n4);
591 myIntegers.push_back(n12);
592 myIntegers.push_back(n23);
593 myIntegers.push_back(n34);
594 myIntegers.push_back(n41);
595 myIntegers.push_back(nCenter);
599 //=======================================================================
600 //function : AddVolume
602 //=======================================================================
603 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
604 int n12, int n23, int n31,
605 int n14, int n24, int n34)
607 if ( myType != SMESHDS_AddQuadTetrahedron) {
608 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
611 myIntegers.push_back(NewVolID);
612 myIntegers.push_back(n1);
613 myIntegers.push_back(n2);
614 myIntegers.push_back(n3);
615 myIntegers.push_back(n4);
616 myIntegers.push_back(n12);
617 myIntegers.push_back(n23);
618 myIntegers.push_back(n31);
619 myIntegers.push_back(n14);
620 myIntegers.push_back(n24);
621 myIntegers.push_back(n34);
625 //=======================================================================
626 //function : AddVolume
628 //=======================================================================
629 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
630 int n3, int n4, int n5,
631 int n12, int n23, int n34, int n41,
632 int n15, int n25, int n35, int n45)
634 if ( myType != SMESHDS_AddQuadPyramid) {
635 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
638 myIntegers.push_back(NewVolID);
639 myIntegers.push_back(n1);
640 myIntegers.push_back(n2);
641 myIntegers.push_back(n3);
642 myIntegers.push_back(n4);
643 myIntegers.push_back(n5);
644 myIntegers.push_back(n12);
645 myIntegers.push_back(n23);
646 myIntegers.push_back(n34);
647 myIntegers.push_back(n41);
648 myIntegers.push_back(n15);
649 myIntegers.push_back(n25);
650 myIntegers.push_back(n35);
651 myIntegers.push_back(n45);
655 //=======================================================================
656 //function : AddVolume
658 //=======================================================================
659 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
660 int n3, int n4, int n5,int n6,
661 int n12, int n23, int n31,
662 int n45, int n56, int n64,
663 int n14, int n25, int n36)
665 if ( myType != SMESHDS_AddQuadPentahedron) {
666 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
669 myIntegers.push_back(NewVolID);
670 myIntegers.push_back(n1);
671 myIntegers.push_back(n2);
672 myIntegers.push_back(n3);
673 myIntegers.push_back(n4);
674 myIntegers.push_back(n5);
675 myIntegers.push_back(n6);
676 myIntegers.push_back(n12);
677 myIntegers.push_back(n23);
678 myIntegers.push_back(n31);
679 myIntegers.push_back(n45);
680 myIntegers.push_back(n56);
681 myIntegers.push_back(n64);
682 myIntegers.push_back(n14);
683 myIntegers.push_back(n25);
684 myIntegers.push_back(n36);
687 //=======================================================================
688 //function : AddVolume
690 //=======================================================================
691 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
692 int n3, int n4, int n5,int n6,
693 int n12, int n23, int n31,
694 int n45, int n56, int n64,
695 int n14, int n25, int n36,
696 int n1245, int n2356, int n1346)
698 if ( myType != SMESHDS_AddBiQuadPentahedron) {
699 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
702 myIntegers.push_back(NewVolID);
703 myIntegers.push_back(n1);
704 myIntegers.push_back(n2);
705 myIntegers.push_back(n3);
706 myIntegers.push_back(n4);
707 myIntegers.push_back(n5);
708 myIntegers.push_back(n6);
709 myIntegers.push_back(n12);
710 myIntegers.push_back(n23);
711 myIntegers.push_back(n31);
712 myIntegers.push_back(n45);
713 myIntegers.push_back(n56);
714 myIntegers.push_back(n64);
715 myIntegers.push_back(n14);
716 myIntegers.push_back(n25);
717 myIntegers.push_back(n36);
718 myIntegers.push_back(n1245);
719 myIntegers.push_back(n2356);
720 myIntegers.push_back(n1346);
725 //=======================================================================
726 //function : AddVolume
728 //=======================================================================
729 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
730 int n4, int n5, int n6, int n7, int n8,
731 int n12, int n23, int n34, int n41,
732 int n56, int n67, int n78, int n85,
733 int n15, int n26, int n37, int n48)
735 if ( myType != SMESHDS_AddQuadHexahedron) {
736 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
739 myIntegers.push_back(NewVolID);
740 myIntegers.push_back(n1);
741 myIntegers.push_back(n2);
742 myIntegers.push_back(n3);
743 myIntegers.push_back(n4);
744 myIntegers.push_back(n5);
745 myIntegers.push_back(n6);
746 myIntegers.push_back(n7);
747 myIntegers.push_back(n8);
748 myIntegers.push_back(n12);
749 myIntegers.push_back(n23);
750 myIntegers.push_back(n34);
751 myIntegers.push_back(n41);
752 myIntegers.push_back(n56);
753 myIntegers.push_back(n67);
754 myIntegers.push_back(n78);
755 myIntegers.push_back(n85);
756 myIntegers.push_back(n15);
757 myIntegers.push_back(n26);
758 myIntegers.push_back(n37);
759 myIntegers.push_back(n48);
763 //=======================================================================
764 //function : AddVolume
766 //=======================================================================
767 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
768 int n4, int n5, int n6, int n7, int n8,
769 int n12, int n23, int n34, int n41,
770 int n56, int n67, int n78, int n85,
771 int n15, int n26, int n37, int n48,
772 int n1234,int n1256,int n2367,int n3478,
773 int n1458,int n5678,int nCenter)
775 if ( myType != SMESHDS_AddTriQuadHexa) {
776 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
779 myIntegers.push_back(NewVolID);
780 myIntegers.push_back(n1);
781 myIntegers.push_back(n2);
782 myIntegers.push_back(n3);
783 myIntegers.push_back(n4);
784 myIntegers.push_back(n5);
785 myIntegers.push_back(n6);
786 myIntegers.push_back(n7);
787 myIntegers.push_back(n8);
788 myIntegers.push_back(n12);
789 myIntegers.push_back(n23);
790 myIntegers.push_back(n34);
791 myIntegers.push_back(n41);
792 myIntegers.push_back(n56);
793 myIntegers.push_back(n67);
794 myIntegers.push_back(n78);
795 myIntegers.push_back(n85);
796 myIntegers.push_back(n15);
797 myIntegers.push_back(n26);
798 myIntegers.push_back(n37);
799 myIntegers.push_back(n48);
800 myIntegers.push_back(n1234);
801 myIntegers.push_back(n1256);
802 myIntegers.push_back(n2367);
803 myIntegers.push_back(n3478);
804 myIntegers.push_back(n1458);
805 myIntegers.push_back(n5678);
806 myIntegers.push_back(nCenter);
810 //================================================================================
812 * \brief Record adding a Ball
814 //================================================================================
816 void SMESHDS_Command::AddBall(int NewBallID, int node, double diameter)
818 if ( myType != SMESHDS_AddBall)
820 MESSAGE("SMESHDS_Command::SMESHDS_AddBall : Bad Type");
823 myIntegers.push_back(NewBallID);
824 myIntegers.push_back(node);
825 myReals.push_back(diameter);