1 // Copyright (C) 2007-2008 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
22 // SMESH SMESHDS : management of mesh data and SMESH document
23 // File : SMESH_Command.cxx
24 // 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 //=======================================================================
251 //function : AddPolygonalFace
253 //=======================================================================
254 void SMESHDS_Command::AddPolygonalFace (const int ElementID,
255 std::vector<int> nodes_ids)
257 if (!myType == SMESHDS_AddPolygon) {
258 MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type");
261 myIntegers.push_back(ElementID);
263 int i, nbNodes = nodes_ids.size();
264 myIntegers.push_back(nbNodes);
265 for (i = 0; i < nbNodes; i++) {
266 myIntegers.push_back(nodes_ids[i]);
272 //=======================================================================
273 //function : AddPolyhedralVolume
275 //=======================================================================
276 void SMESHDS_Command::AddPolyhedralVolume (const int ElementID,
277 std::vector<int> nodes_ids,
278 std::vector<int> quantities)
280 if (!myType == SMESHDS_AddPolyhedron) {
281 MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
284 myIntegers.push_back(ElementID);
286 int i, nbNodes = nodes_ids.size();
287 myIntegers.push_back(nbNodes);
288 for (i = 0; i < nbNodes; i++) {
289 myIntegers.push_back(nodes_ids[i]);
292 int nbFaces = quantities.size();
293 myIntegers.push_back(nbFaces);
294 for (i = 0; i < nbFaces; i++) {
295 myIntegers.push_back(quantities[i]);
301 //=======================================================================
304 //=======================================================================
305 void SMESHDS_Command::RemoveNode(int NodeID)
307 if (!myType == SMESHDS_RemoveNode)
309 MESSAGE("SMESHDS_Command::RemoveNode : Bad Type");
312 myIntegers.push_back(NodeID);
316 //=======================================================================
319 //=======================================================================
320 void SMESHDS_Command::RemoveElement(int ElementID)
322 if (!myType == SMESHDS_RemoveElement)
324 MESSAGE("SMESHDS_Command::RemoveElement : Bad Type");
327 myIntegers.push_back(ElementID);
331 //=======================================================================
332 //function : ChangeElementNodes
334 //=======================================================================
336 void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
338 if (!myType == SMESHDS_ChangeElementNodes)
340 MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type");
343 myIntegers.push_back(ElementID);
344 myIntegers.push_back(nbnodes);
345 for ( int i = 0; i < nbnodes; i++ )
346 myIntegers.push_back( nodes[ i ] );
351 //=======================================================================
352 //function : ChangePolyhedronNodes
354 //=======================================================================
355 void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID,
356 std::vector<int> nodes_ids,
357 std::vector<int> quantities)
359 if (myType != SMESHDS_ChangePolyhedronNodes)
361 MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type");
364 myIntegers.push_back(ElementID);
366 int i, nbNodes = nodes_ids.size();
367 myIntegers.push_back(nbNodes);
368 for (i = 0; i < nbNodes; i++) {
369 myIntegers.push_back(nodes_ids[i]);
372 int nbFaces = quantities.size();
373 myIntegers.push_back(nbFaces);
374 for (i = 0; i < nbFaces; i++) {
375 myIntegers.push_back(quantities[i]);
381 //=======================================================================
382 //function : Renumber
384 //=======================================================================
386 void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
388 if (!myType == SMESHDS_Renumber)
390 MESSAGE("SMESHDS_Command::Renumber : Bad Type");
393 myIntegers.push_back(isNodes);
394 myIntegers.push_back(startID);
395 myIntegers.push_back(deltaID);
399 //=======================================================================
402 //=======================================================================
403 SMESHDS_CommandType SMESHDS_Command::GetType()
408 //=======================================================================
411 //=======================================================================
412 int SMESHDS_Command::GetNumber()
417 //=======================================================================
420 //=======================================================================
421 const list < int >&SMESHDS_Command::GetIndexes()
426 //=======================================================================
429 //=======================================================================
430 const list < double >&SMESHDS_Command::GetCoords()
436 //********************************************************************
437 //***** Methods for quadratic elements ******
438 //********************************************************************
440 //=======================================================================
443 //=======================================================================
444 void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
446 if (!myType == SMESHDS_AddQuadEdge) {
447 MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
450 myIntegers.push_back(NewEdgeID);
451 myIntegers.push_back(n1);
452 myIntegers.push_back(n2);
453 myIntegers.push_back(n12);
457 //=======================================================================
460 //=======================================================================
461 void SMESHDS_Command::AddFace(int NewFaceID,
462 int n1, int n2, int n3,
463 int n12, int n23, int n31)
465 if (!myType == SMESHDS_AddQuadTriangle) {
466 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
469 myIntegers.push_back(NewFaceID);
470 myIntegers.push_back(n1);
471 myIntegers.push_back(n2);
472 myIntegers.push_back(n3);
473 myIntegers.push_back(n12);
474 myIntegers.push_back(n23);
475 myIntegers.push_back(n31);
479 //=======================================================================
482 //=======================================================================
483 void SMESHDS_Command::AddFace(int NewFaceID,
484 int n1, int n2, int n3, int n4,
485 int n12, int n23, int n34, int n41)
487 if (!myType == SMESHDS_AddQuadQuadrangle) {
488 MESSAGE("SMESHDS_Command::AddFace : Bad Type");
491 myIntegers.push_back(NewFaceID);
492 myIntegers.push_back(n1);
493 myIntegers.push_back(n2);
494 myIntegers.push_back(n3);
495 myIntegers.push_back(n4);
496 myIntegers.push_back(n12);
497 myIntegers.push_back(n23);
498 myIntegers.push_back(n34);
499 myIntegers.push_back(n41);
503 //=======================================================================
504 //function : AddVolume
506 //=======================================================================
507 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
508 int n12, int n23, int n31,
509 int n14, int n24, int n34)
511 if (!myType == SMESHDS_AddQuadTetrahedron) {
512 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
515 myIntegers.push_back(NewVolID);
516 myIntegers.push_back(n1);
517 myIntegers.push_back(n2);
518 myIntegers.push_back(n3);
519 myIntegers.push_back(n4);
520 myIntegers.push_back(n12);
521 myIntegers.push_back(n23);
522 myIntegers.push_back(n31);
523 myIntegers.push_back(n14);
524 myIntegers.push_back(n24);
525 myIntegers.push_back(n34);
529 //=======================================================================
530 //function : AddVolume
532 //=======================================================================
533 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
534 int n3, int n4, int n5,
535 int n12, int n23, int n34, int n41,
536 int n15, int n25, int n35, int n45)
538 if (!myType == SMESHDS_AddQuadPyramid) {
539 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
542 myIntegers.push_back(NewVolID);
543 myIntegers.push_back(n1);
544 myIntegers.push_back(n2);
545 myIntegers.push_back(n3);
546 myIntegers.push_back(n4);
547 myIntegers.push_back(n5);
548 myIntegers.push_back(n12);
549 myIntegers.push_back(n23);
550 myIntegers.push_back(n34);
551 myIntegers.push_back(n41);
552 myIntegers.push_back(n15);
553 myIntegers.push_back(n25);
554 myIntegers.push_back(n35);
555 myIntegers.push_back(n45);
559 //=======================================================================
560 //function : AddVolume
562 //=======================================================================
563 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
564 int n3, int n4, int n5,int n6,
565 int n12, int n23, int n31,
566 int n45, int n56, int n64,
567 int n14, int n25, int n36)
569 if (!myType == SMESHDS_AddQuadPentahedron) {
570 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
573 myIntegers.push_back(NewVolID);
574 myIntegers.push_back(n1);
575 myIntegers.push_back(n2);
576 myIntegers.push_back(n3);
577 myIntegers.push_back(n4);
578 myIntegers.push_back(n5);
579 myIntegers.push_back(n6);
580 myIntegers.push_back(n12);
581 myIntegers.push_back(n23);
582 myIntegers.push_back(n31);
583 myIntegers.push_back(n45);
584 myIntegers.push_back(n56);
585 myIntegers.push_back(n64);
586 myIntegers.push_back(n14);
587 myIntegers.push_back(n25);
588 myIntegers.push_back(n36);
592 //=======================================================================
593 //function : AddVolume
595 //=======================================================================
596 void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
597 int n4, int n5, int n6, int n7, int n8,
598 int n12, int n23, int n34, int n41,
599 int n56, int n67, int n78, int n85,
600 int n15, int n26, int n37, int n48)
602 if (!myType == SMESHDS_AddQuadHexahedron) {
603 MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
606 myIntegers.push_back(NewVolID);
607 myIntegers.push_back(n1);
608 myIntegers.push_back(n2);
609 myIntegers.push_back(n3);
610 myIntegers.push_back(n4);
611 myIntegers.push_back(n5);
612 myIntegers.push_back(n6);
613 myIntegers.push_back(n7);
614 myIntegers.push_back(n8);
615 myIntegers.push_back(n12);
616 myIntegers.push_back(n23);
617 myIntegers.push_back(n34);
618 myIntegers.push_back(n41);
619 myIntegers.push_back(n56);
620 myIntegers.push_back(n67);
621 myIntegers.push_back(n78);
622 myIntegers.push_back(n85);
623 myIntegers.push_back(n15);
624 myIntegers.push_back(n26);
625 myIntegers.push_back(n37);
626 myIntegers.push_back(n48);