X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolImageArithm.cxx;h=0f6221bb9623d07b4c9598c73b1c0b952d4e0736;hb=5a7da4aedae5c204bc55c187717193e5950f9a44;hp=8a508e4ea6c9e53d4f47aae2bb5b60b1fdd276c5;hpb=e9d128ac8da88b43fb86f8cfff490b46800ca2f6;p=clitk.git diff --git a/vv/vvToolImageArithm.cxx b/vv/vvToolImageArithm.cxx index 8a508e4..0f6221b 100644 --- a/vv/vvToolImageArithm.cxx +++ b/vv/vvToolImageArithm.cxx @@ -1,29 +1,20 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Module: $RCSfile: vvToolImageArithm.cxx,v $ - Language: C++ - Date: $Date: 2010/03/24 13:37:34 $ - Version: $Revision: 1.2 $ - Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr - Copyright (C) 2010 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - CREATIS http://www.creatis.insa-lyon.fr + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. + It is distributed under dual licence - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - =========================================================================*/ + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ #include "vvToolImageArithm.h" #include "vvSlicer.h" @@ -38,13 +29,14 @@ ADD_TOOL(vvToolImageArithm); //------------------------------------------------------------------------------ vvToolImageArithm::vvToolImageArithm(vvMainWindowBase * parent, Qt::WindowFlags f) - :vvToolWidgetBase(parent, f), - vvToolBase(parent), - Ui::vvToolImageArithm() { + :vvToolWidgetBase(parent, f), + vvToolBase(parent), + Ui::vvToolImageArithm() +{ // Setup the UI Ui_vvToolImageArithm::setupUi(mToolWidget); - // Main filter + // Main filter mFilter = new clitk::ImageArithmGenericFilter; // Set how many inputs are needed for this tool @@ -55,26 +47,29 @@ vvToolImageArithm::vvToolImageArithm(vvMainWindowBase * parent, Qt::WindowFlags //------------------------------------------------------------------------------ -vvToolImageArithm::~vvToolImageArithm() { +vvToolImageArithm::~vvToolImageArithm() +{ } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolImageArithm::Initialize() { +void vvToolImageArithm::Initialize() +{ SetToolName("ImageArithm"); SetToolMenuName("ImageArithm"); - SetToolIconFilename(":/new/prefix1/icons/cross.png"); + SetToolIconFilename(":/common/icons/arithm.png"); SetToolTip("Perform simple arithmetic operations on one or two images."); - SetToolExperimental(true); + SetToolExperimental(false); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolImageArithm::InputIsSelected(std::vector & l) { +void vvToolImageArithm::InputIsSelected(std::vector & l) +{ mInput1 = l[0]; - mInput2 = l[1]; + mInput2 = l[1]; mTwoInputs = true; mGroupBoxOneInput->setEnabled(false); mGroupBoxTwoInputs->setEnabled(true); @@ -83,10 +78,10 @@ void vvToolImageArithm::InputIsSelected(std::vector & l) { //------------------------------------------------------------------------------ -void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) { +void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) +{ mInput1 = l; mTwoInputs = false; - // DD("Single input"); mGroupBoxTwoInputs->setEnabled(false); mGroupBoxOneInput->setEnabled(true); } @@ -94,8 +89,8 @@ void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) { //------------------------------------------------------------------------------ -void vvToolImageArithm::GetArgsInfoFromGUI() { - // DD("GetArgsInfoFromGUI"); +void vvToolImageArithm::GetArgsInfoFromGUI() +{ mArgsInfo.input1_given = false; if (mTwoInputs) { mArgsInfo.input2_given = true; @@ -108,9 +103,8 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { if (radioButtonMin->isChecked()) mArgsInfo.operation_arg = 4; if (radioButtonAbsDiff->isChecked()) mArgsInfo.operation_arg = 5; if (radioButtonSquaredDiff->isChecked()) mArgsInfo.operation_arg = 6; - } - else { - mArgsInfo.input2_given = false; + } else { + mArgsInfo.input2_given = false; mArgsInfo.scalar_given = true; if (radioButtonSumV->isChecked()) mArgsInfo.operation_arg = 0; if (radioButtonMultiplyV->isChecked()) mArgsInfo.operation_arg = 1; @@ -126,7 +120,7 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { mArgsInfo.scalar_arg = mValueSpinBox->value(); } mArgsInfo.output_given = false; - mArgsInfo.verbose_flag = false; + mArgsInfo.verbose_flag = false; mArgsInfo.setFloatOutput_flag = mCheckBoxUseFloatOutputType->isChecked(); mArgsInfo.imagetypes_flag = false; } @@ -134,7 +128,8 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { //------------------------------------------------------------------------------ -void vvToolImageArithm::apply() { +void vvToolImageArithm::apply() +{ if (!mCurrentSlicerManager) close(); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); GetArgsInfoFromGUI(); @@ -144,39 +139,46 @@ void vvToolImageArithm::apply() { // Input inputs.push_back(mInput1->GetImage()); inputs.push_back(mInput2->GetImage()); - + // Check input type - if (inputs[0]->GetScalarTypeAsString() != inputs[1]->GetScalarTypeAsString()) { + if (inputs[0]->GetScalarTypeAsITKString() != inputs[1]->GetScalarTypeAsITKString()) { std::cerr << "Sorry inputs should have the same pixeltype." << std::endl; - std::cerr << "Input1 = " << inputs[0]->GetScalarTypeAsString() << std::endl; - std::cerr << "Input2 = " << inputs[1]->GetScalarTypeAsString() << std::endl; + std::cerr << "Input1 = " << inputs[0]->GetScalarTypeAsITKString() << std::endl; + std::cerr << "Input2 = " << inputs[1]->GetScalarTypeAsITKString() << std::endl; + QApplication::restoreOverrideCursor(); + QMessageBox::information(this, "Wrong image type","Sorry, could not perform operation. Please select inputs with same pixel type."); + close(); + return; + } + + // Check size + if (!mInput1->GetImage()->HaveSameSizeAndSpacingThan(mInput2->GetImage())) { + std::cerr << "Sorry inputs should have the same size and spacing." << std::endl; QApplication::restoreOverrideCursor(); - QMessageBox::information(this, "Wrong image type","Sorry, could not perform operation. Please select inputs with same pixe type."); + QMessageBox::information(this, "Wrong images size","Sorry, could not perform operation. Please select inputs with same size and spacing."); close(); return; } - } - else { + } else { // Input inputs.push_back(mInput1->GetImage()); - DD("Single input"); } - + // Main filter - clitk::ImageArithmGenericFilter::Pointer filter = + clitk::ImageArithmGenericFilter::Pointer filter = clitk::ImageArithmGenericFilter::New(); filter->SetInputVVImages(inputs); filter->SetArgsInfo(mArgsInfo); filter->EnableReadOnDisk(false); filter->EnableOverwriteInputImage(false); filter->Update(); - + // Output vvImage::Pointer output = filter->GetOutputVVImage(); std::ostringstream osstream; - osstream << "Arithm_" << mArgsInfo.operation_arg << "_ " + osstream << "Arithm_" << mArgsInfo.operation_arg << "_ " << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd"; - AddImage(output,osstream.str()); + AddImage(output,osstream.str()); QApplication::restoreOverrideCursor(); close(); }