]> Creatis software - clitk.git/commitdiff
add MustStop function (for interrupting a filter)
authordsarrut <dsarrut>
Thu, 22 Jul 2010 05:46:00 +0000 (05:46 +0000)
committerdsarrut <dsarrut>
Thu, 22 Jul 2010 05:46:00 +0000 (05:46 +0000)
common/clitkFilterBase.cxx
common/clitkFilterBase.h
common/clitkFilterBase.txx
common/clitkImageToImageGenericFilterBase.cxx
common/clitkImageToImageGenericFilterBase.h

index 2b427202040f21f827a9ff113b1cb60407044687..07b992512ce009257dedfdc7ae4640a9cce0a42c 100644 (file)
 //--------------------------------------------------------------------
 clitk::FilterBase::FilterBase() 
 {
-  m_MustStop = false;
+  SetMustStop(false);
   SetVerboseOption(false);
   SetCurrentStepNumber(0);
   SetCurrentStepBaseId("");
   StopOnErrorOn();
   ResetLastError();
-  VerboseWarningOffOn(); // OffOn, it's cool not ?
+  VerboseWarningOffOn(); // OffOn, it's cool no ?
   SetWarning("");
 }
 //--------------------------------------------------------------------
@@ -68,6 +68,8 @@ void clitk::FilterBase::SetWarning(std::string e)
 //--------------------------------------------------------------------
 void clitk::FilterBase::StartNewStep(std::string s) 
 {
+  //m_CurrentStepTimer.Reset();
+  // m_CurrentStepTimer.Start();
   m_CurrentStepNumber++;
   if (GetCurrentStepBaseId() != "") {
     std::ostringstream oss;
@@ -92,15 +94,32 @@ void clitk::FilterBase::StartNewStep(std::string s)
 //--------------------------------------------------------------------
 void clitk::FilterBase::StopCurrentStep() 
 {
-  
+  // m_CurrentStepTimer.Stop();
+  //  m_CurrentStepTimer.Print(std::cout);
+  //  std::ostringstream oss;
+  //oss << " (" << 
+    //  m_CurrentStepName = m_CurrentStepName +"
 }
 //--------------------------------------------------------------------
 
 
 //--------------------------------------------------------------------
-void clitk::FilterBase::MustStop()
+void clitk::FilterBase::SetMustStop(bool b)
 {
-  m_MustStop = true;
+  m_MustStop = b;
+  if (GetMustStop()) {
+    SetLastError("Filter is interrupted.");  
+  }
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool clitk::FilterBase::GetMustStop()
+{
+  if (m_MustStop) return true;
+  if (HasError()) return true;
+  return false;
 }
 //--------------------------------------------------------------------
 
index ef0a0d9ac45cb24d4f3f1e262127d51ba2114088..a53a181490b07ab0180e34b7d2e7c1b2e09ac879 100644 (file)
@@ -21,6 +21,7 @@
 
 // clitk
 #include "clitkCommon.h"
+#include "clitkTimer.h"
 #include "clitkFilterMacros.txx"
 #include "clitkLabelizeParameters.h"
 
@@ -106,7 +107,8 @@ namespace clitk {
     GGO_DefineOption_Flag(verboseWarningOff, SetVerboseWarningOff);
     
     // Use this function to stop (when threaded)
-    void MustStop();
+    void SetMustStop(bool b);
+    bool GetMustStop();
     
   protected:
     FilterBase();
@@ -129,6 +131,7 @@ namespace clitk {
     std::string m_Warning;
     bool m_VerboseWarningOff;
     bool m_MustStop;
+    Timer m_CurrentStepTimer;
 
   private:
     FilterBase(const Self&); //purposely not implemented
@@ -140,6 +143,8 @@ namespace clitk {
 } // end namespace clitk
 //--------------------------------------------------------------------
 
+#define StartNewStepOrStop(s) StartNewStep(s); if (GetMustStop()) return;
+
 #ifndef ITK_MANUAL_INSTANTIATION
 #include "clitkFilterBase.txx"
 #endif
index c00d18adabdb28307f357b883078d314a0aab2d9..baee5700ac909d5176e97b281c2e4a18969c7ffb 100644 (file)
@@ -60,6 +60,7 @@ void clitk::FilterBase::VerboseOptionV(std::string name, int nb, OptionType * va
 template<class TInternalImageType>
 void clitk::FilterBase::StopCurrentStep(typename TInternalImageType::Pointer p) 
 {
+  StopCurrentStep();
   if (m_WriteStep) {
     std::ostringstream name;
     name << "step-" << GetCurrentStepId() << ".mhd";
index 1da0144cdcf768d2f589d8d63245df89389294db..285b49659c9c3231d853a575518f8ab00ce23663 100644 (file)
@@ -35,6 +35,7 @@ clitk::ImageToImageGenericFilterBase::ImageToImageGenericFilterBase(std::string
   m_FailOnImageTypeError = true;
   m_ReadOnDisk = true;
   m_LastError = "";
+  StopOnErrorOn();
 }
 //--------------------------------------------------------------------
 
@@ -307,4 +308,14 @@ typename ImageType::Pointer clitk::ImageToImageGenericFilterBase::GetInput(unsig
 //--------------------------------------------------------------------
 
 
+//--------------------------------------------------------------------
+void clitk::ImageToImageGenericFilterBase::MustStop()
+{
+  if (m_FilterBase != NULL) {
+    m_FilterBase->SetMustStop(true);
+  }
+}
+//--------------------------------------------------------------------
+
+
 
index 4b27950d4f406b8e5652d173b679c18ac77d636b..262d6fc82f85e3d53159ce316dfaccc3f4ee9384 100644 (file)
@@ -92,6 +92,12 @@ namespace clitk {
 
     // Get the associated filter
     FilterBase * GetFilterBase() { return m_FilterBase; }
+    
+    // Indicate that the filter must stop as soon as possible (if threaded)
+    void MustStop();
+    itkSetMacro(StopOnError, bool);
+    itkGetConstMacro(StopOnError, bool);
+    itkBooleanMacro(StopOnError);    
 
   protected:  
     bool m_ReadOnDisk;
@@ -122,6 +128,7 @@ namespace clitk {
     std::string m_LastError;
     void SetFilterBase(FilterBase * f) { m_FilterBase = f; }
     FilterBase * m_FilterBase;
+    bool m_StopOnError;
 
   }; // end class clitk::ImageToImageGenericFilter