Salome HOME
Generalize "Cancel Compute" mechanism to be able to report
authoreap <eap@opencascade.com>
Fri, 20 Jul 2012 16:11:12 +0000 (16:11 +0000)
committereap <eap@opencascade.com>
Fri, 20 Jul 2012 16:11:12 +0000 (16:11 +0000)
"Computation canceled" instead of "Algorithm failed" as failure reason

+  volatile bool _computeCanceled; //!< is set to True while computing to stop it

src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx

index 98e8af4691b3b2f2b5afc5a69591cdffc01c91cf..b92726fb176b1920009eda5c2c9818be6eb1536c 100644 (file)
@@ -682,11 +682,17 @@ bool SMESH_Algo::Compute(SMESH_Mesh & /*aMesh*/, SMESH_MesherHelper* /*aHelper*/
   return error( COMPERR_BAD_INPUT_MESH, "Mesh built on shape expected");
 }
 
-#ifdef WITH_SMESH_CANCEL_COMPUTE
+//=======================================================================
+//function : CancelCompute
+//purpose  : Sets _computeCanceled to true. It's usage depends on
+//  *        implementation of a particular mesher.
+//=======================================================================
+
 void SMESH_Algo::CancelCompute()
 {
+  _computeCanceled = true;
+  _error = COMPERR_CANCELED;
 }
-#endif
 
 //================================================================================
 /*!
@@ -748,6 +754,8 @@ void SMESH_Algo::InitComputeError()
     if ( (*elem)->GetID() < 1 )
       delete *elem;
   _badInputElements.clear();
+
+  _computeCanceled = false;
 }
 
 //================================================================================
index ff0ab73b289c02fa56ef734b6bc077e9101a5921..580445b48057b0cc1c100d6ef30f66ce65cbdde0 100644 (file)
@@ -134,9 +134,11 @@ public:
    */
   virtual bool Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper);
 
-#ifdef WITH_SMESH_CANCEL_COMPUTE
+  /*!
+   * \brief Sets _computeCanceled to true. It's usage depends on
+   *        implementation of a particular mesher.
+   */
   virtual void CancelCompute();
-#endif
 
   /*!
    * \brief evaluates size of prospective mesh on a shape
@@ -378,6 +380,8 @@ protected:
   int         _error;    //!< SMESH_ComputeErrorName or anything algo specific
   std::string _comment;  //!< any text explaining what is wrong in Compute()
   std::list<const SMDS_MeshElement*> _badInputElements; //!< to explain COMPERR_BAD_INPUT_MESH
+
+  volatile bool _computeCanceled; //!< is set to True while computing to stop it
 };
 
 #endif