]> Creatis software - clitk.git/blobdiff - common/vvImage.txx
Added "Reset transformation to identity" in image right-click menu
[clitk.git] / common / vvImage.txx
old mode 100755 (executable)
new mode 100644 (file)
index c0eda20..6e89076
@@ -1,9 +1,31 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  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
+
+  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.
+
+  It is distributed under dual licence
+
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+===========================================================================*/
 #include <itkImageToVTKImageFilter.h>
 
 //--------------------------------------------------------------------
 template<class TItkImageType>
 void vvImage::AddItkImage(TItkImageType *input)
 {
+  // Update input before conversion to enable exceptions thrown by the ITK pipeline.
+  // Otherwise, vtkImageImport catches the exception for us.
+  input->Update();
+
+  // Convert from ITK object to VTK object
   mImageDimension = TItkImageType::ImageDimension; 
   typedef itk::ImageToVTKImageFilter <TItkImageType> ConverterType;
   typename ConverterType::Pointer converter = ConverterType::New();
@@ -11,15 +33,15 @@ void vvImage::AddItkImage(TItkImageType *input)
   converter->SetInput(input);
   converter->Update();
   mVtkImages.push_back( converter->GetOutput() );
-  mVtkImageReslice.push_back(vtkSmartPointer<vtkImageReslice>::New());
-  mVtkImageReslice.back()->SetInterpolationModeToLinear();
-  mVtkImageReslice.back()->AutoCropOutputOn();
-  mVtkImageReslice.back()->SetBackgroundColor(-1000,-1000,-1000,1);
-  mVtkImageReslice.back()->SetResliceTransform(mTransform);
-  mVtkImageReslice.back()->SetInput(0, converter->GetOutput());
-  mVtkImageReslice.back()->UpdateInformation();
-  mTransformedVtkImages.push_back( mVtkImageReslice.back()->GetOutput(0) );
+  
+  // Account for direction in transform. The offset is already accounted for
+  // in the VTK image coordinates, no need to put it in the transform.
+  vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
+  matrix->Identity();
+  for(unsigned int j=0; j<input->GetImageDimension(); j++)
+    for(unsigned int i=0; i<input->GetImageDimension(); i++)
+      (*matrix)[i][j] = input->GetDirection()[i][j];
+  mTransform->SetMatrix(matrix);
 }
 //--------------------------------------------------------------------