summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp11
-rw-r--r--src/datavisualization/engine/q3dsurface.h3
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp10
-rw-r--r--src/datavisualization/engine/surface3dcontroller_p.h8
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp38
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h1
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();