summaryrefslogtreecommitdiffstats
path: root/examples/surfacechart/chartmodifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/surfacechart/chartmodifier.cpp')
-rw-r--r--examples/surfacechart/chartmodifier.cpp74
1 files changed, 55 insertions, 19 deletions
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp
index bfd032f7..30df0998 100644
--- a/examples/surfacechart/chartmodifier.cpp
+++ b/examples/surfacechart/chartmodifier.cpp
@@ -18,6 +18,7 @@
#include "chartmodifier.h"
#include <Q3DValueAxis>
+#include <QSurfaceDataProxy>
#include <qmath.h>
@@ -33,6 +34,9 @@ ChartModifier::ChartModifier(Q3DSurface *chart)
m_chart->setAxisX(new Q3DValueAxis);
m_chart->setAxisY(new Q3DValueAxis);
m_chart->setAxisZ(new Q3DValueAxis);
+
+ QSurfaceDataProxy *proxy = new QSurfaceDataProxy;
+ m_chart->setActiveDataProxy(proxy);
}
ChartModifier::~ChartModifier()
@@ -56,7 +60,6 @@ void ChartModifier::toggleSqrtSin(bool enable)
{
qreal biggest = -9999.0;
qreal smallest = 9999.0;
- QList<qreal> series;
if (enable) {
qDebug() << "Create Sqrt&Sin surface, (" << m_xCount << ", " << m_zCount << ")";
@@ -64,22 +67,27 @@ void ChartModifier::toggleSqrtSin(bool enable)
qreal stepZ = 16.0 / qreal(m_zCount);
qreal stepX = 16.0 / qreal(m_xCount);
+ QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ dataArray->reserve(m_zCount);
for (qreal i = -8.0 + stepZ / 2.0 ; i < 8.0 ; i += stepZ) {
+ QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount);
+ int index = 0;
for (qreal j = -8.0 + stepX / 2.0; j < 8.0; j += stepX) {
qreal R = qSqrt(i*i + j*j) + 0.01;
qreal y = (sin(R)/R + 0.24) * 1.61;
- series << y;
+ (*newRow)[index++] = y;
if (y > biggest) biggest = y;
if (y < smallest) smallest = y;
}
+ *dataArray << newRow;
}
- m_chart->setSegmentCount(4, 0.5f); // Going to be obsolete
- m_chart->appendSeries(series, m_xCount, m_zCount);
-
- m_chart->axisZ()->setSegmentCount(7);
+ m_chart->axisX()->setRange(0.0, qreal(m_xCount - 1));
+ m_chart->axisY()->setRange(0.0, 2.0);
+ m_chart->axisZ()->setRange(0.0, qreal(m_zCount - 1));
+ m_chart->activeDataProxy()->resetArray(dataArray);
- qDebug() << "biggest = " << biggest << ", smallest = " << smallest;
+ //qDebug() << "biggest = " << biggest << ", smallest = " << smallest;
} else {
qDebug() << "Remove surface";
}
@@ -88,24 +96,52 @@ void ChartModifier::toggleSqrtSin(bool enable)
void ChartModifier::togglePlane(bool enable)
{
qDebug() << "ChartModifier::togglePlane " << enable;
- if (enable) {
- QList<qreal> series;
+ if (enable) {
+ QSurfaceDataArray *dataArray = new QSurfaceDataArray;
qreal y = 2.0 / qreal(m_zCount - 1);
+ dataArray->reserve(m_zCount);
for (int i = 0; i < m_zCount; i++) {
- for (int j = 0; j < m_xCount; j++) {
- series << i * y;
- }
+ QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount);
+ for (int j = 0; j < m_xCount; j++)
+ (*newRow)[j] = i * y;
+ *dataArray << newRow;
}
- m_chart->setSegmentCount(4, 0.5f);
- m_chart->appendSeries(series, m_xCount, m_zCount);
- m_chart->axisX()->setSegmentCount(m_xCount - 1);
- m_chart->axisX()->setRange(1.0, qreal(m_xCount));
- m_chart->axisY()->setSegmentCount(4);
+ m_chart->axisX()->setSegmentCount(3);
+ m_chart->axisX()->setRange(0.0, qreal(m_xCount - 1));
+ //m_chart->axisY()->setSegmentCount(4);
m_chart->axisY()->setRange(0.0, 2.0);
- m_chart->axisZ()->setSegmentCount(m_zCount - 1);
- m_chart->axisZ()->setRange(1.0, qreal(m_zCount));
+ //m_chart->axisZ()->setSegmentCount(4/*m_zCount - 1*/);
+ m_chart->axisZ()->setRange(0.0, qreal(m_zCount - 1));
+
+ m_chart->activeDataProxy()->resetArray(dataArray);
+ }
+}
+
+void ChartModifier::setHeightMapData(bool enable)
+{
+ if (enable) {
+ QImage image(":/maps/map");
+
+ QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ uchar *bits = image.bits();
+
+ int p = image.width() * 4 * (image.height() - 1);
+ dataArray->reserve(image.height());
+ qDebug() << image.height() << image.width();
+ for (int i = image.height(); i > 0; i--, p -= image.width() * 4) {
+ QSurfaceDataRow *newRow = new QSurfaceDataRow(image.width());
+ for (int j = 0; j < image.width(); j++)
+ (*newRow)[j] = (qreal(bits[p + (j * 4)]) + 1.0) / 1.0;
+ *dataArray << newRow;
+ }
+
+ m_chart->axisX()->setRange(0.0, qreal(image.width() - 1));
+ m_chart->axisY()->setRange(0.0, 255.0);
+ m_chart->axisZ()->setRange(0.0, qreal(image.height() - 1));
+
+ m_chart->activeDataProxy()->resetArray(dataArray);
}
}