]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Image.cxx
8ddd9ccb5abd185cb9578eb041b0d563396b95de
[cpPlugins.git] / lib / cpPlugins / Interface / Image.cxx
1 #include <cpPlugins/Interface/Image.h>
2
3 #include <complex>
4 #include <vtkImageData.h>
5
6 #define ITK_MANUAL_INSTANTIATION
7 #include <itkImage.h>
8 #include <itkImageToVTKImageFilter.h>
9
10 #include <itkCovariantVector.h>
11 #include <itkDiffusionTensor3D.h>
12 #include <itkPoint.h>
13 #include <itkRGBPixel.h>
14 #include <itkRGBAPixel.h>
15 #include <itkSymmetricSecondRankTensor.h>
16 #include <itkVector.h>
17
18 // -------------------------------------------------------------------------
19 void cpPlugins::Interface::Image::
20 SetITKDataObject( itk::DataObject* o )
21 {
22   bool r;
23   if( dynamic_cast< itk::ImageBase< 1 >* >( o ) != NULL )
24   {
25     cpPlugins_Image_Array_Demangle(
26       itk::Vector, float, 1, 1, o, _Type, r
27       );
28     else cpPlugins_Image_Array_Demangle(
29       itk::Vector, double, 1, 1, o, _Type, r
30       );
31     else cpPlugins_Image_Array_Demangle(
32       itk::Point, float, 1, 1, o, _Type, r
33       );
34     else cpPlugins_Image_Array_Demangle(
35       itk::Point, double, 1, 1, o, _Type, r
36       );
37     else cpPlugins_Image_Array_Demangle(
38       itk::CovariantVector, float, 1, 1, o, _Type, r
39       );
40     else cpPlugins_Image_Array_Demangle(
41       itk::CovariantVector, double, 1, 1, o, _Type, r
42       );
43     else cpPlugins_Image_Array_Demangle(
44       itk::SymmetricSecondRankTensor, float, 1, 1, o, _Type, r
45       );
46     else cpPlugins_Image_Array_Demangle(
47       itk::SymmetricSecondRankTensor, double, 1, 1, o, _Type, r
48       );
49     else r = this->_Dim< 1 >( o );
50   }
51   else if( dynamic_cast< itk::ImageBase< 2 >* >( o ) != NULL )
52   {
53     cpPlugins_Image_Demangle(
54       itk::RGBPixel< char >, 2, o, _Type, r
55       );
56     else cpPlugins_Image_Demangle(
57       itk::RGBPixel< short >, 2, o, _Type, r
58       );
59     else cpPlugins_Image_Demangle(
60       itk::RGBPixel< unsigned char >, 2, o, _Type, r
61       );
62     else cpPlugins_Image_Demangle(
63       itk::RGBPixel< unsigned short >, 2, o, _Type, r
64       );
65     else cpPlugins_Image_Demangle(
66       itk::RGBAPixel< char >, 2, o, _Type, r
67       );
68     else cpPlugins_Image_Demangle(
69       itk::RGBAPixel< short >, 2, o, _Type, r
70       );
71     else cpPlugins_Image_Demangle(
72       itk::RGBAPixel< unsigned char >, 2, o, _Type, r
73       );
74     else cpPlugins_Image_Demangle(
75       itk::RGBAPixel< unsigned short >, 2, o, _Type, r
76       );
77     else cpPlugins_Image_Array_Demangle(
78       itk::Vector, float, 2, 2, o, _Type, r
79       );
80     else cpPlugins_Image_Array_Demangle(
81       itk::Vector, double, 2, 2, o, _Type, r
82       );
83     else cpPlugins_Image_Array_Demangle(
84       itk::Point, float, 2, 2, o, _Type, r
85       );
86     else cpPlugins_Image_Array_Demangle(
87       itk::Point, double, 2, 2, o, _Type, r
88       );
89     else cpPlugins_Image_Array_Demangle(
90       itk::CovariantVector, float, 2, 2, o, _Type, r
91       );
92     else cpPlugins_Image_Array_Demangle(
93       itk::CovariantVector, double, 2, 2, o, _Type, r
94       );
95     else cpPlugins_Image_Array_Demangle(
96       itk::SymmetricSecondRankTensor, float, 2, 2, o, _Type, r
97       );
98     else cpPlugins_Image_Array_Demangle(
99       itk::SymmetricSecondRankTensor, double, 2, 2, o, _Type, r
100       );
101     else r = this->_Dim< 2 >( o );
102   }
103   else if( dynamic_cast< itk::ImageBase< 3 >* >( o ) != NULL )
104   {
105     cpPlugins_Image_Demangle(
106       itk::RGBPixel< char >, 3, o, _Type, r
107       );
108     else cpPlugins_Image_Demangle(
109       itk::RGBPixel< short >, 3, o, _Type, r
110       );
111     else cpPlugins_Image_Demangle(
112       itk::RGBPixel< unsigned char >, 3, o, _Type, r
113       );
114     else cpPlugins_Image_Demangle(
115       itk::RGBPixel< unsigned short >, 3, o, _Type, r
116       );
117     else cpPlugins_Image_Demangle(
118       itk::RGBAPixel< char >, 3, o, _Type, r
119       );
120     else cpPlugins_Image_Demangle(
121       itk::RGBAPixel< short >, 3, o, _Type, r
122       );
123     else cpPlugins_Image_Demangle(
124       itk::RGBAPixel< unsigned char >, 3, o, _Type, r
125       );
126     else cpPlugins_Image_Demangle(
127       itk::RGBAPixel< unsigned short >, 3, o, _Type, r
128       );
129     else cpPlugins_Image_Array_Demangle(
130       itk::Vector, float, 3, 3, o, _Type, r
131       );
132     else cpPlugins_Image_Array_Demangle(
133       itk::Vector, double, 3, 3, o, _Type, r
134       );
135     else cpPlugins_Image_Array_Demangle(
136       itk::Point, float, 3, 3, o, _Type, r
137       );
138     else cpPlugins_Image_Array_Demangle(
139       itk::Point, double, 3, 3, o, _Type, r
140       );
141     else cpPlugins_Image_Array_Demangle(
142       itk::CovariantVector, float, 3, 3, o, _Type, r
143       );
144     else cpPlugins_Image_Array_Demangle(
145       itk::CovariantVector, double, 3, 3, o, _Type, r
146       );
147     else cpPlugins_Image_Array_Demangle(
148       itk::SymmetricSecondRankTensor, float, 3, 3, o, _Type, r
149       );
150     else cpPlugins_Image_Array_Demangle(
151       itk::SymmetricSecondRankTensor, double, 3, 3, o, _Type, r
152       );
153     else cpPlugins_Image_Demangle(
154       itk::DiffusionTensor3D< float >, 3, o, _Type, r
155       );
156     else cpPlugins_Image_Demangle(
157       itk::DiffusionTensor3D< double >, 3, o, _Type, r
158       );
159     else r = this->_Dim< 3 >( o );
160   }
161   else if( dynamic_cast< itk::ImageBase< 4 >* >( o ) != NULL )
162   {
163     this->m_ITKObject = o;
164     this->m_VTKObject = NULL;
165     this->m_ITKvVTKConnection = NULL;
166
167   } // fi
168 }
169
170 // -------------------------------------------------------------------------
171 void cpPlugins::Interface::Image::
172 SetVTKDataObject( vtkDataObject* o )
173 {
174   // this->m_VTKObject = o;
175   std::cerr << "Image: TODO this!!!!" << std::endl;
176   std::exit( 1 );
177 }
178
179 // -------------------------------------------------------------------------
180 vtkImageData* cpPlugins::Interface::Image::
181 GetVTKImageData( )
182 {
183   return( dynamic_cast< vtkImageData* >( this->GetVTKDataObject( ) ) );
184 }
185
186 // -------------------------------------------------------------------------
187 const vtkImageData* cpPlugins::Interface::Image::
188 GetVTKImageData( ) const
189 {
190   return(
191     dynamic_cast< const vtkImageData* >( this->GetVTKDataObject( ) )
192     );
193 }
194
195 // -------------------------------------------------------------------------
196 cpPlugins::Interface::Image::
197 Image( )
198   : Superclass( )
199 {
200   this->m_ClassName = "cpPlugins::Interface::Image";
201   this->m_ClassCategory = "BasicObject";
202 }
203
204 // -------------------------------------------------------------------------
205 cpPlugins::Interface::Image::
206 ~Image( )
207 {
208 }
209
210 // -------------------------------------------------------------------------
211 template< unsigned int D >
212 bool cpPlugins::Interface::Image::
213 _Dim( itk::DataObject* o )
214 {
215   bool r;
216   cpPlugins_Image_Demangle(
217     char, D, o, _Type, r
218     );
219   else cpPlugins_Image_Demangle(
220     short, D, o, _Type, r
221     );
222   else cpPlugins_Image_Demangle(
223     int, D, o, _Type, r
224     );
225   else cpPlugins_Image_Demangle(
226     long, D, o, _Type, r
227     );
228   else cpPlugins_Image_Demangle(
229     unsigned char, D, o, _Type, r
230     );
231   else cpPlugins_Image_Demangle(
232     unsigned short, D, o, _Type, r
233     );
234   else cpPlugins_Image_Demangle(
235     unsigned int, D, o, _Type, r
236     );
237   else cpPlugins_Image_Demangle(
238     unsigned long, D, o, _Type, r
239     );
240   else cpPlugins_Image_Demangle(
241     float, D, o, _Type, r
242     );
243   else cpPlugins_Image_Demangle(
244     double, D, o, _Type, r
245     );
246   else
247   {
248     this->m_ITKObject = o;
249     this->m_VTKObject = NULL;
250     this->m_ITKvVTKConnection = NULL;
251
252   } // fi
253   return( true );
254 }
255
256 // -------------------------------------------------------------------------
257 template< class I >
258 bool cpPlugins::Interface::Image::
259 _Type( itk::DataObject* o )
260 {
261   typedef itk::ImageToVTKImageFilter< I > _F;
262
263   typename _F::Pointer f = _F::New( );
264   f->SetInput( dynamic_cast< I* >( o ) );
265   f->Update( );
266
267   this->m_ITKObject = o;
268   this->m_VTKObject = f->GetOutput( );
269   this->m_ITKvVTKConnection = f;
270
271   return( true );
272 }
273
274 // eof - $RCSfile$