]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/ImageSliceActors.h
OpenGL binary images visualization finished.
[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       void Render( const double& t );
139       void ResetCamera( );
140
141     protected:
142       ImageSliceActors( );
143       virtual ~ImageSliceActors( );
144
145       void _ConfigureStyle( );
146       void _ConfigureInputImage( );
147       void _ConfigureBinaryImage(
148         const double& r, const double& g, const double& b
149         );
150
151       // Events
152       static void _MouseMoveCommand(
153         void* data,
154         const TStyle::ButtonID& btn,
155         int* idx, double* pos,
156         bool alt, bool ctr, bool sft
157         );
158       static void _MouseClickCommand(
159         void* data,
160         const TStyle::ButtonID& btn,
161         int* idx, double* pos,
162         bool alt, bool ctr, bool sft
163         );
164       static void _MouseWheelCommand(
165         void* data,
166         const int& dir, bool alt, bool ctr, bool sft
167         );
168       static void _KeyCommand(
169         void* data,
170         const char& key
171         );
172       static void _EnterCommand( void* data );
173       static void _LeaveCommand( void* data );
174
175     private:
176       // Purposely not implemented
177       ImageSliceActors( const Self& );
178       Self& operator=( const Self& );
179
180     protected:
181       static double m_PlaneColors[ 3 ][ 3 ];
182
183       vtkSmartPointer< TStyle > m_Style;
184       vtkRenderWindow* m_Window;
185
186       // Multiple actors
187       vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
188       vtkSmartPointer< vtkImageActor >       m_ImageActor;
189
190       vtkSmartPointer< vtkImageData >        m_BlenderBase;
191       vtkSmartPointer< TBlender >            m_Blender;
192       vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper;
193       vtkSmartPointer< vtkLookupTable >      m_BlenderLUT;
194       vtkSmartPointer< vtkImageActor >       m_BlenderActor;
195
196       bool m_Interpolate;
197
198       double m_WLRange[ 4 ];
199
200       int    m_VisibleExtent[ 6 ];
201       double m_VisibleBounds[ 6 ];
202
203       // Associated slices
204       std::vector< Self* > m_AssociatedSlices;
205
206       // Unique objects
207       vtkSmartPointer< vtkPolyData >       m_Cursor;
208       vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
209       vtkSmartPointer< vtkActor >          m_CursorActor;
210
211       vtkSmartPointer< vtkPolyData >       m_Axis1;
212       vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper;
213       vtkSmartPointer< vtkActor >          m_Axis1Actor;
214
215       vtkSmartPointer< vtkPolyData >       m_Axis2;
216       vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper;
217       vtkSmartPointer< vtkActor >          m_Axis2Actor;
218
219       vtkSmartPointer< vtkPolyData >       m_Plane;
220       vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
221       vtkSmartPointer< vtkActor >          m_PlaneActor;
222
223       char                                 m_TextBuffer[ 1024 ];
224       vtkSmartPointer< vtkTextActor >      m_TextActor;
225
226       double m_StartWindowLevelPos[ 3 ];
227       double m_StartWindowLevel[ 2 ];
228     };
229
230   } // ecapseman
231
232 } // ecapseman
233
234 #endif //  __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
235
236 // eof - $RCSfile$