]> Creatis software - clitk.git/blobdiff - common/vvImage.txx
Replace vvImage::Pointer with raw pointer for function
[clitk.git] / common / vvImage.txx
index 4532a68f13819fb53024905b6ed2c29e1db5d00d..a84fa76669d7a317655d725e9e2e8371fd8f133c 100755 (executable)
@@ -4,28 +4,33 @@
 template<class TItkImageType>
 void vvImage::AddItkImage(TItkImageType *input)
 {
+  // Convert from ITK object to VTK object
+  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++)
+      (*matrix)[i][j] = input->GetDirection()[i][j];
+  mTransform->SetMatrix(matrix);
 
-  try {
-      converter->Update();
-  }
-  catch ( itk::ExceptionObject & err ) {
-      std::cerr << "Error while setting vvImage from ITK"
-                << " " << err << std::endl;
-  }
-  mItkToVtkConverters.push_back(dynamic_cast< itk::ProcessObject *>(converter.GetPointer()));
-  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, image);
-  //mVtkImageReslice.back()->Update();
-  //mVtkImages.push_back( mVtkImageReslice.back()->GetOutput(0) );
+  // Create the corresponding transformed image
+  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) );
 }
 //--------------------------------------------------------------------