1 // Copyright (C) 2007-2016 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);
688 //=======================================================================
689 //function : AddVolume
691 //=======================================================================
692 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
693 int n4, int n5, int n6, int n7, int n8,
694 int n12, int n23, int n34, int n41,
695 int n56, int n67, int n78, int n85,
696 int n15, int n26, int n37, int n48)
698 if ( myType != SMESHDS_AddQuadHexahedron) {
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(n7);
710 myIntegers.push_back(n8);
711 myIntegers.push_back(n12);
712 myIntegers.push_back(n23);
713 myIntegers.push_back(n34);
714 myIntegers.push_back(n41);
715 myIntegers.push_back(n56);
716 myIntegers.push_back(n67);
717 myIntegers.push_back(n78);
718 myIntegers.push_back(n85);
719 myIntegers.push_back(n15);
720 myIntegers.push_back(n26);
721 myIntegers.push_back(n37);
722 myIntegers.push_back(n48);
726 //=======================================================================
727 //function : AddVolume
729 //=======================================================================
730 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
731 int n4, int n5, int n6, int n7, int n8,
732 int n12, int n23, int n34, int n41,
733 int n56, int n67, int n78, int n85,
734 int n15, int n26, int n37, int n48,
735 int n1234,int n1256,int n2367,int n3478,
736 int n1458,int n5678,int nCenter)
738 if ( myType != SMESHDS_AddQuadHexahedron) {
739 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
742 myIntegers.push_back(NewVolID);
743 myIntegers.push_back(n1);
744 myIntegers.push_back(n2);
745 myIntegers.push_back(n3);
746 myIntegers.push_back(n4);
747 myIntegers.push_back(n5);
748 myIntegers.push_back(n6);
749 myIntegers.push_back(n7);
750 myIntegers.push_back(n8);
751 myIntegers.push_back(n12);
752 myIntegers.push_back(n23);
753 myIntegers.push_back(n34);
754 myIntegers.push_back(n41);
755 myIntegers.push_back(n56);
756 myIntegers.push_back(n67);
757 myIntegers.push_back(n78);
758 myIntegers.push_back(n85);
759 myIntegers.push_back(n15);
760 myIntegers.push_back(n26);
761 myIntegers.push_back(n37);
762 myIntegers.push_back(n48);
763 myIntegers.push_back(n1234);
764 myIntegers.push_back(n1256);
765 myIntegers.push_back(n2367);
766 myIntegers.push_back(n3478);
767 myIntegers.push_back(n1458);
768 myIntegers.push_back(n5678);
769 myIntegers.push_back(nCenter);
773 //================================================================================
775 * \brief Record adding a Ball
777 //================================================================================
779 void SMESHDS_Command::AddBall(int NewBallID, int node, double diameter)
781 if ( myType != SMESHDS_AddBall)
783 MESSAGE("SMESHDS_Command::SMESHDS_AddBall : Bad Type");
786 myIntegers.push_back(NewBallID);
787 myIntegers.push_back(node);
788 myReals.push_back(diameter);