Salome HOME
0022172: [CEA 790] create the groups corresponding to domains
authoreap <eap@opencascade.com>
Fri, 24 May 2013 11:46:27 +0000 (11:46 +0000)
committereap <eap@opencascade.com>
Fri, 24 May 2013 11:46:27 +0000 (11:46 +0000)
1) Reset _algo = 0 if ( event == REMOVE_ALGO || event == REMOVE_FATHER_ALGO )

2) Avoid erasing _computeError holding a WARNING is algo->Compute() returns true

-          if ( !_computeError || ( !ret && _computeError->IsOK() ) )
+          if ( !_computeError || (/* !ret && */_computeError->IsOK() ) )
             _computeError = algo->GetComputeError();

3) Fix notifyListenersOnEvent():

-      if ( !isDeletable || !_eventListeners.count( li_da.first ))
+      if ( !isDeletable || _eventListeners.count( li_da.first ))
         li_da.first->myBusySM.erase( this ); // a listener is hopefully not dead

src/SMESH/SMESH_subMesh.cxx

index 19df51879a632adabcfc1260007c7178aed8b9e1..9d0c236e08454755a9b9f6b596e5f5adc2e14472 100644 (file)
@@ -1049,6 +1049,9 @@ SMESH_Hypothesis::Hypothesis_Status
   if ( stateChange && _algoState == HYP_OK ) // hyp becomes OK
     algo->SetEventListener( this );
 
   if ( stateChange && _algoState == HYP_OK ) // hyp becomes OK
     algo->SetEventListener( this );
 
+  if ( event == REMOVE_ALGO || event == REMOVE_FATHER_ALGO )
+    _algo = 0;
+
   notifyListenersOnEvent( event, ALGO_EVENT, anHyp );
 
   if ( stateChange && oldAlgoState == HYP_OK ) { // hyp becomes KO
   notifyListenersOnEvent( event, ALGO_EVENT, anHyp );
 
   if ( stateChange && oldAlgoState == HYP_OK ) { // hyp becomes KO
@@ -1512,7 +1515,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
           {
             ret = algo->Compute((*_father), shape);
           }
           {
             ret = algo->Compute((*_father), shape);
           }
-          if ( !_computeError || ( !ret && _computeError->IsOK() ) ) // algo can set _computeError of submesh
+          if ( !_computeError || (/* !ret && */_computeError->IsOK() ) ) // algo can set _computeError of submesh
             _computeError = algo->GetComputeError();
         }
         catch ( ::SMESH_ComputeError& comperr ) {
             _computeError = algo->GetComputeError();
         }
         catch ( ::SMESH_ComputeError& comperr ) {
@@ -2272,7 +2275,7 @@ void SMESH_subMesh::notifyListenersOnEvent( const int         event,
 
       li_da.first->ProcessEvent( event, eventType, this, li_da.second, hyp );
 
 
       li_da.first->ProcessEvent( event, eventType, this, li_da.second, hyp );
 
-      if ( !isDeletable || !_eventListeners.count( li_da.first ))
+      if ( !isDeletable || _eventListeners.count( li_da.first ))
         li_da.first->myBusySM.erase( this ); // a listener is hopefully not dead
     }
   }
         li_da.first->myBusySM.erase( this ); // a listener is hopefully not dead
     }
   }