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