+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ int NbNodes = IDsOfNodes.length();
+ vector< const SMDS_MeshNode*> n(NbNodes);
+ for(int i=0;i<NbNodes;i++)
+ n[i]=GetMeshDS()->FindNode(IDsOfNodes[i]);
+
+ SMDS_MeshElement* elem = 0;
+ switch(NbNodes)
+ {
+ case 4 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3]); break;
+ case 5 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4]); break;
+ case 6 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5]); break;
+ case 8 :elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7]); break;
+ case 10:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],
+ n[6],n[7],n[8],n[9]);
+ break;
+ case 13:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],
+ n[7],n[8],n[9],n[10],n[11],n[12]);
+ break;
+ case 15:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],
+ n[9],n[10],n[11],n[12],n[13],n[14]);
+ break;
+ case 20:elem = GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],
+ n[8],n[9],n[10],n[11],n[12],n[13],n[14],
+ n[15],n[16],n[17],n[18],n[19]);
+ break;
+ }
+
+ // Update Python script
+ TPythonDump() << "volID = " << this << ".AddVolume( " << IDsOfNodes << " )";
+#ifdef _DEBUG_
+ TPythonDump() << "print 'AddVolume: ', volID";
+#endif
+
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
+
+//=============================================================================
+/*!
+ * AddPolyhedralVolume
+ */
+//=============================================================================
+CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume
+ (const SMESH::long_array & IDsOfNodes,
+ const SMESH::long_array & Quantities)
+{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ int NbNodes = IDsOfNodes.length();
+ std::vector<const SMDS_MeshNode*> n (NbNodes);
+ for (int i = 0; i < NbNodes; i++)
+ n[i] = GetMeshDS()->FindNode(IDsOfNodes[i]);
+
+ int NbFaces = Quantities.length();
+ std::vector<int> q (NbFaces);
+ for (int j = 0; j < NbFaces; j++)
+ q[j] = Quantities[j];
+
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(n, q);
+
+ // Update Python script
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolume( "
+ << IDsOfNodes << ", " << Quantities << " )";
+#ifdef _DEBUG_
+ TPythonDump() << "print 'AddPolyhedralVolume: ', volID";
+#endif
+
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}
+
+//=============================================================================
+/*!
+ * AddPolyhedralVolumeByFaces
+ */
+//=============================================================================
+CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
+ (const SMESH::long_array & IdsOfFaces)
+{
+ myLastCreatedElems = new SMESH::long_array();
+ myLastCreatedNodes = new SMESH::long_array();
+
+ int NbFaces = IdsOfFaces.length();
+ std::vector<const SMDS_MeshNode*> poly_nodes;
+ std::vector<int> quantities (NbFaces);
+
+ for (int i = 0; i < NbFaces; i++) {
+ const SMDS_MeshElement* aFace = GetMeshDS()->FindElement(IdsOfFaces[i]);
+ quantities[i] = aFace->NbNodes();
+
+ SMDS_ElemIteratorPtr It = aFace->nodesIterator();
+ while (It->more()) {
+ poly_nodes.push_back(static_cast<const SMDS_MeshNode *>(It->next()));
+ }
+ }
+
+ const SMDS_MeshElement* elem = GetMeshDS()->AddPolyhedralVolume(poly_nodes, quantities);
+
+ // Update Python script
+ TPythonDump() << "volID = " << this << ".AddPolyhedralVolumeByFaces( "
+ << IdsOfFaces << " )";
+#ifdef _DEBUG_
+ TPythonDump() << "print 'AddPolyhedralVolume: ', volID";
+#endif
+
+ if(elem)
+ return elem->GetID();
+
+ return 0;
+}