summaryrefslogtreecommitdiffstats
path: root/tests/surfacetest/graphmodifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/surfacetest/graphmodifier.cpp')
-rw-r--r--tests/surfacetest/graphmodifier.cpp151
1 files changed, 128 insertions, 23 deletions
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index ed86f03c..7192f0dc 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -21,18 +21,21 @@
#include <QtDataVisualization/QSurfaceDataProxy>
#include <QtDataVisualization/QSurface3DSeries>
#include <QtDataVisualization/Q3DTheme>
+#include <QtDataVisualization/Q3DInputHandler>
#include <qmath.h>
#include <QLinearGradient>
#include <QDebug>
#include <QComboBox>
-
+#ifndef QT_NO_CURSOR
+#include <QtGui/QCursor>
+#endif
using namespace QtDataVisualization;
//#define JITTER_PLANE
//#define WONKY_PLANE
-GraphModifier::GraphModifier(Q3DSurface *graph)
+GraphModifier::GraphModifier(Q3DSurface *graph, QWidget *parentWidget)
: m_graph(graph),
m_series1(new QSurface3DSeries),
m_series2(new QSurface3DSeries),
@@ -48,12 +51,12 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_zCount(24),
m_activeSample(0),
m_fontSize(40),
- m_rangeX(16.0),
+ m_rangeX(34.0),
m_rangeY(16.0),
- m_rangeZ(16.0),
- m_minX(-8.0),
+ m_rangeZ(34.0),
+ m_minX(-17.0),
m_minY(-8.0),
- m_minZ(-8.0),
+ m_minZ(-17.0),
m_addRowCounter(m_zCount),
m_insertTestZPos(0),
m_insertTestIndexPos(1),
@@ -63,7 +66,10 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_drawMode2(QSurface3DSeries::DrawSurfaceAndWireframe),
m_drawMode3(QSurface3DSeries::DrawSurfaceAndWireframe),
m_drawMode4(QSurface3DSeries::DrawSurfaceAndWireframe),
- m_offset(4.0f)
+ m_offset(4.0f),
+ m_parentWidget(parentWidget),
+ m_ascendingX(true),
+ m_ascendingZ(true)
{
m_graph->setAxisX(new QValue3DAxis);
m_graph->axisX()->setTitle("X-Axis");
@@ -97,6 +103,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_graph->axisY()->setRange(m_minY, m_minY + m_rangeY);
m_graph->axisZ()->setRange(m_minZ, m_minZ + m_rangeZ);
+ static_cast<Q3DInputHandler *>(m_graph->activeInputHandler())->setZoomAtTargetEnabled(true);
+
for (int i = 0; i < 4; i++) {
m_multiseries[i] = new QSurface3DSeries;
m_multiseries[i]->setName(QStringLiteral("Series %1").arg(i+1));
@@ -109,6 +117,7 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_theSeries->setItemLabelFormat(QStringLiteral("@seriesName: (@xLabel, @zLabel): @yLabel"));
connect(&m_timer, &QTimer::timeout, this, &GraphModifier::timeout);
+ connect(&m_graphPositionQueryTimer, &QTimer::timeout, this, &GraphModifier::graphQueryTimeout);
connect(m_theSeries, &QSurface3DSeries::selectedPointChanged, this, &GraphModifier::selectedPointChanged);
QObject::connect(m_graph, &Q3DSurface::axisXChanged, this,
@@ -119,6 +128,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
&GraphModifier::handleAxisZChanged);
QObject::connect(m_graph, &QAbstract3DGraph::currentFpsChanged, this,
&GraphModifier::handleFpsChange);
+
+ //m_graphPositionQueryTimer.start(100);
}
GraphModifier::~GraphModifier()
@@ -159,7 +170,6 @@ void GraphModifier::fillSeries()
(*newRow[s])[j].setPosition(QVector3D(x, y, z));
}
}
- qDebug() << newRow[0]->at(0).z();
*dataArray1 << newRow[0];
*dataArray2 << newRow[1];
*dataArray3 << newRow[2];
@@ -606,19 +616,30 @@ void GraphModifier::adjustZMin(int min)
void GraphModifier::gradientPressed()
{
+ static Q3DTheme::ColorStyle colorStyle = Q3DTheme::ColorStyleUniform;
+
+ if (colorStyle == Q3DTheme::ColorStyleRangeGradient) {
+ colorStyle = Q3DTheme::ColorStyleObjectGradient;
+ qDebug() << "Color style: ColorStyleObjectGradient";
+ } else if (colorStyle == Q3DTheme::ColorStyleObjectGradient) {
+ colorStyle = Q3DTheme::ColorStyleUniform;
+ qDebug() << "Color style: ColorStyleUniform";
+ } else {
+ colorStyle = Q3DTheme::ColorStyleRangeGradient;
+ qDebug() << "Color style: ColorStyleRangeGradient";
+ }
+
QLinearGradient gradient;
gradient.setColorAt(0.0, Qt::black);
gradient.setColorAt(0.33, Qt::blue);
gradient.setColorAt(0.67, Qt::red);
gradient.setColorAt(1.0, Qt::yellow);
-// m_graph->seriesList().at(0)->setBaseGradient(gradient);
-// m_graph->seriesList().at(0)->setSingleHighlightColor(Qt::red);
-// m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
QList<QLinearGradient> gradients;
gradients << gradient;
m_graph->activeTheme()->setBaseGradients(gradients);
- m_graph->activeTheme()->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+ m_graph->activeTheme()->setColorStyle(colorStyle);
+
}
void GraphModifier::changeFont(const QFont &font)
@@ -680,6 +701,16 @@ void GraphModifier::timeout()
m_theSeries->dataProxy()->resetArray(m_planeArray);
}
+void GraphModifier::graphQueryTimeout()
+{
+#ifndef QT_NO_CURSOR
+ m_graph->scene()->setGraphPositionQuery(m_parentWidget->mapFromGlobal(QCursor::pos()));
+ qDebug() << "pos: " << (m_parentWidget->mapFromGlobal(QCursor::pos()));
+#else
+ m_graph->scene()->setGraphPositionQuery(QPoint(100, 100));
+#endif
+}
+
void GraphModifier::handleAxisXChanged(QValue3DAxis *axis)
{
qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisX());
@@ -723,6 +754,8 @@ void GraphModifier::toggleAxisTitleFixed(bool enabled)
void GraphModifier::toggleXAscending(bool enabled)
{
+ m_ascendingX = enabled;
+
// Flip data array contents if necessary
foreach (QSurface3DSeries *series, m_graph->seriesList()) {
QSurfaceDataArray *array = const_cast<QSurfaceDataArray *>(series->dataProxy()->array());
@@ -751,6 +784,8 @@ void GraphModifier::toggleXAscending(bool enabled)
void GraphModifier::toggleZAscending(bool enabled)
{
+ m_ascendingZ = enabled;
+
// Flip data array contents if necessary
foreach (QSurface3DSeries *series, m_graph->seriesList()) {
QSurfaceDataArray *array = const_cast<QSurfaceDataArray *>(series->dataProxy()->array());
@@ -777,6 +812,41 @@ void GraphModifier::toggleZAscending(bool enabled)
}
}
+void GraphModifier::togglePolar(bool enabled)
+{
+ m_graph->setPolar(enabled);
+}
+
+void GraphModifier::setCameraTargetX(int value)
+{
+ // Value is (-100, 100), normalize
+ m_cameraTarget.setX(float(value) / 100.0f);
+ m_graph->scene()->activeCamera()->setTarget(m_cameraTarget);
+ qDebug() << "m_cameraTarget:" << m_cameraTarget;
+}
+
+void GraphModifier::setCameraTargetY(int value)
+{
+ // Value is (-100, 100), normalize
+ m_cameraTarget.setY(float(value) / 100.0f);
+ m_graph->scene()->activeCamera()->setTarget(m_cameraTarget);
+ qDebug() << "m_cameraTarget:" << m_cameraTarget;
+}
+
+void GraphModifier::setCameraTargetZ(int value)
+{
+ // Value is (-100, 100), normalize
+ m_cameraTarget.setZ(float(value) / 100.0f);
+ m_graph->scene()->activeCamera()->setTarget(m_cameraTarget);
+ qDebug() << "m_cameraTarget:" << m_cameraTarget;
+}
+
+void GraphModifier::setGraphMargin(int value)
+{
+ m_graph->setMargin(qreal(value) / 100.0);
+ qDebug() << "Setting margin:" << m_graph->margin() << value;
+}
+
void GraphModifier::resetArrayAndSliders(QSurfaceDataArray *array, float minZ, float maxZ, float minX, float maxX)
{
m_axisMinSliderX->setValue(minX);
@@ -831,7 +901,10 @@ void GraphModifier::changeRow()
int row = rand() % m_zCount;
QSurfaceDataRow *newRow = createMultiRow(row, changeRowSeries, true);
- m_multiseries[changeRowSeries]->dataProxy()->setRow(row, newRow);
+ if (m_ascendingZ)
+ m_multiseries[changeRowSeries]->dataProxy()->setRow(row, newRow);
+ else
+ m_multiseries[changeRowSeries]->dataProxy()->setRow((m_zCount - 1) - row, newRow);
changeRowSeries++;
if (changeRowSeries > 3)
@@ -848,11 +921,20 @@ QSurfaceDataRow *GraphModifier::createMultiRow(int row, int series, bool change)
float i = float(row);
QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount);
float z = float(i) - m_limitZ + 0.5f + m_multiSampleOffsetZ[series];
- for (int j = 0; j < m_xCount; j++) {
- float x = float(j) - m_limitX + 0.5f + m_multiSampleOffsetX[series];
- float angle = (z * x) / float(full) * 1.57f;
- float y = qSin(angle * float(qPow(1.3f, series))) + 0.2f * float(change) + 1.1f *series;
- (*newRow)[j].setPosition(QVector3D(x, y, z));
+ if (m_ascendingX) {
+ for (int j = 0; j < m_xCount; j++) {
+ float x = float(j) - m_limitX + 0.5f + m_multiSampleOffsetX[series];
+ float angle = (z * x) / float(full) * 1.57f;
+ float y = qSin(angle * float(qPow(1.3f, series))) + 0.2f * float(change) + 1.1f *series;
+ (*newRow)[j].setPosition(QVector3D(x, y, z));
+ }
+ } else {
+ for (int j = m_xCount - 1; j >= 0 ; j--) {
+ float x = float(j) - m_limitX + 0.5f + m_multiSampleOffsetX[series];
+ float angle = (z * x) / float(full) * 1.57f;
+ float y = qSin(angle * float(qPow(1.3f, series))) + 0.2f * float(change) + 1.1f *series;
+ (*newRow)[(m_xCount - 1) - j].setPosition(QVector3D(x, y, z));
+ }
}
return newRow;
@@ -961,7 +1043,16 @@ void GraphModifier::changeItem()
float angle = (z * x) / float(full) * 1.57f;
float y = qSin(angle * float(qPow(1.3f, changeItemSeries))) + 0.2f + 1.1f *changeItemSeries;
QSurfaceDataItem newItem(QVector3D(x, y, z));
- m_multiseries[changeItemSeries]->dataProxy()->setItem(int(i), int(j), newItem);
+
+ if (m_ascendingZ && m_ascendingX)
+ m_multiseries[changeItemSeries]->dataProxy()->setItem(int(i), int(j), newItem);
+ else if (!m_ascendingZ && m_ascendingX)
+ m_multiseries[changeItemSeries]->dataProxy()->setItem(m_zCount - 1 - int(i), int(j), newItem);
+ else if (m_ascendingZ && !m_ascendingX)
+ m_multiseries[changeItemSeries]->dataProxy()->setItem(int(i), m_xCount - 1 - int(j), newItem);
+ else
+ m_multiseries[changeItemSeries]->dataProxy()->setItem(m_zCount - 1 - int(i), m_xCount - 1 - int(j), newItem);
+ //m_multiseries[changeItemSeries]->setSelectedPoint(QPoint(i, j));
changeItemSeries++;
if (changeItemSeries > 3)
changeItemSeries = 0;
@@ -1228,12 +1319,12 @@ void GraphModifier::resetArray()
void GraphModifier::resetArrayEmpty()
{
- QSurfaceDataArray *emptryArray = new QSurfaceDataArray;
+ QSurfaceDataArray *emptyArray = new QSurfaceDataArray;
#ifdef MULTI_SERIES
int series = rand() % 4;
- m_multiseries[series]->dataProxy()->resetArray(emptryArray);
+ m_multiseries[series]->dataProxy()->resetArray(emptyArray);
#else
- m_theSeries->dataProxy()->resetArray(emptryArray);
+ m_theSeries->dataProxy()->resetArray(emptyArray);
#endif
}
@@ -1569,6 +1660,20 @@ void GraphModifier::updateSamples()
void GraphModifier::setAspectRatio(int ratio)
{
- float aspectRatio = float(ratio) / 10.0f;
+ qreal aspectRatio = qreal(ratio) / 10.0;
m_graph->setAspectRatio(aspectRatio);
}
+
+void GraphModifier::setHorizontalAspectRatio(int ratio)
+{
+ qreal aspectRatio = qreal(ratio) / 100.0;
+ m_graph->setHorizontalAspectRatio(aspectRatio);
+}
+
+void GraphModifier::setSurfaceTexture(bool enabled)
+{
+ if (enabled)
+ m_multiseries[3]->setTexture(QImage(":/maps/mapimage"));
+ else
+ m_multiseries[3]->setTexture(QImage());
+}