From 71b501d31ae7c5d3aab987b54acccecce1136896 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 24 Jan 2014 13:45:18 +0200 Subject: Added series rotation and bar item rotation support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTRD-2654 Change-Id: I864d33bc173b35b8680eddb402bdf1817ecb031f Reviewed-by: Tomi Korpipää --- tests/barstest/chart.cpp | 38 ++++++++++++++++++++++++++++++- tests/barstest/chart.h | 4 ++++ tests/barstest/main.cpp | 7 ++++++ tests/directional/main.cpp | 6 +++++ tests/directional/scatterdatamodifier.cpp | 29 +++++++++++++++++++++++ tests/directional/scatterdatamodifier.h | 4 ++++ 6 files changed, 87 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index 6b0345ad..187f4886 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -47,6 +47,7 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_minval(-16.0f), m_maxval(20.0f), m_selectedBar(-1, -1), + m_selectedSeries(0), m_autoAdjustingAxis(new QValue3DAxis), m_fixedRangeAxis(new QValue3DAxis), m_temperatureAxis(new QValue3DAxis), @@ -229,6 +230,8 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) QObject::connect(&m_selectionTimer, &QTimer::timeout, this, &GraphModifier::triggerSelection); + QObject::connect(&m_rotationTimer, &QTimer::timeout, this, + &GraphModifier::triggerRotation); resetTemperatureData(); } @@ -702,11 +705,17 @@ void GraphModifier::handleSelectionChange(const QPoint &position) m_selectedBar = position; int index = 0; foreach (QBar3DSeries *series, m_graph->seriesList()) { - if (series == sender()) + if (series == sender()) { + if (series->selectedBar() != QBar3DSeries::invalidSelectionPosition()) + m_selectedSeries = series; break; + } index++; } + if (m_selectedSeries->selectedBar() == QBar3DSeries::invalidSelectionPosition()) + m_selectedSeries = 0; + qDebug() << "Selected bar position:" << position << "series:" << index; } @@ -1027,6 +1036,14 @@ void GraphModifier::insertRemoveTestToggle() } } +void GraphModifier::toggleRotation() +{ + if (m_rotationTimer.isActive()) + m_rotationTimer.stop(); + else + m_rotationTimer.start(20); +} + void GraphModifier::insertRemoveTimerTimeout() { if (m_insertRemoveStep < 32) { @@ -1066,6 +1083,25 @@ void GraphModifier::triggerSelection() m_graph->scene()->setSelectionQueryPosition(m_customInputHandler->inputPosition()); } +void GraphModifier::triggerRotation() +{ + if (m_selectedSeries) { + QPoint selectedBar = m_selectedSeries->selectedBar(); + if (selectedBar != QBar3DSeries::invalidSelectionPosition()) { + QBarDataItem item(*(m_selectedSeries->dataProxy()->itemAt(selectedBar.x(), selectedBar.y()))); + item.setRotation(item.rotation() + 1.0f); + m_selectedSeries->dataProxy()->setItem(selectedBar.x(), selectedBar.y(), item); + } + } else { + // Rotate the first series instead + static float seriesAngle = 0.0f; + if (m_graph->seriesList().size()) { + QQuaternion rotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, seriesAngle++); + m_graph->seriesList().at(0)->setMeshRotation(rotation); + } + } +} + void GraphModifier::setBackgroundEnabled(int enabled) { m_graph->activeTheme()->setBackgroundEnabled(bool(enabled)); diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h index 8e3271cc..c9d2ca9e 100644 --- a/tests/barstest/chart.h +++ b/tests/barstest/chart.h @@ -84,6 +84,7 @@ public: QBarDataArray *makeDummyData(); void primarySeriesTest(); void insertRemoveTestToggle(); + void toggleRotation(); public slots: void flipViews(); @@ -101,6 +102,7 @@ public slots: void insertRemoveTimerTimeout(); void triggerSelection(); + void triggerRotation(); signals: void shadowQualityChanged(int quality); @@ -123,6 +125,7 @@ private: QStringList m_months; QStringList m_years; QPoint m_selectedBar; + QBar3DSeries *m_selectedSeries; QValue3DAxis *m_autoAdjustingAxis; QValue3DAxis *m_fixedRangeAxis; QValue3DAxis *m_temperatureAxis; @@ -148,6 +151,7 @@ private: int m_insertRemoveStep; QAbstract3DInputHandler *m_customInputHandler; QTimer m_selectionTimer; + QTimer m_rotationTimer; }; #endif diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index 52d79468..a57d4aca 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -161,6 +161,10 @@ int main(int argc, char **argv) primarySeriesTestsButton->setText(QStringLiteral("Test primary series")); primarySeriesTestsButton->setEnabled(true); + QPushButton *toggleRotationButton = new QPushButton(widget); + toggleRotationButton->setText(QStringLiteral("Toggle rotation")); + toggleRotationButton->setEnabled(true); + QColorDialog *colorDialog = new QColorDialog(widget); QLinearGradient grBtoY(0, 0, 100, 0); @@ -308,6 +312,7 @@ int main(int argc, char **argv) vLayout->addWidget(changeColorStyleButton, 0, Qt::AlignTop); vLayout->addWidget(ownThemeButton, 0, Qt::AlignTop); vLayout->addWidget(primarySeriesTestsButton, 0, Qt::AlignTop); + vLayout->addWidget(toggleRotationButton, 0, Qt::AlignTop); vLayout->addWidget(gradientBtoYPB, 1, Qt::AlignTop); vLayout2->addWidget(staticCheckBox, 0, Qt::AlignTop); @@ -411,6 +416,8 @@ int main(int argc, char **argv) &GraphModifier::useOwnTheme); QObject::connect(primarySeriesTestsButton, &QPushButton::clicked, modifier, &GraphModifier::primarySeriesTest); + QObject::connect(toggleRotationButton, &QPushButton::clicked, modifier, + &GraphModifier::toggleRotation); QObject::connect(colorDialog, &QColorDialog::currentColorChanged, modifier, &GraphModifier::changeBaseColor); QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier, diff --git a/tests/directional/main.cpp b/tests/directional/main.cpp index 359868cc..34d2e4a1 100644 --- a/tests/directional/main.cpp +++ b/tests/directional/main.cpp @@ -78,6 +78,9 @@ int main(int argc, char **argv) QPushButton *cameraButton = new QPushButton(widget); cameraButton->setText(QStringLiteral("Change camera preset")); + QPushButton *toggleRotationButton = new QPushButton(widget); + toggleRotationButton->setText(QStringLiteral("Toggle rotation")); + QCheckBox *backgroundCheckBox = new QCheckBox(widget); backgroundCheckBox->setText(QStringLiteral("Show background")); backgroundCheckBox->setChecked(true); @@ -103,6 +106,7 @@ int main(int argc, char **argv) //! [5] vLayout->addWidget(labelButton, 0, Qt::AlignTop); vLayout->addWidget(cameraButton, 0, Qt::AlignTop); + vLayout->addWidget(toggleRotationButton, 0, Qt::AlignTop); vLayout->addWidget(backgroundCheckBox); vLayout->addWidget(gridCheckBox); vLayout->addWidget(new QLabel(QStringLiteral("Change dot style"))); @@ -122,6 +126,8 @@ int main(int argc, char **argv) //! [6] QObject::connect(cameraButton, &QPushButton::clicked, modifier, &ScatterDataModifier::changePresetCamera); + QObject::connect(toggleRotationButton, &QPushButton::clicked, modifier, + &ScatterDataModifier::toggleRotation); QObject::connect(labelButton, &QPushButton::clicked, modifier, &ScatterDataModifier::changeLabelStyle); diff --git a/tests/directional/scatterdatamodifier.cpp b/tests/directional/scatterdatamodifier.cpp index f7089ae4..5da48483 100644 --- a/tests/directional/scatterdatamodifier.cpp +++ b/tests/directional/scatterdatamodifier.cpp @@ -56,6 +56,9 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) series->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"); m_graph->addSeries(series); + QObject::connect(&m_rotationTimer, &QTimer::timeout, this, + &ScatterDataModifier::triggerRotation); + addData(); } @@ -164,6 +167,24 @@ void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQ emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp } +void ScatterDataModifier::triggerRotation() +{ + if (m_graph->seriesList().size()) { + int selectedIndex = m_graph->seriesList().at(0)->selectedItem(); + if (selectedIndex != QScatter3DSeries::invalidSelectionIndex()) { + static float itemAngle = 0.0f; + QScatterDataItem item(*(m_graph->seriesList().at(0)->dataProxy()->itemAt(selectedIndex))); + QQuaternion itemRotation = QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, itemAngle++); + item.setRotation(itemRotation); + m_graph->seriesList().at(0)->dataProxy()->setItem(selectedIndex, item); + } else { + static float seriesAngle = 0.0f; + QQuaternion rotation = QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 1.0f, seriesAngle++); + m_graph->seriesList().at(0)->setMeshRotation(rotation); + } + } +} + void ScatterDataModifier::changeShadowQuality(int quality) { QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); @@ -179,3 +200,11 @@ void ScatterDataModifier::setGridEnabled(int enabled) { m_graph->activeTheme()->setGridEnabled((bool)enabled); } + +void ScatterDataModifier::toggleRotation() +{ + if (m_rotationTimer.isActive()) + m_rotationTimer.stop(); + else + m_rotationTimer.start(20); +} diff --git a/tests/directional/scatterdatamodifier.h b/tests/directional/scatterdatamodifier.h index e3979818..f920d43f 100644 --- a/tests/directional/scatterdatamodifier.h +++ b/tests/directional/scatterdatamodifier.h @@ -22,6 +22,7 @@ #include #include #include +#include using namespace QtDataVisualization; @@ -40,6 +41,7 @@ public: void changeFontSize(int fontsize); void setBackgroundEnabled(int enabled); void setGridEnabled(int enabled); + void toggleRotation(); void start(); public slots: @@ -47,6 +49,7 @@ public slots: void changeTheme(int theme); void changeShadowQuality(int quality); void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); + void triggerRotation(); signals: void backgroundEnabledChanged(bool enabled); @@ -59,6 +62,7 @@ private: int m_fontSize; QAbstract3DSeries::Mesh m_style; bool m_smooth; + QTimer m_rotationTimer; }; #endif -- cgit v1.2.3