summaryrefslogtreecommitdiffstats
path: root/examples/surfacechart
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-26 11:16:12 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-27 08:05:12 +0300
commitf2a5c09144f17f3240ae6a7e7b48237f1b234d9b (patch)
tree28f40212cd228f66277e8db84885ddef0ebb6c5a /examples/surfacechart
parentb776b6d3aa287b973c9346736badc6181e50cbc7 (diff)
Allow resetting with existing array for surface
Improves performance when doing stuff like resetting image data. Task-number: QTRD-2335 Change-Id: I9e8ce49fd520b67125305a7614afc550b2244169 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'examples/surfacechart')
-rw-r--r--examples/surfacechart/chartmodifier.cpp47
-rw-r--r--examples/surfacechart/chartmodifier.h4
2 files changed, 42 insertions, 9 deletions
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp
index 67c523ef..1d791f89 100644
--- a/examples/surfacechart/chartmodifier.cpp
+++ b/examples/surfacechart/chartmodifier.cpp
@@ -26,6 +26,8 @@
QT_DATAVISUALIZATION_USE_NAMESPACE
+//#define JITTER_PLANE
+
ChartModifier::ChartModifier(Q3DSurface *chart)
: m_chart(chart),
m_gridSliderX(0),
@@ -41,13 +43,16 @@ ChartModifier::ChartModifier(Q3DSurface *chart)
m_rangeX(16.0),
m_rangeZ(16.0),
m_minX(-8.0),
- m_minZ(-8.0)
+ m_minZ(-8.0),
+ m_planeArray(0)
{
m_chart->setAxisX(new Q3DValueAxis);
m_chart->setAxisY(new Q3DValueAxis);
m_chart->setAxisZ(new Q3DValueAxis);
m_chart->axisX()->setRange(m_minX, m_minX + m_rangeX);
m_chart->axisZ()->setRange(m_minZ, m_minZ + m_rangeZ);
+
+ connect(&m_timer, &QTimer::timeout, this, &ChartModifier::timeout);
}
ChartModifier::~ChartModifier()
@@ -105,24 +110,33 @@ void ChartModifier::togglePlane(bool enable)
qDebug() << "ChartModifier::togglePlane " << enable;
if (enable) {
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ m_planeArray = new QSurfaceDataArray;
+
+#ifdef JITTER_PLANE
+ m_timer.start(0);
+#endif
+ m_chart->axisY()->setRange(0.0, 1.0);
+ m_chart->axisX()->setLabelFormat("%.2f");
+ m_chart->axisZ()->setLabelFormat("%.2f");
+
qreal y = 1.0 / (qreal(m_zCount - 1) + qreal(m_xCount - 1));
- dataArray->reserve(m_zCount);
+ m_planeArray->reserve(m_zCount);
for (int i = 0; i < m_zCount; i++) {
QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount);
for (int j = 0; j < m_xCount; j++)
(*newRow)[j] = (i + j) * y;
- *dataArray << newRow;
+ *m_planeArray << newRow;
}
- m_chart->axisY()->setRange(0.0, 1.0);
- m_chart->axisX()->setLabelFormat("%.2f");
- m_chart->axisZ()->setLabelFormat("%.2f");
-
- resetArrayAndSliders(dataArray, -10.0, 10.0, -10.0, 20.0);
+ resetArrayAndSliders(m_planeArray, -10.0, 10.0, -10.0, 20.0);
m_activeSample = ChartModifier::Plane;
}
+#ifdef JITTER_PLANE
+ else {
+ m_timer.stop();
+ }
+#endif
}
void ChartModifier::setHeightMapData(bool enable)
@@ -247,6 +261,21 @@ void ChartModifier::changeTheme(int theme)
m_chart->setTheme((QDataVis::ColorTheme)theme);
}
+void ChartModifier::timeout()
+{
+ int rows = m_planeArray->size();
+ int columns = m_planeArray->at(0)->size();
+
+ // Induce minor random jitter to the existing plane array
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < columns; j++)
+ (*m_planeArray->at(i))[j] = m_planeArray->at(i)->at(j) * ((qreal((rand() % 10) + 4) / 1000.0) + 0.99) + 0.001;
+ }
+
+ // Reset same array to make it redraw
+ m_chart->activeDataProxy()->resetArray(m_planeArray);
+}
+
void ChartModifier::resetArrayAndSliders(QSurfaceDataArray *array, qreal minZ, qreal maxZ, qreal minX, qreal maxX)
{
m_axisMinSliderX->setValue(minX);
diff --git a/examples/surfacechart/chartmodifier.h b/examples/surfacechart/chartmodifier.h
index 61d97cb0..ab27d269 100644
--- a/examples/surfacechart/chartmodifier.h
+++ b/examples/surfacechart/chartmodifier.h
@@ -22,6 +22,7 @@
#include <QtDataVisualization/Q3DSurface>
#include <QtDataVisualization/QSurfaceDataProxy>
#include <QSlider>
+#include <QTimer>
using namespace QtDataVisualization;
@@ -65,6 +66,7 @@ public slots:
void changeShadowQuality(int quality);
void changeTheme(int theme);
void changeSelectionMode(int mode);
+ void timeout();
private:
void resetArrayAndSliders(QSurfaceDataArray *array, qreal minZ, qreal maxZ, qreal minX,
@@ -86,6 +88,8 @@ private:
qreal m_rangeZ;
qreal m_minX;
qreal m_minZ;
+ QTimer m_timer;
+ QSurfaceDataArray *m_planeArray;
};
#endif // CHARTMODIFIER_H