From 8d84fc94b2cd5a0cc9eb83fd7708920ce785fa1b Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 18 Sep 2013 15:16:03 +0300 Subject: Implement limts related autoscaling for surface Task-number: QTRD-2267 Change-Id: I406e1530585989a873885ac1ab8e4d2913080c22 Reviewed-by: Mika Salmela --- .../engine/surface3dcontroller.cpp | 38 ++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'src/datavisualization/engine/surface3dcontroller.cpp') diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp index dbd1969a..675552ed 100644 --- a/src/datavisualization/engine/surface3dcontroller.cpp +++ b/src/datavisualization/engine/surface3dcontroller.cpp @@ -102,7 +102,7 @@ void Surface3DController::handleAxisAutoAdjustRangeChangedInOrientation(Q3DAbstr Q_UNUSED(orientation) Q_UNUSED(autoAdjust) - // TODO: Implement! + adjustValueAxisRange(); } void Surface3DController::setSmoothSurface(bool enable) @@ -150,13 +150,15 @@ void Surface3DController::setActiveDataProxy(QAbstractDataProxy *proxy) QSurfaceDataProxy *surfaceDataProxy = static_cast(m_data); - // TODO connections and handler for proxy changes QObject::connect(surfaceDataProxy, &QSurfaceDataProxy::arrayReset, this, &Surface3DController::handleArrayReset); + + adjustValueAxisRange(); } void Surface3DController::handleArrayReset() { + adjustValueAxisRange(); m_isDataDirty = true; emitNeedRender(); } @@ -167,4 +169,36 @@ void Surface3DController::handleSelectionAtPoint(const QPoint &point) emit leftMousePressed(point); } +void Surface3DController::adjustValueAxisRange() +{ + if (m_data) { + QVector3D minLimits; + QVector3D maxLimits; + static_cast(m_data)->dptr()->limitValues(minLimits, maxLimits); + Q3DValueAxis *valueAxis = static_cast(m_axisX); + if (valueAxis && valueAxis->isAutoAdjustRange()) { + if (minLimits.x() != maxLimits.x()) + valueAxis->dptr()->setRange(minLimits.x(), maxLimits.x()); + else + valueAxis->dptr()->setRange(minLimits.x() - 1.0f, minLimits.x() + 1.0f); // Default to some valid range + } + + valueAxis = static_cast(m_axisY); + if (valueAxis && valueAxis->isAutoAdjustRange()) { + if (minLimits.y() != maxLimits.y()) + valueAxis->dptr()->setRange(minLimits.y(), maxLimits.y()); + else + valueAxis->dptr()->setRange(minLimits.y() - 1.0f, minLimits.y() + 1.0f); // Default to some valid range + } + + valueAxis = static_cast(m_axisZ); + if (valueAxis && valueAxis->isAutoAdjustRange()) { + if (minLimits.z() != maxLimits.z()) + valueAxis->dptr()->setRange(minLimits.z(), maxLimits.z()); + else + valueAxis->dptr()->setRange(minLimits.z() - 1.0f, minLimits.z() + 1.0f); // Default to some valid range + } + } +} + QT_DATAVISUALIZATION_END_NAMESPACE -- cgit v1.2.3