From f3e38983d77c72f3121c33a149a58fdf9c64158c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kera=CC=88nen=20Pasi?= Date: Fri, 23 Aug 2013 16:17:29 +0300 Subject: New 3D scene for lights and camera setup for input handlers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ib909bd818364c1646615df7c543d57b07b920a83 Reviewed-by: Tomi Korpipää --- src/datavis3d/input/q3dinputhandler.cpp | 52 +++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'src/datavis3d/input/q3dinputhandler.cpp') diff --git a/src/datavis3d/input/q3dinputhandler.cpp b/src/datavis3d/input/q3dinputhandler.cpp index 4623a69b..a8bfc19a 100644 --- a/src/datavis3d/input/q3dinputhandler.cpp +++ b/src/datavis3d/input/q3dinputhandler.cpp @@ -16,38 +16,46 @@ ** ****************************************************************************/ #include "q3dinputhandler.h" +#include "q3dcamera.h" +#include "q3dlight.h" QT_DATAVIS3D_BEGIN_NAMESPACE -Q3DInputHandler::Q3DInputHandler() : - QAbstract3DInputHandler() +Q3DInputHandler::Q3DInputHandler(QObject *parent) : + QAbstract3DInputHandler(parent) +{ +} + +Q3DInputHandler::~Q3DInputHandler() { } // Input event listeners void Q3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos) { - QRect mainViewPort = mainViewPortRect(); if (Qt::LeftButton == event->button()) { - if (slicingActivated()) { - if (mousePos.x() <= mainViewPort.width() - && mousePos.y() <= mainViewPort.height()) { + if (scene()->isSlicingActivated()) { + if (scene()->isInputInsideMainView(mousePos)) { setInputState(QDataVis::InputOnOverview); //qDebug() << "Mouse pressed on overview"; - } else { + } else if (scene()->isInputInsideSliceView(mousePos)) { setInputState(QDataVis::InputOnSlice); //qDebug() << "Mouse pressed on zoom"; + } else { + setInputState(QDataVis::InputNone); } } else { setInputState(QDataVis::InputOnScene); // update mouse positions to prevent jumping when releasing or repressing a button setInputPosition(mousePos); + emit selectionAtPoint(mousePos); //qDebug() << "Mouse pressed on scene"; + } } else if (Qt::MiddleButton == event->button()) { // reset rotations setInputPosition(QPoint(0, 0)); - } else if (!slicingActivated() && Qt::RightButton == event->button()) { + } else if (Qt::RightButton == event->button()) { // disable rotating when in slice view setInputState(QDataVis::InputRotating); // update mouse positions to prevent jumping when releasing or repressing a button @@ -63,28 +71,42 @@ void Q3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mouseP if (QDataVis::InputRotating == inputState()) { // update mouse positions to prevent jumping when releasing or repressing a button setInputPosition(mousePos); - // TODO: Call actual camera class when it's been written. - //m_cameraHelper->updateMousePos(mousePos); } setInputState(QDataVis::InputNone); - } void Q3DInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) { Q_UNUSED(event); - if (QDataVis::InputRotating == inputState()) + if (QDataVis::InputRotating == inputState()) { + + // Calculate mouse movement since last frame + QPointF rotations = scene()->camera()->rotations(); + GLfloat xRotation = rotations.x(); + GLfloat yRotation = rotations.y(); + GLfloat mouseMoveX = GLfloat(inputPosition().x() - mousePos.x()) + / (scene()->viewport().width() / rotationSpeed); + GLfloat mouseMoveY = GLfloat(inputPosition().y() - mousePos.y()) + / (scene()->viewport().height() / rotationSpeed); + // Apply to rotations + xRotation -= mouseMoveX; + yRotation -= mouseMoveY; + scene()->camera()->setRotations(QPointF(xRotation, yRotation)); + scene()->camera()->updateViewMatrix(1.0f); + + setPreviousInputPos(inputPosition()); setInputPosition(mousePos); + } } void Q3DInputHandler::wheelEvent(QWheelEvent *event) { // disable zooming if in slice view - if (slicingActivated()) + if (scene()->isSlicingActivated()) return; // Adjust zoom level based on what zoom range we're in. - int zoomLevel = QAbstract3DInputHandler::zoomLevel(); + int zoomLevel = scene()->camera()->zoomLevel(); if (zoomLevel > oneToOneZoomLevel) zoomLevel += event->angleDelta().y() / nearZoomRangeDivider; else if (zoomLevel > halfSizeZoomLevel) @@ -96,7 +118,7 @@ void Q3DInputHandler::wheelEvent(QWheelEvent *event) else if (zoomLevel < minZoomLevel) zoomLevel = minZoomLevel; - setZoomLevel(zoomLevel); + scene()->camera()->setZoomLevel(zoomLevel); } QT_DATAVIS3D_END_NAMESPACE -- cgit v1.2.3