diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-11 13:22:54 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-15 08:24:15 +0200 |
commit | 999ffa01d20f75a457da62d41c0fabfc32e5e1bb (patch) | |
tree | c5267f6831d5ff61444f85b2110f7150e20d3451 /examples | |
parent | bbb874d0591215164b2030db60dc9d6a95f4c8fe (diff) |
Basic multiseries support
Task-number: QTRD-2548
Change-Id: Iba324c0e8be56f2b3f8f6c6a992883c134a51a9d
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/audiolevels/audiolevels.cpp | 4 | ||||
-rw-r--r-- | examples/bars/graphmodifier.cpp | 50 | ||||
-rw-r--r-- | examples/bars/graphmodifier.h | 5 | ||||
-rw-r--r-- | examples/bars/main.cpp | 9 | ||||
-rw-r--r-- | examples/customproxy/rainfallgraph.cpp | 4 | ||||
-rw-r--r-- | examples/itemmodel/main.cpp | 4 | ||||
-rw-r--r-- | examples/qmlbars/qml/qmlbars/data.qml | 33 | ||||
-rw-r--r-- | examples/qmlbars/qml/qmlbars/main.qml | 19 | ||||
-rw-r--r-- | examples/qmlscatter/qml/qmlscatter/data.qml | 7 | ||||
-rw-r--r-- | examples/qmlscatter/qml/qmlscatter/main.qml | 3 | ||||
-rw-r--r-- | examples/qmlsurface/qml/qmlsurface/data.qml | 14 | ||||
-rw-r--r-- | examples/qmlsurface/qml/qmlsurface/main.qml | 22 | ||||
-rw-r--r-- | examples/scatter/scatterdatamodifier.cpp | 8 | ||||
-rw-r--r-- | examples/surface/surfacegraph.cpp | 124 | ||||
-rw-r--r-- | examples/surface/surfacegraph.h | 9 |
15 files changed, 217 insertions, 98 deletions
diff --git a/examples/audiolevels/audiolevels.cpp b/examples/audiolevels/audiolevels.cpp index 307240c5..4c64cbbe 100644 --- a/examples/audiolevels/audiolevels.cpp +++ b/examples/audiolevels/audiolevels.cpp @@ -23,6 +23,7 @@ #include <QtDataVisualization/q3dvalueaxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qbar3dseries.h> #include <QAudioDeviceInfo> #include <QAudioInput> @@ -48,6 +49,7 @@ AudioLevels::AudioLevels(Q3DBars *graph, QObject *parent) m_graph->scene()->activeCamera()->setCameraPosition(-25.0, 10.0, 190.0); m_graph->setTheme(QDataVis::ThemeIsabelle); m_graph->setBarType(QDataVis::MeshStyleBars); + m_graph->addSeries(new QBar3DSeries); //! [0] QAudioFormat formatAudio; @@ -67,7 +69,7 @@ AudioLevels::AudioLevels(Q3DBars *graph, QObject *parent) m_audioInput->setBufferSize(1024); #endif - m_device = new AudioLevelsIODevice(m_graph->activeDataProxy(), this); + m_device = new AudioLevelsIODevice(m_graph->seriesList().at(0)->dataProxy(), this); m_device->open(QIODevice::WriteOnly); m_audioInput->start(m_device); diff --git a/examples/bars/graphmodifier.cpp b/examples/bars/graphmodifier.cpp index 89c651ff..efd6aa6d 100644 --- a/examples/bars/graphmodifier.cpp +++ b/examples/bars/graphmodifier.cpp @@ -22,6 +22,7 @@ #include <QtDataVisualization/qbardataproxy.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qbar3dseries.h> #include <QTime> #include <QComboBox> @@ -43,7 +44,8 @@ GraphModifier::GraphModifier(Q3DBars *bargraph) m_temperatureAxis(new Q3DValueAxis), m_yearAxis(new Q3DCategoryAxis), m_monthAxis(new Q3DCategoryAxis), - m_temperatureData(new QBarDataProxy), + m_primaryData(new QBarDataProxy), + m_secondaryData(new QBarDataProxy), //! [1] m_style(QDataVis::MeshStyleBevelBars), m_smooth(false) @@ -73,10 +75,15 @@ GraphModifier::GraphModifier(Q3DBars *bargraph) m_graph->addAxis(m_monthAxis); //! [3] - m_temperatureData->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); + QBar3DSeries *series = new QBar3DSeries(m_primaryData); + series->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); + QBar3DSeries *series2 = new QBar3DSeries(m_secondaryData); + series2->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); + series2->setVisible(false); //! [4] - m_graph->addDataProxy(m_temperatureData); + m_graph->addSeries(series); + m_graph->addSeries(series2); //! [4] changePresetCamera(); @@ -92,8 +99,6 @@ GraphModifier::~GraphModifier() void GraphModifier::start() { //! [6] - m_graph->setActiveDataProxy(m_temperatureData); - m_graph->setValueAxis(m_temperatureAxis); m_graph->setRowAxis(m_yearAxis); m_graph->setColumnAxis(m_monthAxis); @@ -113,25 +118,40 @@ void GraphModifier::resetTemperatureData() {-9.0, -15.2, -3.8, 2.6, 8.3, 15.9, 18.6, 14.9, 11.1, 5.3, 1.8, -0.2}, // 2011 {-8.7, -11.3, -2.3, 0.4, 7.5, 12.2, 16.4, 14.1, 9.2, 3.1, 0.3, -12.1} // 2012 }; + static const qreal temp2[7][12] = { + {-8.7, -11.3, -2.3, 0.4, 7.5, 12.2, 16.4, 14.1, 9.2, 3.1, 0.3, -12.1}, // 2006 + {-7.8, -8.8, -4.2, 0.7, 9.3, 13.2, 15.8, 15.5, 11.2, 0.6, 0.7, -8.4}, // 2007 + {-6.8, -13.3, 0.2, 1.5, 7.9, 13.4, 16.1, 15.5, 8.2, 5.4, -2.6, -0.8}, // 2008 + {-6.7, -11.7, -9.7, 3.3, 9.2, 14.0, 16.3, 17.8, 10.2, 2.1, -2.6, -0.3}, // 2009 + {-4.2, -4.0, -4.6, 1.9, 7.3, 12.5, 15.0, 12.8, 7.6, 5.1, -0.9, -1.3}, // 2010 + {-14.4, -12.1, -7.0, 2.3, 11.0, 12.6, 18.8, 13.8, 9.4, 3.9, -5.6, -13.0}, // 2011 + {-9.0, -15.2, -3.8, 2.6, 8.3, 15.9, 18.6, 14.9, 11.1, 5.3, 1.8, -0.2} // 2012 + }; - // Create data array + // Create data arrays QBarDataArray *dataSet = new QBarDataArray; + QBarDataArray *dataSet2 = new QBarDataArray; QBarDataRow *dataRow; + QBarDataRow *dataRow2; dataSet->reserve(m_years.size()); for (int year = 0; year < m_years.size(); year++) { // Create a data row dataRow = new QBarDataRow(m_months.size()); + dataRow2 = new QBarDataRow(m_months.size()); for (int month = 0; month < m_months.size(); month++) { // Add data to the row (*dataRow)[month].setValue(temp[year][month]); + (*dataRow2)[month].setValue(temp2[year][month]); } // Add the row to the set dataSet->append(dataRow); + dataSet2->append(dataRow2); } // Add data to the graph (the graph assumes ownership of it) - m_temperatureData->resetArray(dataSet, m_years, m_months); + m_primaryData->resetArray(dataSet, m_years, m_months); + m_secondaryData->resetArray(dataSet2, m_years, m_months); //! [5] } @@ -220,12 +240,12 @@ void GraphModifier::rotateY(int rotation) void GraphModifier::setBackgroundEnabled(int enabled) { - m_graph->setBackgroundVisible((bool)enabled); + m_graph->setBackgroundVisible(bool(enabled)); } void GraphModifier::setGridEnabled(int enabled) { - m_graph->setGridVisible((bool)enabled); + m_graph->setGridVisible(bool(enabled)); } void GraphModifier::setSmoothBars(int smooth) @@ -233,3 +253,15 @@ void GraphModifier::setSmoothBars(int smooth) m_smooth = bool(smooth); m_graph->setBarType(m_style, m_smooth); } + +void GraphModifier::setSeriesVisibility(int enabled) +{ + m_graph->seriesList().at(1)->setVisible(bool(enabled)); + if (enabled) { + m_graph->setBarThickness(2.0); + m_graph->setBarSpacing(QSizeF(1.0, 3.0)); + } else { + m_graph->setBarThickness(1.0); + m_graph->setBarSpacing(QSizeF(1.0, 1.0)); + } +} diff --git a/examples/bars/graphmodifier.h b/examples/bars/graphmodifier.h index 2e18ffd2..978558e2 100644 --- a/examples/bars/graphmodifier.h +++ b/examples/bars/graphmodifier.h @@ -20,6 +20,7 @@ #define GRAPHMODIFIER_H #include <QtDataVisualization/q3dbars.h> +#include <QtDataVisualization/qbardataproxy.h> #include <QFont> #include <QDebug> @@ -45,6 +46,7 @@ public: void setBackgroundEnabled(int enabled); void setGridEnabled(int enabled); void setSmoothBars(int smooth); + void setSeriesVisibility(int enabled); void start(); public slots: @@ -71,7 +73,8 @@ private: Q3DValueAxis *m_temperatureAxis; Q3DCategoryAxis *m_yearAxis; Q3DCategoryAxis *m_monthAxis; - QBarDataProxy *m_temperatureData; + QBarDataProxy *m_primaryData; + QBarDataProxy *m_secondaryData; QDataVis::MeshStyle m_style; bool m_smooth; }; diff --git a/examples/bars/main.cpp b/examples/bars/main.cpp index fc3737f6..ecd5d353 100644 --- a/examples/bars/main.cpp +++ b/examples/bars/main.cpp @@ -118,6 +118,10 @@ int main(int argc, char **argv) gridCheckBox->setText(QStringLiteral("Show grid")); gridCheckBox->setChecked(true); + QCheckBox *seriesCheckBox = new QCheckBox(widget); + seriesCheckBox->setText(QStringLiteral("Show second series")); + seriesCheckBox->setChecked(false); + //! [4] QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget); rotationSliderX->setTickInterval(30); @@ -163,7 +167,8 @@ int main(int argc, char **argv) vLayout->addWidget(cameraButton, 0, Qt::AlignTop); vLayout->addWidget(backgroundCheckBox); vLayout->addWidget(gridCheckBox); - vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop); + vLayout->addWidget(smoothCheckBox); + vLayout->addWidget(seriesCheckBox); vLayout->addWidget(new QLabel(QStringLiteral("Change bar style"))); vLayout->addWidget(barStyleList); vLayout->addWidget(new QLabel(QStringLiteral("Change selection mode"))); @@ -197,6 +202,8 @@ int main(int argc, char **argv) &GraphModifier::setGridEnabled); QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier, &GraphModifier::setSmoothBars); + QObject::connect(seriesCheckBox, &QCheckBox::stateChanged, modifier, + &GraphModifier::setSeriesVisibility); QObject::connect(barStyleList, SIGNAL(currentIndexChanged(int)), modifier, SLOT(changeStyle(int))); diff --git a/examples/customproxy/rainfallgraph.cpp b/examples/customproxy/rainfallgraph.cpp index 0327ecb9..36ab9786 100644 --- a/examples/customproxy/rainfallgraph.cpp +++ b/examples/customproxy/rainfallgraph.cpp @@ -21,6 +21,7 @@ #include <QtDataVisualization/q3dvalueaxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qbar3dseries.h> #include <QGuiApplication> #include <QFont> #include <QDebug> @@ -39,7 +40,8 @@ RainfallGraph::RainfallGraph(Q3DBars *rainfall) m_columnCount = m_numericMonths.size(); m_proxy = new VariantBarDataProxy; - m_graph->setActiveDataProxy(m_proxy); + QBar3DSeries *series = new QBar3DSeries(m_proxy); + m_graph->addSeries(series); updateYearsList(2000, 2012); diff --git a/examples/itemmodel/main.cpp b/examples/itemmodel/main.cpp index 5964992d..90bac03b 100644 --- a/examples/itemmodel/main.cpp +++ b/examples/itemmodel/main.cpp @@ -22,6 +22,7 @@ #include <QtDataVisualization/q3dvalueaxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qbar3dseries.h> #include <QApplication> #include <QVBoxLayout> @@ -268,7 +269,8 @@ int main(int argc, char **argv) QItemModelBarDataMapping *mapping = new QItemModelBarDataMapping; mapping->setUseModelCategories(true); QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), mapping); - graph->setActiveDataProxy(proxy); + QBar3DSeries *series = new QBar3DSeries(proxy); + graph->addSeries(series); //! [2] //! [3] diff --git a/examples/qmlbars/qml/qmlbars/data.qml b/examples/qmlbars/qml/qmlbars/data.qml index 210eedde..522926e8 100644 --- a/examples/qmlbars/qml/qmlbars/data.qml +++ b/examples/qmlbars/qml/qmlbars/data.qml @@ -20,9 +20,13 @@ import QtQuick 2.1 import QtDataVisualization 1.0 Item { - property alias mapping: valueMapping property alias model: dataModel + property alias mapping: valueMapping property alias proxy: modelProxy + property alias series: barSeries + property alias secondaryMapping: secondaryMapping + property alias secondaryProxy: secondaryProxy + property alias secondarySeries: secondarySeries //! [1] BarDataMapping { @@ -39,6 +43,33 @@ Item { itemModel: dataModel } //! [2] + + BarDataMapping { + id: secondaryMapping + rowRole: "year" + columnRole: "month" + valueRole: "income" + } + + ItemModelBarDataProxy { + id: secondaryProxy + activeMapping: secondaryMapping + itemModel: dataModel + } + + Bar3DSeries { + id: barSeries + dataProxy: modelProxy + itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel" + } + + Bar3DSeries { + id: secondarySeries + visible: false + dataProxy: secondaryProxy + itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel" + } + //! [0] ListModel { id: dataModel diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml index db28d569..4346f392 100644 --- a/examples/qmlbars/qml/qmlbars/main.qml +++ b/examples/qmlbars/qml/qmlbars/main.qml @@ -50,14 +50,13 @@ Item { font.pointSize: 35 theme: AbstractGraph3D.ThemeRetro labelStyle: AbstractGraph3D.LabelStyleFromTheme - dataProxy: graphData.proxy barThickness: 0.5 barSpacing: Qt.size(0.5, 0.5) barSpacingRelative: false - scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetRight + scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetIsometricLeftHigh columnAxis: graphAxes.column valueAxis: graphAxes.expenses - itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel" + seriesList: [graphData.series, graphData.secondarySeries] onSelectedBarChanged: { // Set tableView current row to selected bar @@ -93,12 +92,19 @@ Item { text: "Show Income" //! [0] onClicked: { - if (graphData.mapping.valueRole === "expenses") { + if (graphData.mapping.valueRole === "expenses" && !graphData.secondarySeries.visible) { + // Change mapping to change series data graphData.mapping.valueRole = "income" + text = "Show Both" + testGraph.valueAxis = graphAxes.income + } else if (graphData.mapping.valueRole === "income"){ + // Show both data set in separate series + graphData.secondarySeries.visible = true + graphData.mapping.valueRole = "expenses" text = "Show Expenses" testGraph.valueAxis = graphAxes.income } else { - graphData.mapping.valueRole = "expenses" + graphData.secondarySeries.visible = false text = "Show Income" testGraph.valueAxis = graphAxes.expenses } @@ -134,12 +140,15 @@ Item { if (testGraph.rowAxis.max !== 6) { text = "Show 2010 - 2012" graphData.mapping.autoRowCategories = true + graphData.secondaryMapping.autoRowCategories = true } else { text = "Show all years" // Explicitly defining row categories, since we do not want to show data for // all years in the model, just for the selected ones. graphData.mapping.autoRowCategories = false + graphData.secondaryMapping.autoRowCategories = false graphData.mapping.rowCategories = ["2010", "2011", "2012"] + graphData.secondaryMapping.rowCategories = ["2010", "2011", "2012"] } } //! [1] diff --git a/examples/qmlscatter/qml/qmlscatter/data.qml b/examples/qmlscatter/qml/qmlscatter/data.qml index 4ad9d7fc..74993135 100644 --- a/examples/qmlscatter/qml/qmlscatter/data.qml +++ b/examples/qmlscatter/qml/qmlscatter/data.qml @@ -22,6 +22,7 @@ import QtDataVisualization 1.0 Item { //! [3] property alias proxy: modelProxy + property alias series: scatterSeries //! [3] //! [1] @@ -41,6 +42,12 @@ Item { } //! [2] + Scatter3DSeries { + id: scatterSeries + dataProxy: modelProxy + itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel" + } + //! [0] ListModel { id: dataModel diff --git a/examples/qmlscatter/qml/qmlscatter/main.qml b/examples/qmlscatter/qml/qmlscatter/main.qml index 7fd4ec84..1e80b52a 100644 --- a/examples/qmlscatter/qml/qmlscatter/main.qml +++ b/examples/qmlscatter/qml/qmlscatter/main.qml @@ -57,10 +57,9 @@ Item { shadowQuality: AbstractGraph3D.ShadowQualitySoftLow //! [3] //! [5] - dataProxy: graphData.proxy + seriesList: [graphData.series] //! [5] //! [6] - itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel" axisX.segmentCount: 3 axisX.subSegmentCount: 2 axisX.labelFormat: "%.2f" diff --git a/examples/qmlsurface/qml/qmlsurface/data.qml b/examples/qmlsurface/qml/qmlsurface/data.qml index e5678669..36c7671a 100644 --- a/examples/qmlsurface/qml/qmlsurface/data.qml +++ b/examples/qmlsurface/qml/qmlsurface/data.qml @@ -22,8 +22,8 @@ import QtDataVisualization 1.0 Item { property alias mapping: surfaceMapping property alias model: dataModel - property alias proxy: modelProxy - property alias heightProxy: heightMapProxy + property alias series: surfaceSeries + property alias heightSeries: heightSeries //! [0] HeightMapSurfaceDataProxy { @@ -54,6 +54,16 @@ Item { } //! [3] + Surface3DSeries { + id: surfaceSeries + dataProxy: modelProxy + } + + Surface3DSeries { + id: heightSeries + dataProxy: heightMapProxy + } + //! [1] ListModel { id: dataModel diff --git a/examples/qmlsurface/qml/qmlsurface/main.qml b/examples/qmlsurface/qml/qmlsurface/main.qml index 600d75c1..f91b6a76 100644 --- a/examples/qmlsurface/qml/qmlsurface/main.qml +++ b/examples/qmlsurface/qml/qmlsurface/main.qml @@ -40,7 +40,7 @@ Item { ColorGradient { id: surfaceGradient ColorGradientStop { position: 0.0; color: "darkslategray" } - ColorGradientStop { id: middleGradient; position: 0.55; color: "peru" } + ColorGradientStop { id: middleGradient; position: 0.25; color: "peru" } ColorGradientStop { position: 1.0; color: "red" } } //! [0] @@ -57,9 +57,9 @@ Item { font.family: "STCaiyun" font.pointSize: 35 scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetIsometricLeft - dataProxy: surfaceData.heightProxy + seriesList: [surfaceData.series] axisY.min: 0.0 - axisY.max: 250.0 + axisY.max: 500.0 axisX.segmentCount: 10 axisX.subSegmentCount: 2 axisX.labelFormat: "%i" @@ -109,11 +109,13 @@ Item { width: surfaceGridToggle.width text: "Hide Surface" onClicked: { - if (surfaceplot.surfaceVisible === true) { - surfaceplot.surfaceVisible = false; + if (surfaceplot.seriesList[0].visible === true) { + surfaceData.series.visible = false; + surfaceData.heightSeries.visible = false; text = "Show Surface" } else { - surfaceplot.surfaceVisible = true; + surfaceData.series.visible = true; + surfaceData.heightSeries.visible = true; text = "Hide Surface" } } @@ -168,20 +170,20 @@ Item { } NewButton { - id: proxyToggle + id: seriesToggle anchors.top: gridToggle.bottom width: gridToggle.width text: "Switch to Item Model Proxy" //! [3] onClicked: { - if (surfaceplot.dataProxy === surfaceData.heightProxy) { + if (surfaceplot.seriesList[0] === surfaceData.heightSeries) { surfaceplot.axisY.max = 500.0 - surfaceplot.dataProxy = surfaceData.proxy + surfaceplot.seriesList = [surfaceData.series] middleGradient.position = 0.25 text = "Switch to Height Map Proxy" } else { surfaceplot.axisY.max = 250.0 - surfaceplot.dataProxy = surfaceData.heightProxy + surfaceplot.seriesList = [surfaceData.heightSeries] middleGradient.position = 0.55 text = "Switch to Item Model Proxy" } diff --git a/examples/scatter/scatterdatamodifier.cpp b/examples/scatter/scatterdatamodifier.cpp index ce5a1bd7..1bdd089d 100644 --- a/examples/scatter/scatterdatamodifier.cpp +++ b/examples/scatter/scatterdatamodifier.cpp @@ -21,6 +21,7 @@ #include <QtDataVisualization/q3dvalueaxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qscatter3dseries.h> #include <qmath.h> using namespace QtDataVisualization; @@ -52,8 +53,9 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) //! [2] QScatterDataProxy *proxy = new QScatterDataProxy; - proxy->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"); - m_graph->setActiveDataProxy(proxy); + QScatter3DSeries *series = new QScatter3DSeries(proxy); + series->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"); + m_graph->addSeries(series); //! [2] changeLabelStyle(); @@ -107,7 +109,7 @@ void ScatterDataModifier::addData() #endif //! [7] - m_graph->activeDataProxy()->resetArray(dataArray); + m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray); //! [7] } diff --git a/examples/surface/surfacegraph.cpp b/examples/surface/surfacegraph.cpp index bb07cb96..f5a2e00b 100644 --- a/examples/surface/surfacegraph.cpp +++ b/examples/surface/surfacegraph.cpp @@ -40,13 +40,15 @@ SurfaceGraph::SurfaceGraph(Q3DSurface *surface) m_graph->setLabelStyle(QDataVis::LabelStyleFromTheme); //! [0] - sqrtSinProxy = new QSurfaceDataProxy(); + m_sqrtSinProxy = new QSurfaceDataProxy(); + m_sqrtSinSeries = new QSurface3DSeries(m_sqrtSinProxy); //! [0] fillSqrtSinProxy(); //! [2] QImage heightMapImage(":/maps/mountain"); m_heightMapProxy = new QHeightMapSurfaceDataProxy(heightMapImage); + m_heightMapSeries = new QSurface3DSeries(m_heightMapProxy); m_heightMapProxy->setValueRanges(34.0, 40.0, 18.0, 24.0); //! [2] m_heightMapWidth = heightMapImage.width(); @@ -79,70 +81,76 @@ void SurfaceGraph::fillSqrtSinProxy() *dataArray << newRow; } - sqrtSinProxy->resetArray(dataArray); + m_sqrtSinProxy->resetArray(dataArray); } //! [1] -void SurfaceGraph::enableSqrtSinModel() +void SurfaceGraph::enableSqrtSinModel(bool enable) { - //! [3] - m_graph->setSurfaceGridEnabled(true); - m_graph->setSmoothSurfaceEnabled(false); - - m_graph->axisX()->setLabelFormat("%.2f"); - m_graph->axisZ()->setLabelFormat("%.2f"); - m_graph->axisX()->setRange(sampleMin, sampleMax); - m_graph->axisY()->setRange(0.0, 2.0); - m_graph->axisZ()->setRange(sampleMin, sampleMax); - - m_graph->setActiveDataProxy(sqrtSinProxy); - //! [3] - - // Reset range sliders for Sqrt&Sin - m_rangeMinX = sampleMin; - m_rangeMinZ = sampleMin; - m_stepX = (sampleMax - sampleMin) / qreal(sampleCountX - 1); - m_stepZ = (sampleMax - sampleMin) / qreal(sampleCountZ - 1); - m_axisMinSliderX->setMaximum(sampleCountX - 2); - m_axisMinSliderX->setValue(0); - m_axisMaxSliderX->setMaximum(sampleCountX - 1); - m_axisMaxSliderX->setValue(sampleCountX - 1); - m_axisMinSliderZ->setMaximum(sampleCountZ - 2); - m_axisMinSliderZ->setValue(0); - m_axisMaxSliderZ->setMaximum(sampleCountZ - 1); - m_axisMaxSliderZ->setValue(sampleCountZ - 1); + if (enable) { + //! [3] + m_graph->setSurfaceGridEnabled(true); + m_graph->setSmoothSurfaceEnabled(false); + + m_graph->axisX()->setLabelFormat("%.2f"); + m_graph->axisZ()->setLabelFormat("%.2f"); + m_graph->axisX()->setRange(sampleMin, sampleMax); + m_graph->axisY()->setRange(0.0, 2.0); + m_graph->axisZ()->setRange(sampleMin, sampleMax); + + m_graph->removeSeries(m_heightMapSeries); + m_graph->addSeries(m_sqrtSinSeries); + //! [3] + + // Reset range sliders for Sqrt&Sin + m_rangeMinX = sampleMin; + m_rangeMinZ = sampleMin; + m_stepX = (sampleMax - sampleMin) / qreal(sampleCountX - 1); + m_stepZ = (sampleMax - sampleMin) / qreal(sampleCountZ - 1); + m_axisMinSliderX->setMaximum(sampleCountX - 2); + m_axisMinSliderX->setValue(0); + m_axisMaxSliderX->setMaximum(sampleCountX - 1); + m_axisMaxSliderX->setValue(sampleCountX - 1); + m_axisMinSliderZ->setMaximum(sampleCountZ - 2); + m_axisMinSliderZ->setValue(0); + m_axisMaxSliderZ->setMaximum(sampleCountZ - 1); + m_axisMaxSliderZ->setValue(sampleCountZ - 1); + } } -void SurfaceGraph::enableHeightMapModel() +void SurfaceGraph::enableHeightMapModel(bool enable) { - //! [4] - m_graph->setSurfaceGridEnabled(false); - m_graph->setSmoothSurfaceEnabled(true); - - m_graph->axisX()->setLabelFormat("%.1f N"); - m_graph->axisZ()->setLabelFormat("%.1f E"); - m_graph->axisX()->setRange(34.0, 40.0); - m_graph->axisY()->setAutoAdjustRange(true); - m_graph->axisZ()->setRange(18.0, 24.0); - - m_graph->setActiveDataProxy(m_heightMapProxy); - //! [4] - - // Reset range sliders for height map - int mapGridCountX = m_heightMapWidth / heightMapGridStepX; - int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ; - m_rangeMinX = 34.0; - m_rangeMinZ = 18.0; - m_stepX = 6.0 / qreal(mapGridCountX - 1); - m_stepZ = 6.0 / qreal(mapGridCountZ - 1); - m_axisMinSliderX->setMaximum(mapGridCountX - 2); - m_axisMinSliderX->setValue(0); - m_axisMaxSliderX->setMaximum(mapGridCountX - 1); - m_axisMaxSliderX->setValue(mapGridCountX - 1); - m_axisMinSliderZ->setMaximum(mapGridCountZ - 2); - m_axisMinSliderZ->setValue(0); - m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1); - m_axisMaxSliderZ->setValue(mapGridCountZ - 1); + if (enable) { + //! [4] + m_graph->setSurfaceGridEnabled(false); + m_graph->setSmoothSurfaceEnabled(true); + + m_graph->axisX()->setLabelFormat("%.1f N"); + m_graph->axisZ()->setLabelFormat("%.1f E"); + m_graph->axisX()->setRange(34.0, 40.0); + m_graph->axisY()->setAutoAdjustRange(true); + m_graph->axisZ()->setRange(18.0, 24.0); + + m_graph->removeSeries(m_sqrtSinSeries); + m_graph->addSeries(m_heightMapSeries); + //! [4] + + // Reset range sliders for height map + int mapGridCountX = m_heightMapWidth / heightMapGridStepX; + int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ; + m_rangeMinX = 34.0; + m_rangeMinZ = 18.0; + m_stepX = 6.0 / qreal(mapGridCountX - 1); + m_stepZ = 6.0 / qreal(mapGridCountZ - 1); + m_axisMinSliderX->setMaximum(mapGridCountX - 2); + m_axisMinSliderX->setValue(0); + m_axisMaxSliderX->setMaximum(mapGridCountX - 1); + m_axisMaxSliderX->setValue(mapGridCountX - 1); + m_axisMinSliderZ->setMaximum(mapGridCountZ - 2); + m_axisMinSliderZ->setValue(0); + m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1); + m_axisMaxSliderZ->setValue(mapGridCountZ - 1); + } } void SurfaceGraph::adjustXMin(int min) diff --git a/examples/surface/surfacegraph.h b/examples/surface/surfacegraph.h index ff0e5fc4..92b06e54 100644 --- a/examples/surface/surfacegraph.h +++ b/examples/surface/surfacegraph.h @@ -22,6 +22,7 @@ #include <QtDataVisualization/Q3DSurface> #include <QtDataVisualization/QSurfaceDataProxy> #include <QtDataVisualization/QHeightMapSurfaceDataProxy> +#include <QtDataVisualization/QSurface3DSeries> #include <QtWidgets/QSlider> using namespace QtDataVisualization; @@ -33,8 +34,8 @@ public: explicit SurfaceGraph(Q3DSurface *surface); ~SurfaceGraph(); - void enableHeightMapModel(); - void enableSqrtSinModel(); + void enableHeightMapModel(bool enable); + void enableSqrtSinModel(bool enable); //! [0] void toggleModeNone() { m_graph->setSelectionMode(QDataVis::SelectionNone); } @@ -64,7 +65,9 @@ public slots: private: Q3DSurface *m_graph; QHeightMapSurfaceDataProxy *m_heightMapProxy; - QSurfaceDataProxy *sqrtSinProxy; + QSurfaceDataProxy *m_sqrtSinProxy; + QSurface3DSeries *m_heightMapSeries; + QSurface3DSeries *m_sqrtSinSeries; QSlider *m_axisMinSliderX; QSlider *m_axisMaxSliderX; |