1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
26 #ifndef __ITKToVTKImageImport_h_
27 #define __ITKToVTKImageImport_h_
30 #include "itkVTKImageImport.h"
31 #include "itkVTKImageExport.h"
33 #include "vtkImageData.h"
34 #include "vtkImageImport.h"
35 #include "vtkImageExport.h"
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();}\
43 //------------------------------------------------------------------------------------------------------------
45 //------------------------------------------------------------------------------------------------------------
46 template<typename TypeImage,unsigned int dim>
47 class ITKToVTKImageImport {
49 //------------------------------------------------------------------------------------------------------------
50 // Constructors & Destructors
51 //------------------------------------------------------------------------------------------------------------
53 /* !!!!!some type definitions!!!!!!
56 * type definition for the itk image that is going to be use
58 typedef itk::Image<TypeImage,dim> itkImageType;
60 * type definition for the itk image import
62 typedef itk::VTKImageImport<itkImageType> ImageImportType;
64 * type definition for the pointer of the image import
66 typedef typename ImageImportType::Pointer ImageImportPointer;
68 * type definition for the itk image import
70 typedef itk::VTKImageExport<itkImageType> ImageExportType;
72 * type definition for the pointer of the image import
74 typedef typename ImageExportType::Pointer ImageExportPointer;
76 ** Default constructor, allocates the vtkImageExport and itkImageImport
77 ** Connects the pipelines and set them ready to be use
79 ITKToVTKImageImport(){
81 vtkimageexport = vtkImageExport::New();
82 imageimportpointer = ImageImportType::New();
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());
98 imageexportpointer = ImageExportType::New();
99 vtkimageimport = vtkImageImport::New();
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());
117 ~ITKToVTKImageImport(){
118 /*std::cout<<"delete ~ITKToVTKImageImport(){"<<std::endl;*/
119 vtkimageimport->Delete();
120 vtkimageexport->Delete();
123 * set the vtkImage data to connect to itk pipeline
125 void setVTKImage(vtkImageData* img) {
126 vtkimageexport->SetInput( img );
127 vtkimageexport->Update();
128 imageimportpointer->Update();
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";
137 return imageimportpointer->GetOutput();
141 * Get the vtkImageData from the itk image
143 vtkImageData* GetOutputVTKImageDataImport() {
144 return vtkimageimport->GetOutput();
147 * set the vtkImage data to connect to itk pipeline
149 void setITKImage(itkImageType* img) {
150 //std::cout<<"image pointer setITKImage"<<img<<std::endl;
151 imageexportpointer->SetInput(img);
152 imageexportpointer->Update();
153 vtkimageimport->Update();
156 //------------------------------------------------------------------------------------------------------------
158 //------------------------------------------------------------------------------------------------------------
164 * Pointer to vtkImageExport
166 vtkImageExport * vtkimageexport;
168 * itk::VTKImageImport pointer
170 ImageImportPointer imageimportpointer;
172 * Pointer to vtkImageExport
174 vtkImageImport * vtkimageimport;
176 * Pointer to Export the itk image into vtk
178 ImageExportPointer imageexportpointer;