]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Plugins/BasicFilters/ExtractSliceImageFilter.cxx
Merge branch 'master' of ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / lib / cpPlugins / Plugins / BasicFilters / ExtractSliceImageFilter.cxx
1 #include "ExtractSliceImageFilter.h"
2 #include <cpPlugins/Interface/Image.h>
3
4 #include <itkExtractImageFilter.h>
5
6 // -------------------------------------------------------------------------
7 cpPlugins::BasicFilters::ExtractSliceImageFilter::
8 ExtractSliceImageFilter( )
9   : Superclass( )
10 {
11   this->m_ClassName = "cpPlugins::BasicFilters::ExtractSliceImageFilter";
12   this->m_ClassCategory = "ImageToImageFilter";
13   this->SetNumberOfInputs( 1 );
14   this->SetNumberOfOutputs( 1 );
15   this->_MakeOutput< cpPlugins::Interface::Image >( 0 );
16
17   using namespace cpPlugins::Interface;
18   this->m_DefaultParameters.Configure( Parameters::Int, "Axis" );
19   this->m_DefaultParameters.Configure( Parameters::Int, "Slice" );
20   this->m_DefaultParameters.SetValueAsInt( "Axis", 0 );
21   this->m_DefaultParameters.SetValueAsInt( "Slice", 0 );
22   this->m_Parameters = this->m_DefaultParameters;
23 }
24
25 // -------------------------------------------------------------------------
26 cpPlugins::BasicFilters::ExtractSliceImageFilter::
27 ~ExtractSliceImageFilter( )
28 {
29 }
30
31 // -------------------------------------------------------------------------
32 std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
33 _GenerateData( )
34 {
35   cpPlugins::Interface::Image* image =
36     this->GetInput< cpPlugins::Interface::Image >( 0 );
37   if( image == NULL )
38     return( "ExtractSliceImageFilter: No input image." );
39
40   itk::DataObject* itk_image = NULL;
41   std::string r = "";
42 /*
43   cpPlugins_Image_Demangle_AllTypes( 3, image, itk_image, r, _GD0 );
44   else cpPlugins_VectorImage_Demangle_AllTypes( 3, image, itk_image, r, _GD0 );
45   else*/ r = "ExtractSliceImageFilter: Input image type not supported.";
46   return( r );
47 }
48
49 // -------------------------------------------------------------------------
50 template< class I >
51 std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
52 _GD0( itk::DataObject* image )
53 {
54   return( this->_RealGD< I, I >( image ) );
55 }
56
57 // -------------------------------------------------------------------------
58 template< class I, class O >
59 inline std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
60 _RealGD( itk::DataObject* image )
61 {
62   typedef itk::ExtractImageFilter< I, O > _F;
63   typedef typename O::PixelType _OP;
64
65   // Get parameters
66   int axis = this->m_Parameters.GetValueAsInt( "Axis" );
67   int slice = this->m_Parameters.GetValueAsInt( "Slice" );
68
69   std::cout << "HOLA: " << slice << std::endl;
70
71
72   // Compute region
73   I* img = dynamic_cast< I* >( image );
74   typename I::RegionType region = img->GetRequestedRegion( );
75   typename I::SizeType size = region.GetSize( );
76   typename I::IndexType index = region.GetIndex( );
77   size[ axis ] = 1;
78   index[ axis ] = slice;
79   region.SetSize( size );
80   region.SetIndex( index );
81
82   std::cout << "HOLA-: " << region << std::endl;
83
84   // Configure filter
85   _F* filter = this->_CreateITK< _F >( );
86   filter->SetInput( img );
87   filter->SetExtractionRegion( region );
88   filter->SetDirectionCollapseToIdentity( );
89   filter->Update( );
90
91   // Connect output
92   cpPlugins::Interface::Image* out =
93     this->GetOutput< cpPlugins::Interface::Image >( 0 );
94   if( out != NULL )
95   {
96     out->SetITK< O >( filter->GetOutput( ) );
97     return( "" );
98   }
99   else
100     return( "ExtractSliceImageFilter: output not correctly created." );
101 }
102
103 // eof - $RCSfile$