]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/BaseImageFilter.h
...
[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   // -----------------------------------------------------------------------
48   /*
49     CPPLUGINS_INHERIT_PROVIDER( BaseImageFilter );
50   */
51
52 } // ecapseman
53
54 // -------------------------------------------------------------------------
55 #include <fpa/VTK/Image2DObserver.h>
56 //#include <fpa/VTK/Image3DObserver.h>
57 #include <cpPlugins/Interface/SimpleMPRWidget.h>
58 #include <vtkRenderWindowInteractor.h>
59
60 // -------------------------------------------------------------------------
61 template< class F >
62 void fpaPlugins::BaseImageFilter::
63 _ConfigureDebugger( F* filter )
64 {
65   typedef typename F::TInputImage _I;
66   typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
67   // typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
68
69   this->m_Observers.clear( );
70   if( this->m_Parameters->GetBool( "VisualDebug" ) )
71   {
72     if( this->m_MPRViewer != NULL )
73     {
74       if( _I::ImageDimension == 2 )
75       {
76         auto iren = this->m_MPRViewer->GetInteractor( 2 );
77         if( iren != NULL )
78         {
79           typename _2D::Pointer debugger = _2D::New( );
80           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
81           debugger->SetRenderPercentage( 0.01 );
82           this->m_Observers.insert(
83             filter->AddObserver( itk::AnyEvent( ), debugger )
84             );
85           filter->ThrowEventsOn( );
86
87         } // fi
88       }
89       else if( _I::ImageDimension == 3 )
90       {
91         // this->m_MPRViewer->GetInteractor( 3 );
92
93       } // fi
94
95     } // fi
96
97     if( this->m_SingleInteractor.GetPointer( ) != NULL )
98     {
99       if( _I::ImageDimension == 2 )
100       {
101       }
102       else if( _I::ImageDimension == 3 )
103       {
104       } // fi
105
106     } // fi
107
108   } // fi
109 }
110
111 // -------------------------------------------------------------------------
112 template< class F >
113 void fpaPlugins::BaseImageFilter::
114 _DeconfigureDebugger( F* filter )
115 {
116   if( filter != NULL )
117   {
118     auto oIt = this->m_Observers.begin( );
119     for( ; oIt != this->m_Observers.end( ); ++oIt )
120       filter->RemoveObserver( *oIt );
121
122   } // fi
123   this->m_Observers.clear( );
124 }
125
126 #endif // __FPAPLUGINS__BASEIMAGEFILTER__H__
127
128 // eof - $RCSfile$