From 51d6d0258c8d1fe0608045986792ac5601f8613f Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Mon, 22 Jul 2013 16:51:18 +0300 Subject: Fancy curve example and other stuff. Change-Id: Id090ed0bedb3bec96ab6ba64b9af8205c1998f12 Reviewed-by: Mika Salmela --- examples/surfacechart/chartmodifier.cpp | 65 ++++++++++++++++++++++++++++++++- examples/surfacechart/chartmodifier.h | 12 ++++++ examples/surfacechart/main.cpp | 62 ++++++++++++++++++++++++------- 3 files changed, 125 insertions(+), 14 deletions(-) (limited to 'examples/surfacechart') diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp index 0c1980ab..a78b2d2e 100644 --- a/examples/surfacechart/chartmodifier.cpp +++ b/examples/surfacechart/chartmodifier.cpp @@ -40,12 +40,16 @@ #include "chartmodifier.h" +#include + #include QT_DATAVIS3D_USE_NAMESPACE ChartModifier::ChartModifier(Q3DSurface *chart) - : m_chart(chart) + : m_chart(chart), + m_xCount(10), + m_zCount(10) { } @@ -65,3 +69,62 @@ void ChartModifier::toggleSurfaceGrid(bool enable) qDebug() << "ChartModifier::toggleSurfaceGrid" << enable; m_chart->setSurfaceGrid(enable); } + +void ChartModifier::toggleSqrtSin(bool enable) +{ + qreal biggest = -9999.0; + qreal smallest = 9999.0; + QList series; + + if (enable) { + qDebug() << "Create Sqrt&Sin surface, (" << m_xCount << ", " << m_zCount << ")"; + + qreal stepZ = 16.0 / qreal(m_zCount); + qreal stepX = 16.0 / qreal(m_xCount); + + for (qreal i = -8.0 + stepZ / 2.0 ; i < 8.0 ; i += stepZ) { + 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 + 1.0; + series << y; + if (y > biggest) biggest = y; + if (y < smallest) smallest = y; + } + } + + m_chart->setTickCount(4, 0.5f); + m_chart->appendSeries(series, m_xCount, m_zCount); + + qDebug() << "biggest = " << biggest << ", smallest = " << smallest; + } else { + qDebug() << "Remove surface"; + } +} + +void ChartModifier::toggleGridSliderLock(bool enable) +{ + m_gridSlidersLocked = enable; + if (m_gridSlidersLocked) { + m_gridSliderZ->setEnabled(false); + m_gridSliderZ->setValue(m_gridSliderX->value()); + } else { + m_gridSliderZ->setEnabled(true); + } +} + +void ChartModifier::adjustXCount(int count) +{ + m_xCount = count; + if (m_gridSlidersLocked) + m_gridSliderZ->setValue(count); + + qDebug() << "X count = " << count; +} + +void ChartModifier::adjustZCount(int count) +{ + m_zCount = count; + + qDebug() << "Z count = " << count; +} + diff --git a/examples/surfacechart/chartmodifier.h b/examples/surfacechart/chartmodifier.h index e29699d8..8b84efbb 100644 --- a/examples/surfacechart/chartmodifier.h +++ b/examples/surfacechart/chartmodifier.h @@ -42,6 +42,7 @@ #define CHARTMODIFIER_H #include +#include using namespace QtDataVis3D; @@ -54,9 +55,20 @@ public: void toggleSmooth(bool enabled); void toggleSurfaceGrid(bool enable); + void toggleSqrtSin(bool enable); + void toggleGridSliderLock(bool enable); + void setGridSliderX(QSlider *slider) { m_gridSliderX = slider; } + void setGridSliderZ(QSlider *slider) { m_gridSliderZ = slider; } + void adjustXCount(int count); + void adjustZCount(int count); private: Q3DSurface *m_chart; + QSlider *m_gridSliderX; + QSlider *m_gridSliderZ; + bool m_gridSlidersLocked; + int m_xCount; + int m_zCount; }; #endif // CHARTMODIFIER_H diff --git a/examples/surfacechart/main.cpp b/examples/surfacechart/main.cpp index fdfa99a6..474f273b 100644 --- a/examples/surfacechart/main.cpp +++ b/examples/surfacechart/main.cpp @@ -77,10 +77,6 @@ int main(int argc, char *argv[]) hLayout->addWidget(container, 1); hLayout->addLayout(vLayout); - QPushButton *someButton = new QPushButton(widget); - someButton->setText(QStringLiteral("Press me")); - someButton->setEnabled(true); - QCheckBox *smoothCB = new QCheckBox(widget); smoothCB->setText(QStringLiteral("Smooth ")); smoothCB->setChecked(surfaceChart->smoothSurface()); @@ -89,26 +85,66 @@ int main(int argc, char *argv[]) surfaceGridCB->setText(QStringLiteral("Surface Grid")); surfaceGridCB->setChecked(true); + QCheckBox *sqrtSinCB = new QCheckBox(widget); + sqrtSinCB->setText(QStringLiteral("Sqrt & Sin")); + sqrtSinCB->setChecked(false); + + QCheckBox *gridSlidersLockCB = new QCheckBox(widget); + gridSlidersLockCB->setText(QStringLiteral("Lock")); + gridSlidersLockCB->setChecked(false); + + QSlider *gridSliderX = new QSlider(Qt::Horizontal, widget); + gridSliderX->setTickInterval(1); + gridSliderX->setMinimum(2); + gridSliderX->setValue(10); + gridSliderX->setMaximum(200); + gridSliderX->setEnabled(true); + QSlider *gridSliderZ = new QSlider(Qt::Horizontal, widget); + gridSliderZ->setTickInterval(1); + gridSliderZ->setMinimum(2); + gridSliderZ->setValue(10); + gridSliderZ->setMaximum(200); + gridSliderZ->setEnabled(true); + + // Add controls to the layout vLayout->addWidget(smoothCB); vLayout->addWidget(surfaceGridCB); - vLayout->addWidget(someButton); + vLayout->addWidget(new QLabel(QStringLiteral("Select surface"))); + vLayout->addWidget(sqrtSinCB); + vLayout->addWidget(new QLabel(QStringLiteral("Adjust sample count"))); + vLayout->addWidget(gridSlidersLockCB); + vLayout->addWidget(gridSliderX); + vLayout->addWidget(gridSliderZ); widget->show(); ChartModifier *modifier = new ChartModifier(surfaceChart); + // Connect controls to slots on modifier QObject::connect(smoothCB, &QCheckBox::stateChanged, modifier, &ChartModifier::toggleSmooth); QObject::connect(surfaceGridCB, &QCheckBox::stateChanged, modifier, &ChartModifier::toggleSurfaceGrid); - - QList lowList; - lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 15.0; - lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0; - lowList << 105.0 << 170.0 << 215.0 << 240.0 << 245.0 << 240.0 << 215.0 << 170.0 << 105.0; - lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0; - lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 16.1; + QObject::connect(sqrtSinCB, &QCheckBox::stateChanged, + modifier, &ChartModifier::toggleSqrtSin); + QObject::connect(gridSlidersLockCB, &QCheckBox::stateChanged, + modifier, &ChartModifier::toggleGridSliderLock); + QObject::connect(gridSliderX, &QSlider::valueChanged, + modifier, &ChartModifier::adjustXCount); + QObject::connect(gridSliderZ, &QSlider::valueChanged, + modifier, &ChartModifier::adjustZCount); + + modifier->setGridSliderZ(gridSliderZ); + modifier->setGridSliderX(gridSliderX); + modifier->toggleGridSliderLock(gridSlidersLockCB->checkState()); + +// QList lowList; +// lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 15.0; +// lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0; +// lowList << 105.0 << 170.0 << 215.0 << 240.0 << 245.0 << 240.0 << 215.0 << 170.0 << 105.0; +// lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0; +// lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 16.1; // lowList << 15.0 << 65.0 << 105.0 << 65.0 << 15.0; // lowList << 35.0 << 105.0 << 170.0 << 105.0 << 35; @@ -120,7 +156,7 @@ int main(int argc, char *argv[]) // lowList << 35.0 << 105.0 << 170.0 << 105.0 << 35.0; // lowList << 15.0 << 65.0 << 105.0 << 65.0 << 16.1; - surfaceChart->appendSeries(lowList); +// surfaceChart->appendSeries(lowList, 9, 5); // QList topList; // topList << 2.1 << 2.2; -- cgit v1.2.3