]> Creatis software - clitk.git/blob - vv/vvCropDialog.cxx
removed headers
[clitk.git] / vv / vvCropDialog.cxx
1 #include <QComboBox>
2 #include <QCursor>
3 #include <QApplication>
4 #include <vtkImageClip.h>
5 #include <vtkImageTranslateExtent.h>
6 #include <vtkImageData.h>
7 #include <vtkSmartPointer.h>
8 #include "vvCropDialog.h"
9 #include "vvSlicerManager.h"
10 #include "clitkCommon.h"
11
12 vvCropDialog::vvCropDialog(std::vector<vvSlicerManager*> sms,int current) :
13     mSlicerManagers(sms)
14 {
15     setupUi(this);
16     for (unsigned int i=0;i<mSlicerManagers.size();i++)
17         inputSequenceBox->addItem(vtksys::SystemTools::GetFilenameName(mSlicerManagers[i]->GetFileName()).c_str());
18     connect(inputSequenceBox,SIGNAL(currentIndexChanged(int)),this,SLOT(ImageChanged(int)));
19     inputSequenceBox->setCurrentIndex(current);
20     ImageChanged(current);
21     connect(this,SIGNAL(accepted()),this,SLOT(ComputeCroppedImage()));
22 }
23
24 void vvCropDialog::ImageChanged(int newindex)
25 {
26     std::vector<int> imsize=mSlicerManagers[newindex]->GetImage()->GetSize();
27     xminSlider->setMaximum(imsize[0]-1);
28     xmaxSlider->setMaximum(imsize[0]-1);
29     xmaxSlider->setValue(imsize[0]-1);
30     yminSlider->setMaximum(imsize[1]-1);
31     ymaxSlider->setMaximum(imsize[1]-1);
32     ymaxSlider->setValue(imsize[1]-1);
33     zminSlider->setMaximum(imsize[2]-1);
34     zmaxSlider->setMaximum(imsize[2]-1);
35     zmaxSlider->setValue(imsize[2]-1);
36     spin_xmin->setMaximum(imsize[0]-1);
37     spin_xmax->setMaximum(imsize[0]-1);
38     spin_xmax->setValue(imsize[0]-1);
39     spin_ymin->setMaximum(imsize[1]-1);
40     spin_ymax->setMaximum(imsize[1]-1);
41     spin_ymax->setValue(imsize[1]-1);
42     spin_zmin->setMaximum(imsize[2]-1);
43     spin_zmax->setMaximum(imsize[2]-1);
44     spin_zmax->setValue(imsize[2]-1);
45 }
46
47 void vvCropDialog::ComputeCroppedImage()
48 {
49     QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
50     mResult=vvImage::New();
51     vvSlicerManager * current=mSlicerManagers[inputSequenceBox->currentIndex()];
52     vvImage::Pointer image=current->GetImage();
53     for (std::vector<vtkImageData*>::const_iterator i=image->GetVTKImages().begin();
54             i!=image->GetVTKImages().end();i++)
55     {
56         vtkSmartPointer<vtkImageClip> filter=vtkSmartPointer<vtkImageClip>::New();
57         ///Vtk is very weird, you need to "translate the extent" to get the correct origin
58         //http://markmail.org/message/vndc2tr6kcabiakp#query:vtkImageClip%20origin+page:1+mid:6na7y57floutklvz+state:results
59         vtkSmartPointer<vtkImageTranslateExtent> translate=vtkSmartPointer<vtkImageTranslateExtent>::New();
60         filter->SetInput(*i);
61         filter->SetOutputWholeExtent(xminSlider->value(),xmaxSlider->value(),
62                 yminSlider->value(),ymaxSlider->value(),
63                 zminSlider->value(),zmaxSlider->value());
64         translate->SetTranslation(-xminSlider->value(),-yminSlider->value(),-zminSlider->value());
65         translate->SetInput(filter->GetOutput());
66         filter->ClipDataOn(); //Really create a cropped copy of the image
67         translate->Update();
68         vtkImageData* output=vtkImageData::New();
69         output->ShallowCopy(translate->GetOutput());
70         mResult->AddImage(output);
71     }
72     QApplication::restoreOverrideCursor();
73 }