]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/BaseImageFilter.hxx
...
[FrontAlgorithms.git] / plugins / fpa / BaseImageFilter.hxx
1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
3
4 #include <cpExtensions/DataStructures/ImageIndexesContainer.h>
5 #include <fpa_Instances/Observers.h>
6
7 // -------------------------------------------------------------------------
8 template< class _TFilter >
9 _TFilter* fpaPlugins::BaseImageFilter::
10 _ConfigureFilter( )
11 {
12   typedef typename _TFilter::TInputImage _TImage;
13   static const unsigned int Dim = _TImage::ImageDimension;
14   typedef
15     cpExtensions::DataStructures::ImageIndexesContainer< Dim >
16     _TIndexes;
17
18   auto image = this->GetInputData( "Input" )->GetITK< _TImage >( );
19   if( image == NULL )
20     return( NULL );
21   auto indexes = this->GetInputData( "Seeds" )->GetITK< _TIndexes >( );
22
23   // Create filter and connect input
24   auto filter = this->_CreateITK< _TFilter >( );
25   filter->SetInput( image );
26
27   // Set numeric parameters
28   filter->SetNeighborhoodOrder(
29     this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
30     );
31   filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
32
33   // Assign seeds
34   filter->ClearSeeds( );
35   if( indexes != NULL )
36   {
37     auto iIt = indexes->Get( ).begin( );
38     for( ; iIt != indexes->Get( ).end( ); ++iIt )
39       filter->AddSeed( *iIt, 0 );
40
41   } // fi
42
43   // Ok!
44   return( filter );
45 }
46
47 // -------------------------------------------------------------------------
48 template< class _TFilter >
49 void fpaPlugins::BaseImageFilter::
50 _ExecuteFilter( _TFilter* filter )
51 {
52   // Go!!!
53   this->_ConfigureDebugger( filter );
54   filter->Update( );
55   this->_DeconfigureDebugger( filter );
56
57   // Connect output
58   auto out = this->GetOutputData( "Output" );
59   out->SetITK( filter->GetOutput( ) );
60 }
61
62 // -------------------------------------------------------------------------
63 template< class _TFilter >
64 void fpaPlugins::BaseImageFilter::
65 _ConfigureDebugger( _TFilter* filter )
66 {
67   typedef typename _TFilter::TInputImage _TImage;
68   typedef fpa::VTK::Image::Observer2D< _TFilter, vtkRenderWindow > _2D;
69   typedef fpa::VTK::Image::Observer3D< _TFilter, vtkRenderWindow > _3D;
70
71   this->m_Observers.clear( );
72   if( this->m_Parameters.GetBool( "VisualDebug" ) )
73   {
74     if( this->m_MPRViewer != NULL )
75     {
76       if( _TImage::ImageDimension == 2 )
77       {
78         auto iren = this->m_MPRViewer->GetInteractor( 2 );
79         if( iren != NULL )
80         {
81           typename _2D::Pointer debugger = _2D::New( );
82           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
83           debugger->SetRenderPercentage( 0.01 );
84           this->m_Observers.insert(
85             filter->AddObserver( itk::AnyEvent( ), debugger )
86             );
87           filter->ThrowEventsOn( );
88
89         } // fi
90       }
91       else if( _TImage::ImageDimension == 3 )
92       {
93         auto iren = this->m_MPRViewer->GetInteractor( 3 );
94         if( iren != NULL )
95         {
96           typename _3D::Pointer debugger = _3D::New( );
97           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
98           debugger->SetRenderPercentage( 0.001 );
99           this->m_Observers.insert(
100             filter->AddObserver( itk::AnyEvent( ), debugger )
101             );
102           filter->ThrowEventsOn( );
103
104         } // fi
105
106       } // fi
107
108     } // fi
109
110     if( this->m_SingleInteractor != NULL )
111     {
112       if( _TImage::ImageDimension == 2 )
113       {
114       }
115       else if( _TImage::ImageDimension == 3 )
116       {
117       } // fi
118
119     } // fi
120
121   } // fi
122 }
123
124 // -------------------------------------------------------------------------
125 template< class F >
126 void fpaPlugins::BaseImageFilter::
127 _DeconfigureDebugger( F* filter )
128 {
129   if( filter != NULL )
130   {
131     auto oIt = this->m_Observers.begin( );
132     for( ; oIt != this->m_Observers.end( ); ++oIt )
133       filter->RemoveObserver( *oIt );
134
135   } // fi
136   this->m_Observers.clear( );
137 }
138
139 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__
140
141 // eof - $RCSfile$