X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FVisualization%2FImageSliceActors.h;h=8fff84881d01249d7283f281382366de4a7a510d;hb=106a56bfe6a48067380089ffd61a518e40d77933;hp=90b9ff018f4ed2d75a0ced687465dd42ad20a9a8;hpb=b23970017af98ef6617ddf40f225d4d15fa65854;p=cpPlugins.git diff --git a/lib/cpExtensions/Visualization/ImageSliceActors.h b/lib/cpExtensions/Visualization/ImageSliceActors.h index 90b9ff0..8fff848 100644 --- a/lib/cpExtensions/Visualization/ImageSliceActors.h +++ b/lib/cpExtensions/Visualization/ImageSliceActors.h @@ -3,20 +3,24 @@ #include -#include - +#include #include #include #include +#include #include #include #include -#include #include +#include +#include + // ------------------------------------------------------------------------- class vtkAlgorithmOutput; class vtkImageData; +class vtkLookupTable; +class vtkRenderer; // ------------------------------------------------------------------------- namespace cpExtensions @@ -31,24 +35,60 @@ namespace cpExtensions public: typedef ImageSliceActors Self; + typedef cpExtensions::Interaction::ImageInteractorStyle TStyle; + typedef TStyle::TMouseCommand TMouseCommand; + typedef TStyle::TMouseWheelCommand TMouseWheelCommand; + typedef TStyle::TKeyCommand TKeyCommand; + typedef TStyle::TVoidCommand TVoidCommand; + typedef TStyle::TMouseMoveCommand TMouseMoveCommand; + typedef TStyle::TMouseClickCommand TMouseClickCommand; + typedef TStyle::TMouseDoubleClickCommand TMouseDoubleClickCommand; + typedef TStyle::TExposeCommand TExposeCommand; + typedef TStyle::TConfigureCommand TConfigureCommand; + typedef TStyle::TEnterCommand TEnterCommand; + typedef TStyle::TLeaveCommand TLeaveCommand; + typedef void ( *TSlicesCommand )( double*, int, void* ); + typedef void ( *TWindowLevelCommand )( double, double, void* ); + typedef TVoidCommand TRenderCommand; + public: vtkTypeMacro( ImageSliceActors, vtkPropCollection ); + cpExtensions_BaseInteractorStyle_Commands( Slices ); + cpExtensions_BaseInteractorStyle_Commands( WindowLevel ); + cpExtensions_BaseInteractorStyle_Commands( Render ); + public: // Creation static ImageSliceActors* New( ); - void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 0 ); - void AddInputData( vtkImageData* data, int axis = 0 ); + ImageBlender* GetBlender( ); + const ImageBlender* GetBlender( ) const; + void SetBlender( ImageBlender* blender ); + void SetAxis( int axis ); + void AddInputConnection( vtkAlgorithmOutput* aout ); + void AddInputData( vtkImageData* data ); void Clear( ); - unsigned int GetNumberOfImageActors( ) const; - vtkImageActor* GetImageActor( unsigned int id ); - const vtkImageActor* GetImageActor( unsigned int id ) const; + void AssociateSlice( Self* slice ); + + vtkImageData* GetInputImage( unsigned int id ); + const vtkImageData* GetInputImage( unsigned int id ) const; + + vtkInteractorStyle* GetStyle( ); + const vtkInteractorStyle* GetStyle( ) const; + + void PushActorsInto( vtkRenderWindow* window, bool force_style = true ); + void PopActorsFrom( vtkRenderWindow* window ); + unsigned int GetNumberOfImages( ) const; + vtkImageActor* GetImageActor( ); + const vtkImageActor* GetImageActor( ) const; vtkTextActor* GetTextActor( ); const vtkTextActor* GetTextActor( ) const; vtkActor* GetPlaneActor( ); const vtkActor* GetPlaneActor( ) const; + vtkPlane* GetPlaneFunction( ); + const vtkPlane* GetPlaneFunction( ) const; void SetInterpolate( bool v ); void InterpolateOn( ); @@ -57,19 +97,62 @@ namespace cpExtensions double* GetDisplayBounds( ) const; void GetDisplayBounds( double bounds[ 6 ] ) const; + void ResetCursor( ); + void SetCursor( double pos[ 3 ] ); + + double GetMinWindow( ) const; + double GetMaxWindow( ) const; + double GetMinLevel( ) const; + double GetMaxLevel( ) const; + double GetWindow( ) const; + double GetLevel( ) const; + void SetWindow( double w ); + void SetLevel( double l ); + void SetWindowLevel( double w, double l ); + void ResetWindowLevel( ); + int GetAxis( ) const; int GetSliceNumber( ) const; int GetSliceNumberMinValue( ) const; int GetSliceNumberMaxValue( ) const; void SetSliceNumber( const int& slice ); + void SetSlice( double* pos ); void UpdateText( ); + void UpdateText( double pos[ 3 ] ); void UpdateText( const double& w, const double& l ); + void Render( const double& t ); + void ResetCamera( ); + protected: ImageSliceActors( ); virtual ~ImageSliceActors( ); - void _ConfigureNewInput( int axis ); + void _ConfigureStyle( ); + + // Events + static void _MouseMoveCommand( + void* data, + const TStyle::ButtonID& btn, + int* idx, double* pos, + bool alt, bool ctr, bool sft + ); + static void _MouseClickCommand( + void* data, + const TStyle::ButtonID& btn, + int* idx, double* pos, + bool alt, bool ctr, bool sft + ); + static void _MouseWheelCommand( + void* data, + const int& dir, bool alt, bool ctr, bool sft + ); + static void _KeyCommand( + void* data, + const char& key + ); + static void _EnterCommand( void* data ); + static void _LeaveCommand( void* data ); private: // Purposely not implemented @@ -77,17 +160,43 @@ namespace cpExtensions Self& operator=( const Self& ); protected: + vtkSmartPointer< TStyle > m_Style; + vtkRenderWindow* m_Window; + // Multiple actors - std::vector< vtkSmartPointer< vtkImageSliceMapper > > SliceMappers; - std::vector< vtkSmartPointer< vtkImageActor > > ImageActors; - bool Interpolate; + vtkSmartPointer< ImageBlender > m_ImageBlender; + vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper; + vtkSmartPointer< vtkImageActor > m_ImageActor; + bool m_Interpolate; + + int m_VisibleExtent[ 6 ]; + double m_VisibleBounds[ 6 ]; + + // Associated slices + std::vector< Self* > m_AssociatedSlices; // Unique objects - vtkSmartPointer< vtkPolyData > PlaneSource; - vtkSmartPointer< vtkPolyDataMapper > PlaneMapper; - char TextBuffer[ 1024 ]; - vtkSmartPointer< vtkTextActor > TextActor; - vtkSmartPointer< vtkActor > PlaneActor; + vtkSmartPointer< vtkPolyData > m_Cursor; + vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper; + vtkSmartPointer< vtkActor > m_CursorActor; + + vtkSmartPointer< vtkPolyData > m_HorizontalLine; + vtkSmartPointer< vtkPolyDataMapper > m_HorizontalLineMapper; + vtkSmartPointer< vtkActor > m_HorizontalLineActor; + + vtkSmartPointer< vtkPolyData > m_VerticalLine; + vtkSmartPointer< vtkPolyDataMapper > m_VerticalLineMapper; + vtkSmartPointer< vtkActor > m_VerticalLineActor; + + vtkSmartPointer< vtkPolyData > m_Plane; + vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper; + vtkSmartPointer< vtkActor > m_PlaneActor; + + char m_TextBuffer[ 1024 ]; + vtkSmartPointer< vtkTextActor > m_TextActor; + + double m_StartWindowLevelPos[ 3 ]; + double m_StartWindowLevel[ 2 ]; }; } // ecapseman