]> Creatis software - creaMaracasVisu.git/blob - lib/Kernel/ITKVTK/ITKToVTKImageImport.h_
Support #1768 CREATIS Licence insertion
[creaMaracasVisu.git] / lib / Kernel / ITKVTK / ITKToVTKImageImport.h_
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
4 #                        pour la Sant�)
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8 #
9 #  This software is governed by the CeCILL-B license under French law and 
10 #  abiding by the rules of distribution of free software. You can  use, 
11 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
12 #  license as circulated by CEA, CNRS and INRIA at the following URL 
13 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
14 #  or in the file LICENSE.txt.
15 #
16 #  As a counterpart to the access to the source code and  rights to copy,
17 #  modify and redistribute granted by the license, users are provided only
18 #  with a limited warranty  and the software's author,  the holder of the
19 #  economic rights,  and the successive licensors  have only  limited
20 #  liability. 
21 #
22 #  The fact that you are presently reading this means that you have had
23 #  knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */ 
25
26 #ifndef __ITKToVTKImageImport_h_
27 #define __ITKToVTKImageImport_h_
28
29 #include "itkImage.h"
30 #include "itkVTKImageImport.h"
31 #include "itkVTKImageExport.h"
32
33 #include "vtkImageData.h"
34 #include "vtkImageImport.h"
35 #include "vtkImageExport.h"
36
37 #define DIM 3
38 #define TRY_CLAUSE_ITK          try{
39 #define CATCH_CLAUSE_ITK        }catch(itk::ExceptionObject &e){                \
40                                                                 std::cout<<e<<std::endl;                        \
41                                                                 std::string ex = e.GetDescription();}\
42
43 //------------------------------------------------------------------------------------------------------------
44 // Includes
45 //------------------------------------------------------------------------------------------------------------
46 template<typename TypeImage,unsigned int dim>
47 class ITKToVTKImageImport {
48
49 //------------------------------------------------------------------------------------------------------------
50 // Constructors & Destructors
51 //------------------------------------------------------------------------------------------------------------
52 public:
53         /* !!!!!some type definitions!!!!!!
54         */
55         /*
56         *       type definition for the itk image that is going to be use
57         */
58         typedef itk::Image<TypeImage,dim> itkImageType;
59         /*
60         *       type definition for the itk image import
61         */
62         typedef itk::VTKImageImport<itkImageType> ImageImportType;
63         /*
64         *       type definition for the pointer of the image import
65         */
66         typedef typename ImageImportType::Pointer ImageImportPointer;
67         /*
68         *       type definition for the itk image import
69         */
70         typedef itk::VTKImageExport<itkImageType> ImageExportType;
71         /*
72         *       type definition for the pointer of the image import
73         */
74         typedef typename ImageExportType::Pointer ImageExportPointer;
75         /**
76         ** Default constructor, allocates the vtkImageExport and itkImageImport
77         **      Connects the pipelines and set them ready to be use
78         **/
79         ITKToVTKImageImport(){
80
81                 vtkimageexport  = vtkImageExport::New();
82                 imageimportpointer = ImageImportType::New();
83
84                 imageimportpointer->SetUpdateInformationCallback(vtkimageexport->GetUpdateInformationCallback());
85                 imageimportpointer->SetPipelineModifiedCallback(vtkimageexport->GetPipelineModifiedCallback());
86                 imageimportpointer->SetWholeExtentCallback(vtkimageexport->GetWholeExtentCallback());
87                 imageimportpointer->SetSpacingCallback(vtkimageexport->GetSpacingCallback());
88                 imageimportpointer->SetOriginCallback(vtkimageexport->GetOriginCallback());
89                 imageimportpointer->SetScalarTypeCallback(vtkimageexport->GetScalarTypeCallback());
90                 imageimportpointer->SetNumberOfComponentsCallback(vtkimageexport->GetNumberOfComponentsCallback());
91                 imageimportpointer->SetPropagateUpdateExtentCallback(vtkimageexport->GetPropagateUpdateExtentCallback());
92                 imageimportpointer->SetUpdateDataCallback(vtkimageexport->GetUpdateDataCallback());
93                 imageimportpointer->SetDataExtentCallback(vtkimageexport->GetDataExtentCallback());
94                 imageimportpointer->SetBufferPointerCallback(vtkimageexport->GetBufferPointerCallback());
95                 imageimportpointer->SetCallbackUserData(vtkimageexport->GetCallbackUserData());
96
97
98                 imageexportpointer = ImageExportType::New();
99                 vtkimageimport = vtkImageImport::New();
100
101                 vtkimageimport->SetUpdateInformationCallback(imageexportpointer->GetUpdateInformationCallback());
102                 vtkimageimport->SetPipelineModifiedCallback(imageexportpointer->GetPipelineModifiedCallback());
103                 vtkimageimport->SetWholeExtentCallback(imageexportpointer->GetWholeExtentCallback());
104                 vtkimageimport->SetSpacingCallback(imageexportpointer->GetSpacingCallback());
105                 vtkimageimport->SetOriginCallback(imageexportpointer->GetOriginCallback());
106                 vtkimageimport->SetScalarTypeCallback(imageexportpointer->GetScalarTypeCallback());
107                 vtkimageimport->SetNumberOfComponentsCallback(imageexportpointer->GetNumberOfComponentsCallback());
108                 vtkimageimport->SetPropagateUpdateExtentCallback(imageexportpointer->GetPropagateUpdateExtentCallback());
109                 vtkimageimport->SetUpdateDataCallback(imageexportpointer->GetUpdateDataCallback());
110                 vtkimageimport->SetDataExtentCallback(imageexportpointer->GetDataExtentCallback());
111                 vtkimageimport->SetBufferPointerCallback(imageexportpointer->GetBufferPointerCallback());
112                 vtkimageimport->SetCallbackUserData(imageexportpointer->GetCallbackUserData());
113
114         }
115
116
117         ~ITKToVTKImageImport(){
118                 /*std::cout<<"delete ~ITKToVTKImageImport(){"<<std::endl;*/
119                 vtkimageimport->Delete();
120                 vtkimageexport->Delete();
121         }
122         /*
123         *       set the vtkImage data to connect to itk pipeline
124         */
125         void setVTKImage(vtkImageData* img) {
126                 vtkimageexport->SetInput( img );
127                 vtkimageexport->Update();
128                 imageimportpointer->Update();
129         }
130         /*
131         *
132         */
133         itk::Image<TypeImage,dim>* getITKImage() {
134                 if(vtkimageexport->GetInput()==0){
135                         throw "Image not set to get the ItkImage, set the VtkImage before.\0";
136                 }
137                 return imageimportpointer->GetOutput();
138         }
139
140         /*
141         *       Get the vtkImageData from the itk image
142         */
143         vtkImageData* GetOutputVTKImageDataImport() {
144                 return vtkimageimport->GetOutput();
145         }
146         /*
147         *       set the vtkImage data to connect to itk pipeline
148         */
149         void setITKImage(itkImageType* img) {
150                 //std::cout<<"image pointer setITKImage"<<img<<std::endl;
151                 imageexportpointer->SetInput(img);
152                 imageexportpointer->Update();
153                 vtkimageimport->Update();
154         }
155
156 //------------------------------------------------------------------------------------------------------------
157 // Attributes
158 //------------------------------------------------------------------------------------------------------------
159 private:
160
161
162
163         /*
164         *       Pointer to vtkImageExport
165         */
166         vtkImageExport * vtkimageexport;
167         /*
168         *       itk::VTKImageImport pointer
169         */
170         ImageImportPointer imageimportpointer;
171         /*
172         *       Pointer to vtkImageExport
173         */
174         vtkImageImport * vtkimageimport;
175         /*
176         *       Pointer to Export the itk image into vtk
177         */
178         ImageExportPointer imageexportpointer;
179 };
180 #endif