]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/ImageSliceActors.h
MPR objects updated
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.h
index b4cec90e6fec8e3c7a3c8f28b4eb74c49fb5b717..4e29dc516916d5a0d3313f136a97a30208ca691e 100644 (file)
@@ -3,27 +3,22 @@
 
 #include <cpExtensions/cpExtensions_Export.h>
 
-#include <vtkSmartPointer.h>
+#include <cpExtensions/Interaction/ImageInteractorStyle.h>
 #include <vtkActor.h>
+#include <vtkCursor3D.h>
 #include <vtkImageActor.h>
 #include <vtkImageSliceMapper.h>
-#include <vtkLookupTable.h>
-#include <vtkPlane.h>
-#include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkPropCollection.h>
 #include <vtkTextActor.h>
+#include <vtkSmartPointer.h>
 
-#include <cpExtensions/Interaction/ImageInteractorStyle.h>
-#include <cpExtensions/Visualization/ImageBlender.h>
+#define MAX_TEXT_BUFFER 1024
 
-// -------------------------------------------------------------------------
 class vtkAlgorithmOutput;
 class vtkImageData;
-class vtkLookupTable;
 class vtkRenderer;
 
-// -------------------------------------------------------------------------
 namespace cpExtensions
 {
   namespace Visualization
@@ -35,7 +30,6 @@ namespace cpExtensions
     {
     public:
       typedef ImageSliceActors Self;
-
       typedef cpExtensions::Interaction::ImageInteractorStyle TStyle;
       typedef TStyle::TMouseCommand            TMouseCommand;
       typedef TStyle::TMouseWheelCommand       TMouseWheelCommand;
@@ -52,7 +46,28 @@ namespace cpExtensions
       typedef void ( *TWindowLevelCommand )( double, double, void* );
       typedef TVoidCommand TRenderCommand;
 
-      typedef cpExtensions::Visualization::ImageBlender TBlender;
+      template< class _TSource >
+        struct SourceActor
+      {
+        vtkSmartPointer< _TSource >          Source;
+        vtkSmartPointer< vtkPolyDataMapper > Mapper;
+        vtkSmartPointer< vtkActor >          Actor;
+        void Create( )
+          {
+            this->Source = vtkSmartPointer< _TSource >::New( );
+            this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
+            this->Actor = vtkSmartPointer< vtkActor >::New( );
+            this->Mapper->SetInputConnection( this->Source->GetOutputPort( ) );
+            this->Actor->SetMapper( this->Mapper );
+          }
+        void Modified( )
+          {
+            this->Source->Modified( );
+            this->Mapper->Modified( );
+            this->Actor->Modified( );
+          }
+      };
+        
 
     public:
       vtkTypeMacro( ImageSliceActors, vtkPropCollection );
@@ -62,91 +77,41 @@ namespace cpExtensions
       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
-        );
+      static Self* New( );
+
       void Clear( );
+      void SetInputConnection( vtkAlgorithmOutput* aout, int orientation );
+      void SetInputData( vtkImageData* data, int orientation );
 
       void AssociateSlice( Self* slice );
+      void CleanAssociatedSlices( );
 
-      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;
+      TStyle* GetStyle( );
+      void SetStyle( vtkInteractorStyle* st );
 
-      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 PushInto( vtkRenderer* ren );
+      void PopFrom( vtkRenderer* ren );
 
-      void SetInterpolate( bool v );
-      void InterpolateOn( );
-      void InterpolateOff( );
+      long GetSliceNumber( ) const;
+      void SetSliceNumber( long slice );
 
-      double* GetDisplayBounds( ) const;
-      void GetDisplayBounds( double bounds[ 6 ] ) const;
+      void ShowPixelText( double* pos );
 
-      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;
+      void GetScalarRange( double r[ 2 ] ) const;
+      void SetScalarRange( const double& a, const double& b );
+      void UnsetScalarRange( );
+      void SetWindowLevel( const double& w, const double& l );
       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
-        );
+      void _ConfigureInput( int orientation );
+      void _ConfigureCursor( );
 
       // Events
       static void _MouseMoveCommand(
@@ -178,59 +143,37 @@ namespace cpExtensions
       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;
+      // Main image
+      vtkSmartPointer< vtkImageSliceMapper > m_Mapper;
+      vtkSmartPointer< vtkImageActor >       m_Actor;
 
-      // Unique objects
-      vtkSmartPointer< vtkPolyData >       m_Cursor;
-      vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
-      vtkSmartPointer< vtkActor >          m_CursorActor;
+      // Secondary slices
+      std::vector< vtkSmartPointer< Self > > m_AssociatedSlices;
 
-      vtkSmartPointer< vtkPolyData >       m_Axis1;
-      vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper;
-      vtkSmartPointer< vtkActor >          m_Axis1Actor;
+      // Cursor
+      SourceActor< vtkCursor3D > m_Cursor;
 
-      vtkSmartPointer< vtkPolyData >       m_Axis2;
-      vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper;
-      vtkSmartPointer< vtkActor >          m_Axis2Actor;
+      // Text
+      char                            m_TextBuffer[ MAX_TEXT_BUFFER ];
+      vtkSmartPointer< vtkTextActor > m_TextActor;
 
-      vtkSmartPointer< vtkPolyData >       m_Plane;
-      vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
-      vtkSmartPointer< vtkActor >          m_PlaneActor;
+      // WindowLevel
+      double m_ScalarRange[ 2 ];
+      bool m_ManualScalarRange;
 
-      char                                 m_TextBuffer[ 1024 ];
-      vtkSmartPointer< vtkTextActor >      m_TextActor;
+      // Style
+      vtkSmartPointer< vtkInteractorStyle > m_Style;
 
-      double m_StartWindowLevelPos[ 3 ];
-      double m_StartWindowLevel[ 2 ];
+      // Events-related data
+      double m_StartMouseEvent[ 3 ];
+      double m_StartWindow;
+      double m_StartLevel;
     };
 
   } // ecapseman
 
 } // ecapseman
 
-#endif //  __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
+#endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
 
 // eof - $RCSfile$