3#include <Core/CoreMacros.hpp>
5#include <Gui/RaGui.hpp>
6#include <Gui/Utils/KeyMappingManager.hpp>
7#include <Gui/Viewer/TrackballCameraManipulator.hpp>
15class CameraManipulator;
19class RA_GUI_API RotateAroundCameraManipulator
26 using KeyMapping = KeyMappingManageable<RotateAroundCameraManipulator>;
28 explicit RotateAroundCameraManipulator(
const CameraManipulator& cm,
Ra::Gui::Viewer* viewer );
31 bool handleMouseMoveEvent( QMouseEvent* event,
32 const Qt::MouseButtons& buttons,
33 const Qt::KeyboardModifiers& modifiers,
36 bool handleKeyPressEvent( QKeyEvent* event,
39 void setPivot( Ra::Core::Vector3 pivot );
41 void setPivotFromPixel( Scalar x, Scalar y );
45 void alignOnClosestAxis();
47 KeyMappingManager::Context mappingContext()
override;
50 void fitScene(
const Core::Aabb& aabb )
override;
53 virtual void handleCameraRotate( Scalar dx, Scalar dy )
override;
54 virtual void handleCameraForward( Scalar z );
55 virtual void handleCameraPan( Scalar dx, Scalar dy )
override;
59 Ra::Core::Quaternion deformedBallQuaternion( Scalar x, Scalar y, Scalar cx, Scalar cy );
60 Scalar projectOnBall( Scalar x, Scalar y );
63 void setupKeyMappingCallbacks();
64 void alignWithClosestAxisCallback( QEvent* event );
65 void moveForwardCallback( QEvent* event );
66 void panCallback( QEvent* event );
67 void rotateCallback( QEvent* event );
68 void setPivotCallback( QEvent* event );
69 void zoomCallback( QEvent* event );
71 KeyMappingCallbackManager m_keyMappingCallbackManager;
74 Ra::Core::Vector3 m_pivot { 0.0_ra, 0.0_ra, 0.0_ra };
76 static void configureKeyMapping_impl();
78#define KeyMappingRotateAroundCamera \
79 KMA_VALUE( ROTATEAROUND_ALIGN_WITH_CLOSEST_AXIS ) \
80 KMA_VALUE( ROTATEAROUND_SET_PIVOT )
82#define KMA_VALUE( XX ) static KeyMappingManager::KeyMappingAction XX;
83 KeyMappingRotateAroundCamera
KeyMappingManageable decorator to use as CRTP.
Ra::Core::Utils::Index KeyMappingAction
handle to an action
A Trackball manipulator for Cameras.
hepler function to manage enum as underlying types in VariableSet