]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMDS/SMDS_Mesh.cxx
Salome HOME
PR: synchro V6_main tag mergeto_V7_main_11Feb13
[modules/smesh.git] / src / SMDS / SMDS_Mesh.cxx
index b0544d9d2e0a889d51e07b331096412adfafb454..999df6d2581a6fd163d9b48773ae048aa929a0d3 100644 (file)
@@ -2656,6 +2656,13 @@ SMDS_Mesh::~SMDS_Mesh()
         myNodeIDFactory->ReleaseID(node->GetID(), node->getVtkId());
       }
   }
+  myGrid->Delete();
+
+  delete myNodePool;
+  delete myVolumePool;
+  delete myFacePool;
+  delete myEdgePool;
+  delete myBallPool;
 }
 
 //================================================================================
@@ -2688,50 +2695,56 @@ void SMDS_Mesh::Clear()
     myElementIDFactory->Clear();
     }
 
-  SMDS_ElemIteratorPtr itv = elementsIterator();
-  while (itv->more())
-    {
-      SMDS_MeshElement* elem = (SMDS_MeshElement*)(itv->next());
-      SMDSAbs_ElementType aType = elem->GetType();
-      switch (aType)
-      {
-        case SMDSAbs_0DElement:
-          delete elem;
-          break;
-        case SMDSAbs_Edge:
-           myEdgePool->destroy(static_cast<SMDS_VtkEdge*>(elem));
-          break;
-        case SMDSAbs_Face:
-          myFacePool->destroy(static_cast<SMDS_VtkFace*>(elem));
-          break;
-        case SMDSAbs_Volume:
-          myVolumePool->destroy(static_cast<SMDS_VtkVolume*>(elem));
-          break;
-        case SMDSAbs_Ball:
-          myBallPool->destroy(static_cast<SMDS_BallElement*>(elem));
-          break;
-        default:
-          break;
-      }
-    }
-  myCells.clear();
-  myCellIdVtkToSmds.clear();
-  //myCellIdSmdsToVtk.clear();
+  // SMDS_ElemIteratorPtr itv = elementsIterator();
+  // while (itv->more())
+  //   {
+  //     SMDS_MeshElement* elem = (SMDS_MeshElement*)(itv->next());
+  //     SMDSAbs_ElementType aType = elem->GetType();
+  //     switch (aType)
+  //     {
+  //       case SMDSAbs_0DElement:
+  //         delete elem;
+  //         break;
+  //       case SMDSAbs_Edge:
+  //          myEdgePool->destroy(static_cast<SMDS_VtkEdge*>(elem));
+  //         break;
+  //       case SMDSAbs_Face:
+  //         myFacePool->destroy(static_cast<SMDS_VtkFace*>(elem));
+  //         break;
+  //       case SMDSAbs_Volume:
+  //         myVolumePool->destroy(static_cast<SMDS_VtkVolume*>(elem));
+  //         break;
+  //       case SMDSAbs_Ball:
+  //         myBallPool->destroy(static_cast<SMDS_BallElement*>(elem));
+  //         break;
+  //       default:
+  //         break;
+  //     }
+  //   }
+  myVolumePool->clear();
+  myFacePool->clear();
+  myEdgePool->clear();
+  myBallPool->clear();
+
+  clearVector( myCells );
+  clearVector( myCellIdVtkToSmds );
 
   SMDS_NodeIteratorPtr itn = nodesIterator();
   while (itn->more())
     {
       SMDS_MeshNode *node = (SMDS_MeshNode*)(itn->next());
       node->SetPosition(SMDS_SpacePosition::originSpacePosition());
-      myNodePool->destroy(node);
+      //myNodePool->destroy(node);
     }
-  myNodes.clear();
+  myNodePool->clear();
+  clearVector( myNodes );
 
   list<SMDS_Mesh*>::iterator itc=myChildren.begin();
   while(itc!=myChildren.end())
     (*itc)->Clear();
 
   myModified = false;
+  myModifTime++;
   xmin = 0; xmax = 0;
   ymin = 0; ymax = 0;
   zmin = 0; zmax = 0;
@@ -2929,16 +2942,21 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementEntityIterator(SMDSAbs_EntityType type) c
 SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator(SMDSAbs_ElementType type) const
 {
   // naturally always sorted by ID
-  if ( type == SMDSAbs_All )
-  {
+  switch ( type ) {
+
+  case SMDSAbs_All:
     return SMDS_ElemIteratorPtr (new ElemVecIterator<const SMDS_MeshElement*>(myCells));
-  }
-  else
-  {
+
+  case SMDSAbs_Node:
+    return SMDS_ElemIteratorPtr
+      ( new ElemVecIterator<const SMDS_MeshElement*, SMDS_MeshNode*>( myNodes ));
+
+  default:
     typedef ElemVecIterator
       < const SMDS_MeshElement*, SMDS_MeshCell*, SMDS_MeshElement::TypeFilter > TIterator;
     return SMDS_ElemIteratorPtr (new TIterator(myCells, SMDS_MeshElement::TypeFilter( type )));
   }
+  return SMDS_ElemIteratorPtr();
 }
 
 ///////////////////////////////////////////////////////////////////////////////