- if (Dim == 4 || time_sequence) //The time sequence case: create a series of VTK images
- {
- typedef itk::Image< PixelType, Dim - 1 > ConnectorImageType;
- typedef itk::ImageToVTKImageFilter <ConnectorImageType> ConnectorType;
- typedef itk::ExtractImageFilter<InputImageType,ConnectorImageType> FilterType;
-
- typename FilterType::Pointer filter = FilterType::New();
- typename ConnectorType::Pointer connector = ConnectorType::New();
-
- //extract the 3D slices and put them in a std::vector<vtkImageData*>
- typename InputImageType::RegionType inputRegion = input->GetLargestPossibleRegion();
- typename InputImageType::SizeType inputSize = inputRegion.GetSize();
-
- typename InputImageType::SizeType extractedRegionSize = inputSize;
- typename InputImageType::RegionType extractedRegion;
- extractedRegionSize[Dim - 1] = 0;
- extractedRegion.SetSize(extractedRegionSize);
-
- filter->SetInput(input);
- connector->SetInput(filter->GetOutput());
-
- typename InputImageType::IndexType start = inputRegion.GetIndex();
-
- for (unsigned int i = 0; i < inputSize[Dim - 1]; i++) {
- start[Dim - 1] = i;
- extractedRegion.SetIndex(start);
- filter->SetExtractionRegion(extractedRegion);
- try {
- filter->Update();
- }
- catch ( itk::ExceptionObject & err ) {
- std::cerr << "Error while setting vvImage from ITK (Dim==4) [Extract phase]"
- << " " << err << std::endl;
- return vv_image;
- }
- try {
- connector->Update();
- }
- catch ( itk::ExceptionObject & err ) {
- std::cerr << "Error while setting vvImage from ITK (Dim==4) [Connect phase]"
- << " " << err << std::endl;
- return vv_image;
- }
- vtkImageData *image = vtkImageData::New();
- image->DeepCopy(connector->GetOutput());
- vv_image->AddImage(image);
- }
- vv_image->SetTimeSpacing(input->GetSpacing()[Dim-1]);
- vv_image->SetTimeOrigin(input->GetOrigin()[Dim-1]);
- }