summaryrefslogtreecommitdiffstats
path: root/examples/surfacechart
diff options
context:
space:
mode:
Diffstat (limited to 'examples/surfacechart')
-rw-r--r--examples/surfacechart/chartmodifier.cpp126
-rw-r--r--examples/surfacechart/chartmodifier.h53
-rw-r--r--examples/surfacechart/main.cpp171
-rw-r--r--examples/surfacechart/surfacechart.pro11
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