0020206: EDF SMESH 987: Netgen1D2D3D +submesh

clear mesh if an added local algorithm hides a global all-dimensional one
This commit is contained in:
eap 2009-03-11 15:18:03 +00:00
parent e49d9ab359
commit 7462200bee

View File

@ -609,6 +609,7 @@ SMESH_Hypothesis::Hypothesis_Status
int oldAlgoState = _algoState;
bool modifiedHyp = (event == MODIF_HYP); // if set to true, force event MODIF_ALGO_STATE
bool needFullClean = false;
bool isApplicableHyp = IsApplicableHypotesis( anHyp );
@ -625,6 +626,15 @@ SMESH_Hypothesis::Hypothesis_Status
// ----------------------
if (isApplicableHyp && !_father->IsNotConformAllowed() && !IsConform( algo ))
return SMESH_Hypothesis::HYP_NOTCONFORM;
// check if all-dimensional algo is hidden by other local one
if ( event == ADD_ALGO ) {
SMESH_HypoFilter filter( SMESH_HypoFilter::HasType( algo->GetType() ));
filter.Or( SMESH_HypoFilter::HasType( algo->GetType()+1 ));
filter.Or( SMESH_HypoFilter::HasType( algo->GetType()+2 ));
if ( SMESH_Algo * curAlgo = (SMESH_Algo*) _father->GetHypothesis( _subShape, filter, true ))
needFullClean = ( !curAlgo->NeedDescretBoundary() );
}
}
// ----------------------------------
@ -658,10 +668,7 @@ SMESH_Hypothesis::Hypothesis_Status
// clean all mesh in the tree of the current submesh;
// we must perform it now because later
// we will have no information about the type of the removed algo
CleanDependants();
ComputeStateEngine( CLEAN );
CleanDependsOn();
ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
needFullClean = true;
}
}
}
@ -1012,6 +1019,13 @@ SMESH_Hypothesis::Hypothesis_Status
}
}
if ( needFullClean ) {
// added or removed algo is all-dimensional
ComputeStateEngine( CLEAN );
CleanDependsOn();
ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
}
if (stateChange || modifiedHyp)
ComputeStateEngine(MODIF_ALGO_STATE);