]> Creatis software - clitk.git/blobdiff - common/vvImage.txx
Moved from repository clitk.private to tools
[clitk.git] / common / vvImage.txx
index 6e8907633987e48e4fc17c0f7b97cd3eecc57eae..a6d37c8cbbd8f0447f69c990235fa0963afedb53 100644 (file)
@@ -26,22 +26,34 @@ void vvImage::AddItkImage(TItkImageType *input)
   input->Update();
 
   // Convert from ITK object to VTK object
-  mImageDimension = TItkImageType::ImageDimension; 
+  mImageDimension = TItkImageType::ImageDimension;
   typedef itk::ImageToVTKImageFilter <TItkImageType> ConverterType;
   typename ConverterType::Pointer converter = ConverterType::New();
   mItkToVtkConverters.push_back(dynamic_cast< itk::ProcessObject *>(converter.GetPointer()));
   converter->SetInput(input);
   converter->Update();
   mVtkImages.push_back( converter->GetOutput() );
-  
+
   // 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++)
+  for(unsigned int i=0; i<input->GetImageDimension(); i++) {
+    for(unsigned int j=0; j<input->GetImageDimension(); j++) {
       (*matrix)[i][j] = input->GetDirection()[i][j];
-  mTransform->SetMatrix(matrix);
+      // Direction is used around the image origin in ITK
+      (*matrix)[i][3] -= (*matrix)[i][j] * input->GetOrigin()[j];
+    }
+    (*matrix)[i][3] += input->GetOrigin()[i];
+  }
+
+  // GetDirection provides the forward transform, vtkImageReslice wants the inverse
+  matrix->Invert();
+
+  mTransform.push_back(vtkSmartPointer<vtkTransform>::New());
+  mTransform.back()->SetMatrix(matrix);
+  //META DATA
+  mDictionary.push_back(&(input->GetMetaDataDictionary()));
 }
 //--------------------------------------------------------------------