]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMESH_I/SMESH_MeshEditor_i.cxx
Salome HOME
Issue 0013373: EDF PAL 273 : Option Single/Multi file dump
[modules/smesh.git] / src / SMESH_I / SMESH_MeshEditor_i.cxx
index 824a1314160da6c790599fc71a4b55b930a85ceb..218fe5a5dc5c0e2475cd49db299b7ff6b6262373 100644 (file)
@@ -311,7 +311,15 @@ namespace {
         if ( const SMDS_MeshNode * n = theMeshDS->FindNode( aElementsId[i] ))
           theNodeSet.insert( theNodeSet.end(), n);
     }
-    else {
+    else if ( SMESH::DownCast<SMESH_Mesh_i*>( theObject ))
+    {
+      SMDS_NodeIteratorPtr nIt = theMeshDS->nodesIterator();
+      while ( nIt->more( ))
+        if( const SMDS_MeshElement * elem = nIt->next() )
+          theNodeSet.insert( elem->begin_nodes(), elem->end_nodes());
+    }
+    else
+    {
       for(int i = 0; i < aElementsId->length(); i++)
         if( const SMDS_MeshElement * elem = theMeshDS->FindElement( aElementsId[i] ))
           theNodeSet.insert( elem->begin_nodes(), elem->end_nodes());
@@ -4785,6 +4793,74 @@ CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
     myMesh->SetIsModified( true );
   return isDone;
 }
+//================================================================================
+/*!
+ * \brief Makes a part of the mesh quadratic
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::ConvertToQuadraticObject(CORBA::Boolean            theForce3d,
+                                                  SMESH::SMESH_IDSource_ptr theObject)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  TPythonDump pyDump;
+  TIDSortedElemSet elems;
+  if ( idSourceToSet( theObject, GetMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
+  {
+    if ( elems.empty() )
+    {
+      ConvertToQuadratic( theForce3d );
+    }
+    else if ( (*elems.begin())->GetType() == SMDSAbs_Node )
+    {
+      THROW_SALOME_CORBA_EXCEPTION("Group of nodes is not allowed", SALOME::BAD_PARAM);
+    }
+    else
+    {
+      ::SMESH_MeshEditor anEditor( myMesh );
+      anEditor.ConvertToQuadratic(theForce3d, elems);
+    }
+  }
+  myMesh->GetMeshDS()->Modified();
+  myMesh->SetIsModified( true );
+
+  pyDump << this << ".ConvertToQuadraticObject( "<<theForce3d<<", "<<theObject<<" )";
+}
+
+//================================================================================
+/*!
+ * \brief Makes a part of the mesh linear
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::ConvertFromQuadraticObject(SMESH::SMESH_IDSource_ptr theObject)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  TPythonDump pyDump;
+  TIDSortedElemSet elems;
+  if ( idSourceToSet( theObject, GetMeshDS(), elems, SMDSAbs_All, /*emptyIfIsMesh=*/true ))
+  {
+    if ( elems.empty() )
+    {
+      ConvertFromQuadratic();
+    }
+    else if ( (*elems.begin())->GetType() == SMDSAbs_Node )
+    {
+      THROW_SALOME_CORBA_EXCEPTION("Group of nodes is not allowed", SALOME::BAD_PARAM);
+    }
+    else
+    {
+      ::SMESH_MeshEditor anEditor( myMesh );
+      anEditor.ConvertFromQuadratic(elems);
+    }
+  }
+  myMesh->GetMeshDS()->Modified();
+  myMesh->SetIsModified( true );
+
+  pyDump << this << ".ConvertFromQuadraticObject( "<<theObject<<" )";
+}
 
 //=======================================================================
 //function : makeMesh
@@ -5512,6 +5588,7 @@ CORBA::Boolean SMESH_MeshEditor_i::Make2DMeshFrom3D()
  * The nodes of the internal faces at the boundaries of the groups are doubled.
  * In option, the internal faces are replaced by flat elements.
  * Triangles are transformed in prisms, and quadrangles in hexahedrons.
+ * The flat elements are stored in groups of volumes.
  * @param theDomains - list of groups of volumes
  * @param createJointElems - if TRUE, create the elements
  * @return TRUE if operation has been completed successfully, FALSE otherwise
@@ -5544,6 +5621,7 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::Li
   }
 
   bool aResult = aMeshEditor.DoubleNodesOnGroupBoundaries( domains, createJointElems );
+  // TODO publish the groups of flat elements in study
 
   storeResult( aMeshEditor) ;
   myMesh->GetMeshDS()->Modified();