]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/ImageSliceActors.h
Merge branch 'master' of ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.h
1 #ifndef __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
2 #define __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
3
4 #include <cpExtensions/cpExtensions_Export.h>
5
6 #include <vtkSmartPointer.h>
7 #include <vtkActor.h>
8 #include <vtkImageActor.h>
9 #include <vtkImageSliceMapper.h>
10 #include <vtkLookupTable.h>
11 #include <vtkPlane.h>
12 #include <vtkPolyData.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkPropCollection.h>
15 #include <vtkTextActor.h>
16
17 #include <cpExtensions/Interaction/ImageInteractorStyle.h>
18 #include <cpExtensions/Visualization/ImageBlender.h>
19
20 // -------------------------------------------------------------------------
21 class vtkAlgorithmOutput;
22 class vtkImageData;
23 class vtkLookupTable;
24 class vtkRenderer;
25
26 // -------------------------------------------------------------------------
27 namespace cpExtensions
28 {
29   namespace Visualization
30   {
31     /**
32      */
33     class cpExtensions_EXPORT ImageSliceActors
34       : public vtkPropCollection
35     {
36     public:
37       typedef ImageSliceActors Self;
38
39       typedef cpExtensions::Interaction::ImageInteractorStyle TStyle;
40       typedef TStyle::TMouseCommand            TMouseCommand;
41       typedef TStyle::TMouseWheelCommand       TMouseWheelCommand;
42       typedef TStyle::TKeyCommand              TKeyCommand;
43       typedef TStyle::TVoidCommand             TVoidCommand;
44       typedef TStyle::TMouseMoveCommand        TMouseMoveCommand;
45       typedef TStyle::TMouseClickCommand       TMouseClickCommand;
46       typedef TStyle::TMouseDoubleClickCommand TMouseDoubleClickCommand;
47       typedef TStyle::TExposeCommand           TExposeCommand;
48       typedef TStyle::TConfigureCommand        TConfigureCommand;
49       typedef TStyle::TEnterCommand            TEnterCommand;
50       typedef TStyle::TLeaveCommand            TLeaveCommand;
51       typedef void ( *TSlicesCommand )( double*, int, void* );
52       typedef void ( *TWindowLevelCommand )( double, double, void* );
53       typedef TVoidCommand TRenderCommand;
54
55       typedef cpExtensions::Visualization::ImageBlender TBlender;
56
57     public:
58       vtkTypeMacro( ImageSliceActors, vtkPropCollection );
59
60       cpExtensions_BaseInteractorStyle_Commands( Slices );
61       cpExtensions_BaseInteractorStyle_Commands( WindowLevel );
62       cpExtensions_BaseInteractorStyle_Commands( Render );
63
64     public:
65       // Creation
66       static ImageSliceActors* New( );
67
68       void SetAxis( int axis );
69       void SetInputConnection( vtkAlgorithmOutput* aout );
70       void SetInputImage( vtkImageData* data );
71       int AddBinaryConnection(
72         vtkAlgorithmOutput* aout,
73         const double& r, const double& g, const double& b
74         );
75       int AddBinaryImage(
76         vtkImageData* data,
77         const double& r, const double& g, const double& b
78         );
79       void Clear( );
80
81       void AssociateSlice( Self* slice );
82
83       vtkImageData* GetInputImage( );
84       const vtkImageData* GetInputImage( ) const;
85
86       vtkInteractorStyle* GetStyle( );
87       const vtkInteractorStyle* GetStyle( ) const;
88
89       void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
90       void PopActorsFrom( vtkRenderWindow* window );
91       unsigned int GetNumberOfImages( ) const;
92
93       vtkImageActor* GetImageActor( );
94       const vtkImageActor* GetImageActor( ) const;
95       vtkImageActor* GetBinaryActor( );
96       const vtkImageActor* GetBinaryActor( ) const;
97       vtkTextActor* GetTextActor( );
98       const vtkTextActor* GetTextActor( ) const;
99       vtkActor* GetPlaneActor( );
100       const vtkActor* GetPlaneActor( ) const;
101       vtkPlane* GetPlaneFunction( );
102       const vtkPlane* GetPlaneFunction( ) const;
103
104       void SetInterpolate( bool v );
105       void InterpolateOn( );
106       void InterpolateOff( );
107
108       double* GetDisplayBounds( ) const;
109       void GetDisplayBounds( double bounds[ 6 ] ) const;
110
111       void ResetCursor( );
112       void SetCursor( double pos[ 3 ] );
113
114       void ResetAxesCursor( );
115       void SetAxesCursor( double pos[ 3 ] );
116
117       double GetMinWindow( ) const;
118       double GetMaxWindow( ) const;
119       double GetMinLevel( ) const;
120       double GetMaxLevel( ) const;
121       double GetWindow( ) const;
122       double GetLevel( ) const;
123       void SetWindow( double w );
124       void SetLevel( double l );
125       void SetWindowLevel( double w, double l );
126       void ResetWindowLevel( );
127
128       int GetAxis( ) const;
129       int GetSliceNumber( ) const;
130       int GetSliceNumberMinValue( ) const;
131       int GetSliceNumberMaxValue( ) const;
132       void SetSliceNumber( const int& slice );
133       void SetSlice( double* pos );
134       void UpdateText( );
135       void UpdateText( double pos[ 3 ] );
136       void UpdateText( const double& w, const double& l );
137
138     protected:
139       ImageSliceActors( );
140       virtual ~ImageSliceActors( );
141
142       void _Render( );
143       void _ResetCamera( );
144       void _ConfigureStyle( );
145       void _ConfigureInputImage( );
146       void _ConfigureBinaryImage(
147         const double& r, const double& g, const double& b
148         );
149
150       // Events
151       static void _MouseMoveCommand(
152         void* data,
153         const TStyle::ButtonID& btn,
154         int* idx, double* pos,
155         bool alt, bool ctr, bool sft
156         );
157       static void _MouseClickCommand(
158         void* data,
159         const TStyle::ButtonID& btn,
160         int* idx, double* pos,
161         bool alt, bool ctr, bool sft
162         );
163       static void _MouseWheelCommand(
164         void* data,
165         const int& dir, bool alt, bool ctr, bool sft
166         );
167       static void _KeyCommand(
168         void* data,
169         const char& key
170         );
171       static void _EnterCommand( void* data );
172       static void _LeaveCommand( void* data );
173
174     private:
175       // Purposely not implemented
176       ImageSliceActors( const Self& );
177       Self& operator=( const Self& );
178
179     protected:
180       static double m_PlaneColors[ 3 ][ 3 ];
181
182       vtkSmartPointer< TStyle > m_Style;
183       vtkRenderWindow* m_Window;
184
185       // Multiple actors
186       vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
187       vtkSmartPointer< vtkImageActor >       m_ImageActor;
188
189       vtkSmartPointer< vtkImageData >        m_BlenderBase;
190       vtkSmartPointer< TBlender >            m_Blender;
191       vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper;
192       vtkSmartPointer< vtkLookupTable >      m_BlenderLUT;
193       vtkSmartPointer< vtkImageActor >       m_BlenderActor;
194
195       bool m_Interpolate;
196
197       double m_WLRange[ 4 ];
198
199       int    m_VisibleExtent[ 6 ];
200       double m_VisibleBounds[ 6 ];
201
202       // Associated slices
203       std::vector< Self* > m_AssociatedSlices;
204
205       // Unique objects
206       vtkSmartPointer< vtkPolyData >       m_Cursor;
207       vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
208       vtkSmartPointer< vtkActor >          m_CursorActor;
209
210       vtkSmartPointer< vtkPolyData >       m_Axis1;
211       vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper;
212       vtkSmartPointer< vtkActor >          m_Axis1Actor;
213
214       vtkSmartPointer< vtkPolyData >       m_Axis2;
215       vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper;
216       vtkSmartPointer< vtkActor >          m_Axis2Actor;
217
218       vtkSmartPointer< vtkPolyData >       m_Plane;
219       vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
220       vtkSmartPointer< vtkActor >          m_PlaneActor;
221
222       char                                 m_TextBuffer[ 1024 ];
223       vtkSmartPointer< vtkTextActor >      m_TextActor;
224
225       double m_StartWindowLevelPos[ 3 ];
226       double m_StartWindowLevel[ 2 ];
227     };
228
229   } // ecapseman
230
231 } // ecapseman
232
233 #endif //  __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
234
235 // eof - $RCSfile$