#include <vtkPropPicker.h>
#include <vtkSmartPointer.h>
-/* TODO
- #include <vtkInteractorStyleImage.h>
- #include <vtkLineWidget2.h>
- #include <vtkLineRepresentation.h>
- #include <vtkPlane.h>
- class vtkImageData;
-*/
+#include <cpPlugins/Extensions/cpPlugins_Extensions_Export.h>
+
+// -------------------------------------------------------------------------
+#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
{
/**
*/
- class ImageInteractorStyle
+ class cpPlugins_Extensions_EXPORT ImageInteractorStyle
: public vtkInteractorStyleImage
{
public:
public:
vtkTypeMacro( ImageInteractorStyle, vtkInteractorStyleImage );
+ cpPlugins_ImageInteractorStyle_ObserverMacro( DoubleClick );
+ cpPlugins_ImageInteractorStyle_ObserverMacro( Cursor );
+ cpPlugins_ImageInteractorStyle_ObserverMacro( Radius );
+
public:
static Self* New( );
// 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( );
void _RenderAssociateInteractors( );
bool _PickPosition( double pos[ 3 ] );
void _UpdateCursor( );
+ void _UpdateRadius( );
private:
// Purposely not implemented
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