diff options
Diffstat (limited to 'src/datavis3d/engine/surface3dcontroller.cpp')
-rw-r--r-- | src/datavis3d/engine/surface3dcontroller.cpp | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/src/datavis3d/engine/surface3dcontroller.cpp b/src/datavis3d/engine/surface3dcontroller.cpp index 90e23f07..01e24a92 100644 --- a/src/datavis3d/engine/surface3dcontroller.cpp +++ b/src/datavis3d/engine/surface3dcontroller.cpp @@ -22,6 +22,7 @@ #include "q3dabstractaxis_p.h" #include "q3dvalueaxis_p.h" #include "q3dcategoryaxis.h" +#include "qsurfacedataproxy_p.h" #include <QMatrix4x4> #include <QMouseEvent> @@ -38,6 +39,8 @@ Surface3DController::Surface3DController(QRect rect) m_mouseState(MouseNone), m_mousePos(QPoint(0, 0)) { + setActiveDataProxy(0); + // Setting a null axis creates a new default axis according to orientation and chart type. // Note: These cannot be set in Abstract3DController constructor, as they will call virtual // functions implemented by subclasses. @@ -70,6 +73,10 @@ void Surface3DController::synchDataToRenderer() return; // Notify changes to renderer + if (m_isDataDirty) { + m_renderer->updateDataModel(static_cast<QSurfaceDataProxy *>(m_data)); + m_isDataDirty = false; + } } void Surface3DController::handleAxisAutoAdjustRangeChangedInOrientation(Q3DAbstractAxis::AxisOrientation orientation, bool autoAdjust) @@ -174,6 +181,31 @@ QPoint Surface3DController::mousePosition() return m_mousePos; } +void Surface3DController::setActiveDataProxy(QAbstractDataProxy *proxy) +{ + // Setting null proxy indicates default proxy + if (!proxy) { + proxy = new QSurfaceDataProxy; + proxy->d_ptr->setDefaultProxy(true); + } + + Q_ASSERT(proxy->type() == QAbstractDataProxy::DataTypeSurface); + + Abstract3DController::setActiveDataProxy(proxy); + + QSurfaceDataProxy *surfaceDataProxy = static_cast<QSurfaceDataProxy *>(m_data); + + // TODO connections and handler for proxy changes + QObject::connect(surfaceDataProxy, &QSurfaceDataProxy::arrayReset, + this, &Surface3DController::handleArrayReset); +} + +void Surface3DController::handleArrayReset() +{ + m_isDataDirty = true; + emitNeedRender(); +} + void Surface3DController::setSegmentCount(GLint segmentCount, GLfloat step, GLfloat minimum) { m_segmentCount = segmentCount; @@ -191,16 +223,4 @@ void Surface3DController::setGradientColorAt(qreal pos, const QColor &color) emitNeedRender(); } -// TODO: Temp -void Surface3DController::setData(QList<qreal> series, int width, int depth) -{ - m_series = series; - m_dataWidth = width; - m_dataDepth = depth; - - m_renderer->setXZStuff(width, depth); - m_renderer->setSeries(series); - emitNeedRender(); -} - QT_DATAVIS3D_END_NAMESPACE |