diff options
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r-- | src/datavisualization/engine/q3dsurface.cpp | 11 | ||||
-rw-r--r-- | src/datavisualization/engine/q3dsurface.h | 3 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3dcontroller.cpp | 10 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3dcontroller_p.h | 8 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 38 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer_p.h | 1 |
6 files changed, 36 insertions, 35 deletions
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp index 41d025b3..0bec5a8b 100644 --- a/src/datavisualization/engine/q3dsurface.cpp +++ b/src/datavisualization/engine/q3dsurface.cpp @@ -311,17 +311,6 @@ void Q3DSurface::setHeight(const int height) QWindow::setHeight(height); } -/* - TODO: REMOVE - */ -/*! - * \internal - */ -void Q3DSurface::setSegmentCount(int segmentCount, qreal step, qreal minimum) -{ - d_ptr->m_shared->setSegmentCount(GLint(segmentCount), GLfloat(step), GLfloat(minimum)); -} - /*! * Sets a user-defined X-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h index 79d03e36..ce057555 100644 --- a/src/datavisualization/engine/q3dsurface.h +++ b/src/datavisualization/engine/q3dsurface.h @@ -75,9 +75,6 @@ public: void releaseDataProxy(QSurfaceDataProxy *proxy); QList<QSurfaceDataProxy *> dataProxies() const; - // TODO: Remove when axes handling in use - void setSegmentCount(int segmentCount, qreal step, qreal minimum = 0.0f); - // TODO: Do these need to be public? Where are they called from? // Size void setWidth(const int width); diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp index 327e02a2..fa13a995 100644 --- a/src/datavisualization/engine/surface3dcontroller.cpp +++ b/src/datavisualization/engine/surface3dcontroller.cpp @@ -136,16 +136,6 @@ void Surface3DController::handleArrayReset() emitNeedRender(); } -void Surface3DController::setSegmentCount(GLint segmentCount, GLfloat step, GLfloat minimum) -{ - m_segmentCount = segmentCount; - m_segmentStep = step; - m_segmentMinimum = minimum; - - emit segmentCountChanged(m_segmentCount, m_segmentStep, m_segmentMinimum); - emitNeedRender(); -} - void Surface3DController::setGradientColorAt(qreal pos, const QColor &color) { Theme t = theme(); diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h index eb8f4329..55597922 100644 --- a/src/datavisualization/engine/surface3dcontroller_p.h +++ b/src/datavisualization/engine/surface3dcontroller_p.h @@ -71,14 +71,6 @@ public: void setGradientColorAt(qreal pos, const QColor &color); - // Set segment count and step. Note; segmentCount * step should be the maximum possible value of data - // set. Minimum is the absolute minimum possible value a bar can have. This is especially - // important to set if values can be negative. - void setSegmentCount(GLint segmentCount, GLfloat step, GLfloat minimum = 0.0f); - - //TODO: Temp solution - void setData(QList<qreal> series, int width, int depth); - virtual void setActiveDataProxy(QAbstractDataProxy *proxy); virtual void handleAxisAutoAdjustRangeChangedInOrientation(Q3DAbstractAxis::AxisOrientation orientation, bool autoAdjust); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 55fb9d6f..ed07da4e 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -173,9 +173,14 @@ void Surface3DRenderer::updateDataModel(QSurfaceDataProxy *dataProxy) const QSurfaceDataArray *array = dataProxy->array(); - m_dataArray.reserve(array->size()); - for (int i = 0; i < array->size(); i++) { - QSurfaceDataRow *newRow = new QSurfaceDataRow(*array->at(i)); + QRect sampleSpace = calculateSampleRect(dataProxy); + + m_dataArray.reserve(sampleSpace.height()); + for (int i = 0; i < sampleSpace.height(); i++) { + QSurfaceDataRow *newRow = new QSurfaceDataRow(); + newRow->resize(sampleSpace.width()); + for (int j = 0; j < sampleSpace.width(); j++) + (*newRow)[j] = array->at(i + sampleSpace.y())->at(j + sampleSpace.x()); m_dataArray << newRow; } @@ -209,6 +214,33 @@ void Surface3DRenderer::updateDataModel(QSurfaceDataProxy *dataProxy) Abstract3DRenderer::updateDataModel(dataProxy); } +QRect Surface3DRenderer::calculateSampleRect(QSurfaceDataProxy *dataProxy) +{ + QRect sampleSpace(0, 0, dataProxy->columnCount(), dataProxy->rowCount()); + + if (dataProxy->minValueColumns() == 0.0 && dataProxy->maxValueColumns() == 0.0 && + dataProxy->minValueRows() == 0.0 && dataProxy->maxValueRows() == 0.0) { + // The user hasn't set anything, return default + return sampleSpace; + } + + qreal valueWidth = dataProxy->maxValueColumns() - dataProxy->minValueColumns(); + qreal columnBeginDiff = qAbs(dataProxy->minValueColumns() - m_axisCacheX.min()); + sampleSpace.setX(columnBeginDiff / valueWidth * dataProxy->columnCount()); + + qreal columnEndPos = (m_axisCacheX.max() - dataProxy->minValueColumns()) / valueWidth * dataProxy->columnCount(); + sampleSpace.setWidth(columnEndPos - sampleSpace.x()); + + qreal valueHeight = dataProxy->maxValueRows() - dataProxy->minValueRows(); + qreal rowBeginDiff = qAbs(dataProxy->minValueRows() - m_axisCacheZ.min()); + sampleSpace.setY(rowBeginDiff / valueHeight * dataProxy->rowCount()); + + qreal rowEndPos = (m_axisCacheZ.max() - dataProxy->minValueRows()) / valueHeight * dataProxy->rowCount(); + sampleSpace.setHeight(rowEndPos - sampleSpace.y()); + + return sampleSpace; +} + void Surface3DRenderer::updateScene(Q3DScene *scene) { // TODO: Move these to more suitable place e.g. controller should be controlling the viewports. diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h index 23e9fbb1..fd8b15a9 100644 --- a/src/datavisualization/engine/surface3drenderer_p.h +++ b/src/datavisualization/engine/surface3drenderer_p.h @@ -134,6 +134,7 @@ private: virtual void updateShadowQuality(QDataVis::ShadowQuality quality); virtual void updateTextures(); virtual void initShaders(const QString &vertexShader, const QString &fragmentShader); + QRect calculateSampleRect(QSurfaceDataProxy *dataProxy); void loadBackgroundMesh(); void loadGridLineMesh(); void loadLabelMesh(); |