summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-10-03 16:47:44 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-10-06 11:34:27 +0300
commit90ac955006749ecf6ea021bc7cf736a6c21095af (patch)
tree690bf1af7e0bce7287ab2b240b857a66dbd33742 /tests
parent2788e9f7412fa650f41b25fad1f4b02efb0e5e89 (diff)
Fix surface normals on ascending/descending
Normals and triangles are generated according to data direction. Task-number: QTRD-3160 Change-Id: Ia4286467682628930da3d82b204fd1ec078a396a Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com> Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/surfacetest/graphmodifier.cpp43
-rw-r--r--tests/surfacetest/graphmodifier.h2
2 files changed, 37 insertions, 8 deletions
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index 2d0e9357..5d8183b0 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -67,7 +67,9 @@ GraphModifier::GraphModifier(Q3DSurface *graph, QWidget *parentWidget)
m_drawMode3(QSurface3DSeries::DrawSurfaceAndWireframe),
m_drawMode4(QSurface3DSeries::DrawSurfaceAndWireframe),
m_offset(4.0f),
- m_parentWidget(parentWidget)
+ m_parentWidget(parentWidget),
+ m_ascendingX(true),
+ m_ascendingZ(true)
{
m_graph->setAxisX(new QValue3DAxis);
m_graph->axisX()->setTitle("X-Axis");
@@ -753,6 +755,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());
@@ -781,6 +785,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());
@@ -896,7 +902,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)
@@ -913,11 +922,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;
@@ -1026,7 +1044,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;
diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h
index f85fbc15..223a6854 100644
--- a/tests/surfacetest/graphmodifier.h
+++ b/tests/surfacetest/graphmodifier.h
@@ -194,6 +194,8 @@ private:
QVector3D m_cameraTarget;
QWidget *m_parentWidget;
QTimer m_graphPositionQueryTimer;
+ bool m_ascendingX;
+ bool m_ascendingZ;
};
#endif