1 // Copyright (C) 2007-2013 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
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, int n4,
511 int n12, int n23, int n34, int n41)
513 if (!myType == SMESHDS_AddQuadQuadrangle) {
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(n4);
522 myIntegers.push_back(n12);
523 myIntegers.push_back(n23);
524 myIntegers.push_back(n34);
525 myIntegers.push_back(n41);
529 //=======================================================================
532 //=======================================================================
533 void SMESHDS_Command::AddFace(int NewFaceID,
534 int n1, int n2, int n3, int n4,
535 int n12, int n23, int n34, int n41, int nCenter)
537 if (myType != SMESHDS_AddBiQuadQuadrangle) {
538 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
541 myIntegers.push_back(NewFaceID);
542 myIntegers.push_back(n1);
543 myIntegers.push_back(n2);
544 myIntegers.push_back(n3);
545 myIntegers.push_back(n4);
546 myIntegers.push_back(n12);
547 myIntegers.push_back(n23);
548 myIntegers.push_back(n34);
549 myIntegers.push_back(n41);
550 myIntegers.push_back(nCenter);
554 //=======================================================================
555 //function : AddVolume
557 //=======================================================================
558 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
559 int n12, int n23, int n31,
560 int n14, int n24, int n34)
562 if (!myType == SMESHDS_AddQuadTetrahedron) {
563 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
566 myIntegers.push_back(NewVolID);
567 myIntegers.push_back(n1);
568 myIntegers.push_back(n2);
569 myIntegers.push_back(n3);
570 myIntegers.push_back(n4);
571 myIntegers.push_back(n12);
572 myIntegers.push_back(n23);
573 myIntegers.push_back(n31);
574 myIntegers.push_back(n14);
575 myIntegers.push_back(n24);
576 myIntegers.push_back(n34);
580 //=======================================================================
581 //function : AddVolume
583 //=======================================================================
584 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
585 int n3, int n4, int n5,
586 int n12, int n23, int n34, int n41,
587 int n15, int n25, int n35, int n45)
589 if (!myType == SMESHDS_AddQuadPyramid) {
590 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
593 myIntegers.push_back(NewVolID);
594 myIntegers.push_back(n1);
595 myIntegers.push_back(n2);
596 myIntegers.push_back(n3);
597 myIntegers.push_back(n4);
598 myIntegers.push_back(n5);
599 myIntegers.push_back(n12);
600 myIntegers.push_back(n23);
601 myIntegers.push_back(n34);
602 myIntegers.push_back(n41);
603 myIntegers.push_back(n15);
604 myIntegers.push_back(n25);
605 myIntegers.push_back(n35);
606 myIntegers.push_back(n45);
610 //=======================================================================
611 //function : AddVolume
613 //=======================================================================
614 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
615 int n3, int n4, int n5,int n6,
616 int n12, int n23, int n31,
617 int n45, int n56, int n64,
618 int n14, int n25, int n36)
620 if (!myType == SMESHDS_AddQuadPentahedron) {
621 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
624 myIntegers.push_back(NewVolID);
625 myIntegers.push_back(n1);
626 myIntegers.push_back(n2);
627 myIntegers.push_back(n3);
628 myIntegers.push_back(n4);
629 myIntegers.push_back(n5);
630 myIntegers.push_back(n6);
631 myIntegers.push_back(n12);
632 myIntegers.push_back(n23);
633 myIntegers.push_back(n31);
634 myIntegers.push_back(n45);
635 myIntegers.push_back(n56);
636 myIntegers.push_back(n64);
637 myIntegers.push_back(n14);
638 myIntegers.push_back(n25);
639 myIntegers.push_back(n36);
643 //=======================================================================
644 //function : AddVolume
646 //=======================================================================
647 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
648 int n4, int n5, int n6, int n7, int n8,
649 int n12, int n23, int n34, int n41,
650 int n56, int n67, int n78, int n85,
651 int n15, int n26, int n37, int n48)
653 if (!myType == SMESHDS_AddQuadHexahedron) {
654 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
657 myIntegers.push_back(NewVolID);
658 myIntegers.push_back(n1);
659 myIntegers.push_back(n2);
660 myIntegers.push_back(n3);
661 myIntegers.push_back(n4);
662 myIntegers.push_back(n5);
663 myIntegers.push_back(n6);
664 myIntegers.push_back(n7);
665 myIntegers.push_back(n8);
666 myIntegers.push_back(n12);
667 myIntegers.push_back(n23);
668 myIntegers.push_back(n34);
669 myIntegers.push_back(n41);
670 myIntegers.push_back(n56);
671 myIntegers.push_back(n67);
672 myIntegers.push_back(n78);
673 myIntegers.push_back(n85);
674 myIntegers.push_back(n15);
675 myIntegers.push_back(n26);
676 myIntegers.push_back(n37);
677 myIntegers.push_back(n48);
681 //=======================================================================
682 //function : AddVolume
684 //=======================================================================
685 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
686 int n4, int n5, int n6, int n7, int n8,
687 int n12, int n23, int n34, int n41,
688 int n56, int n67, int n78, int n85,
689 int n15, int n26, int n37, int n48,
690 int n1234,int n1256,int n2367,int n3478,
691 int n1458,int n5678,int nCenter)
693 if (!myType == SMESHDS_AddQuadHexahedron) {
694 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
697 myIntegers.push_back(NewVolID);
698 myIntegers.push_back(n1);
699 myIntegers.push_back(n2);
700 myIntegers.push_back(n3);
701 myIntegers.push_back(n4);
702 myIntegers.push_back(n5);
703 myIntegers.push_back(n6);
704 myIntegers.push_back(n7);
705 myIntegers.push_back(n8);
706 myIntegers.push_back(n12);
707 myIntegers.push_back(n23);
708 myIntegers.push_back(n34);
709 myIntegers.push_back(n41);
710 myIntegers.push_back(n56);
711 myIntegers.push_back(n67);
712 myIntegers.push_back(n78);
713 myIntegers.push_back(n85);
714 myIntegers.push_back(n15);
715 myIntegers.push_back(n26);
716 myIntegers.push_back(n37);
717 myIntegers.push_back(n48);
718 myIntegers.push_back(n1234);
719 myIntegers.push_back(n1256);
720 myIntegers.push_back(n2367);
721 myIntegers.push_back(n3478);
722 myIntegers.push_back(n1458);
723 myIntegers.push_back(n5678);
724 myIntegers.push_back(nCenter);
728 //================================================================================
730 * \brief Record adding a Ball
732 //================================================================================
734 void SMESHDS_Command::AddBall(int NewBallID, int node, double diameter)
736 if (!myType == SMESHDS_AddBall)
738 MESSAGE("SMESHDS_Command::SMESHDS_AddBall : Bad Type");
741 myIntegers.push_back(NewBallID);
742 myIntegers.push_back(node);
743 myReals.push_back(diameter);