1 #ifndef __CPEXTENSIONS__VISUALIZATION__BASEINTERACTORSTYLE__H__
2 #define __CPEXTENSIONS__VISUALIZATION__BASEINTERACTORSTYLE__H__
4 #include <cpExtensions/cpExtensions_Export.h>
7 #include <vtkInteractorStyle.h>
10 * Compile ITK and VTK with: cmake -DCMAKE_CXX_FLAGS="-std=c++11" /dir/to/source
13 /* =========================================================================
14 * Double click algorithm taken from:
15 * http://www.autohotkey.com/board/topic/56493-easiest-way-to-detect-double-clicks/
16 * =========================================================================
19 // -------------------------------------------------------------------------
20 #define BaseInteractorStyle_DIFF_TIME \
21 std::chrono::duration_cast< std::chrono::milliseconds >( \
22 std::chrono::system_clock::now( ).time_since_epoch( ) \
25 namespace cpExtensions
27 namespace Visualization
31 class cpExtensions_EXPORT BaseInteractorStyle
32 : public vtkInteractorStyle
35 typedef BaseInteractorStyle Self;
36 vtkTypeMacro( BaseInteractorStyle, vtkInteractorStyle );
49 void DelegateTDxEvent( unsigned long event, void* calldata );
51 // Possible mouse motion events
52 virtual void OnMouseMove( );
53 virtual void OnMouseWheelForward( ) { }
54 virtual void OnMouseWheelBackward( ) { }
56 // Possible mouse click-related events
57 inline ButtonID GetButtonID( ) const
58 { return( this->ActiveButton ); }
60 virtual void OnLeftButtonDown( );
61 virtual void OnLeftButtonUp( );
62 virtual void OnMiddleButtonDown( );
63 virtual void OnMiddleButtonUp( );
64 virtual void OnRightButtonDown( );
65 virtual void OnRightButtonUp( );
67 virtual void OnLeftClick( ) { }
68 virtual void OnLeftDoubleClick( ) { }
69 virtual void OnMiddleClick( ) { }
70 virtual void OnMiddleDoubleClick( ) { }
71 virtual void OnRightClick( ) { }
72 virtual void OnRightDoubleClick( ) { }
74 // Keyboard-related events
75 virtual void OnChar( ) { }
76 virtual void OnKeyDown( ) { }
77 virtual void OnKeyUp( ) { }
78 virtual void OnKeyPress( ) { }
79 virtual void OnKeyRelease( ) { }
82 virtual void OnExpose( ) { }
83 virtual void OnConfigure( ) { }
84 virtual void OnEnter( ) { }
85 virtual void OnLeave( ) { }
87 virtual void Dolly( );
91 BaseInteractorStyle( );
92 virtual ~BaseInteractorStyle( );
94 virtual void _Dolly( double factor );
96 static void _ProcessEvents(
104 // Purposely not implemented
105 BaseInteractorStyle( const Self& );
106 Self& operator=( const Self& );
114 struct MouseButtonEvent
116 static const long MAX_DOUBLE_CLICK;
121 inline MouseButtonEvent( )
125 this->LastButtonUp = 0;
126 this->LastButtonHeld = 0;
127 this->LastButtonDown = -1;
129 inline void Release( )
131 long c = BaseInteractorStyle_DIFF_TIME;
132 this->LastButtonUp = c;
133 this->LastButtonHeld = c - this->LastButtonDown;
134 this->LastButtonDown = -1;
136 inline unsigned char Clicks( )
139 long c = BaseInteractorStyle_DIFF_TIME;
141 this->LastButtonHeld < MAX_DOUBLE_CLICK &&
142 ( c - this->LastButtonUp ) < MAX_DOUBLE_CLICK
150 if( this->LastButtonDown < 0 )
151 this->LastButtonDown = c;
155 MouseButtonEvent LeftButtonEvent;
156 MouseButtonEvent MiddleButtonEvent;
157 MouseButtonEvent RightButtonEvent;
158 ButtonID ActiveButton;
165 #endif // __CPEXTENSIONS__VISUALIZATION__BASEINTERACTORSTYLE__H__