summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/surface3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/surface3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 2298aef4..28ade504 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -270,6 +270,48 @@ void Surface3DRenderer::updateData()
updateSelectedPoint(m_selectedPoint, m_selectedSeries);
}
+void Surface3DRenderer::updateRows(int startIndex, int count)
+{
+ // TODO: Properly support non-straight rows and columns (QTRD-2643)
+ if (startIndex > m_sampleSpace.height()) {
+ // No changes on visible area
+ return;
+ }
+
+ // Surface only supports single series for now, so we are only interested in the first series
+ const QSurfaceDataArray *array = 0;
+ if (m_visibleSeriesList.size()) {
+ QSurface3DSeries *firstSeries = static_cast<QSurface3DSeries *>(m_visibleSeriesList.at(0).series());
+ if (m_cachedSurfaceGridOn || m_cachedSurfaceVisible) {
+ QSurfaceDataProxy *dataProxy = firstSeries->dataProxy();
+ if (dataProxy)
+ array = dataProxy->array();
+ }
+ }
+
+ if (array && array->size() >= 2 && array->at(0)->size() >= 2 &&
+ m_sampleSpace.width() >= 2 && m_sampleSpace.height() >= 2) {
+ int endRow = startIndex + count;
+ if (endRow > m_sampleSpace.height())
+ endRow = m_sampleSpace.height();
+
+ for (int i = startIndex; i < endRow; i++) {
+ for (int j = 0; j < m_sampleSpace.width(); j++)
+ (*(m_dataArray.at(i)))[j] = array->at(i + m_sampleSpace.y())->at(j + m_sampleSpace.x());
+ }
+
+ if (m_cachedSmoothSurface) {
+ m_surfaceObj->updateSmoothRows(m_dataArray, startIndex, endRow, m_heightNormalizer,
+ m_axisCacheY.min());
+ } else {
+ m_surfaceObj->updateCoarseRows(m_dataArray, startIndex, endRow, m_heightNormalizer,
+ m_axisCacheY.min());
+ }
+ }
+
+ updateSelectedPoint(m_selectedPoint, m_selectedSeries);
+}
+
void Surface3DRenderer::updateSliceDataModel(const QPoint &point)
{
int column = point.y();