break;
case COMPUTE: // nothing to do
break;
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ case COMPUTE_CANCELED: // nothing to do
+ break;
+#endif
case CLEAN:
CleanDependants();
RemoveSubMeshElementsAndNodes();
UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED
}
break;
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ case COMPUTE_CANCELED: // nothing to do
+ break;
+#endif
case CLEAN:
CleanDependants();
RemoveSubMeshElementsAndNodes();
break;
case COMPUTE: // nothing to do
break;
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ case COMPUTE_CANCELED: // nothing to do
+ break;
+#endif
case CLEAN:
CleanDependants(); // clean sub-meshes, dependant on this one, with event CLEAN
RemoveSubMeshElementsAndNodes();
break;
case COMPUTE: // nothing to do
break;
+#ifdef WITH_SMESH_CANCEL_COMPUTE
+ case COMPUTE_CANCELED:
+ {
+ algo = gen->GetAlgo((*_father), _subShape);
+ algo->CancelCompute();
+ }
+ break;
+#endif
case CLEAN:
CleanDependants(); // submeshes dependent on me should be cleaned as well
RemoveSubMeshElementsAndNodes();
// Check my state
if ( !_computeError || _computeError->IsOK() )
{
- _computeState = COMPUTE_OK;
+ _computeState = IsMeshComputed() ? COMPUTE_OK : FAILED_TO_COMPUTE;
}
else
{
if ( _computeError->myComment.size() > 0 )
text << " \"" << _computeError->myComment << "\"";
-#ifdef _DEBUG_
- MESSAGE_BEGIN ( text );
- // Show vertices location of a failed shape
- TopTools_IndexedMapOfShape vMap;
- TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap );
- MESSAGE_ADD ( "Subshape vertices " << ( vMap.Extent()>10 ? "(first 10):" : ":") );
- for ( int iv = 1; iv <= vMap.Extent() && iv < 11; ++iv ) {
- gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) )));
- MESSAGE_ADD ( "#" << _father->GetMeshDS()->ShapeToIndex( vMap( iv )) << " "
- << P.X() << " " << P.Y() << " " << P.Z() << " " );
- }
-#else
INFOS( text );
-#endif
+
_computeState = FAILED_TO_COMPUTE;
noErrors = false;
}
* \brief Notify stored event listeners on the occured event
* \param event - algo_event or compute_event itself
* \param eventType - algo_event or compute_event
- * \param subMesh - the submesh where the event occures
- * \param data - listener data stored in the subMesh
* \param hyp - hypothesis, if eventType is algo_event
*/
//================================================================================
{
map< EventListener*, EventListenerData* >::iterator l_d = myEventListeners.begin();
for ( ; l_d != myEventListeners.end(); ++l_d )
- l_d->first->ProcessEvent( event, eventType, this, l_d->second, hyp );
+ if ( (*l_d).first->myBusySM.insert( this ).second )
+ {
+ l_d->first->ProcessEvent( event, eventType, this, l_d->second, hyp );
+ l_d->first->myBusySM.erase( this );
+ }
}
//================================================================================