From 7462200bee6b36805719ffb0b2c5801dc798f070 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 11 Mar 2009 15:18:03 +0000 Subject: [PATCH] 0020206: EDF SMESH 987: Netgen1D2D3D +submesh clear mesh if an added local algorithm hides a global all-dimensional one --- src/SMESH/SMESH_subMesh.cxx | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx index 6c484c80a..6d284548c 100644 --- a/src/SMESH/SMESH_subMesh.cxx +++ b/src/SMESH/SMESH_subMesh.cxx @@ -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);