Salome HOME
Speed up "Clear mesh data"
[modules/smesh.git] / src / SMESH / SMESH_Mesh.cxx
index 4c3c0a6a0b4a760a958746f4af08bc720a0d67c9..c811621c020bdf25a351e1d144c47ba989f40b92 100644 (file)
@@ -212,46 +212,59 @@ const TopoDS_Solid& SMESH_Mesh::PseudoShape()
 
 void SMESH_Mesh::Clear()
 {
-  // clear sub-meshes; get ready to re-compute as a side-effect 
+  // clear mesh data
+  _myMeshDS->ClearMesh();
 
-  if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) )
-  {
+  // update compute state of submeshes
+  if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) ) {
     SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true,
                                                              /*complexShapeFirst=*/false);
-    while ( smIt->more() )
-    {
+    while ( smIt->more() ) {
       sm = smIt->next();
-      TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();      
-      if ( shapeType == TopAbs_VERTEX || shapeType < TopAbs_SOLID )
-        // all other shapes depends on vertices so they are already cleaned
-        sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
-      // to recompute even if failed
       sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
     }
   }
 
-  // clear entities not on sub-meshes
-
-  SMDS_VolumeIteratorPtr vIt = _myMeshDS->volumesIterator();
-  while ( vIt->more() )
-    _myMeshDS->RemoveFreeElement( vIt->next(), 0 );
-
-  SMDS_FaceIteratorPtr fIt = _myMeshDS->facesIterator();
-  while ( fIt->more() )
-    _myMeshDS->RemoveFreeElement( fIt->next(), 0 );
-
-  SMDS_EdgeIteratorPtr eIt = _myMeshDS->edgesIterator();
-  while ( eIt->more() )
-    _myMeshDS->RemoveFreeElement( eIt->next(), 0 );
-
-  SMDS_NodeIteratorPtr nIt = _myMeshDS->nodesIterator();
-  while ( nIt->more() ) {
-    const SMDS_MeshNode * node = nIt->next();
-    if ( node->NbInverseElements() == 0 )
-      _myMeshDS->RemoveFreeNode( node, 0 );
-    else
-      _myMeshDS->RemoveNode(node);
-  }
+//   // clear sub-meshes; get ready to re-compute as a side-effect 
+
+//   if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) )
+//   {
+//     SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true,
+//                                                              /*complexShapeFirst=*/false);
+//     while ( smIt->more() )
+//     {
+//       sm = smIt->next();
+//       TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();      
+//       if ( shapeType == TopAbs_VERTEX || shapeType < TopAbs_SOLID )
+//         // all other shapes depends on vertices so they are already cleaned
+//         sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
+//       // to recompute even if failed
+//       sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+//     }
+//   }
+
+//   // clear entities not on sub-meshes
+
+//   SMDS_VolumeIteratorPtr vIt = _myMeshDS->volumesIterator();
+//   while ( vIt->more() )
+//     _myMeshDS->RemoveFreeElement( vIt->next(), 0 );
+
+//   SMDS_FaceIteratorPtr fIt = _myMeshDS->facesIterator();
+//   while ( fIt->more() )
+//     _myMeshDS->RemoveFreeElement( fIt->next(), 0 );
+
+//   SMDS_EdgeIteratorPtr eIt = _myMeshDS->edgesIterator();
+//   while ( eIt->more() )
+//     _myMeshDS->RemoveFreeElement( eIt->next(), 0 );
+
+//   SMDS_NodeIteratorPtr nIt = _myMeshDS->nodesIterator();
+//   while ( nIt->more() ) {
+//     const SMDS_MeshNode * node = nIt->next();
+//     if ( node->NbInverseElements() == 0 )
+//       _myMeshDS->RemoveFreeNode( node, 0 );
+//     else
+//       _myMeshDS->RemoveNode(node);
+//   }
 }
 
 //=======================================================================