]> Creatis software - clitk.git/blobdiff - vv/vvLabelImageLoaderWidget.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvLabelImageLoaderWidget.cxx
index b10f00ffb813e0eb2ebc2447fb85cec6a2b81af5..96688ff001438252b2b9066541d16e682fb19bd0 100644 (file)
@@ -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
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
+
 #ifndef VVTOOLINPUTSELECTORWIDGET_CXX
 #define VVTOOLINPUTSELECTORWIDGET_CXX
 
+// clitk
+#include <clitkImageCommon.h>
+
 // vv
 #include "vvLabelImageLoaderWidget.h"
 #include "vvSlicerManager.h"
@@ -60,10 +64,16 @@ double vvLabelImageLoaderWidget::GetBackgroundValue()
 
 
 //------------------------------------------------------------------------------
-void vvLabelImageLoaderWidget::OpenImage()
+void vvLabelImageLoaderWidget::SetText(QString t)
 {
-  DD("OpenImage");
+  mOpenLabel->setText(t);
+}
+//------------------------------------------------------------------------------
 
+
+//------------------------------------------------------------------------------
+void vvLabelImageLoaderWidget::OpenImage()
+{
   // Browse for file
   QString Extensions = "Images files ( *.mhd *.hdr *.his)";
   Extensions += ";;All Files (*)";
@@ -72,54 +82,49 @@ void vvLabelImageLoaderWidget::OpenImage()
                                  "",Extensions); //mMainWindow->GetInputPathName()
   if (filename == "") return; // nothing to do
   
+  itk::ImageIOBase::Pointer header = clitk::readImageHeader(filename.toStdString());
+
   // Open Image
-  vvImageReader * mReader = new vvImageReader;
-  mReader->SetInputFilename(filename.toStdString());
-  mReader->Update(IMAGE);
-  if (mReader->GetLastError().size() != 0) {
+  QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+  if (!header) {
     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
-    QString error = "Cannot open file \n";
-    error += mReader->GetLastError().c_str();
+    QString error = QString("Cannot open file %1\n").arg(filename);
     QMessageBox::information(this,tr("Reading problem"),error);
-    delete mReader;
     return;
   }
   
   // Create output pointer
-  m_Output = vvImage::New();
-
-  // Check type and convert if needed
-  vvImage::Pointer temp = mReader->GetOutput();
-
-  if (temp->GetNumberOfDimensions() != 3) {
+  if (header->GetNumberOfDimensions() != 3) {
     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
     QString error;
     error = QString("Cannot open file %1 because it is not 3D\n").arg(filename);
     QMessageBox::information(this,tr("Reading problem"),error);
-    delete mReader;
     return;
   }
 
-  DD(temp->GetScalarTypeAsITKString());
-  if (temp->GetScalarTypeAsITKString() != "unsigned_char") {
-    DD("Cast");
-    vtkImageData * p = vtkImageData::New();
-    p->SetExtent(temp->GetFirstVTKImageData()->GetExtent ()); // Only first ! could not be 4D
-    p->SetScalarTypeToUnsignedChar();
-    p->AllocateScalars ();
-    p->CopyAndCastFrom(temp->GetFirstVTKImageData(), temp->GetFirstVTKImageData()->GetExtent ());
-    m_Output->AddImage(p);
-    vvImageWriter * writer = new vvImageWriter;
-    writer->SetOutputFileName("a.mhd");
-    writer->SetInput(m_Output);
-    writer->Update();
+  // Convert to unsigned char while reading (if not already)
+  typedef itk::ImageFileReader< itk::Image< unsigned char, 3 > > ReaderType;
+  ReaderType::Pointer reader = ReaderType::New();
+  reader->SetFileName(filename.toStdString());
+  reader->Update();
+
+  // Create vv image
+  m_Output = vvImage::New();
+  try {
+    m_Output->AddItkImage( reader->GetOutput() );
   }
-  else {
-    m_Output = temp;
+  catch ( itk::ExceptionObject & err ) {
+    std::cerr << "Error while reading " << filename.toStdString() << std::endl
+              << "The error is " << err << std::endl;
+    QString error;
+    error = QString("Cannot open file %1\n").arg(filename);
+    QMessageBox::information(this,tr("Reading problem"),error);
+    return;
   }
-  
+
   // Set GUI
   mLabelInputInfo->setText(vtksys::SystemTools::GetFilenameName(filename.toStdString()).c_str());
+  QApplication::restoreOverrideCursor();
   emit accepted();
 }
 //------------------------------------------------------------------------------