]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Extensions/Visualization/ImageInteractorStyle.h
New plugin: RGB -> HSV
[cpPlugins.git] / lib / cpPlugins / Extensions / Visualization / ImageInteractorStyle.h
index f2909e20924c33aaf0658250d8040c66fb797364..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( );
 
@@ -57,11 +72,6 @@ namespace cpPlugins
           vtkRenderWindowInteractor* interactor, const int& axis
           );
 
-        unsigned long AddDoubleClickObserver( vtkCommand* observer );
-        void RemoveDoubleClickObserver( unsigned long tag );
-        void RemoveDoubleClickObserver( vtkCommand* observer );
-        void RemoveDoubleClickObservers( );
-
         // Description:
         // Event bindings controlling the effects of pressing mouse buttons
         // or moving the mouse.
@@ -103,6 +113,8 @@ namespace cpPlugins
         // New events
         virtual void StartCursorMoving( );
         virtual void EndCursorMoving( );
+        virtual void StartRadiusMoving( );
+        virtual void EndRadiusMoving( );
 
       protected:
         ImageInteractorStyle( );
@@ -111,6 +123,7 @@ namespace cpPlugins
         void _RenderAssociateInteractors( );
         bool _PickPosition( double pos[ 3 ] );
         void _UpdateCursor( );
+        void _UpdateRadius( );
 
       private:
         // Purposely not implemented
@@ -129,8 +142,17 @@ 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 CursorEvent;
+        static const int RadiusEvent;
         static const int DoubleClickEvent;
       };