]> Creatis software - clitk.git/blob - vv/vvLabelImageLoaderWidget.cxx
Add smartpointer for vtk objects
[clitk.git] / vv / vvLabelImageLoaderWidget.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18
19 #ifndef VVTOOLINPUTSELECTORWIDGET_CXX
20 #define VVTOOLINPUTSELECTORWIDGET_CXX
21
22 // clitk
23 #include <clitkImageCommon.h>
24
25 // vv
26 #include "vvLabelImageLoaderWidget.h"
27 #include "vvSlicerManager.h"
28 #include "vvImageReader.h"
29 #include "vvImageWriter.h"
30
31 // vtk
32 #include <vtkImageData.h>
33
34 // qt
35 #include <QAbstractButton>
36 #include <QFileDialog>
37 #include <QMessageBox>
38
39 //------------------------------------------------------------------------------
40 vvLabelImageLoaderWidget::vvLabelImageLoaderWidget(QWidget * parent, Qt::WindowFlags f):
41   QWidget(parent, f)
42 {
43   setupUi(this);
44   setEnabled(true);
45   connect(mOpenButton, SIGNAL(clicked()), this, SLOT(OpenImage()));
46 }
47 //------------------------------------------------------------------------------
48
49
50 //------------------------------------------------------------------------------
51 vvImage::Pointer vvLabelImageLoaderWidget::GetImage()
52 {
53   return m_Output;
54 }
55 //------------------------------------------------------------------------------
56
57
58 //------------------------------------------------------------------------------
59 double vvLabelImageLoaderWidget::GetBackgroundValue()
60 {
61   return mBackgroundValueSpinBox->value();
62 }
63 //------------------------------------------------------------------------------
64
65
66 //------------------------------------------------------------------------------
67 void vvLabelImageLoaderWidget::SetText(QString t)
68 {
69   mOpenLabel->setText(t);
70 }
71 //------------------------------------------------------------------------------
72
73
74 //------------------------------------------------------------------------------
75 void vvLabelImageLoaderWidget::OpenImage()
76 {
77   // Browse for file
78   QString Extensions = "Images files ( *.mhd *.hdr *.his)";
79   Extensions += ";;All Files (*)";
80   QString filename =
81     QFileDialog::getOpenFileName(this,tr("Open mask image"),
82                                  "",Extensions); //mMainWindow->GetInputPathName()
83   if (filename == "") return; // nothing to do
84   
85   itk::ImageIOBase::Pointer header = clitk::readImageHeader(filename.toStdString());
86
87   // Open Image
88   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
89   if (!header) {
90     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
91     QString error = QString("Cannot open file %1\n").arg(filename);
92     QMessageBox::information(this,tr("Reading problem"),error);
93     return;
94   }
95   
96   // Create output pointer
97   if (header->GetNumberOfDimensions() != 3) {
98     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
99     QString error;
100     error = QString("Cannot open file %1 because it is not 3D\n").arg(filename);
101     QMessageBox::information(this,tr("Reading problem"),error);
102     return;
103   }
104
105   // Convert to unsigned char while reading (if not already)
106   typedef itk::ImageFileReader< itk::Image< unsigned char, 3 > > ReaderType;
107   ReaderType::Pointer reader = ReaderType::New();
108   reader->SetFileName(filename.toStdString());
109   reader->Update();
110
111   // Create vv image
112   m_Output = vvImage::New();
113   try {
114     m_Output->AddItkImage( reader->GetOutput() );
115   }
116   catch ( itk::ExceptionObject & err ) {
117     std::cerr << "Error while reading " << filename.toStdString() << std::endl
118               << "The error is " << err << std::endl;
119     QString error;
120     error = QString("Cannot open file %1\n").arg(filename);
121     QMessageBox::information(this,tr("Reading problem"),error);
122     return;
123   }
124
125   // Set GUI
126   mLabelInputInfo->setText(vtksys::SystemTools::GetFilenameName(filename.toStdString()).c_str());
127   QApplication::restoreOverrideCursor();
128   emit accepted();
129 }
130 //------------------------------------------------------------------------------
131
132
133 #endif
134