diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-12-04 10:56:39 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-12-04 11:03:12 +0200 |
commit | 78d4deb0be21f22d74e3e01315686857ef8edf2e (patch) | |
tree | ed8c21056f913a7faadf27bd6d5a92ca2a168ee0 /tests/surfacetest/graphmodifier.cpp | |
parent | 01407a145ceb172727a27254108f9728a9537a3c (diff) |
Better proxy API for surface
Part 3, add, insert and remove row(s).
Change-Id: I4e30d7f129576bebce9216d5cc00a66b2f8af6cd
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'tests/surfacetest/graphmodifier.cpp')
-rw-r--r-- | tests/surfacetest/graphmodifier.cpp | 135 |
1 files changed, 133 insertions, 2 deletions
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index 11e651a3..3bf90981 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -48,6 +48,9 @@ GraphModifier::GraphModifier(Q3DSurface *graph) m_rangeZ(16.0), m_minX(-8.0), m_minZ(-8.0), + m_addRowCounter(m_zCount), + m_insertTestZPos(0), + m_insertTestIndexPos(1), m_planeArray(0), m_theSeries(new QSurface3DSeries) { @@ -410,9 +413,9 @@ void GraphModifier::changeRow() float i = float(rand() % m_zCount); QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); + float z = qMin(maxZ, (i * stepZ + minZ)); for (float j = 0; j < m_xCount; j++) { float x = qMin(maxX, (j * stepX + minX)); - float z = qMin(maxZ, (i * stepZ + minZ)); float R = qSqrt(x * x + z * z) + 0.01f; float y = (qSin(R) / R + 0.24f) * 1.61f + 1.2f; (*newRow)[j].setPosition(QVector3D(x, y, z)); @@ -494,6 +497,135 @@ void GraphModifier::changeMultipleItem() changeItem(); } +void GraphModifier::addRow() +{ + if (m_activeSample == GraphModifier::SqrtSin) { + qDebug() << "Adding a new row"; + + float minX = -10.0f; + float maxX = 10.0f; + float minZ = -10.0f; + float maxZ = 10.0f; + float stepX = (maxX - minX) / float(m_xCount - 1); + float stepZ = (maxZ - minZ) / float(m_zCount - 1); + + QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); + float z = float(m_addRowCounter) * stepZ + minZ; + for (float j = 0; j < m_xCount; j++) { + float x = qMin(maxX, (j * stepX + minX)); + float R = qSqrt(x * x + z * z) + 0.01f; + float y = (qSin(R) / R + 0.24f) * 1.61f + 1.0f; + (*newRow)[j].setPosition(QVector3D(x, y, z)); + } + m_addRowCounter++; + + m_theSeries->dataProxy()->addRow(newRow); + } else { + qDebug() << "Change row function active only for SqrtSin"; + } +} + +void GraphModifier::addRows() +{ + if (m_activeSample == GraphModifier::SqrtSin) { + qDebug() << "Adding few new row"; + + float minX = -10.0f; + float maxX = 10.0f; + float minZ = -10.0f; + float maxZ = 10.0f; + float stepX = (maxX - minX) / float(m_xCount - 1); + float stepZ = (maxZ - minZ) / float(m_zCount - 1); + + QSurfaceDataArray dataArray; + + for (int i = 0; i < 3; i++) { + QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); + float z = m_addRowCounter * stepZ + minZ; + for (float j = 0; j < m_xCount; j++) { + float x = qMin(maxX, (j * stepX + minX)); + float R = qSqrt(x * x + z * z) + 0.01f; + float y = (qSin(R) / R + 0.24f) * 1.61f + 1.0f; + (*newRow)[j].setPosition(QVector3D(x, y, z)); + } + dataArray.append(newRow); + m_addRowCounter++; + } + + m_theSeries->dataProxy()->addRows(dataArray); + } else { + qDebug() << "Change row function active only for SqrtSin"; + } +} + +void GraphModifier::insertRow() +{ + if (m_activeSample == GraphModifier::SqrtSin) { + qDebug() << "Inserting a row"; + float minX = -10.0f; + float maxX = 10.0f; + float minZ = -10.0f; + float maxZ = 10.0f; + float stepX = (maxX - minX) / float(m_xCount - 1); + float stepZ = (maxZ - minZ) / float(m_zCount - 1); + + QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); + float z = qMin(maxZ, (float(m_insertTestZPos) * stepZ + minZ + (stepZ / 2.0f))); + for (float j = 0; j < m_xCount; j++) { + float x = qMin(maxX, (j * stepX + minX)); + float R = qSqrt(x * x + z * z) + 0.01f; + float y = (qSin(R) / R + 0.24f) * 1.61f + 1.3f; + (*newRow)[j].setPosition(QVector3D(x, y, z)); + } + m_insertTestZPos++; + + m_theSeries->dataProxy()->insertRow(m_insertTestIndexPos, newRow); + m_insertTestIndexPos += 2; + } else { + qDebug() << "Change row function active only for SqrtSin"; + } +} + +void GraphModifier::insertRows() +{ + if (m_activeSample == GraphModifier::SqrtSin) { + qDebug() << "Inserting 3 rows"; + float minX = -10.0f; + float maxX = 10.0f; + float minZ = -10.0f; + float maxZ = 10.0f; + float stepX = (maxX - minX) / float(m_xCount - 1); + float stepZ = (maxZ - minZ) / float(m_zCount - 1); + + QSurfaceDataArray dataArray; + for (int i = 0; i < 3; i++) { + QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); + float z = qMin(maxZ, (float(m_insertTestZPos) * stepZ + minZ + i * (stepZ / 4.0f))); + for (float j = 0; j < m_xCount; j++) { + float x = qMin(maxX, (j * stepX + minX)); + float R = qSqrt(x * x + z * z) + 0.01f; + float y = (qSin(R) / R + 0.24f) * 1.61f + 1.3f; + (*newRow)[j].setPosition(QVector3D(x, y, z)); + } + dataArray.append(newRow); + } + m_insertTestZPos++; + + m_theSeries->dataProxy()->insertRows(m_insertTestIndexPos, dataArray); + m_insertTestIndexPos += 4; + } else { + qDebug() << "Change row function active only for SqrtSin"; + } +} + +void GraphModifier::removeRow() +{ + qDebug() << "Remove an arbitrary row"; + int row = rand() % m_zCount; + m_theSeries->dataProxy()->removeRows(row, 1); + m_zCount--; +} + void GraphModifier::changeMesh() { static int model = 0; @@ -559,4 +691,3 @@ void GraphModifier::updateSamples() break; } } - |