X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolCropImage.cxx;h=ff88e2b23a3e01008b89c19574f1a841202ff459;hb=668abd5376f649fba792239768eec55f3783613d;hp=98b8e3413531c63d1ba6b81436cb85fe076891a1;hpb=ec98e4a8aed11c9daa9bd7e2439d1ac489c933c7;p=clitk.git diff --git a/vv/vvToolCropImage.cxx b/vv/vvToolCropImage.cxx index 98b8e34..ff88e2b 100644 --- a/vv/vvToolCropImage.cxx +++ b/vv/vvToolCropImage.cxx @@ -1,29 +1,20 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Module: $RCSfile: vvToolCropImage.cxx,v $ - Language: C++ - Date: $Date: 2010/03/24 20:35:13 $ - Version: $Revision: 1.6 $ - 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://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr - Copyright (C) 2008 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - CREATIS-LRMN 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 "vvToolCropImage.h" #include @@ -44,9 +35,10 @@ ADD_TOOL(vvToolCropImage); //------------------------------------------------------------------------------ vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f): - vvToolWidgetBase(parent, f), - vvToolBase(parent), - Ui::vvToolCropImage() { + vvToolWidgetBase(parent, f), + vvToolBase(parent), + Ui::vvToolCropImage() +{ // GUI Initialization Ui_vvToolCropImage::setupUi(mToolWidget); @@ -58,32 +50,46 @@ vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f): //------------------------------------------------------------------------------ -vvToolCropImage::~vvToolCropImage() { +vvToolCropImage::~vvToolCropImage() +{ } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -bool vvToolCropImage::close() { - for(int i=0; i<6; i++) mReducedExtent[i] = mInitialExtent[i]; +void vvToolCropImage::closeEvent(QCloseEvent *event) +{ + for(int i=0; iaccept(); +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +bool vvToolCropImage::close() +{ + // for(int i=0; isetMinimum(xminSlider->value()); mReducedExtent[0] = xminSlider->value(); UpdateExtent(); @@ -92,7 +98,8 @@ void vvToolCropImage::sliderXMinValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::sliderXMaxValueChanged(int s) { +void vvToolCropImage::sliderXMaxValueChanged(int s) +{ xminSlider->setMaximum(xmaxSlider->value()); mReducedExtent[1] = xmaxSlider->value(); UpdateExtent(); @@ -101,7 +108,8 @@ void vvToolCropImage::sliderXMaxValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::sliderYMinValueChanged(int s) { +void vvToolCropImage::sliderYMinValueChanged(int s) +{ ymaxSlider->setMinimum(yminSlider->value()); mReducedExtent[2] = yminSlider->value(); UpdateExtent(); @@ -110,7 +118,8 @@ void vvToolCropImage::sliderYMinValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::sliderYMaxValueChanged(int s) { +void vvToolCropImage::sliderYMaxValueChanged(int s) +{ yminSlider->setMaximum(ymaxSlider->value()); mReducedExtent[3] = ymaxSlider->value(); UpdateExtent(); @@ -119,7 +128,8 @@ void vvToolCropImage::sliderYMaxValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::sliderZMinValueChanged(int s) { +void vvToolCropImage::sliderZMinValueChanged(int s) +{ zmaxSlider->setMinimum(zminSlider->value()); mReducedExtent[4] = zminSlider->value(); UpdateExtent(); @@ -128,7 +138,8 @@ void vvToolCropImage::sliderZMinValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::sliderZMaxValueChanged(int s) { +void vvToolCropImage::sliderZMaxValueChanged(int s) +{ zminSlider->setMaximum(zmaxSlider->value()); mReducedExtent[5] = zmaxSlider->value(); UpdateExtent(); @@ -155,18 +166,20 @@ void vvToolCropImage::sliderZMaxValueChanged(int s) { //------------------------------------------------------------------------------ -void vvToolCropImage::UpdateExtent() { +void vvToolCropImage::UpdateExtent() +{ for(int i=0; iNumberOfSlicers(); i++) { mCurrentSlicerManager->GetSlicer(i)->SetReducedExtent(mReducedExtent); - mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent(); - mCurrentSlicerManager->GetSlicer(i)->Render(); + mCurrentSlicerManager->GetSlicer(i)->ForceUpdateDisplayExtent(); + mCurrentSlicerManager->GetSlicer(i)->Render(); } } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) { +void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) +{ // Change interface according to number of dimension mExtentSize = 2*slicer->GetDimension(); @@ -186,19 +199,19 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) { spin_zmin->setHidden(true); spin_zmax->setHidden(true); } - + // Record initial extend mReducedExtent = new int[mExtentSize]; mInitialExtent = new int[mExtentSize]; mReducedExtent = mCurrentSlicerManager->GetImage()->GetFirstVTKImageData()->GetWholeExtent(); - for(int i=0; i<6; i++) mInitialExtent[i] = mReducedExtent[i]; + for(int i=0; iNumberOfSlicers(); i++) { //DD(i); //DD(mReducedExtent[i]); //DD(mInitialExtent[i]); mCurrentSlicerManager->GetSlicer(i)->EnableReducedExtent(true); } - + // Not now .... // mIntensitySlider->SetImage(mCurrentImage); //mIntensitySlider->setEnabled(false); @@ -238,13 +251,13 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) { spin_zmax->setMaximum(imsize[2]-1); spin_zmax->setValue(imsize[2]-1); } - + // if (slicer->GetDimension() >3) { // spin_tmin->setMaximum(imsize[3]-1); // spin_tmax->setMaximum(imsize[3]-1); // spin_tmax->setValue(imsize[3]-1); - // } - + // } + // Connect connect(xminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderXMinValueChanged(int))); connect(xmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderXMaxValueChanged(int))); @@ -254,7 +267,10 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) { connect(zmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderZMaxValueChanged(int))); // connect(tminSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderTMinValueChanged(int))); // connect(tmaxSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderTMaxValueChanged(int))); - + + // connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateExtent())); + //connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateExtent())); + // connect(mIntensitySlider, SIGNAL(valueChanged(double)), this, SLOT(autoCropValueChanged(double))); UpdateExtent(); } @@ -262,7 +278,8 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer) { //------------------------------------------------------------------------------ -void vvToolCropImage::autoCropValueChanged(double v) { +void vvToolCropImage::autoCropValueChanged(double v) +{ // DD(v); // vvImageToITKImageVector -> TODO a generic method // then sliceriterator on each dimension from in to max @@ -272,34 +289,34 @@ void vvToolCropImage::autoCropValueChanged(double v) { //------------------------------------------------------------------------------ -void vvToolCropImage::apply() { +void vvToolCropImage::apply() +{ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); vvImage::Pointer mResult=vvImage::New(); vvImage::Pointer image= mCurrentSlicerManager->GetImage(); for (std::vector::const_iterator i=image->GetVTKImages().begin(); - i!=image->GetVTKImages().end();i++) - { - vtkSmartPointer filter=vtkSmartPointer::New(); - ///Vtk is very weird, you need to "translate the extent" to get the correct origin - //http://markmail.org/message/vndc2tr6kcabiakp#query:vtkImageClip%20origin+page:1+mid:6na7y57floutklvz+state:results - vtkSmartPointer translate=vtkSmartPointer::New(); - filter->SetInput(*i); - filter->SetOutputWholeExtent(xminSlider->value(),xmaxSlider->value(), - yminSlider->value(),ymaxSlider->value(), - zminSlider->value(),zmaxSlider->value()); - translate->SetTranslation(-xminSlider->value(),-yminSlider->value(),-zminSlider->value()); - translate->SetInput(filter->GetOutput()); - filter->ClipDataOn(); //Really create a cropped copy of the image - translate->Update(); - vtkImageData* output=vtkImageData::New(); - output->ShallowCopy(translate->GetOutput()); - mResult->AddImage(output); - } + i!=image->GetVTKImages().end(); i++) { + vtkSmartPointer filter=vtkSmartPointer::New(); + ///Vtk is very weird, you need to "translate the extent" to get the correct origin + //http://markmail.org/message/vndc2tr6kcabiakp#query:vtkImageClip%20origin+page:1+mid:6na7y57floutklvz+state:results + vtkSmartPointer translate=vtkSmartPointer::New(); + filter->SetInput(*i); + filter->SetOutputWholeExtent(xminSlider->value(),xmaxSlider->value(), + yminSlider->value(),ymaxSlider->value(), + zminSlider->value(),zmaxSlider->value()); + translate->SetTranslation(-xminSlider->value(),-yminSlider->value(),-zminSlider->value()); + translate->SetInput(filter->GetOutput()); + filter->ClipDataOn(); //Really create a cropped copy of the image + translate->Update(); + vtkImageData* output=vtkImageData::New(); + output->ShallowCopy(translate->GetOutput()); + mResult->AddImage(output); + } QApplication::restoreOverrideCursor(); std::ostringstream osstream; osstream << "Crop_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd"; - AddImage(mResult, osstream.str()); + AddImage(mResult, osstream.str()); close(); } //------------------------------------------------------------------------------