21948: EDF SMESH : Memory is not freed when deleting a mesh

Optimize for groups in large meshes
This commit is contained in:
eap 2012-12-14 13:41:14 +00:00
parent dcf5dee894
commit 47709d42f2

View File

@ -567,12 +567,12 @@ vtkUnstructuredGrid* SMESH_VisualObjDef::GetUnstructuredGrid()
bool SMESH_VisualObjDef::IsValid() const bool SMESH_VisualObjDef::IsValid() const
{ {
//MESSAGE("SMESH_VisualObjDef::IsValid"); //MESSAGE("SMESH_VisualObjDef::IsValid");
return GetNbEntities(SMDSAbs_Node) > 0 || return ( GetNbEntities(SMDSAbs_0DElement) > 0 ||
GetNbEntities(SMDSAbs_0DElement) > 0 ||
GetNbEntities(SMDSAbs_Ball ) > 0 || GetNbEntities(SMDSAbs_Ball ) > 0 ||
GetNbEntities(SMDSAbs_Edge ) > 0 || GetNbEntities(SMDSAbs_Edge ) > 0 ||
GetNbEntities(SMDSAbs_Face ) > 0 || GetNbEntities(SMDSAbs_Face ) > 0 ||
GetNbEntities(SMDSAbs_Volume) > 0 ; GetNbEntities(SMDSAbs_Volume ) > 0 ||
GetNbEntities(SMDSAbs_Node ) > 0 );
} }
//================================================================================= //=================================================================================
@ -659,6 +659,8 @@ SMESH_MeshObj::~SMESH_MeshObj()
{ {
if ( MYDEBUG ) if ( MYDEBUG )
MESSAGE("SMESH_MeshObj - this = "<<this<<"\n"); MESSAGE("SMESH_MeshObj - this = "<<this<<"\n");
if ( myEmptyGrid )
myEmptyGrid->Delete();
} }
//================================================================================= //=================================================================================
@ -995,11 +997,16 @@ int SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList&
theResList.clear(); theResList.clear();
SMDS_Mesh* aMesh = myMeshObj->GetMesh(); SMDS_Mesh* aMesh = myMeshObj->GetMesh();
if ( myGroupServer->Size() == 0 || aMesh == 0 ) if ( aMesh == 0 )
return 0; return 0;
SMDSAbs_ElementType aGrpType = SMDSAbs_ElementType(myGroupServer->GetType()); SMDSAbs_ElementType aGrpType = SMDSAbs_ElementType(myGroupServer->GetType());
if ( aGrpType != theType && theType != SMDSAbs_Node )
return 0;
SMESH::long_array_var anIds = myGroupServer->GetListOfID(); SMESH::long_array_var anIds = myGroupServer->GetListOfID();
if ( anIds->length() == 0 )
return 0;
if ( aGrpType == theType ) if ( aGrpType == theType )
return getPointers( theType, anIds, aMesh, theResList ); return getPointers( theType, anIds, aMesh, theResList );