Fix regression of SMESH_TEST/Grids/smesh/imps6/G0

Clear _ImportData::_n2n if it's no more useful
This commit is contained in:
eap 2013-08-15 12:10:20 +00:00
parent dac0310307
commit 4031dc9808

View File

@ -182,10 +182,11 @@ namespace // INTERNAL STUFF
if ( !_importMeshSubDS ) return;
SMDS_ElemIteratorPtr eIt = _importMeshSubDS->GetElements();
while ( eIt->more() )
meshDS->RemoveFreeElement( eIt->next(), _importMeshSubDS, /*fromGroups=*/false );
meshDS->RemoveFreeElement( eIt->next(), 0, /*fromGroups=*/false );
SMDS_NodeIteratorPtr nIt = _importMeshSubDS->GetNodes();
while ( nIt->more() )
meshDS->RemoveFreeNode( nIt->next(), _importMeshSubDS, /*fromGroups=*/false );
meshDS->RemoveFreeNode( nIt->next(), 0, /*fromGroups=*/false );
_importMeshSubDS->Clear();
_n2n.clear();
_e2e.clear();
}
@ -266,6 +267,7 @@ namespace // INTERNAL STUFF
const SMESH_Hypothesis* hyp);
void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data );
void clearSubmesh ( SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub );
void clearN2N ( SMESH_Mesh* tgtMesh );
// mark sm as missing src hyp with valid groups
static void waitHypModification(SMESH_subMesh* sm)
@ -347,6 +349,18 @@ namespace // INTERNAL STUFF
}
}
//--------------------------------------------------------------------------------
/*!
* \brief Clear _ImportData::_n2n.
* _n2n is usefull within one mesh.Compute() only
*/
void _Listener::clearN2N( SMESH_Mesh* tgtMesh )
{
list< _ImportData >& dList = get()->_tgtMesh2ImportData[tgtMesh];
list< _ImportData >::iterator d = dList.begin();
for ( ; d != dList.end(); ++d )
d->_n2n.clear();
}
//--------------------------------------------------------------------------------
/*!
* \brief Clear submeshes and remove imported mesh and/or groups if necessary
* \param sm - cleared submesh
@ -448,6 +462,8 @@ namespace // INTERNAL STUFF
default:;
}
}
if ( !data->mySubMeshes.empty() )
clearN2N( data->mySubMeshes.front()->GetFather() );
}
else // event of Import submesh
{
@ -496,6 +512,10 @@ namespace // INTERNAL STUFF
d->_computedSubM.insert( *smIt);
}
}
// Clear _ImportData::_n2n if it's no more useful, i.e. when
// the event is not within mesh.Compute()
if ( SMESH_subMesh::ALGO_EVENT == eventType )
clearN2N( subMesh->GetFather() );
}
}