X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolExtractLung.cxx;h=59b41331472a7798dea91d9bb3e80c1e0aaa54ed;hb=738107919dc9a056d679e75be0760e3eeae3dd4a;hp=1bf0d3296672e24da4f3c5d0302fa862508dcd33;hpb=bcc0b5dc437a7123c86acc4a55993dc8f38f47a8;p=clitk.git diff --git a/vv/vvToolExtractLung.cxx b/vv/vvToolExtractLung.cxx index 1bf0d32..59b4133 100644 --- a/vv/vvToolExtractLung.cxx +++ b/vv/vvToolExtractLung.cxx @@ -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 output = mFilter->GetOutputVVImages();