]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/ImageSliceActors.h
OpenGL with opaque binary image... Soon to be plural
[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       double GetMinWindow( ) const;
115       double GetMaxWindow( ) const;
116       double GetMinLevel( ) const;
117       double GetMaxLevel( ) const;
118       double GetWindow( ) const;
119       double GetLevel( ) const;
120       void SetWindow( double w );
121       void SetLevel( double l );
122       void SetWindowLevel( double w, double l );
123       void ResetWindowLevel( );
124
125       int GetAxis( ) const;
126       int GetSliceNumber( ) const;
127       int GetSliceNumberMinValue( ) const;
128       int GetSliceNumberMaxValue( ) const;
129       void SetSliceNumber( const int& slice );
130       void SetSlice( double* pos );
131       void UpdateText( );
132       void UpdateText( double pos[ 3 ] );
133       void UpdateText( const double& w, const double& l );
134
135       void Render( const double& t );
136       void ResetCamera( );
137
138     protected:
139       ImageSliceActors( );
140       virtual ~ImageSliceActors( );
141
142       void _ConfigureStyle( );
143       void _ConfigureInputImage( );
144
145       // Events
146       static void _MouseMoveCommand(
147         void* data,
148         const TStyle::ButtonID& btn,
149         int* idx, double* pos,
150         bool alt, bool ctr, bool sft
151         );
152       static void _MouseClickCommand(
153         void* data,
154         const TStyle::ButtonID& btn,
155         int* idx, double* pos,
156         bool alt, bool ctr, bool sft
157         );
158       static void _MouseWheelCommand(
159         void* data,
160         const int& dir, bool alt, bool ctr, bool sft
161         );
162       static void _KeyCommand(
163         void* data,
164         const char& key
165         );
166       static void _EnterCommand( void* data );
167       static void _LeaveCommand( void* data );
168
169     private:
170       // Purposely not implemented
171       ImageSliceActors( const Self& );
172       Self& operator=( const Self& );
173
174     protected:
175       vtkSmartPointer< TStyle > m_Style;
176       vtkRenderWindow* m_Window;
177
178       // Multiple actors
179       vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
180       vtkSmartPointer< vtkImageActor >       m_ImageActor;
181
182       vtkSmartPointer< vtkImageData >        m_BlenderBase;
183       vtkSmartPointer< TBlender >            m_Blender;
184       vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper;
185       vtkSmartPointer< vtkLookupTable >      m_BlenderLUT;
186       vtkSmartPointer< vtkImageActor >       m_BlenderActor;
187
188       bool m_Interpolate;
189
190       double m_WLRange[ 4 ];
191
192       int    m_VisibleExtent[ 6 ];
193       double m_VisibleBounds[ 6 ];
194
195       // Associated slices
196       std::vector< Self* > m_AssociatedSlices;
197
198       // Unique objects
199       vtkSmartPointer< vtkPolyData >       m_Cursor;
200       vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
201       vtkSmartPointer< vtkActor >          m_CursorActor;
202
203       vtkSmartPointer< vtkPolyData >       m_HorizontalLine;
204       vtkSmartPointer< vtkPolyDataMapper > m_HorizontalLineMapper;
205       vtkSmartPointer< vtkActor >          m_HorizontalLineActor;
206
207       vtkSmartPointer< vtkPolyData >       m_VerticalLine;
208       vtkSmartPointer< vtkPolyDataMapper > m_VerticalLineMapper;
209       vtkSmartPointer< vtkActor >          m_VerticalLineActor;
210
211       vtkSmartPointer< vtkPolyData >       m_Plane;
212       vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
213       vtkSmartPointer< vtkActor >          m_PlaneActor;
214
215       char                                 m_TextBuffer[ 1024 ];
216       vtkSmartPointer< vtkTextActor >      m_TextActor;
217
218       double m_StartWindowLevelPos[ 3 ];
219       double m_StartWindowLevel[ 2 ];
220     };
221
222   } // ecapseman
223
224 } // ecapseman
225
226 #endif //  __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
227
228 // eof - $RCSfile$