]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/ImageSliceActors.h
...
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.h
index 22bfe6a7f39ee551158ffbe80cfa67066676c559..b4cec90e6fec8e3c7a3c8f28b4eb74c49fb5b717 100644 (file)
@@ -3,26 +3,25 @@
 
 #include <cpExtensions/cpExtensions_Export.h>
 
-#include <utility>
-#include <vector>
-
 #include <vtkSmartPointer.h>
 #include <vtkActor.h>
 #include <vtkImageActor.h>
-#include <vtkImageMapToColors.h>
 #include <vtkImageSliceMapper.h>
+#include <vtkLookupTable.h>
 #include <vtkPlane.h>
 #include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkPropCollection.h>
 #include <vtkTextActor.h>
 
-#include <cpExtensions/Visualization/ImageInteractorStyle.h>
+#include <cpExtensions/Interaction/ImageInteractorStyle.h>
+#include <cpExtensions/Visualization/ImageBlender.h>
 
 // -------------------------------------------------------------------------
 class vtkAlgorithmOutput;
 class vtkImageData;
 class vtkLookupTable;
+class vtkRenderer;
 
 // -------------------------------------------------------------------------
 namespace cpExtensions
@@ -37,35 +36,64 @@ namespace cpExtensions
     public:
       typedef ImageSliceActors Self;
 
-      typedef void ( *TCursorCommand )( double*, int, void* );
+      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 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( );
@@ -73,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( );
@@ -86,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 );
@@ -96,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;
@@ -111,27 +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 _ConfigureNewLUT( vtkImageData* data );
-      void _ConfigureNewInput( int axis );
+      void _ConfigureStyle( );
+      void _ConfigureInputImage( );
+      void _ConfigureBinaryImage(
+        const double& r, const double& g, const double& b
+        );
 
       // Events
       static void _MouseMoveCommand(
         void* data,
-        const ImageInteractorStyle::ButtonID& btn, double* pos,
+        const TStyle::ButtonID& btn,
+        int* idx, double* pos,
         bool alt, bool ctr, bool sft
         );
       static void _MouseClickCommand(
         void* data,
-        const ImageInteractorStyle::ButtonID& btn, double* pos,
-        bool alt, bool ctr, bool sft
-        );
-      static void _MouseDoubleClickCommand(
-        void* data,
-        const ImageInteractorStyle::ButtonID& btn, double* pos,
+        const TStyle::ButtonID& btn,
+        int* idx, double* pos,
         bool alt, bool ctr, bool sft
         );
       static void _MouseWheelCommand(
@@ -142,6 +169,8 @@ namespace cpExtensions
         void* data,
         const char& key
         );
+      static void _EnterCommand( void* data );
+      static void _LeaveCommand( void* data );
 
     private:
       // Purposely not implemented
@@ -149,41 +178,53 @@ namespace cpExtensions
       Self& operator=( const Self& );
 
     protected:
-      vtkSmartPointer< ImageInteractorStyle > Style;
+      static double m_PlaneColors[ 3 ][ 3 ];
+
+      vtkSmartPointer< TStyle > m_Style;
+      vtkRenderWindow* m_Window;
 
       // Multiple actors
-      std::vector< vtkSmartPointer< vtkImageMapToColors > > ImageMaps;
-      std::vector< vtkSmartPointer< vtkImageSliceMapper > > SliceMappers;
-      std::vector< vtkSmartPointer< vtkImageActor > >       ImageActors;
-      bool 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;
+
+      bool m_Interpolate;
 
-      // Window-Level values
-      double MinWindow, MaxWindow;
-      double MinLevel, MaxLevel;
+      double m_WLRange[ 4 ];
 
-      // Other associated slices
-      std::vector< vtkSmartPointer< Self > > AssociatedSlices;
-      TCursorCommand SlicesCommand;
-      void* SlicesData;
+      int    m_VisibleExtent[ 6 ];
+      double m_VisibleBounds[ 6 ];
 
-      // Other associated actors
-      typedef std::pair< vtkAlgorithm*, vtkActor* > TAssociatedActor;
-      typedef std::vector< TAssociatedActor >       TAssociatedActors;
-      TAssociatedActors AssociatedActors;
+      // Associated slices
+      std::vector< Self* > m_AssociatedSlices;
 
       // Unique objects
-      vtkSmartPointer< vtkPolyData >       Cursor;
-      vtkSmartPointer< vtkPolyDataMapper > CursorMapper;
-      vtkSmartPointer< vtkActor >          CursorActor;
-      vtkSmartPointer< vtkPlane >          PlaneFunction;
-      vtkSmartPointer< vtkPolyData >       Plane;
-      vtkSmartPointer< vtkPolyDataMapper > PlaneMapper;
-      char                                 TextBuffer[ 1024 ];
-      vtkSmartPointer< vtkTextActor >      TextActor;
-      vtkSmartPointer< vtkActor >          PlaneActor;
-
-      double StartWindowLevelPos[ 3 ];
-      double StartWindowLevel[ 2 ];
+      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