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:20:49 +00:00
parent edb91ad6f4
commit 4b5c150fd1

View File

@ -23,7 +23,6 @@
// File : SMESH_subMesh.cxx // File : SMESH_subMesh.cxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH
// $Header$
// //
#include "SMESH_subMesh.hxx" #include "SMESH_subMesh.hxx"
@ -609,6 +608,7 @@ SMESH_Hypothesis::Hypothesis_Status
int oldAlgoState = _algoState; int oldAlgoState = _algoState;
bool modifiedHyp = (event == MODIF_HYP); // if set to true, force event MODIF_ALGO_STATE bool modifiedHyp = (event == MODIF_HYP); // if set to true, force event MODIF_ALGO_STATE
bool needFullClean = false;
bool isApplicableHyp = IsApplicableHypotesis( anHyp ); bool isApplicableHyp = IsApplicableHypotesis( anHyp );
@ -625,6 +625,15 @@ SMESH_Hypothesis::Hypothesis_Status
// ---------------------- // ----------------------
if (isApplicableHyp && !_father->IsNotConformAllowed() && !IsConform( algo )) if (isApplicableHyp && !_father->IsNotConformAllowed() && !IsConform( algo ))
return SMESH_Hypothesis::HYP_NOTCONFORM; 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 +667,7 @@ SMESH_Hypothesis::Hypothesis_Status
// clean all mesh in the tree of the current submesh; // clean all mesh in the tree of the current submesh;
// we must perform it now because later // we must perform it now because later
// we will have no information about the type of the removed algo // we will have no information about the type of the removed algo
CleanDependants(); needFullClean = true;
ComputeStateEngine( CLEAN );
CleanDependsOn();
ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
} }
} }
} }
@ -1012,6 +1018,13 @@ SMESH_Hypothesis::Hypothesis_Status
} }
} }
if ( needFullClean ) {
// added or removed algo is all-dimensional
ComputeStateEngine( CLEAN );
CleanDependsOn();
ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
}
if (stateChange || modifiedHyp) if (stateChange || modifiedHyp)
ComputeStateEngine(MODIF_ALGO_STATE); ComputeStateEngine(MODIF_ALGO_STATE);