]> Creatis software - creaMaracasVisu.git/blob - lib/Kernel/ITKVTK/ITKToVTKImageImport.h_
5287ae907be128e332a313a7cce7c2b47eabe4c3
[creaMaracasVisu.git] / lib / Kernel / ITKVTK / ITKToVTKImageImport.h_
1 #ifndef __ITKToVTKImageImport_h_
2 #define __ITKToVTKImageImport_h_
3
4 #include "itkImage.h"
5 #include "itkVTKImageImport.h"
6 #include "itkVTKImageExport.h"
7
8 #include "vtkImageData.h"
9 #include "vtkImageImport.h"
10 #include "vtkImageExport.h"
11
12 #define DIM 3
13 #define TRY_CLAUSE_ITK          try{
14 #define CATCH_CLAUSE_ITK        }catch(itk::ExceptionObject &e){                \
15                                                                 std::cout<<e<<std::endl;                        \
16                                                                 std::string ex = e.GetDescription();}\
17
18 //------------------------------------------------------------------------------------------------------------
19 // Includes
20 //------------------------------------------------------------------------------------------------------------
21 template<typename TypeImage,unsigned int dim>
22 class ITKToVTKImageImport {
23
24 //------------------------------------------------------------------------------------------------------------
25 // Constructors & Destructors
26 //------------------------------------------------------------------------------------------------------------
27 public:
28         /* !!!!!some type definitions!!!!!!
29         */
30         /*
31         *       type definition for the itk image that is going to be use
32         */
33         typedef itk::Image<TypeImage,dim> itkImageType;
34         /*
35         *       type definition for the itk image import
36         */
37         typedef itk::VTKImageImport<itkImageType> ImageImportType;
38         /*
39         *       type definition for the pointer of the image import
40         */
41         typedef typename ImageImportType::Pointer ImageImportPointer;
42         /*
43         *       type definition for the itk image import
44         */
45         typedef itk::VTKImageExport<itkImageType> ImageExportType;
46         /*
47         *       type definition for the pointer of the image import
48         */
49         typedef typename ImageExportType::Pointer ImageExportPointer;
50         /**
51         ** Default constructor, allocates the vtkImageExport and itkImageImport
52         **      Connects the pipelines and set them ready to be use
53         **/
54         ITKToVTKImageImport(){
55
56                 vtkimageexport  = vtkImageExport::New();
57                 imageimportpointer = ImageImportType::New();
58
59                 imageimportpointer->SetUpdateInformationCallback(vtkimageexport->GetUpdateInformationCallback());
60                 imageimportpointer->SetPipelineModifiedCallback(vtkimageexport->GetPipelineModifiedCallback());
61                 imageimportpointer->SetWholeExtentCallback(vtkimageexport->GetWholeExtentCallback());
62                 imageimportpointer->SetSpacingCallback(vtkimageexport->GetSpacingCallback());
63                 imageimportpointer->SetOriginCallback(vtkimageexport->GetOriginCallback());
64                 imageimportpointer->SetScalarTypeCallback(vtkimageexport->GetScalarTypeCallback());
65                 imageimportpointer->SetNumberOfComponentsCallback(vtkimageexport->GetNumberOfComponentsCallback());
66                 imageimportpointer->SetPropagateUpdateExtentCallback(vtkimageexport->GetPropagateUpdateExtentCallback());
67                 imageimportpointer->SetUpdateDataCallback(vtkimageexport->GetUpdateDataCallback());
68                 imageimportpointer->SetDataExtentCallback(vtkimageexport->GetDataExtentCallback());
69                 imageimportpointer->SetBufferPointerCallback(vtkimageexport->GetBufferPointerCallback());
70                 imageimportpointer->SetCallbackUserData(vtkimageexport->GetCallbackUserData());
71
72
73                 imageexportpointer = ImageExportType::New();
74                 vtkimageimport = vtkImageImport::New();
75
76                 vtkimageimport->SetUpdateInformationCallback(imageexportpointer->GetUpdateInformationCallback());
77                 vtkimageimport->SetPipelineModifiedCallback(imageexportpointer->GetPipelineModifiedCallback());
78                 vtkimageimport->SetWholeExtentCallback(imageexportpointer->GetWholeExtentCallback());
79                 vtkimageimport->SetSpacingCallback(imageexportpointer->GetSpacingCallback());
80                 vtkimageimport->SetOriginCallback(imageexportpointer->GetOriginCallback());
81                 vtkimageimport->SetScalarTypeCallback(imageexportpointer->GetScalarTypeCallback());
82                 vtkimageimport->SetNumberOfComponentsCallback(imageexportpointer->GetNumberOfComponentsCallback());
83                 vtkimageimport->SetPropagateUpdateExtentCallback(imageexportpointer->GetPropagateUpdateExtentCallback());
84                 vtkimageimport->SetUpdateDataCallback(imageexportpointer->GetUpdateDataCallback());
85                 vtkimageimport->SetDataExtentCallback(imageexportpointer->GetDataExtentCallback());
86                 vtkimageimport->SetBufferPointerCallback(imageexportpointer->GetBufferPointerCallback());
87                 vtkimageimport->SetCallbackUserData(imageexportpointer->GetCallbackUserData());
88
89         }
90
91
92         ~ITKToVTKImageImport(){
93                 /*std::cout<<"delete ~ITKToVTKImageImport(){"<<std::endl;*/
94                 vtkimageimport->Delete();
95                 vtkimageexport->Delete();
96         }
97         /*
98         *       set the vtkImage data to connect to itk pipeline
99         */
100         void setVTKImage(vtkImageData* img) {
101                 vtkimageexport->SetInput( img );
102                 vtkimageexport->Update();
103                 imageimportpointer->Update();
104         }
105         /*
106         *
107         */
108         itk::Image<TypeImage,dim>* getITKImage() {
109                 if(vtkimageexport->GetInput()==0){
110                         throw "Image not set to get the ItkImage, set the VtkImage before.\0";
111                 }
112                 return imageimportpointer->GetOutput();
113         }
114
115         /*
116         *       Get the vtkImageData from the itk image
117         */
118         vtkImageData* GetOutputVTKImageDataImport() {
119                 return vtkimageimport->GetOutput();
120         }
121         /*
122         *       set the vtkImage data to connect to itk pipeline
123         */
124         void setITKImage(itkImageType* img) {
125                 //std::cout<<"image pointer setITKImage"<<img<<std::endl;
126                 imageexportpointer->SetInput(img);
127                 imageexportpointer->Update();
128                 vtkimageimport->Update();
129         }
130
131 //------------------------------------------------------------------------------------------------------------
132 // Attributes
133 //------------------------------------------------------------------------------------------------------------
134 private:
135
136
137
138         /*
139         *       Pointer to vtkImageExport
140         */
141         vtkImageExport * vtkimageexport;
142         /*
143         *       itk::VTKImageImport pointer
144         */
145         ImageImportPointer imageimportpointer;
146         /*
147         *       Pointer to vtkImageExport
148         */
149         vtkImageImport * vtkimageimport;
150         /*
151         *       Pointer to Export the itk image into vtk
152         */
153         ImageExportPointer imageexportpointer;
154 };
155 #endif