1 #ifndef __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
2 #define __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
4 #include <cpExtensions/cpExtensions_Export.h>
6 #include <vtkSmartPointer.h>
8 #include <vtkImageActor.h>
9 #include <vtkImageSliceMapper.h>
10 #include <vtkLookupTable.h>
12 #include <vtkPolyData.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkPropCollection.h>
15 #include <vtkTextActor.h>
17 #include <cpExtensions/Interaction/ImageInteractorStyle.h>
18 #include <cpExtensions/Visualization/ImageBlender.h>
20 // -------------------------------------------------------------------------
21 class vtkAlgorithmOutput;
26 // -------------------------------------------------------------------------
27 namespace cpExtensions
29 namespace Visualization
33 class cpExtensions_EXPORT ImageSliceActors
34 : public vtkPropCollection
37 typedef ImageSliceActors Self;
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;
55 typedef cpExtensions::Visualization::ImageBlender TBlender;
58 vtkTypeMacro( ImageSliceActors, vtkPropCollection );
60 cpExtensions_BaseInteractorStyle_Commands( Slices );
61 cpExtensions_BaseInteractorStyle_Commands( WindowLevel );
62 cpExtensions_BaseInteractorStyle_Commands( Render );
66 static ImageSliceActors* New( );
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
77 const double& r, const double& g, const double& b
81 void AssociateSlice( Self* slice );
83 vtkImageData* GetInputImage( );
84 const vtkImageData* GetInputImage( ) const;
86 vtkInteractorStyle* GetStyle( );
87 const vtkInteractorStyle* GetStyle( ) const;
89 void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
90 void PopActorsFrom( vtkRenderWindow* window );
91 unsigned int GetNumberOfImages( ) const;
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;
104 void SetInterpolate( bool v );
105 void InterpolateOn( );
106 void InterpolateOff( );
108 double* GetDisplayBounds( ) const;
109 void GetDisplayBounds( double bounds[ 6 ] ) const;
112 void SetCursor( double pos[ 3 ] );
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( );
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 );
132 void UpdateText( double pos[ 3 ] );
133 void UpdateText( const double& w, const double& l );
135 void Render( const double& t );
140 virtual ~ImageSliceActors( );
142 void _ConfigureStyle( );
143 void _ConfigureInputImage( );
146 static void _MouseMoveCommand(
148 const TStyle::ButtonID& btn,
149 int* idx, double* pos,
150 bool alt, bool ctr, bool sft
152 static void _MouseClickCommand(
154 const TStyle::ButtonID& btn,
155 int* idx, double* pos,
156 bool alt, bool ctr, bool sft
158 static void _MouseWheelCommand(
160 const int& dir, bool alt, bool ctr, bool sft
162 static void _KeyCommand(
166 static void _EnterCommand( void* data );
167 static void _LeaveCommand( void* data );
170 // Purposely not implemented
171 ImageSliceActors( const Self& );
172 Self& operator=( const Self& );
175 vtkSmartPointer< TStyle > m_Style;
176 vtkRenderWindow* m_Window;
179 vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
180 vtkSmartPointer< vtkImageActor > m_ImageActor;
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;
190 double m_WLRange[ 4 ];
192 int m_VisibleExtent[ 6 ];
193 double m_VisibleBounds[ 6 ];
196 std::vector< Self* > m_AssociatedSlices;
199 vtkSmartPointer< vtkPolyData > m_Cursor;
200 vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
201 vtkSmartPointer< vtkActor > m_CursorActor;
203 vtkSmartPointer< vtkPolyData > m_HorizontalLine;
204 vtkSmartPointer< vtkPolyDataMapper > m_HorizontalLineMapper;
205 vtkSmartPointer< vtkActor > m_HorizontalLineActor;
207 vtkSmartPointer< vtkPolyData > m_VerticalLine;
208 vtkSmartPointer< vtkPolyDataMapper > m_VerticalLineMapper;
209 vtkSmartPointer< vtkActor > m_VerticalLineActor;
211 vtkSmartPointer< vtkPolyData > m_Plane;
212 vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
213 vtkSmartPointer< vtkActor > m_PlaneActor;
215 char m_TextBuffer[ 1024 ];
216 vtkSmartPointer< vtkTextActor > m_TextActor;
218 double m_StartWindowLevelPos[ 3 ];
219 double m_StartWindowLevel[ 2 ];
226 #endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__