1 /*=========================================================================
4 Module: $RCSfile: bbitkvtkvtkImageData2itkImage.cxx,v $
6 Date: $Date: 2008/11/25 11:17:18 $
7 Version: $Revision: 1.4 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
25 #include "bbitkvtkvtkImageData2itkImage.h"
26 #include "bbitkvtkPackage.h"
28 #include "itkVTKImageToImageFilter.h"
30 //#include "itkImageToVTKImageFilter.h"
36 BBTK_BLACK_BOX_IMPLEMENTATION(vtkImageData2itkImage,bbtk::AtomicBlackBox);
38 BBTK_ADD_BLACK_BOX_TO_PACKAGE(itkvtk,vtkImageData2itkImage);
40 #define BBTK_TEMPLATE_VTK_IMAGE_DATA_SWITCH_DIM(I,DIM,M) \
41 if (I->GetDataDimension()==DIM) \
43 if (I->GetScalarType()==VTK_CHAR) M<char,DIM>(); \
44 else if (I->GetScalarType()==VTK_SIGNED_CHAR) M<signed char,DIM>(); \
45 else if (I->GetScalarType()==VTK_UNSIGNED_CHAR) M<unsigned char,DIM>(); \
46 else if (I->GetScalarType()==VTK_SHORT) M<short,DIM>(); \
47 else if (I->GetScalarType()==VTK_UNSIGNED_SHORT) M<unsigned short,DIM>(); \
48 else if (I->GetScalarType()==VTK_INT) M<int,DIM>(); \
49 else if (I->GetScalarType()==VTK_UNSIGNED_INT) M<unsigned int,DIM>(); \
50 else if (I->GetScalarType()==VTK_LONG) M<long,DIM>(); \
51 else if (I->GetScalarType()==VTK_UNSIGNED_LONG) M<unsigned long,DIM>(); \
52 else if (I->GetScalarType()==VTK_FLOAT) M<float,DIM>(); \
53 else if (I->GetScalarType()==VTK_DOUBLE) M<double,DIM>(); \
56 #define BBTK_TEMPLATE_VTK_IMAGE_DATA_SWITCH(I,M) \
57 BBTK_TEMPLATE_VTK_IMAGE_DATA_SWITCH_DIM(I,2,M) \
58 BBTK_TEMPLATE_VTK_IMAGE_DATA_SWITCH_DIM(I,3,M)
60 void vtkImageData2itkImage::Convert()
62 BBTK_TEMPLATE_VTK_IMAGE_DATA_SWITCH(bbGetInputIn(),Convert)
67 template<class T, unsigned int D>
68 void vtkImageData2itkImage::Convert()
70 bbtkDebugMessage("process",5,"==> ["<<bbGetFullName()<<"] : Convert<"
71 <<bbtk::TypeName<T>()<<","<<D
75 typedef itk::Image<T,D> itkImageType;
76 typedef itk::VTKImageToImageFilter< itkImageType > VtkToItkConnection;
77 typename VtkToItkConnection::Pointer conv;
79 // No converter yet : create it and set its input
82 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : No converter yet : creating it"<<std::endl);
83 conv = VtkToItkConnection::New();
85 conv->SetInput( this->bbGetInputIn() );
89 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter ok "<<std::endl);
90 // Input vtkImage type changed ?
91 // Have to change the converter and set its input
92 conv = dynamic_cast<VtkToItkConnection*>
93 ((itk::ProcessObject*)mConverter);
96 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter of wrong input type : reacreating it "<<std::endl);
97 mConverter->UnRegister();
98 conv = VtkToItkConnection::New();
100 conv->SetInput( this->bbGetInputIn() );
102 // Input image type did not change but input image pointer did:
104 else if ( this->bbGetInputIn() != conv->GetExporter()->GetInput())
106 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Converter input changed : resetting it"<<std::endl);
107 conv->SetInput( this->bbGetInputIn() );
111 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Nothing changed"<<std::endl);
117 bbtkDebugMessage("process",5," ["<<bbGetFullName()<<"] : Trying update"<<std::endl);
119 itkImageType* out = const_cast<itkImageType*>(conv->GetOutput());
122 catch( itk::ExceptionObject & e)
124 bbtkError("vtkImageData2itkImage<"
125 <<bbtk::TypeName<T>()<<","<<D
126 <<">::Convert() : "<<e);
128 bbtkDebugMessage("process",5,"<== ["<<bbGetFullName()<<"] : Convert<"
129 <<bbtk::TypeName<T>()<<","<<D
130 <<">() *DONE*"<<std::endl);
134 void vtkImageData2itkImage::bbUserConstructor()
136 // bbSetOutputOut(NULL);
140 void vtkImageData2itkImage::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
142 // bbSetOutputOut(NULL);
146 void vtkImageData2itkImage::bbUserDestructor()
148 // if (mConverter) mConverter->UnRegister();