X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FVisualization%2FImageSliceActors.h;h=b4cec90e6fec8e3c7a3c8f28b4eb74c49fb5b717;hb=e2fb8817731f6231d34941a208e46b36dad425b2;hp=21eef1e3d5f30a701ee2b4568dcdc29c9e12297e;hpb=c3a5b1389e4a95ec18860f6b350298a8eef5cc22;p=cpPlugins.git diff --git a/lib/cpExtensions/Visualization/ImageSliceActors.h b/lib/cpExtensions/Visualization/ImageSliceActors.h index 21eef1e..b4cec90 100644 --- a/lib/cpExtensions/Visualization/ImageSliceActors.h +++ b/lib/cpExtensions/Visualization/ImageSliceActors.h @@ -3,26 +3,25 @@ #include -#include -#include - #include #include #include -#include #include +#include #include #include #include #include #include -#include +#include +#include // ------------------------------------------------------------------------- class vtkAlgorithmOutput; class vtkImageData; class vtkLookupTable; +class vtkRenderer; // ------------------------------------------------------------------------- namespace cpExtensions @@ -37,41 +36,64 @@ namespace cpExtensions public: typedef ImageSliceActors Self; - typedef void ( *TCursorCommand )( double*, int, void* ); - typedef BaseInteractorStyle::TMouseCommand TMouseCommand; - typedef BaseInteractorStyle::TMouseWheelCommand TMouseWheelCommand; - typedef BaseInteractorStyle::TKeyCommand TKeyCommand; - typedef BaseInteractorStyle::TVoidCommand TVoidCommand; + 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 ); - vtkGetMacro( MinWindow, double ); - vtkGetMacro( MaxWindow, double ); - vtkGetMacro( MinLevel, double ); - vtkGetMacro( MaxLevel, double ); + cpExtensions_BaseInteractorStyle_Commands( Slices ); + cpExtensions_BaseInteractorStyle_Commands( WindowLevel ); + cpExtensions_BaseInteractorStyle_Commands( Render ); public: // Creation static ImageSliceActors* New( ); - void AddCursorCommand( TCursorCommand command, void* data ); - - void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 2 ); - void AddInputData( vtkImageData* data, int axis = 2 ); + 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* other ); - void SetSlicesCommand( TCursorCommand cmd, void* data ); + 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 GetNumberOfImageActors( ) const; - vtkImageActor* GetImageActor( unsigned int id ); - const vtkImageActor* GetImageActor( unsigned int id ) const; + unsigned int GetNumberOfImages( ) const; + + vtkImageActor* GetImageActor( ); + const vtkImageActor* GetImageActor( ) const; + vtkImageActor* GetBinaryActor( ); + const vtkImageActor* GetBinaryActor( ) const; vtkTextActor* GetTextActor( ); const vtkTextActor* GetTextActor( ) const; vtkActor* GetPlaneActor( ); @@ -79,9 +101,6 @@ namespace cpExtensions vtkPlane* GetPlaneFunction( ); const vtkPlane* GetPlaneFunction( ) const; - void AddActor( vtkAlgorithm* algorithm, vtkActor* actor ); - void AddActor( vtkActor* actor ); - void SetInterpolate( bool v ); void InterpolateOn( ); void InterpolateOff( ); @@ -92,9 +111,13 @@ namespace cpExtensions void ResetCursor( ); void SetCursor( double pos[ 3 ] ); - vtkImageMapToColors* GetImageMap( unsigned int id ); - const vtkImageMapToColors* GetImageMap( unsigned int id ) const; + 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 ); @@ -102,11 +125,6 @@ namespace cpExtensions void SetWindowLevel( double w, double l ); void ResetWindowLevel( ); - void SetLookupTable( unsigned int id, vtkLookupTable* lut ); - void SetLookupTableAsColor( - unsigned int id, double r, double g, double b - ); - int GetAxis( ) const; int GetSliceNumber( ) const; int GetSliceNumberMinValue( ) const; @@ -117,28 +135,30 @@ namespace cpExtensions void UpdateText( double pos[ 3 ] ); void UpdateText( const double& w, const double& l ); + void Render( ); + void ResetCamera( ); + protected: ImageSliceActors( ); virtual ~ImageSliceActors( ); void _ConfigureStyle( ); - void _ConfigureNewLUT( vtkImageData* data ); - void _ConfigureNewInput( int axis ); + void _ConfigureInputImage( ); + void _ConfigureBinaryImage( + const double& r, const double& g, const double& b + ); // Events static void _MouseMoveCommand( void* data, - const BaseInteractorStyle::ButtonID& btn, double* pos, + const TStyle::ButtonID& btn, + int* idx, double* pos, bool alt, bool ctr, bool sft ); static void _MouseClickCommand( void* data, - const BaseInteractorStyle::ButtonID& btn, double* pos, - bool alt, bool ctr, bool sft - ); - static void _MouseDoubleClickCommand( - void* data, - const BaseInteractorStyle::ButtonID& btn, double* pos, + const TStyle::ButtonID& btn, + int* idx, double* pos, bool alt, bool ctr, bool sft ); static void _MouseWheelCommand( @@ -149,6 +169,8 @@ namespace cpExtensions void* data, const char& key ); + static void _EnterCommand( void* data ); + static void _LeaveCommand( void* data ); private: // Purposely not implemented @@ -156,39 +178,50 @@ namespace cpExtensions Self& operator=( const Self& ); protected: - vtkSmartPointer< ImageInteractorStyle > m_Style; + static double m_PlaneColors[ 3 ][ 3 ]; + + vtkSmartPointer< TStyle > m_Style; + vtkRenderWindow* m_Window; // Multiple actors - std::vector< vtkSmartPointer< vtkImageMapToColors > > m_ImageMaps; - std::vector< vtkSmartPointer< vtkImageSliceMapper > > m_SliceMappers; - std::vector< vtkSmartPointer< vtkImageActor > > m_ImageActors; - bool m_Interpolate; + 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; - // Window-Level values - double m_MinWindow, m_MaxWindow; - double m_MinLevel, m_MaxLevel; + bool m_Interpolate; - // Other associated slices - std::vector< vtkSmartPointer< Self > > m_AssociatedSlices; + double m_WLRange[ 4 ]; - // Associated commands - std::vector< std::pair< TCursorCommand, void* > > m_CursorCommands; + int m_VisibleExtent[ 6 ]; + double m_VisibleBounds[ 6 ]; - // Other associated actors - typedef std::pair< vtkAlgorithm*, vtkActor* > TAssociatedActor; - typedef std::vector< TAssociatedActor > TAssociatedActors; - TAssociatedActors m_AssociatedActors; + // Associated slices + std::vector< Self* > m_AssociatedSlices; // Unique objects vtkSmartPointer< vtkPolyData > m_Cursor; vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper; vtkSmartPointer< vtkActor > m_CursorActor; - vtkSmartPointer< vtkPlane > m_PlaneFunction; + + 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; - vtkSmartPointer< vtkActor > m_PlaneActor; double m_StartWindowLevelPos[ 3 ]; double m_StartWindowLevel[ 2 ];