]> Creatis software - clitk.git/blobdiff - vv/vvToolExtractLung.cxx
basic GUI state loading/saving functionality
[clitk.git] / vv / vvToolExtractLung.cxx
index 1bf0d3296672e24da4f3c5d0302fa862508dcd33..59b41331472a7798dea91d9bb3e80c1e0aaa54ed 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-  ======================================================================-====*/
+  ===========================================================================**/
 
 // vv
 #include "vvToolExtractLung.h"
@@ -44,13 +44,14 @@ vvToolExtractLung::vvToolExtractLung(vvMainWindowBase * parent, Qt::WindowFlags
   // GUI
   Ui_vvToolExtractLung::setupUi(mToolWidget);
   mMaskLoaderBox->setEnabled(false);
-  //mOptionsBox->setEnabled(false);
+  mOptionsBox->setEnabled(false);
   mPatientMaskInputWidget->SetText("Patient mask");
   connect(mPatientMaskInputWidget, SIGNAL(accepted()), this, SLOT(PatientMaskInputIsSelected()));
 
   // Default values
   mArgsInfo = new ArgsInfoType;
   cmdline_parser_clitkExtractLung_init(mArgsInfo);
+  SetGUIFromArgsInfo();
   m_IsThreadInterrupted = false;
 
   // Create a new ExtractLung filter
@@ -75,7 +76,7 @@ void vvToolExtractLung::Initialize() {
   SetToolMenuName("Extract lungs");
   SetToolIconFilename(":/common/icons/lung-overlay.png");
   SetToolTip("Extract lung mask from thorax CT.");
-  //  SetToolExperimental(true);
+  SetToolExperimental(true);
   //  SetToolInMenu("Segmentation");
 }
 //------------------------------------------------------------------------------
@@ -109,7 +110,25 @@ void vvToolExtractLung::PatientMaskInputIsSelected()
   }
    
   mMaskLoaderBox->setEnabled(false);
-  //mOptionsBox->setEnabled(true);
+  mOptionsBox->setEnabled(true);
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvToolExtractLung::SetGUIFromArgsInfo() 
+{
+  mAirUpperThresholdSlider->SetText("Upper threshold for air");
+  mAirUpperThresholdSlider->SetMinimum(-1200);
+  mAirUpperThresholdSlider->SetMaximum(2000);
+  DD(mArgsInfo->upper_arg);
+  mAirUpperThresholdSlider->SetValue(mArgsInfo->upper_arg);
+
+  mAirLowerThresholdSlider->SetText("Lower threshold for air");
+  mAirLowerThresholdSlider->SetMinimum(-1200);
+  mAirLowerThresholdSlider->SetMaximum(2000);
+  mAirLowerThresholdSlider->SetValue(mArgsInfo->lower_arg);
+
 }
 //------------------------------------------------------------------------------
 
@@ -117,15 +136,19 @@ void vvToolExtractLung::PatientMaskInputIsSelected()
 //------------------------------------------------------------------------------
 void vvToolExtractLung::GetArgsInfoFromGUI() 
 {
-  mArgsInfo->patientBG_arg = 0; //mPatientBackgroundValueSpinBox->value();
-  mArgsInfo->verboseOption_flag = false;
-  mArgsInfo->verboseStep_flag = false;
+  // mArgsInfo->patientBG_arg = mPatientMaskInputWidget->GetBackgroundValue();
+  mArgsInfo->verboseOption_flag = true; // DEBUG. TO CHANGE
+  mArgsInfo->verboseStep_flag = true; // DEBUG. TO CHANGE
   mArgsInfo->writeStep_flag = false;
   mArgsInfo->input_given = 0;
-  mArgsInfo->patient_given = 0;
+  // mArgsInfo->patient_given = 0;
   mArgsInfo->output_given = 0;
   mArgsInfo->outputTrachea_given = 0;
-  mArgsInfo->remove1_given = 0;
+  //  mArgsInfo->remove1_given = 0;
+  
+  mArgsInfo->upper_arg = mAirUpperThresholdSlider->GetValue();
+  mArgsInfo->lower_arg = mAirLowerThresholdSlider->GetValue();
+  if (mRadioButtonLowerThan->isChecked()) mArgsInfo->lower_given = 1;
 }
 //------------------------------------------------------------------------------
 
@@ -138,11 +161,20 @@ void vvToolExtractLung::apply()
   
   // Read options from GUI and put it in the ArgsInfo struct
   GetArgsInfoFromGUI();
+  
+  // Check options
+  if (mArgsInfo->lower_given) {
+    if (mArgsInfo->lower_arg > mArgsInfo->upper_arg) {    
+      QApplication::restoreOverrideCursor(); 
+      QMessageBox::information(this,tr("Error"), "Lower threshold cannot be greater than upper threshold.");
+      return;
+    }
+  }
 
   // Create new filter
   if (mFilter) delete mFilter;
   mFilter = new FilterType;  // needed when thread cancel the filter
-  mFilter->StopOnErrorOff();
+  // mFilter->StopOnErrorOff();
   //  mFilter->SetIOVerbose(true);
   mFilter->AddInputVVImage(mCurrentImage); // CT
   mFilter->AddInputVVImage(mPatient); // patient mask
@@ -152,8 +184,13 @@ void vvToolExtractLung::apply()
   vvThreadedFilter thread;
   connect(&thread, SIGNAL(ThreadInterrupted()), this, SLOT(ThreadInterrupted()));
   thread.SetFilter(mFilter);
-  thread.Update();
 
+  try {
+    thread.Update();
+  }
+  catch(std::runtime_error e) {
+    DD("Error exception handling");
+    DD(m_IsThreadInterrupted);
   // Check if the thread has been canceled. In this case, return
   if (m_IsThreadInterrupted) {
     m_IsThreadInterrupted = false;
@@ -163,11 +200,12 @@ void vvToolExtractLung::apply()
   disconnect(&thread, SIGNAL(ThreadInterrupted()), this, SLOT(ThreadInterrupted()));
     
   // Check error during filter
-  if (mFilter->HasError()) {
+  // if (mFilter->HasError()) {
     QApplication::restoreOverrideCursor();
-    QMessageBox::information(this,tr("Error"), mFilter->GetLastError().c_str());
+    QMessageBox::information(this,tr("Error"), e.what());//mFilter->GetLastError().c_str());
     return;
-  }
+  // }
+  } // end exception
   
   // Get output
   std::vector<vvImage::Pointer> output = mFilter->GetOutputVVImages();