mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-01-21 05:00:06 -05:00
Merged in mmastriani/fractorium_michel (pull request #52)
Pitch-Yaw mouse move feature
This commit is contained in:
commit
8668ccc419
@ -114,6 +114,8 @@ public:
|
||||
bool ApplyAll();
|
||||
void SetRotation(double rot, bool stealth);
|
||||
void SetScale(double scale);
|
||||
void SetPitch(double pitch);
|
||||
void SetYaw(double yaw);
|
||||
void SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY);
|
||||
void CenterScrollbars();
|
||||
|
||||
|
@ -928,6 +928,26 @@ void Fractorium::SetScale(double scale)
|
||||
m_ScaleSpin->setValue(scale);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the pitch.
|
||||
/// This updates the spinner
|
||||
/// </summary>
|
||||
/// <param name="pitch">The pitch value</param>
|
||||
void Fractorium::SetPitch(double pitch)
|
||||
{
|
||||
m_PitchSpin->setValue(pitch);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the yaw.
|
||||
/// This updates the spinner
|
||||
/// </summary>
|
||||
/// <param name="yaw">The yaw value</param>
|
||||
void Fractorium::SetYaw(double yaw)
|
||||
{
|
||||
m_YawSpin->setValue(yaw);
|
||||
}
|
||||
|
||||
template class FractoriumEmberController<float>;
|
||||
|
||||
#ifdef DO_DOUBLE
|
||||
|
@ -19,7 +19,7 @@ enum class eHoverType : et { HoverNone, HoverXAxis, HoverYAxis, HoverTranslation
|
||||
/// <summary>
|
||||
/// Dragging an affine transform or panning, rotating or scaling the image.
|
||||
/// </summary>
|
||||
enum class eDragState : et { DragNone, DragSelect, DragPanning, DragDragging, DragRotateScale };
|
||||
enum class eDragState : et { DragNone, DragSelect, DragPanning, DragDragging, DragRotateScale, DragPitchYaw };
|
||||
|
||||
/// <summary>
|
||||
/// Dragging with no keys pressed, shift, control or alt.
|
||||
@ -137,6 +137,8 @@ private:
|
||||
T m_CenterDownY;
|
||||
T m_RotationDown;
|
||||
T m_ScaleDown;
|
||||
T m_PitchDown;
|
||||
T m_YawDown;
|
||||
v4T m_BoundsDown;
|
||||
|
||||
v3T m_MouseWorldPos;
|
||||
|
42
Source/Fractorium/GLWidget.cpp
Normal file → Executable file
42
Source/Fractorium/GLWidget.cpp
Normal file → Executable file
@ -891,7 +891,7 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
|
||||
m_DragState = eDragState::DragNone;
|
||||
}
|
||||
}
|
||||
else if (e->button() == Qt::MiddleButton || (e->button() == Qt::RightButton && e->modifiers() & Qt::ShiftModifier))//Middle button or right button with shift key, do whole image translation.
|
||||
else if (e->button() == Qt::MiddleButton || (e->button() == Qt::RightButton && e->modifiers() & Qt::ShiftModifier && !(e->modifiers() & Qt::AltModifier)))//Middle button or right button with shift key, do whole image translation.
|
||||
{
|
||||
m_CenterDownX = ember->m_CenterX;//Capture where the center of the image is because this value will change when panning.
|
||||
m_CenterDownY = ember->m_CenterY;
|
||||
@ -901,11 +901,21 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
|
||||
{
|
||||
if (m_Fractorium->DrawImage())
|
||||
{
|
||||
m_CenterDownX = ember->m_CenterX;//Capture these because they will change when rotating and scaling.
|
||||
m_CenterDownY = ember->m_CenterY;
|
||||
m_RotationDown = ember->m_Rotate;
|
||||
m_ScaleDown = ember->m_PixelsPerUnit;
|
||||
m_DragState = eDragState::DragRotateScale;
|
||||
m_CenterDownX = ember->m_CenterX;//Capture these because they will change when rotating and scaling.
|
||||
m_CenterDownY = ember->m_CenterY;
|
||||
|
||||
if(GetAlt() && GetShift())
|
||||
{
|
||||
m_PitchDown = ember->m_CamPitch * RAD_2_DEG_T;
|
||||
m_YawDown = ember->m_CamYaw * RAD_2_DEG_T;
|
||||
m_DragState = eDragState::DragPitchYaw;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_RotationDown = ember->m_Rotate;
|
||||
m_ScaleDown = ember->m_PixelsPerUnit;
|
||||
m_DragState = eDragState::DragRotateScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1054,6 +1064,26 @@ void GLEmberController<T>::MouseMove(QMouseEvent* e)
|
||||
m_Fractorium->SetRotation(ember->m_Rotate, true);
|
||||
m_Fractorium->SetScale(std::max(T(10), m_ScaleDown + scale));//Will restart the rendering process.
|
||||
}
|
||||
else if (m_DragState == eDragState::DragPitchYaw)//Pitching and yawing the whole image.
|
||||
{
|
||||
T pitch;
|
||||
T yaw;
|
||||
auto rotate = ember->m_Rotate;
|
||||
|
||||
if((rotate <= 45 && rotate >= -45) || (rotate >= 135) || (rotate <= -135))
|
||||
{
|
||||
pitch = m_PitchDown + (m_MouseWorldPos.y - m_MouseDownWorldPos.y) * 100;
|
||||
yaw = m_YawDown + (m_MouseWorldPos.x - m_MouseDownWorldPos.x) * 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
pitch = m_PitchDown + (m_MouseWorldPos.x - m_MouseDownWorldPos.x) * 100;
|
||||
yaw = m_YawDown + (m_MouseWorldPos.y - m_MouseDownWorldPos.y) * 100;
|
||||
}
|
||||
|
||||
m_Fractorium->SetPitch(pitch);
|
||||
m_Fractorium->SetYaw(yaw);
|
||||
}
|
||||
else
|
||||
{
|
||||
//If the user doesn't already have a key down, and they aren't dragging, clear the keys to be safe.
|
||||
|
Loading…
Reference in New Issue
Block a user