summaryrefslogtreecommitdiffstats
path: root/examples/scatterchart
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-14 12:15:48 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-14 12:38:50 +0300
commit31714127f9ad60bd3f0fc4ea29531f759503241d (patch)
tree03842f0d6e39af167d8f569fb39dff4666552d24 /examples/scatterchart
parent36a1a28f4adf3b7a937d7d5501511adffec398ab (diff)
Add missing methods to scatter proxy api
+ remove data mutex Change-Id: Ie0f150d3ecb51076a998c2bdc2ba6fec46941793 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'examples/scatterchart')
-rw-r--r--examples/scatterchart/main.cpp62
-rw-r--r--examples/scatterchart/scatterchart.cpp139
-rw-r--r--examples/scatterchart/scatterchart.h15
3 files changed, 211 insertions, 5 deletions
diff --git a/examples/scatterchart/main.cpp b/examples/scatterchart/main.cpp
index b7c5d5f2..ab6eb313 100644
--- a/examples/scatterchart/main.cpp
+++ b/examples/scatterchart/main.cpp
@@ -60,11 +60,41 @@ int main(int argc, char **argv)
labelButton->setText(QStringLiteral("Change label style"));
QPushButton *styleButton = new QPushButton(widget);
- styleButton->setText(QStringLiteral("Change bar style"));
+ styleButton->setText(QStringLiteral("Change item style"));
QPushButton *cameraButton = new QPushButton(widget);
cameraButton->setText(QStringLiteral("Change camera preset"));
+ QPushButton *clearButton = new QPushButton(widget);
+ clearButton->setText(QStringLiteral("Clear chart"));
+
+ QPushButton *addOneButton = new QPushButton(widget);
+ addOneButton->setText(QStringLiteral("Add item"));
+
+ QPushButton *addBunchButton = new QPushButton(widget);
+ addBunchButton->setText(QStringLiteral("Add bunch of items"));
+
+ QPushButton *insertOneButton = new QPushButton(widget);
+ insertOneButton->setText(QStringLiteral("Insert item"));
+
+ QPushButton *insertBunchButton = new QPushButton(widget);
+ insertBunchButton->setText(QStringLiteral("Insert bunch of items"));
+
+ QPushButton *changeOneButton = new QPushButton(widget);
+ changeOneButton->setText(QStringLiteral("Change item"));
+
+ QPushButton *changeBunchButton = new QPushButton(widget);
+ changeBunchButton->setText(QStringLiteral("Change bunch of items"));
+
+ QPushButton *removeOneButton = new QPushButton(widget);
+ removeOneButton->setText(QStringLiteral("Remove item"));
+
+ QPushButton *removeBunchButton = new QPushButton(widget);
+ removeBunchButton->setText(QStringLiteral("Remove bunch of items"));
+
+ QPushButton *startTimerButton = new QPushButton(widget);
+ startTimerButton->setText(QStringLiteral("Start/stop timer"));
+
QCheckBox *backgroundCheckBox = new QCheckBox(widget);
backgroundCheckBox->setText(QStringLiteral("Show background"));
backgroundCheckBox->setChecked(true);
@@ -92,6 +122,16 @@ int main(int argc, char **argv)
vLayout->addWidget(labelButton, 0, Qt::AlignTop);
vLayout->addWidget(styleButton, 0, Qt::AlignTop);
vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
+ vLayout->addWidget(clearButton, 0, Qt::AlignTop);
+ vLayout->addWidget(addOneButton, 0, Qt::AlignTop);
+ vLayout->addWidget(addBunchButton, 0, Qt::AlignTop);
+ vLayout->addWidget(insertOneButton, 0, Qt::AlignTop);
+ vLayout->addWidget(insertBunchButton, 0, Qt::AlignTop);
+ vLayout->addWidget(changeOneButton, 0, Qt::AlignTop);
+ vLayout->addWidget(changeBunchButton, 0, Qt::AlignTop);
+ vLayout->addWidget(removeOneButton, 0, Qt::AlignTop);
+ vLayout->addWidget(removeBunchButton, 0, Qt::AlignTop);
+ vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
vLayout->addWidget(gridCheckBox);
vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
@@ -112,6 +152,26 @@ int main(int argc, char **argv)
&ScatterDataModifier::changeStyle);
QObject::connect(cameraButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::changePresetCamera);
+ QObject::connect(clearButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::clear);
+ QObject::connect(addOneButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::addOne);
+ QObject::connect(addBunchButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::addBunch);
+ QObject::connect(insertOneButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::insertOne);
+ QObject::connect(insertBunchButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::insertBunch);
+ QObject::connect(changeOneButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::changeOne);
+ QObject::connect(changeBunchButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::changeBunch);
+ QObject::connect(removeOneButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::removeOne);
+ QObject::connect(removeBunchButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::removeBunch);
+ QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::startStopTimer);
QObject::connect(themeButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::changeTheme);
QObject::connect(labelButton, &QPushButton::clicked, modifier,
diff --git a/examples/scatterchart/scatterchart.cpp b/examples/scatterchart/scatterchart.cpp
index d8aa23b1..67efdb93 100644
--- a/examples/scatterchart/scatterchart.cpp
+++ b/examples/scatterchart/scatterchart.cpp
@@ -37,6 +37,8 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
QScatterDataProxy *proxy = new QScatterDataProxy;
m_chart->setDataProxy(proxy);
+
+ connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout);
}
ScatterDataModifier::~ScatterDataModifier()
@@ -55,6 +57,9 @@ void ScatterDataModifier::addData()
m_chart->valueAxisX()->setTitle("Somethings");
m_chart->valueAxisY()->setTitle("Values");
m_chart->valueAxisZ()->setTitle("Others");
+ m_chart->valueAxisX()->setRange(-50.0, 50.0);
+ m_chart->valueAxisY()->setRange(-1.0, 1.0);
+ m_chart->valueAxisZ()->setRange(-50.0, 50.0);
QScatterDataArray *dataArray = new QScatterDataArray;
dataArray->resize(numberOfItems);
@@ -62,10 +67,7 @@ void ScatterDataModifier::addData()
#if RANDOM_SCATTER
for (int i = 0; i < numberOfItems; i++) {
- ptrToDataArray->setPosition(
- QVector3D((qreal)(rand() % 100) / 100.0 - (qreal)(rand() % 100) / 100.0,
- (qreal)(rand() % 100) / 100.0 - (qreal)(rand() % 100) / 100.0,
- (qreal)(rand() % 100) / 100.0 - (qreal)(rand() % 100) / 100.0));
+ ptrToDataArray->setPosition(randVector());
ptrToDataArray++;
}
#else
@@ -165,6 +167,127 @@ void ScatterDataModifier::shadowQualityUpdatedByVisual(ShadowQuality sq)
emit shadowQualityChanged(quality);
}
+void ScatterDataModifier::clear()
+{
+ m_chart->dataProxy()->resetArray(0);
+ qDebug() << m_loopCounter << "Cleared array";
+}
+
+void ScatterDataModifier::addOne()
+{
+ QScatterDataItem item(randVector());
+ int addIndex = m_chart->dataProxy()->addItem(item);
+ qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::addBunch()
+{
+ QScatterDataArray items(100);
+ for (int i = 0; i < items.size(); i++)
+ items[i].setPosition(randVector());
+ int addIndex = m_chart->dataProxy()->addItems(items);
+ qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::insertOne()
+{
+ QScatterDataItem item(randVector());
+ m_chart->dataProxy()->insertItem(0, item);
+ qDebug() << m_loopCounter << "Inserted one, array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::insertBunch()
+{
+ QScatterDataArray items(100);
+ for (int i = 0; i < items.size(); i++)
+ items[i].setPosition(randVector());
+ m_chart->dataProxy()->insertItems(0, items);
+ qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::changeOne()
+{
+ if (m_chart->dataProxy()->array()->size()) {
+ QScatterDataItem item(randVector());
+ m_chart->dataProxy()->setItem(0, item);
+ qDebug() << m_loopCounter << "Changed one, array size:" << m_chart->dataProxy()->array()->size();
+ }
+}
+
+void ScatterDataModifier::changeBunch()
+{
+ if (m_chart->dataProxy()->array()->size()) {
+ int amount = qMin(m_chart->dataProxy()->array()->size(), 100);
+ QScatterDataArray items(amount);
+ for (int i = 0; i < items.size(); i++)
+ items[i].setPosition(randVector());
+ m_chart->dataProxy()->setItems(0, items);
+ qDebug() << m_loopCounter << "Changed bunch, array size:" << m_chart->dataProxy()->array()->size();
+ }
+}
+
+void ScatterDataModifier::removeOne()
+{
+ m_chart->dataProxy()->removeItems(0, 1);
+ qDebug() << m_loopCounter << "Removed one, array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::removeBunch()
+{
+ m_chart->dataProxy()->removeItems(0, 100);
+ qDebug() << m_loopCounter << "Removed bunch, array size:" << m_chart->dataProxy()->array()->size();
+}
+
+void ScatterDataModifier::timeout()
+{
+ int doWhat = rand() % 8;
+ if (!(rand() % 100))
+ doWhat = -1;
+
+ switch (doWhat) {
+ case 0:
+ addOne();
+ break;
+ case 1:
+ addBunch();
+ break;
+ case 2:
+ insertOne();
+ break;
+ case 3:
+ insertBunch();
+ break;
+ case 4:
+ changeOne();
+ break;
+ case 5:
+ changeBunch();
+ break;
+ case 6:
+ removeOne();
+ break;
+ case 7:
+ removeBunch();
+ break;
+ default:
+ clear();
+ break;
+ }
+
+ m_loopCounter++;
+}
+
+void ScatterDataModifier::startStopTimer()
+{
+ if (m_timer.isActive()) {
+ m_timer.stop();
+ } else {
+ clear();
+ m_loopCounter = 0;
+ m_timer.start(0);
+ }
+}
+
void ScatterDataModifier::changeShadowQuality(int quality)
{
ShadowQuality sq = ShadowNone;
@@ -192,3 +315,11 @@ void ScatterDataModifier::setGridEnabled(int enabled)
{
m_chart->setGridVisible((bool)enabled);
}
+
+QVector3D ScatterDataModifier::randVector()
+{
+ return QVector3D(
+ (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f,
+ (float)(rand() % 100) / 100.0f - (float)(rand() % 100) / 100.0f,
+ (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f);
+}
diff --git a/examples/scatterchart/scatterchart.h b/examples/scatterchart/scatterchart.h
index a177b153..ee9f7760 100644
--- a/examples/scatterchart/scatterchart.h
+++ b/examples/scatterchart/scatterchart.h
@@ -23,6 +23,7 @@
#include <QFont>
#include <QDebug>
+#include <QTimer>
using namespace QtDataVis3D;
@@ -47,13 +48,27 @@ public:
public slots:
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(ShadowQuality shadowQuality);
+ void clear();
+ void addOne();
+ void addBunch();
+ void insertOne();
+ void insertBunch();
+ void changeOne();
+ void changeBunch();
+ void removeOne();
+ void removeBunch();
+ void timeout();
+ void startStopTimer();
signals:
void shadowQualityChanged(int quality);
private:
+ QVector3D randVector();
Q3DScatter *m_chart;
int m_fontSize;
+ QTimer m_timer;
+ int m_loopCounter;
};
#endif