1 // Copyright (C) 2007-2015 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 : AddPolyhedralVolume
301 //=======================================================================
302 void SMESHDS_Command::AddPolyhedralVolume (const int ElementID,
303 const std::vector<int>& nodes_ids,
304 const std::vector<int>& quantities)
306 if ( myType != SMESHDS_AddPolyhedron) {
307 MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
310 myIntegers.push_back(ElementID);
312 int i, nbNodes = nodes_ids.size();
313 myIntegers.push_back(nbNodes);
314 for (i = 0; i < nbNodes; i++) {
315 myIntegers.push_back(nodes_ids[i]);
318 int nbFaces = quantities.size();
319 myIntegers.push_back(nbFaces);
320 for (i = 0; i < nbFaces; i++) {
321 myIntegers.push_back(quantities[i]);
327 //=======================================================================
330 //=======================================================================
331 void SMESHDS_Command::RemoveNode(int NodeID)
333 if ( myType != SMESHDS_RemoveNode)
335 MESSAGE("SMESHDS_Command::RemoveNode : Bad Type");
338 myIntegers.push_back(NodeID);
342 //=======================================================================
345 //=======================================================================
346 void SMESHDS_Command::RemoveElement(int ElementID)
348 if ( myType != SMESHDS_RemoveElement)
350 MESSAGE("SMESHDS_Command::RemoveElement : Bad Type");
353 myIntegers.push_back(ElementID);
357 //=======================================================================
358 //function : ChangeElementNodes
360 //=======================================================================
362 void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
364 if ( myType != SMESHDS_ChangeElementNodes)
366 MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type");
369 myIntegers.push_back(ElementID);
370 myIntegers.push_back(nbnodes);
371 for ( int i = 0; i < nbnodes; i++ )
372 myIntegers.push_back( nodes[ i ] );
377 //=======================================================================
378 //function : ChangePolyhedronNodes
380 //=======================================================================
381 void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID,
382 const std::vector<int>& nodes_ids,
383 const std::vector<int>& quantities)
385 if (myType != SMESHDS_ChangePolyhedronNodes)
387 MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type");
390 myIntegers.push_back(ElementID);
392 int i, nbNodes = nodes_ids.size();
393 myIntegers.push_back(nbNodes);
394 for (i = 0; i < nbNodes; i++) {
395 myIntegers.push_back(nodes_ids[i]);
398 int nbFaces = quantities.size();
399 myIntegers.push_back(nbFaces);
400 for (i = 0; i < nbFaces; i++) {
401 myIntegers.push_back(quantities[i]);
407 //=======================================================================
408 //function : Renumber
410 //=======================================================================
412 void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
414 if ( myType != SMESHDS_Renumber)
416 MESSAGE("SMESHDS_Command::Renumber : Bad Type");
419 myIntegers.push_back(isNodes);
420 myIntegers.push_back(startID);
421 myIntegers.push_back(deltaID);
425 //=======================================================================
428 //=======================================================================
429 SMESHDS_CommandType SMESHDS_Command::GetType()
434 //=======================================================================
437 //=======================================================================
438 int SMESHDS_Command::GetNumber()
443 //=======================================================================
446 //=======================================================================
447 const list < int >&SMESHDS_Command::GetIndexes()
452 //=======================================================================
455 //=======================================================================
456 const list < double >&SMESHDS_Command::GetCoords()
462 //********************************************************************
463 //***** Methods for quadratic elements ******
464 //********************************************************************
466 //=======================================================================
469 //=======================================================================
470 void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
472 if ( myType != SMESHDS_AddQuadEdge) {
473 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
476 myIntegers.push_back(NewEdgeID);
477 myIntegers.push_back(n1);
478 myIntegers.push_back(n2);
479 myIntegers.push_back(n12);
483 //=======================================================================
486 //=======================================================================
487 void SMESHDS_Command::AddFace(int NewFaceID,
488 int n1, int n2, int n3,
489 int n12, int n23, int n31)
491 if ( myType != SMESHDS_AddQuadTriangle) {
492 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
495 myIntegers.push_back(NewFaceID);
496 myIntegers.push_back(n1);
497 myIntegers.push_back(n2);
498 myIntegers.push_back(n3);
499 myIntegers.push_back(n12);
500 myIntegers.push_back(n23);
501 myIntegers.push_back(n31);
505 //=======================================================================
508 //=======================================================================
509 void SMESHDS_Command::AddFace(int NewFaceID,
510 int n1, int n2, int n3,
511 int n12, int n23, int n31, int nCenter)
513 if ( myType != SMESHDS_AddBiQuadTriangle) {
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);
524 myIntegers.push_back(nCenter);
528 //=======================================================================
531 //=======================================================================
532 void SMESHDS_Command::AddFace(int NewFaceID,
533 int n1, int n2, int n3, int n4,
534 int n12, int n23, int n34, int n41)
536 if ( myType != SMESHDS_AddQuadQuadrangle) {
537 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
540 myIntegers.push_back(NewFaceID);
541 myIntegers.push_back(n1);
542 myIntegers.push_back(n2);
543 myIntegers.push_back(n3);
544 myIntegers.push_back(n4);
545 myIntegers.push_back(n12);
546 myIntegers.push_back(n23);
547 myIntegers.push_back(n34);
548 myIntegers.push_back(n41);
552 //=======================================================================
555 //=======================================================================
556 void SMESHDS_Command::AddFace(int NewFaceID,
557 int n1, int n2, int n3, int n4,
558 int n12, int n23, int n34, int n41, int nCenter)
560 if (myType != SMESHDS_AddBiQuadQuadrangle) {
561 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
564 myIntegers.push_back(NewFaceID);
565 myIntegers.push_back(n1);
566 myIntegers.push_back(n2);
567 myIntegers.push_back(n3);
568 myIntegers.push_back(n4);
569 myIntegers.push_back(n12);
570 myIntegers.push_back(n23);
571 myIntegers.push_back(n34);
572 myIntegers.push_back(n41);
573 myIntegers.push_back(nCenter);
577 //=======================================================================
578 //function : AddVolume
580 //=======================================================================
581 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
582 int n12, int n23, int n31,
583 int n14, int n24, int n34)
585 if ( myType != SMESHDS_AddQuadTetrahedron) {
586 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
589 myIntegers.push_back(NewVolID);
590 myIntegers.push_back(n1);
591 myIntegers.push_back(n2);
592 myIntegers.push_back(n3);
593 myIntegers.push_back(n4);
594 myIntegers.push_back(n12);
595 myIntegers.push_back(n23);
596 myIntegers.push_back(n31);
597 myIntegers.push_back(n14);
598 myIntegers.push_back(n24);
599 myIntegers.push_back(n34);
603 //=======================================================================
604 //function : AddVolume
606 //=======================================================================
607 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
608 int n3, int n4, int n5,
609 int n12, int n23, int n34, int n41,
610 int n15, int n25, int n35, int n45)
612 if ( myType != SMESHDS_AddQuadPyramid) {
613 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
616 myIntegers.push_back(NewVolID);
617 myIntegers.push_back(n1);
618 myIntegers.push_back(n2);
619 myIntegers.push_back(n3);
620 myIntegers.push_back(n4);
621 myIntegers.push_back(n5);
622 myIntegers.push_back(n12);
623 myIntegers.push_back(n23);
624 myIntegers.push_back(n34);
625 myIntegers.push_back(n41);
626 myIntegers.push_back(n15);
627 myIntegers.push_back(n25);
628 myIntegers.push_back(n35);
629 myIntegers.push_back(n45);
633 //=======================================================================
634 //function : AddVolume
636 //=======================================================================
637 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
638 int n3, int n4, int n5,int n6,
639 int n12, int n23, int n31,
640 int n45, int n56, int n64,
641 int n14, int n25, int n36)
643 if ( myType != SMESHDS_AddQuadPentahedron) {
644 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
647 myIntegers.push_back(NewVolID);
648 myIntegers.push_back(n1);
649 myIntegers.push_back(n2);
650 myIntegers.push_back(n3);
651 myIntegers.push_back(n4);
652 myIntegers.push_back(n5);
653 myIntegers.push_back(n6);
654 myIntegers.push_back(n12);
655 myIntegers.push_back(n23);
656 myIntegers.push_back(n31);
657 myIntegers.push_back(n45);
658 myIntegers.push_back(n56);
659 myIntegers.push_back(n64);
660 myIntegers.push_back(n14);
661 myIntegers.push_back(n25);
662 myIntegers.push_back(n36);
666 //=======================================================================
667 //function : AddVolume
669 //=======================================================================
670 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
671 int n4, int n5, int n6, int n7, int n8,
672 int n12, int n23, int n34, int n41,
673 int n56, int n67, int n78, int n85,
674 int n15, int n26, int n37, int n48)
676 if ( myType != SMESHDS_AddQuadHexahedron) {
677 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
680 myIntegers.push_back(NewVolID);
681 myIntegers.push_back(n1);
682 myIntegers.push_back(n2);
683 myIntegers.push_back(n3);
684 myIntegers.push_back(n4);
685 myIntegers.push_back(n5);
686 myIntegers.push_back(n6);
687 myIntegers.push_back(n7);
688 myIntegers.push_back(n8);
689 myIntegers.push_back(n12);
690 myIntegers.push_back(n23);
691 myIntegers.push_back(n34);
692 myIntegers.push_back(n41);
693 myIntegers.push_back(n56);
694 myIntegers.push_back(n67);
695 myIntegers.push_back(n78);
696 myIntegers.push_back(n85);
697 myIntegers.push_back(n15);
698 myIntegers.push_back(n26);
699 myIntegers.push_back(n37);
700 myIntegers.push_back(n48);
704 //=======================================================================
705 //function : AddVolume
707 //=======================================================================
708 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
709 int n4, int n5, int n6, int n7, int n8,
710 int n12, int n23, int n34, int n41,
711 int n56, int n67, int n78, int n85,
712 int n15, int n26, int n37, int n48,
713 int n1234,int n1256,int n2367,int n3478,
714 int n1458,int n5678,int nCenter)
716 if ( myType != SMESHDS_AddQuadHexahedron) {
717 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
720 myIntegers.push_back(NewVolID);
721 myIntegers.push_back(n1);
722 myIntegers.push_back(n2);
723 myIntegers.push_back(n3);
724 myIntegers.push_back(n4);
725 myIntegers.push_back(n5);
726 myIntegers.push_back(n6);
727 myIntegers.push_back(n7);
728 myIntegers.push_back(n8);
729 myIntegers.push_back(n12);
730 myIntegers.push_back(n23);
731 myIntegers.push_back(n34);
732 myIntegers.push_back(n41);
733 myIntegers.push_back(n56);
734 myIntegers.push_back(n67);
735 myIntegers.push_back(n78);
736 myIntegers.push_back(n85);
737 myIntegers.push_back(n15);
738 myIntegers.push_back(n26);
739 myIntegers.push_back(n37);
740 myIntegers.push_back(n48);
741 myIntegers.push_back(n1234);
742 myIntegers.push_back(n1256);
743 myIntegers.push_back(n2367);
744 myIntegers.push_back(n3478);
745 myIntegers.push_back(n1458);
746 myIntegers.push_back(n5678);
747 myIntegers.push_back(nCenter);
751 //================================================================================
753 * \brief Record adding a Ball
755 //================================================================================
757 void SMESHDS_Command::AddBall(int NewBallID, int node, double diameter)
759 if ( myType != SMESHDS_AddBall)
761 MESSAGE("SMESHDS_Command::SMESHDS_AddBall : Bad Type");
764 myIntegers.push_back(NewBallID);
765 myIntegers.push_back(node);
766 myReals.push_back(diameter);