]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/BaseImageFilter.h
e9b9f703384edb8a4ca2b97ac22c11972b9d0625
[FrontAlgorithms.git] / lib / fpaPlugins / BaseImageFilter.h
1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__H__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__H__
3
4 #include <fpaPlugins/fpaPlugins_Export.h>
5 #include <cpPlugins/Interface/BaseProcessObjects.h>
6
7 namespace fpaPlugins
8 {
9   /**
10    */
11   class fpaPlugins_EXPORT BaseImageFilter
12     : public cpPlugins::Interface::ImageToImageFilter
13   {
14   public:
15     typedef BaseImageFilter                          Self;
16     typedef cpPlugins::Interface::ImageToImageFilter Superclass;
17     typedef itk::SmartPointer< Self >                Pointer;
18     typedef itk::SmartPointer< const Self >          ConstPointer;
19
20   public:
21     itkTypeMacro(
22       BaseImageFilter, cpPlugins::Interface::ImageToImageFilter
23       );
24     cpPlugins_Id_Macro(
25       BaseImageFilter, FrontPropagationImageAlgorithm
26       );
27
28   protected:
29     BaseImageFilter( );
30     virtual ~BaseImageFilter( );
31
32     template< class F >
33       void _ConfigureDebugger( F* filter );
34
35     template< class F >
36       void _DeconfigureDebugger( F* filter );
37
38   private:
39     // Purposely not implemented.
40     BaseImageFilter( const Self& other );
41     Self& operator=( const Self& other );
42
43   protected:
44     std::set< unsigned long > m_Observers;
45   };
46
47 } // ecapseman
48
49 // -------------------------------------------------------------------------
50 #include <fpa/VTK/Image2DObserver.h>
51 //#include <fpa/VTK/Image3DObserver.h>
52 #include <cpPlugins/Interface/SimpleMPRWidget.h>
53 #include <vtkRenderWindowInteractor.h>
54
55 // -------------------------------------------------------------------------
56 template< class F >
57 void fpaPlugins::BaseImageFilter::
58 _ConfigureDebugger( F* filter )
59 {
60   typedef typename F::TInputImage _I;
61   typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
62   // typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
63
64   this->m_Observers.clear( );
65   if( this->m_Parameters->GetBool( "VisualDebug" ) )
66   {
67     if( this->m_MPRViewer != NULL )
68     {
69       if( _I::ImageDimension == 2 )
70       {
71         auto iren = this->m_MPRViewer->GetInteractor( 2 );
72         if( iren != NULL )
73         {
74           typename _2D::Pointer debugger = _2D::New( );
75           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
76           debugger->SetRenderPercentage( 0.01 );
77           this->m_Observers.insert(
78             filter->AddObserver( itk::AnyEvent( ), debugger )
79             );
80           filter->ThrowEventsOn( );
81
82         } // fi
83       }
84       else if( _I::ImageDimension == 3 )
85       {
86         // this->m_MPRViewer->GetInteractor( 3 );
87
88       } // fi
89
90     } // fi
91
92     if( this->m_SingleInteractor != NULL )
93     {
94       if( _I::ImageDimension == 2 )
95       {
96       }
97       else if( _I::ImageDimension == 3 )
98       {
99       } // fi
100
101     } // fi
102
103   } // fi
104 }
105
106 // -------------------------------------------------------------------------
107 template< class F >
108 void fpaPlugins::BaseImageFilter::
109 _DeconfigureDebugger( F* filter )
110 {
111   if( filter != NULL )
112   {
113     auto oIt = this->m_Observers.begin( );
114     for( ; oIt != this->m_Observers.end( ); ++oIt )
115       filter->RemoveObserver( *oIt );
116
117   } // fi
118   this->m_Observers.clear( );
119 }
120
121 #endif // __FPAPLUGINS__BASEIMAGEFILTER__H__
122
123 // eof - $RCSfile$