]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Extensions/DataStructures/ITKAndVTKImage.h
...
[cpPlugins.git] / lib / cpPlugins / Extensions / DataStructures / ITKAndVTKImage.h
1 #ifndef __CPPLUGINS__EXTENSIONS__DATASTRUCTURES__ITKANDVTKIMAGE__H__
2 #define __CPPLUGINS__EXTENSIONS__DATASTRUCTURES__ITKANDVTKIMAGE__H__
3
4 #include <itkImage.h>
5 #include <itkImageFileReader.h>
6 #include <itkImageFileWriter.h>
7 #include <itkImageToVTKImageFilter.h>
8
9 namespace cpPlugins
10 {
11   namespace Extensions
12   {
13     namespace DataStructures
14     {
15       /**
16        */
17       template< typename P, unsigned int D >
18       struct ITKAndVTKImage
19       {
20         typedef itk::Image< P, D >                   TImage;
21         typedef itk::ImageToVTKImageFilter< TImage > TItk2Vtk;
22
23         typename TImage::Pointer   ITK;
24         typename TItk2Vtk::Pointer VTK;
25
26         void SetItkImage( TImage* image )
27           {
28             this->ITK = image;
29             this->_Synch( );
30           }
31
32         std::string ReadFromFile( const std::string& filename )
33           {
34             typename itk::ImageFileReader< TImage >::Pointer r =
35               itk::ImageFileReader< TImage >::New( );
36             r->SetFileName( filename );
37             try
38             {
39               r->Update( );
40             }
41             catch( itk::ExceptionObject& err )
42             {
43               this->ITK = NULL;
44               return( err.GetDescription( ) );
45
46             } // fi
47             this->ITK = r->GetOutput( );
48             this->ITK->DisconnectPipeline( );
49             this->_Synch( );
50             return( "" );
51           }
52
53         std::string WriteToFile( const std::string& filename ) const
54           {
55             typename itk::ImageFileWriter< TImage >::Pointer w =
56               itk::ImageFileWriter< TImage >::New( );
57             w->SetFileName( filename );
58             w->SetInput( this->ITK );
59             try
60             {
61               w->Update( );
62             }
63             catch( itk::ExceptionObject& err )
64             {
65               return( err.GetDescription( ) );
66
67             } // fi
68             return( "" );
69           }
70
71         TImage* GetItkImage( )
72           { return( this->ITK ); }
73         vtkImageData* GetVtkImage( )
74           { return( this->VTK->GetOutput( ) ); }
75         const TImage* GetItkImage( ) const
76           { return( this->ITK ); }
77         const vtkImageData* GetVtkImage( ) const
78           { return( this->VTK->GetOutput( ) ); }
79         void DisconnectPipeline( )
80           { this->ITK->DisconnectPipeline( ); }
81
82         void _Synch( )
83           {
84             this->VTK = TItk2Vtk::New( );
85             this->VTK->SetInput( this->ITK );
86             this->VTK->Update( );
87           }
88
89       };
90
91     } // ecapseman
92
93   } // ecapseman
94
95 } // ecapseman
96
97 #endif // __CPPLUGINS__EXTENSIONS__DATASTRUCTURES__ITKANDVTKIMAGE__H__
98
99 // eof - $RCSfile$