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 ); }
59 virtual void OnLeftButtonDown( ) { }
60 virtual void OnLeftButtonUp( ) { }
61 virtual void OnLeftClick( ) { }
62 virtual void OnLeftDoubleClick( ) { }
63 virtual void OnMiddleButtonDown( ) { }
64 virtual void OnMiddleButtonUp( ) { }
65 virtual void OnMiddleClick( ) { }
66 virtual void OnMiddleDoubleClick( ) { }
67 virtual void OnRightButtonDown( ) { }
68 virtual void OnRightButtonUp( ) { }
69 virtual void OnRightClick( ) { }
70 virtual void OnRightDoubleClick( ) { }
72 // Keyboard-related events
73 virtual void OnChar( ) { }
74 virtual void OnKeyDown( ) { }
75 virtual void OnKeyUp( ) { }
76 virtual void OnKeyPress( ) { }
77 virtual void OnKeyRelease( ) { }
80 virtual void OnExpose( ) { }
81 virtual void OnConfigure( ) { }
82 virtual void OnEnter( ) { }
83 virtual void OnLeave( ) { }
86 inline void StartState( int newstate ) { }
87 inline void StopState( ) { }
88 inline void StartAnimate( ) { }
89 inline void StopAnimate( ) { }
90 inline void StartRotate( ) { }
91 inline void EndRotate( ) { }
92 inline void StartZoom( ) { }
93 inline void EndZoom( ) { }
94 inline void StartPan( ) { }
95 inline void EndPan( ) { }
96 inline void StartSpin( ) { }
97 inline void EndSpin( ) { }
98 inline void StartDolly( ) { }
99 inline void EndDolly( ) { }
100 inline void StartUniformScale( ) { }
101 inline void EndUniformScale( ) { }
102 inline void StartTimer( ) { }
103 inline void EndTimer( ) { }
104 inline void StartTwoPointer( ) { }
105 inline void EndTwoPointer( ) { }
106 inline void OnTimer( ) { }
109 BaseInteractorStyle( );
110 virtual ~BaseInteractorStyle( );
112 static void _ProcessEvents(
120 // Purposely not implemented
121 BaseInteractorStyle( const Self& );
122 Self& operator=( const Self& );
129 struct MouseButtonEvent
131 static const long MAX_DOUBLE_CLICK;
136 inline MouseButtonEvent( )
140 this->LastButtonUp = 0;
141 this->LastButtonHeld = 0;
142 this->LastButtonDown = -1;
144 inline void Release( )
146 long c = BaseInteractorStyle_DIFF_TIME;
147 this->LastButtonUp = c;
148 this->LastButtonHeld = c - this->LastButtonDown;
149 this->LastButtonDown = -1;
151 inline unsigned char Clicks( )
154 long c = BaseInteractorStyle_DIFF_TIME;
156 this->LastButtonHeld < MAX_DOUBLE_CLICK &&
157 ( c - this->LastButtonUp ) < MAX_DOUBLE_CLICK
165 if( this->LastButtonDown < 0 )
166 this->LastButtonDown = c;
170 MouseButtonEvent LeftButtonEvent;
171 MouseButtonEvent MiddleButtonEvent;
172 MouseButtonEvent RightButtonEvent;
173 ButtonID ActiveButton;
180 #endif // __CPEXTENSIONS__VISUALIZATION__BASEINTERACTORSTYLE__H__