summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-08-05 14:00:08 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-08-06 08:39:25 +0300
commitdd99eb73740ad015a2a2d28481e5a2ca8ab1d7b1 (patch)
treebcbbd462e547cd958b1343412d0a14e920b5c453 /src/datavisualization/engine/abstract3drenderer.cpp
parent73f127d8ef1937aa77ba0ec0be63f0bfd6cf92ab (diff)
Enable camera targeting.
Also fix custom item positioning in absolute mode as it was completely broken in bars and z-coord was flipped in others. Clarified Q3DObject::position property usage, namely that it is reserved for internal use for now. Some refactoring also done. Task-number: QTRD-2567 Change-Id: I5da65b83a2f8ecf20f8fd054e59748278ef1a714 Reviewed-by: Titta Heikkala <titta.heikkala@digia.com> Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index c2ed43da..14cf7109 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -79,7 +79,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_xFlipRotation(QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 0.0f, -180.0f)),
m_zFlipRotation(QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, -180.0f)),
m_vBackgroundMargin(0.1f),
- m_hBackgroundMargin(0.1f)
+ m_hBackgroundMargin(0.1f),
+ m_oldCameraTarget(QVector3D(2000.0f, 2000.0f, 2000.0f)) // Just random invalid target
{
QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Abstract3DRenderer::updateTextures);
QObject::connect(this, &Abstract3DRenderer::needRender, controller,
@@ -220,10 +221,6 @@ void Abstract3DRenderer::updateScene(Q3DScene *scene)
handleResize();
}
- scene->activeCamera()->d_ptr->updateViewMatrix(m_autoScaleAdjustment);
- // Set light position (rotate light with activeCamera, a bit above it (as set in defaultLightPos))
- scene->d_ptr->setLightPositionRelativeToCamera(defaultLightPos);
-
QPoint logicalPixelPosition = scene->selectionQueryPosition();
updateInputPosition(QPoint(logicalPixelPosition.x() * m_devicePixelRatio,
logicalPixelPosition.y() * m_devicePixelRatio));
@@ -231,6 +228,8 @@ void Abstract3DRenderer::updateScene(Q3DScene *scene)
// Synchronize the renderer scene to controller scene
scene->d_ptr->sync(*m_cachedScene->d_ptr);
+ updateCameraViewport();
+
if (Q3DScene::invalidSelectionPoint() == logicalPixelPosition) {
updateSelectionState(SelectNone);
} else {
@@ -316,7 +315,6 @@ void Abstract3DRenderer::updateAspectRatio(float ratio)
m_graphAspectRatio = ratio;
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
- updateCustomItemPositions();
}
void Abstract3DRenderer::updateHorizontalAspectRatio(float ratio)
@@ -324,7 +322,6 @@ void Abstract3DRenderer::updateHorizontalAspectRatio(float ratio)
m_graphHorizontalAspectRatio = ratio;
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
- updateCustomItemPositions();
}
void Abstract3DRenderer::updatePolar(bool enable)
@@ -332,7 +329,6 @@ void Abstract3DRenderer::updatePolar(bool enable)
m_polarGraph = enable;
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
- updateCustomItemPositions();
}
void Abstract3DRenderer::updateRadialLabelOffset(float offset)
@@ -401,8 +397,6 @@ void Abstract3DRenderer::updateAxisRange(QAbstract3DAxis::AxisOrientation orient
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
-
- updateCustomItemPositions();
}
void Abstract3DRenderer::updateAxisSegmentCount(QAbstract3DAxis::AxisOrientation orientation,
@@ -431,8 +425,6 @@ void Abstract3DRenderer::updateAxisReversed(QAbstract3DAxis::AxisOrientation ori
axisCacheForOrientation(orientation).setReversed(enable);
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
-
- updateCustomItemPositions();
}
void Abstract3DRenderer::updateAxisFormatter(QAbstract3DAxis::AxisOrientation orientation,
@@ -449,8 +441,6 @@ void Abstract3DRenderer::updateAxisFormatter(QAbstract3DAxis::AxisOrientation or
foreach (SeriesRenderCache *cache, m_renderCacheList)
cache->setDataDirty(true);
-
- updateCustomItemPositions();
}
void Abstract3DRenderer::updateAxisLabelAutoRotation(QAbstract3DAxis::AxisOrientation orientation,
@@ -1347,4 +1337,21 @@ float Abstract3DRenderer::calculatePolarBackgroundMargin()
return maxNeededMargin;
}
+void Abstract3DRenderer::updateCameraViewport()
+{
+ QVector3D adjustedTarget = m_cachedScene->activeCamera()->target();
+ fixCameraTarget(adjustedTarget);
+ if (m_oldCameraTarget != adjustedTarget) {
+ QVector3D cameraBase = cameraDistanceVector + adjustedTarget;
+
+ m_cachedScene->activeCamera()->d_ptr->setBaseOrientation(cameraBase,
+ adjustedTarget,
+ upVector);
+ m_oldCameraTarget = adjustedTarget;
+ }
+ m_cachedScene->activeCamera()->d_ptr->updateViewMatrix(m_autoScaleAdjustment);
+ // Set light position (i.e rotate light with activeCamera, a bit above it)
+ m_cachedScene->d_ptr->setLightPositionRelativeToCamera(defaultLightPos);
+}
+
QT_END_NAMESPACE_DATAVISUALIZATION