1 #include <cpPlugins/Interface/Image.h>
5 #include <vtkImageData.h>
7 #define ITK_MANUAL_INSTANTIATION
9 #include <itkImageToVTKImageFilter.h>
11 #include <itkCovariantVector.h>
12 #include <itkDiffusionTensor3D.h>
14 #include <itkRGBPixel.h>
15 #include <itkRGBAPixel.h>
16 #include <itkSymmetricSecondRankTensor.h>
17 #include <itkVector.h>
20 // -------------------------------------------------------------------------
22 void cpPlugins::Interface::Image::
23 SetITKDataObject( itk::DataObject* o )
26 if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL )
28 cpPlugins_Image_Array_Demangle(
29 itk::Vector, float, 1, 1, o, _Type, r
31 else cpPlugins_Image_Array_Demangle(
32 itk::Vector, double, 1, 1, o, _Type, r
34 else cpPlugins_Image_Array_Demangle(
35 itk::Point, float, 1, 1, o, _Type, r
37 else cpPlugins_Image_Array_Demangle(
38 itk::Point, double, 1, 1, o, _Type, r
40 else cpPlugins_Image_Array_Demangle(
41 itk::CovariantVector, float, 1, 1, o, _Type, r
43 else cpPlugins_Image_Array_Demangle(
44 itk::CovariantVector, double, 1, 1, o, _Type, r
46 else cpPlugins_Image_Array_Demangle(
47 itk::SymmetricSecondRankTensor, float, 1, 1, o, _Type, r
49 else cpPlugins_Image_Array_Demangle(
50 itk::SymmetricSecondRankTensor, double, 1, 1, o, _Type, r
52 else r = this->_Dim< 1 >( o );
54 else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL )
56 cpPlugins_Image_Demangle(
57 itk::RGBPixel< char >, 2, o, _Type, r
59 else cpPlugins_Image_Demangle(
60 itk::RGBPixel< short >, 2, o, _Type, r
62 else cpPlugins_Image_Demangle(
63 itk::RGBPixel< unsigned char >, 2, o, _Type, r
65 else cpPlugins_Image_Demangle(
66 itk::RGBPixel< unsigned short >, 2, o, _Type, r
68 else cpPlugins_Image_Demangle(
69 itk::RGBAPixel< char >, 2, o, _Type, r
71 else cpPlugins_Image_Demangle(
72 itk::RGBAPixel< short >, 2, o, _Type, r
74 else cpPlugins_Image_Demangle(
75 itk::RGBAPixel< unsigned char >, 2, o, _Type, r
77 else cpPlugins_Image_Demangle(
78 itk::RGBAPixel< unsigned short >, 2, o, _Type, r
80 else cpPlugins_Image_Array_Demangle(
81 itk::Vector, float, 2, 2, o, _Type, r
83 else cpPlugins_Image_Array_Demangle(
84 itk::Vector, double, 2, 2, o, _Type, r
86 else cpPlugins_Image_Array_Demangle(
87 itk::Point, float, 2, 2, o, _Type, r
89 else cpPlugins_Image_Array_Demangle(
90 itk::Point, double, 2, 2, o, _Type, r
92 else cpPlugins_Image_Array_Demangle(
93 itk::CovariantVector, float, 2, 2, o, _Type, r
95 else cpPlugins_Image_Array_Demangle(
96 itk::CovariantVector, double, 2, 2, o, _Type, r
98 else cpPlugins_Image_Array_Demangle(
99 itk::SymmetricSecondRankTensor, float, 2, 2, o, _Type, r
101 else cpPlugins_Image_Array_Demangle(
102 itk::SymmetricSecondRankTensor, double, 2, 2, o, _Type, r
104 else r = this->_Dim< 2 >( o );
106 else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL )
108 cpPlugins_Image_Demangle(
109 itk::RGBPixel< char >, 3, o, _Type, r
111 else cpPlugins_Image_Demangle(
112 itk::RGBPixel< short >, 3, o, _Type, r
114 else cpPlugins_Image_Demangle(
115 itk::RGBPixel< unsigned char >, 3, o, _Type, r
117 else cpPlugins_Image_Demangle(
118 itk::RGBPixel< unsigned short >, 3, o, _Type, r
120 else cpPlugins_Image_Demangle(
121 itk::RGBAPixel< char >, 3, o, _Type, r
123 else cpPlugins_Image_Demangle(
124 itk::RGBAPixel< short >, 3, o, _Type, r
126 else cpPlugins_Image_Demangle(
127 itk::RGBAPixel< unsigned char >, 3, o, _Type, r
129 else cpPlugins_Image_Demangle(
130 itk::RGBAPixel< unsigned short >, 3, o, _Type, r
132 else cpPlugins_Image_Array_Demangle(
133 itk::Vector, float, 3, 3, o, _Type, r
135 else cpPlugins_Image_Array_Demangle(
136 itk::Vector, double, 3, 3, o, _Type, r
138 else cpPlugins_Image_Array_Demangle(
139 itk::Point, float, 3, 3, o, _Type, r
141 else cpPlugins_Image_Array_Demangle(
142 itk::Point, double, 3, 3, o, _Type, r
144 else cpPlugins_Image_Array_Demangle(
145 itk::CovariantVector, float, 3, 3, o, _Type, r
147 else cpPlugins_Image_Array_Demangle(
148 itk::CovariantVector, double, 3, 3, o, _Type, r
150 else cpPlugins_Image_Array_Demangle(
151 itk::SymmetricSecondRankTensor, float, 3, 3, o, _Type, r
153 else cpPlugins_Image_Array_Demangle(
154 itk::SymmetricSecondRankTensor, double, 3, 3, o, _Type, r
156 else cpPlugins_Image_Demangle(
157 itk::DiffusionTensor3D< float >, 3, o, _Type, r
159 else cpPlugins_Image_Demangle(
160 itk::DiffusionTensor3D< double >, 3, o, _Type, r
162 else r = this->_Dim< 3 >( o );
164 else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL )
166 this->m_ITKObject = o;
167 this->m_VTKObject = NULL;
168 this->m_ITKvVTKConnection = NULL;
174 // -------------------------------------------------------------------------
175 void cpPlugins::Interface::Image::
176 SetVTKImageData( vtkImageData* image )
178 // this->m_VTKObject = image;
179 std::cerr << "Image: TODO this!!!!" << std::endl;
183 // -------------------------------------------------------------------------
184 vtkImageData* cpPlugins::Interface::Image::
188 dynamic_cast< vtkImageData* >( this->m_VTKObject.GetPointer( ) )
192 // -------------------------------------------------------------------------
193 const vtkImageData* cpPlugins::Interface::Image::
194 GetVTKImageData( ) const
197 dynamic_cast< const vtkImageData* >( this->m_VTKObject.GetPointer( ) )
201 // -------------------------------------------------------------------------
202 cpPlugins::Interface::Image::
206 this->m_ClassName = "cpPlugins::Interface::Image";
207 this->m_ClassCategory = "BasicObject";
210 // -------------------------------------------------------------------------
211 cpPlugins::Interface::Image::
216 // -------------------------------------------------------------------------
218 template< unsigned int D >
219 bool cpPlugins::Interface::Image::
220 _Dim( itk::DataObject* o )
223 cpPlugins_Image_Demangle(
226 else cpPlugins_Image_Demangle(
227 short, D, o, _Type, r
229 else cpPlugins_Image_Demangle(
232 else cpPlugins_Image_Demangle(
235 else cpPlugins_Image_Demangle(
236 unsigned char, D, o, _Type, r
238 else cpPlugins_Image_Demangle(
239 unsigned short, D, o, _Type, r
241 else cpPlugins_Image_Demangle(
242 unsigned int, D, o, _Type, r
244 else cpPlugins_Image_Demangle(
245 unsigned long, D, o, _Type, r
247 else cpPlugins_Image_Demangle(
248 float, D, o, _Type, r
250 else cpPlugins_Image_Demangle(
251 double, D, o, _Type, r
255 this->m_ITKObject = o;
256 this->m_VTKObject = NULL;
257 this->m_ITKvVTKConnection = NULL;
263 // -------------------------------------------------------------------------
265 bool cpPlugins::Interface::Image::
266 _Type( itk::DataObject* o )
268 typedef itk::ImageToVTKImageFilter< I > _F;
270 typename _F::Pointer f = _F::New( );
271 f->SetInput( dynamic_cast< I* >( o ) );
274 this->m_ITKObject = o;
275 this->m_VTKObject = f->GetOutput( );
276 this->m_ITKvVTKConnection = f;