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