diff options
Diffstat (limited to 'examples/surfacechart')
-rw-r--r-- | examples/surfacechart/chartmodifier.cpp | 126 | ||||
-rw-r--r-- | examples/surfacechart/chartmodifier.h | 53 | ||||
-rw-r--r-- | examples/surfacechart/main.cpp | 171 | ||||
-rw-r--r-- | examples/surfacechart/surfacechart.pro | 11 |
4 files changed, 361 insertions, 0 deletions
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp new file mode 100644 index 00000000..b685a680 --- /dev/null +++ b/examples/surfacechart/chartmodifier.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVis3D module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "chartmodifier.h" + +#include <qmath.h> + +#include <QDebug> + +QT_DATAVIS3D_USE_NAMESPACE + +ChartModifier::ChartModifier(Q3DSurface *chart) + : m_chart(chart), + m_xCount(10), + m_zCount(10) +{ +} + +ChartModifier::~ChartModifier() +{ + delete m_chart; +} + +void ChartModifier::toggleSmooth(bool enabled) +{ + qDebug() << "ChartModifier::toggleSmooth " << enabled; + m_chart->setSmoothSurface(enabled); +} + +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<qreal> 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 + 0.24) * 1.61; + series << y; + if (y > biggest) biggest = y; + if (y < smallest) smallest = y; + } + } + + m_chart->setSegmentCount(4, 0.5f); + m_chart->appendSeries(series, m_xCount, m_zCount); + + qDebug() << "biggest = " << biggest << ", smallest = " << smallest; + } else { + qDebug() << "Remove surface"; + } +} + +void ChartModifier::togglePlane(bool enable) +{ + qDebug() << "ChartModifier::togglePlane " << enable; + if (enable) { + QList<qreal> series; + + qreal y = 2.0 / qreal(m_zCount - 1); + for (int i = 0; i < m_zCount; i++) { + for (int j = 0; j < m_xCount; j++) { + series << i * y; + } + } + + m_chart->setSegmentCount(4, 0.5f); + m_chart->appendSeries(series, m_xCount, m_zCount); + } +} + +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 new file mode 100644 index 00000000..3ab2d179 --- /dev/null +++ b/examples/surfacechart/chartmodifier.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVis3D module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef CHARTMODIFIER_H +#define CHARTMODIFIER_H + +#include <QtDataVis3D/Q3DSurface> +#include <QSlider> + +using namespace QtDataVis3D; + +class ChartModifier : public QObject +{ + Q_OBJECT +public: + explicit ChartModifier(Q3DSurface *chart); + ~ChartModifier(); + + void toggleSmooth(bool enabled); + void toggleSurfaceGrid(bool enable); + void toggleSqrtSin(bool enable); + void togglePlane(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 new file mode 100644 index 00000000..1297d92b --- /dev/null +++ b/examples/surfacechart/main.cpp @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVis3D module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "chartmodifier.h" + +#include <QApplication> +#include <QApplication> +#include <QWidget> +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QPushButton> +#include <QCheckBox> +#include <QSlider> +#include <QLabel> +#include <QScreen> +#include <QPainter> +#include <QDebug> + +using namespace QtDataVis3D; + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QWidget *widget = new QWidget; + QHBoxLayout *hLayout = new QHBoxLayout(widget); + QVBoxLayout *vLayout = new QVBoxLayout(); + vLayout->setAlignment(Qt::AlignTop); + + Q3DSurface *surfaceChart = new Q3DSurface(); + QSize screenSize = surfaceChart->screen()->size(); + + QWidget *container = QWidget::createWindowContainer(surfaceChart); + container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2)); + container->setMaximumSize(screenSize); + container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + container->setFocusPolicy(Qt::StrongFocus); + + widget->setWindowTitle(QStringLiteral("Surface tester")); + + hLayout->addWidget(container, 1); + hLayout->addLayout(vLayout); + + QCheckBox *smoothCB = new QCheckBox(widget); + smoothCB->setText(QStringLiteral("Smooth ")); + smoothCB->setChecked(surfaceChart->smoothSurface()); + + QCheckBox *surfaceGridCB = new QCheckBox(widget); + surfaceGridCB->setText(QStringLiteral("Surface Grid")); + surfaceGridCB->setChecked(true); + + QCheckBox *sqrtSinCB = new QCheckBox(widget); + sqrtSinCB->setText(QStringLiteral("Sqrt & Sin")); + sqrtSinCB->setChecked(false); + + QCheckBox *planeCB = new QCheckBox(widget); + planeCB->setText(QStringLiteral("Plane")); + planeCB->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); + + QLinearGradient gr(0, 0, 100, 1); + gr.setColorAt(0.0, Qt::green); + gr.setColorAt(0.5, Qt::yellow); + gr.setColorAt(1.0, Qt::red); + QPixmap pm(100, 24); + QPainter pmp(&pm); + pmp.setBrush(QBrush(gr)); + pmp.setPen(Qt::NoPen); + pmp.drawRect(0, 0, 100, 24); + //pm.save("C:\\Users\\misalmel\\Work\\test.png", "png"); + QPushButton *color = new QPushButton(); + color->setIcon(QIcon(pm)); + color->setIconSize(QSize(100, 24)); + color->setFlat(true); + + // Add controls to the layout + vLayout->addWidget(smoothCB); + vLayout->addWidget(surfaceGridCB); + vLayout->addWidget(new QLabel(QStringLiteral("Select surface sample"))); + vLayout->addWidget(sqrtSinCB); + vLayout->addWidget(planeCB); + vLayout->addWidget(new QLabel(QStringLiteral("Adjust sample count"))); + vLayout->addWidget(gridSlidersLockCB); + vLayout->addWidget(gridSliderX); + vLayout->addWidget(gridSliderZ); + vLayout->addWidget(color); + + 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); + QObject::connect(sqrtSinCB, &QCheckBox::stateChanged, + modifier, &ChartModifier::toggleSqrtSin); + QObject::connect(planeCB, &QCheckBox::stateChanged, + modifier, &ChartModifier::togglePlane); + 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<qreal> 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; +// lowList << 55.0 << 135.0 << 215.0 << 135.0 << 55; +// lowList << 75.0 << 155.0 << 240.0 << 155.0 << 75; +// lowList << 80.0 << 190.0 << 245.0 << 190.0 << 80; +// lowList << 75.0 << 155.0 << 240.0 << 155.0 << 75.0; +// lowList << 55.0 << 135.0 << 215.0 << 135.0 << 55; +// 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, 9, 5); + +// QList<qreal> topList; +// topList << 2.1 << 2.2; +// surfaceChart.appendSeries(topList); + +// surfaceChart.resize(screenSize.width() / 1.5, screenSize.height() / 1.5); +// surfaceChart.setPosition(screenSize.width() / 6, screenSize.height() / 6); +// surfaceChart.show(); + + return app.exec(); +} diff --git a/examples/surfacechart/surfacechart.pro b/examples/surfacechart/surfacechart.pro new file mode 100644 index 00000000..79fd967d --- /dev/null +++ b/examples/surfacechart/surfacechart.pro @@ -0,0 +1,11 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp \ + chartmodifier.cpp + +INSTALLS += target + +HEADERS += \ + chartmodifier.h |