- vtkSmartPointer<vtkImageData> IntVolumeToVtkImageData(
- const IntVolume *volume, vtkSmartPointer<vtkTransform> transform)
- {
- return ItkImageToVtkImageData<IntVolume>(volume, transform);
- }
- template <typename NDImageType>
- vtkSmartPointer<vtkImageData> ItkImageToVtkImageData(const typename NDImageType *ndImage,
- vtkSmartPointer<vtkTransform> transform)
- {
- typedef itk::ImageToVTKImageFilter<NDImageType> ConnectorType;
- ConnectorType::Pointer connector = ConnectorType::New();
- connector->SetInput(ndImage);
- connector->Update();
- vtkImageData *vtkData = connector->GetOutput();
- vtkSmartPointer<vtkImageData> vtkDataCopy = vtkSmartPointer<vtkImageData>::New();
- vtkDataCopy->DeepCopy(vtkData);
- if (transform)
- {
- // if a vtkTransform is specified then:
- // 1. erase origin from vtkDataCopy
- // 2. fill transform with direction and origin extracted from ndImage
- vtkSmartPointer<vtkMatrix4x4> mat = vtkSmartPointer<vtkMatrix4x4>::New();
- mat->Identity();
- // set the rotation
- NDImageType::DirectionType direction = ndImage->GetDirection();
- for (int i = 0; i < 3; ++i)
- {
- for (int j = 0; j < 3; ++j)
- {
- mat->SetElement(i, j, direction[i][j]);
- }
- }
- // erase origin from vtkDataCopy and set the origin in the transform
- vtkDataCopy->SetOrigin(0, 0, 0);
- NDImageType::PointType origin = ndImage->GetOrigin();
- unsigned int dimension = NDImageType::GetImageDimension();
- for (unsigned int i = 0; i < dimension; ++i)
- {
- mat->SetElement(i, 3, origin[i]);
- }
- transform->SetMatrix(mat);
- }
- return vtkDataCopy;
- }
[text] IntVolumetoVtkImageData
Viewer
Editor
You can edit this paste and save as new: