X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FVisualization%2FImageSliceActors.h;h=b4cec90e6fec8e3c7a3c8f28b4eb74c49fb5b717;hb=73332fee95f5410c46e3b0cff1e2755d5e4a8b71;hp=3991ab39419309ec5f7399ea3e3a7381128cf2a7;hpb=2361f4f97631e09d88d8a5510a369817dcaa19db;p=cpPlugins.git diff --git a/lib/cpExtensions/Visualization/ImageSliceActors.h b/lib/cpExtensions/Visualization/ImageSliceActors.h index 3991ab3..b4cec90 100644 --- a/lib/cpExtensions/Visualization/ImageSliceActors.h +++ b/lib/cpExtensions/Visualization/ImageSliceActors.h @@ -3,93 +3,231 @@ #include +#include #include #include #include +#include +#include #include #include #include -#include #include -// ------------------------------------------------------------------------- -#define cpPlugins_ImageSliceActors( name, type ) \ - inline type* Get##name##Actor( ) const \ - { \ - return( \ - dynamic_cast< type* >( \ - const_cast< Self* >( this )-> \ - GetItemAsObject( this->name##ActorIndex ) \ - ) \ - ); \ - } +#include +#include // ------------------------------------------------------------------------- class vtkAlgorithmOutput; class vtkImageData; +class vtkLookupTable; +class vtkRenderer; // ------------------------------------------------------------------------- namespace cpExtensions +{ + namespace Visualization { - namespace Visualization + /** + */ + class cpExtensions_EXPORT ImageSliceActors + : public vtkPropCollection { - /** - */ - class cpExtensions_EXPORT ImageSliceActors - : public vtkPropCollection - { - public: - typedef ImageSliceActors Self; - - public: - vtkTypeMacro( ImageSliceActors, vtkPropCollection ); - - cpPlugins_ImageSliceActors( Image, vtkImageActor ); - cpPlugins_ImageSliceActors( Text, vtkTextActor ); - cpPlugins_ImageSliceActors( Plane, vtkActor ); - - public: - // Creation - static ImageSliceActors* New( ); - - void SetInputConnection( vtkAlgorithmOutput* aout, int axis ); - void SetInputData( vtkImageData* data, int axis ); - - double* GetDisplayBounds( ) const; - void GetDisplayBounds( double bounds[ 6 ] ) const; - - int GetAxis( ) const; - int GetSliceNumber( ) const; - int GetSliceNumberMinValue( ) const; - int GetSliceNumberMaxValue( ) const; - void SetSliceNumber( const int& slice ); - void UpdateText( ); - - protected: - ImageSliceActors( ); - virtual ~ImageSliceActors( ); - - private: - // Purposely not implemented - ImageSliceActors( const Self& ); - Self& operator=( const Self& ); - - protected: - vtkSmartPointer< vtkImageSliceMapper > SliceMapper; - vtkSmartPointer< vtkPolyData > PlaneSource; - vtkSmartPointer< vtkPolyDataMapper > PlaneMapper; - char TextBuffer[ 1024 ]; - - vtkSmartPointer< vtkImageActor > ImageActor; - vtkSmartPointer< vtkTextActor > TextActor; - vtkSmartPointer< vtkActor > PlaneActor; - - unsigned int ImageActorIndex; - unsigned int TextActorIndex; - unsigned int PlaneActorIndex; - }; - - } // ecapseman + 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; + + typedef cpExtensions::Visualization::ImageBlender TBlender; + + public: + vtkTypeMacro( ImageSliceActors, vtkPropCollection ); + + cpExtensions_BaseInteractorStyle_Commands( Slices ); + cpExtensions_BaseInteractorStyle_Commands( WindowLevel ); + cpExtensions_BaseInteractorStyle_Commands( Render ); + + public: + // Creation + static ImageSliceActors* New( ); + + void SetAxis( int axis ); + void SetInputConnection( vtkAlgorithmOutput* aout ); + void SetInputImage( vtkImageData* data ); + int AddBinaryConnection( + vtkAlgorithmOutput* aout, + const double& r, const double& g, const double& b + ); + int AddBinaryImage( + vtkImageData* data, + const double& r, const double& g, const double& b + ); + void Clear( ); + + void AssociateSlice( Self* slice ); + + vtkImageData* GetInputImage( ); + const vtkImageData* GetInputImage( ) 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; + vtkImageActor* GetBinaryActor( ); + const vtkImageActor* GetBinaryActor( ) 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( ); + void InterpolateOff( ); + + double* GetDisplayBounds( ) const; + void GetDisplayBounds( double bounds[ 6 ] ) const; + + void ResetCursor( ); + void SetCursor( double pos[ 3 ] ); + + void ResetAxesCursor( ); + void SetAxesCursor( 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( ); + void ResetCamera( ); + + protected: + ImageSliceActors( ); + virtual ~ImageSliceActors( ); + + void _ConfigureStyle( ); + void _ConfigureInputImage( ); + void _ConfigureBinaryImage( + const double& r, const double& g, const double& b + ); + + // 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 + ImageSliceActors( const Self& ); + Self& operator=( const Self& ); + + protected: + static double m_PlaneColors[ 3 ][ 3 ]; + + vtkSmartPointer< TStyle > m_Style; + vtkRenderWindow* m_Window; + + // Multiple actors + vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper; + vtkSmartPointer< vtkImageActor > m_ImageActor; + + vtkSmartPointer< vtkImageData > m_BlenderBase; + vtkSmartPointer< TBlender > m_Blender; + vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper; + vtkSmartPointer< vtkLookupTable > m_BlenderLUT; + vtkSmartPointer< vtkImageActor > m_BlenderActor; + + bool m_Interpolate; + + double m_WLRange[ 4 ]; + + int m_VisibleExtent[ 6 ]; + double m_VisibleBounds[ 6 ]; + + // Associated slices + std::vector< Self* > m_AssociatedSlices; + + // Unique objects + vtkSmartPointer< vtkPolyData > m_Cursor; + vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper; + vtkSmartPointer< vtkActor > m_CursorActor; + + vtkSmartPointer< vtkPolyData > m_Axis1; + vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper; + vtkSmartPointer< vtkActor > m_Axis1Actor; + + vtkSmartPointer< vtkPolyData > m_Axis2; + vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper; + vtkSmartPointer< vtkActor > m_Axis2Actor; + + 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 } // ecapseman