]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Plugins/BasicFilters/ExtractSliceImageFilter.cxx
Parameters are now part of the pipeline update process
[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->SetNumberOfInputs( 1 );
12   this->SetNumberOfOutputs( 1 );
13   this->_MakeOutput< cpPlugins::Interface::Image >( 0 );
14
15   this->m_Parameters->ConfigureAsUint( "Axis", 0 );
16   this->m_Parameters->ConfigureAsInt( "Slice", 0 );
17 }
18
19 // -------------------------------------------------------------------------
20 cpPlugins::BasicFilters::ExtractSliceImageFilter::
21 ~ExtractSliceImageFilter( )
22 {
23 }
24
25 // -------------------------------------------------------------------------
26 std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
27 _GenerateData( )
28 {
29   cpPlugins::Interface::Image* image =
30     this->GetInput< cpPlugins::Interface::Image >( 0 );
31   if( image == NULL )
32     return( "ExtractSliceImageFilter: No input image." );
33
34   itk::DataObject* itk_image = NULL;
35   std::string r = "";
36 /*
37   cpPlugins_Image_Demangle_AllTypes( 3, image, itk_image, r, _GD0 );
38   else cpPlugins_VectorImage_Demangle_AllTypes( 3, image, itk_image, r, _GD0 );
39   else*/ r = "ExtractSliceImageFilter: Input image type not supported.";
40   return( r );
41 }
42
43 // -------------------------------------------------------------------------
44 template< class I >
45 std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
46 _GD0( itk::DataObject* image )
47 {
48   return( this->_RealGD< I, I >( image ) );
49 }
50
51 // -------------------------------------------------------------------------
52 template< class I, class O >
53 inline std::string cpPlugins::BasicFilters::ExtractSliceImageFilter::
54 _RealGD( itk::DataObject* image )
55 {
56   typedef itk::ExtractImageFilter< I, O > _F;
57   typedef typename O::PixelType _OP;
58
59   // Get parameters
60   int axis = this->m_Parameters->GetUint( "Axis" );
61   int slice = this->m_Parameters->GetInt( "Slice" );
62
63   // Compute region
64   I* img = dynamic_cast< I* >( image );
65   typename I::RegionType region = img->GetRequestedRegion( );
66   typename I::SizeType size = region.GetSize( );
67   typename I::IndexType index = region.GetIndex( );
68   size[ axis ] = 1;
69   index[ axis ] = slice;
70   region.SetSize( size );
71   region.SetIndex( index );
72
73   // Configure filter
74   _F* filter = this->_CreateITK< _F >( );
75   filter->SetInput( img );
76   filter->SetExtractionRegion( region );
77   filter->SetDirectionCollapseToIdentity( );
78   filter->Update( );
79
80   // Connect output
81   cpPlugins::Interface::Image* out =
82     this->GetOutput< cpPlugins::Interface::Image >( 0 );
83   if( out != NULL )
84   {
85     out->SetITK< O >( filter->GetOutput( ) );
86     return( "" );
87   }
88   else
89     return( "ExtractSliceImageFilter: output not correctly created." );
90 }
91
92 // eof - $RCSfile$