]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Extensions/Visualization/ImageInteractorStyle.h
MPR updated
[cpPlugins.git] / lib / cpPlugins / Extensions / Visualization / ImageInteractorStyle.h
index 2eb6f12390013b2bb3bb2bc5fb6026bf4b12c722..3bde551833f361464095c097fc524cc18f7cbb20 100644 (file)
    class vtkImageData;
 */
 
+// -------------------------------------------------------------------------
+#define cpPlugins_ImageInteractorStyle_ObserverMacro( e )               \
+  inline unsigned long Add##e##Observer( vtkCommand* observer )         \
+  { return( this->AddObserver( Self::e##Event, observer ) ); }          \
+  inline void Remove##e##Observer( unsigned long tag )                  \
+  { this->RemoveObserver( tag ); }                                      \
+  inline void Remove##e##Observer( vtkCommand* observer )               \
+  { this->RemoveObserver( observer ); }                                 \
+  inline void Remove##e##Observers( )                                   \
+  { this->RemoveObservers( Self::e##Event ); }
+
 namespace cpPlugins
 {
   namespace Extensions
@@ -42,6 +53,10 @@ namespace cpPlugins
       public:
         vtkTypeMacro( ImageInteractorStyle, vtkInteractorStyleImage );
 
+        cpPlugins_ImageInteractorStyle_ObserverMacro( DoubleClick );
+        cpPlugins_ImageInteractorStyle_ObserverMacro( Cursor );
+        cpPlugins_ImageInteractorStyle_ObserverMacro( Radius );
+
       public:
         static Self* New( );
 
@@ -79,25 +94,27 @@ namespace cpPlugins
         // they might be called from OnTimer, they do not have mouse coord
         // parameters (use interactor's GetEventPosition and
         // GetLastEventPosition)
-        virtual void Rotate( );
-        virtual void Pan( );
-        virtual void Spin( );
-        virtual void Zoom( );
+
+        virtual void Rotate( ) { }
+        virtual void Spin( )   { }
+        virtual void Zoom( )   { }
+        virtual void Pick( )   { }
+        virtual void Slice( )  { }
         virtual void WindowLevel( );
-        virtual void Pick( );
-        virtual void Slice( );
 
         // Interaction mode entry points used internally.
+        virtual void StartPick( )  { }
+        virtual void EndPick( )    { }
+        virtual void StartSlice( ) { }
+        virtual void EndSlice( )   { }
         virtual void StartWindowLevel( );
         virtual void EndWindowLevel( );
-        virtual void StartPick( );
-        virtual void EndPick( );
-        virtual void StartSlice( );
-        virtual void EndSlice( );
 
         // New events
         virtual void StartCursorMoving( );
         virtual void EndCursorMoving( );
+        virtual void StartRadiusMoving( );
+        virtual void EndRadiusMoving( );
 
       protected:
         ImageInteractorStyle( );
@@ -106,6 +123,7 @@ namespace cpPlugins
         void _RenderAssociateInteractors( );
         bool _PickPosition( double pos[ 3 ] );
         void _UpdateCursor( );
+        void _UpdateRadius( );
 
       private:
         // Purposely not implemented
@@ -124,9 +142,18 @@ namespace cpPlugins
         std::vector< vtkRenderWindowInteractor* > AssociatedInteractors;
 
         bool CursorMoving;
+        double Cursor[ 3 ];
+
+        bool RadiusMoving;
+        double Radius[ 3 ];
+        vtkSmartPointer< vtkPolyData > Circle;
+        vtkSmartPointer< vtkPolyDataMapper > CircleMapper;
+        vtkSmartPointer< vtkActor > CircleActor;
 
       public:
-        static const int SliceEvent;
+        static const int CursorEvent;
+        static const int RadiusEvent;
+        static const int DoubleClickEvent;
       };
 
     } // ecapseman