-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
{
if(MYDEBUG) MESSAGE("SMESH_Mesh::~SMESH_Mesh");
- // avoid usual removal of elements while processing RemoveHypothesis( algo ) event
- SMESHDS_SubMeshIteratorPtr smIt = _myMeshDS->SubMeshes();
- while ( smIt->more() )
- const_cast<SMESHDS_SubMesh*>( smIt->next() )->Clear();
+ if ( _myDocument ) // avoid destructing _myMeshDS from ~SMESH_Gen()
+ _myDocument->RemoveMesh( _id );
+ _myDocument = 0;
+
+ // remove self from studyContext
+ if ( _gen )
+ {
+ StudyContextStruct * studyContext = _gen->GetStudyContext();
+ studyContext->mapMesh.erase( _id );
+ }
+
+ _myMeshDS->ClearMesh();
// issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study
// Notify event listeners at least that something happens
if ( _callUp) delete _callUp;
_callUp = 0;
- // remove self from studyContext
- if ( _gen )
- {
- StudyContextStruct * studyContext = _gen->GetStudyContext();
- studyContext->mapMesh.erase( _id );
- }
- if ( _myDocument )
- _myDocument->RemoveMesh( _id );
- _myDocument = 0;
-
if ( _myMeshDS ) {
// delete _myMeshDS, in a thread in order not to block closing a study with large meshes
#ifndef WIN32
if ( !GetMeshDS()->IsUsedHypothesis( hyp ))
return;
- if (_callUp && hyp)
- _callUp->HypothesisModified( hyp->GetID() );
+ int nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() );
+ if ( hyp && _callUp && !_callUp->IsLoaded() ) // for not loaded mesh (#16648)
+ {
+ _callUp->HypothesisModified( hyp->GetID(), /*updateIcons=*/true );
+ nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() ); // after loading mesh
+ }
SMESH_Algo *algo;
const SMESH_HypoFilter* compatibleHypoKind;
}
HasModificationsToDiscard(); // to reset _isModified flag if mesh becomes empty
GetMeshDS()->Modified();
+
+ int newNbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() );
+ if ( hyp && _callUp )
+ _callUp->HypothesisModified( hyp->GetID(), newNbEntities != nbEntities );
}
//=============================================================================