summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cmake.conf5
-rw-r--r--.qmake.conf7
-rw-r--r--CMakeLists.txt30
-rw-r--r--LICENSES/BSD-3-Clause.txt9
-rw-r--r--LICENSES/GFDL-1.3-no-invariants-only.txt451
-rw-r--r--LICENSES/GPL-3.0-only.txt (renamed from LICENSE.GPL3)0
-rw-r--r--LICENSES/LicenseRef-Qt-Commercial.txt8
-rw-r--r--LICENSES/Qt-GPL-exception-1.0.txt22
-rw-r--r--coin/axivion/ci_config_linux.json41
-rw-r--r--coin/module_config.yaml23
-rw-r--r--dependencies.yaml6
-rw-r--r--dist/changes-5.15.120
-rw-r--r--examples/CMakeLists.txt8
-rw-r--r--examples/datavisualization/CMakeLists.txt13
-rw-r--r--examples/datavisualization/audiolevels/audiolevels.cpp118
-rw-r--r--examples/datavisualization/audiolevels/audiolevels.h59
-rw-r--r--examples/datavisualization/audiolevels/audiolevels.pro23
-rw-r--r--examples/datavisualization/audiolevels/audiolevelsiodevice.cpp114
-rw-r--r--examples/datavisualization/audiolevels/audiolevelsiodevice.h55
-rw-r--r--examples/datavisualization/audiolevels/doc/images/audiolevels-example.pngbin120978 -> 0 bytes
-rw-r--r--examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc98
-rw-r--r--examples/datavisualization/audiolevels/main.cpp56
-rw-r--r--examples/datavisualization/bars/bars.pro17
-rw-r--r--examples/datavisualization/bars/doc/images/bars-example.pngbin238712 -> 0 bytes
-rw-r--r--examples/datavisualization/bars/doc/src/bars.qdoc228
-rw-r--r--examples/datavisualization/bars/graphmodifier.h113
-rw-r--r--examples/datavisualization/bars/main.cpp336
-rw-r--r--examples/datavisualization/custominput/custominput.pro20
-rw-r--r--examples/datavisualization/custominput/custominputhandler.cpp65
-rw-r--r--examples/datavisualization/custominput/custominputhandler.h47
-rw-r--r--examples/datavisualization/custominput/data/data.txt1060
-rw-r--r--examples/datavisualization/custominput/doc/images/custominput-example.pngbin62422 -> 0 bytes
-rw-r--r--examples/datavisualization/custominput/doc/src/custominput.qdoc87
-rw-r--r--examples/datavisualization/custominput/main.cpp102
-rw-r--r--examples/datavisualization/custominput/scatterdatamodifier.cpp186
-rw-r--r--examples/datavisualization/custominput/scatterdatamodifier.h71
-rw-r--r--examples/datavisualization/customitems/customitemgraph.cpp331
-rw-r--r--examples/datavisualization/customitems/customitemgraph.h69
-rw-r--r--examples/datavisualization/customitems/customitems.pro19
-rw-r--r--examples/datavisualization/customitems/customitems.qrc12
-rw-r--r--examples/datavisualization/customitems/doc/images/customitems-example.pngbin109729 -> 0 bytes
-rw-r--r--examples/datavisualization/customitems/doc/src/customitems.qdoc86
-rw-r--r--examples/datavisualization/customitems/main.cpp139
-rw-r--r--examples/datavisualization/customproxy/customproxy.pro25
-rw-r--r--examples/datavisualization/customproxy/data/raindata.txt158
-rw-r--r--examples/datavisualization/customproxy/doc/images/customproxy-example.pngbin173744 -> 0 bytes
-rw-r--r--examples/datavisualization/customproxy/doc/src/customproxy.qdoc122
-rw-r--r--examples/datavisualization/customproxy/main.cpp55
-rw-r--r--examples/datavisualization/customproxy/rainfallgraph.cpp169
-rw-r--r--examples/datavisualization/customproxy/rainfallgraph.h62
-rw-r--r--examples/datavisualization/customproxy/variantbardatamapping.cpp144
-rw-r--r--examples/datavisualization/customproxy/variantbardatamapping.h91
-rw-r--r--examples/datavisualization/customproxy/variantbardataproxy.h79
-rw-r--r--examples/datavisualization/customproxy/variantdataset.cpp74
-rw-r--r--examples/datavisualization/customproxy/variantdataset.h68
-rw-r--r--examples/datavisualization/datavisualization.pro24
-rw-r--r--examples/datavisualization/draggableaxes/axesinputhandler.h82
-rw-r--r--examples/datavisualization/draggableaxes/data.cpp175
-rw-r--r--examples/datavisualization/draggableaxes/data.h59
-rw-r--r--examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.pngbin90050 -> 0 bytes
-rw-r--r--examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc133
-rw-r--r--examples/datavisualization/draggableaxes/draggableaxes.pro18
-rw-r--r--examples/datavisualization/draggableaxes/main.cpp77
-rw-r--r--examples/datavisualization/graphgallery/CMakeLists.txt75
-rw-r--r--examples/datavisualization/graphgallery/axesinputhandler.cpp (renamed from examples/datavisualization/draggableaxes/axesinputhandler.cpp)38
-rw-r--r--examples/datavisualization/graphgallery/axesinputhandler.h54
-rw-r--r--examples/datavisualization/graphgallery/bargraph.cpp329
-rw-r--r--examples/datavisualization/graphgallery/bargraph.h26
-rw-r--r--examples/datavisualization/graphgallery/custominputhandler.cpp (renamed from examples/datavisualization/texturesurface/custominputhandler.cpp)56
-rw-r--r--examples/datavisualization/graphgallery/custominputhandler.h76
-rw-r--r--examples/datavisualization/graphgallery/data/layer_1.png (renamed from examples/datavisualization/customitems/layer_1.png)bin34540 -> 34540 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/layer_2.png (renamed from examples/datavisualization/customitems/layer_2.png)bin10553 -> 10553 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/layer_3.png (renamed from examples/datavisualization/customitems/layer_3.png)bin7119 -> 7119 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/license.txt (renamed from examples/datavisualization/texturesurface/license.txt)0
-rw-r--r--examples/datavisualization/graphgallery/data/maptexture.jpg (renamed from examples/datavisualization/texturesurface/maptexture.jpg)bin352922 -> 352922 bytes
-rw-r--r--examples/datavisualization/graphgallery/data/oilrig.obj (renamed from examples/datavisualization/customitems/oilrig.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/pipe.obj (renamed from examples/datavisualization/customitems/pipe.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/raindata.txt158
-rw-r--r--examples/datavisualization/graphgallery/data/refinery.obj (renamed from examples/datavisualization/customitems/refinery.obj)0
-rw-r--r--examples/datavisualization/graphgallery/data/topography.png (renamed from examples/datavisualization/texturesurface/topography.png)bin395504 -> 395504 bytes
-rw-r--r--examples/datavisualization/graphgallery/doc/images/graphgallery-example.pngbin0 -> 375425 bytes
-rw-r--r--examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc705
-rw-r--r--examples/datavisualization/graphgallery/graphgallery.pro49
-rw-r--r--examples/datavisualization/graphgallery/graphgallery.qrc13
-rw-r--r--examples/datavisualization/graphgallery/graphmodifier.cpp (renamed from examples/datavisualization/bars/graphmodifier.cpp)203
-rw-r--r--examples/datavisualization/graphgallery/graphmodifier.h87
-rw-r--r--examples/datavisualization/graphgallery/highlightseries.cpp (renamed from examples/datavisualization/texturesurface/highlightseries.cpp)53
-rw-r--r--examples/datavisualization/graphgallery/highlightseries.h35
-rw-r--r--examples/datavisualization/graphgallery/main.cpp52
-rw-r--r--examples/datavisualization/graphgallery/rainfalldata.cpp117
-rw-r--r--examples/datavisualization/graphgallery/rainfalldata.h43
-rw-r--r--examples/datavisualization/graphgallery/scatterdatamodifier.cpp191
-rw-r--r--examples/datavisualization/graphgallery/scatterdatamodifier.h49
-rw-r--r--examples/datavisualization/graphgallery/scattergraph.cpp142
-rw-r--r--examples/datavisualization/graphgallery/scattergraph.h26
-rw-r--r--examples/datavisualization/graphgallery/surfacegraph.cpp346
-rw-r--r--examples/datavisualization/graphgallery/surfacegraph.h26
-rw-r--r--examples/datavisualization/graphgallery/surfacegraphmodifier.cpp647
-rw-r--r--examples/datavisualization/graphgallery/surfacegraphmodifier.h109
-rw-r--r--examples/datavisualization/graphgallery/topographicseries.cpp55
-rw-r--r--examples/datavisualization/graphgallery/topographicseries.h26
-rw-r--r--examples/datavisualization/graphgallery/variantbardatamapping.cpp85
-rw-r--r--examples/datavisualization/graphgallery/variantbardatamapping.h66
-rw-r--r--examples/datavisualization/graphgallery/variantbardataproxy.cpp (renamed from examples/datavisualization/customproxy/variantbardataproxy.cpp)69
-rw-r--r--examples/datavisualization/graphgallery/variantbardataproxy.h48
-rw-r--r--examples/datavisualization/graphgallery/variantdataset.cpp45
-rw-r--r--examples/datavisualization/graphgallery/variantdataset.h41
-rw-r--r--examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.pngbin78536 -> 0 bytes
-rw-r--r--examples/datavisualization/itemmodel/doc/images/itemmodel-example.pngbin45381 -> 0 bytes
-rw-r--r--examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc196
-rw-r--r--examples/datavisualization/itemmodel/itemmodel.pro15
-rw-r--r--examples/datavisualization/itemmodel/main.cpp304
-rw-r--r--examples/datavisualization/qmlaxisdrag/doc/images/qmlaxisdrag-example.pngbin89048 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlaxisdrag/doc/src/qmlaxisdrag.qdoc121
-rw-r--r--examples/datavisualization/qmlaxisdrag/main.cpp59
-rw-r--r--examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/NewButton.qml55
-rw-r--r--examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cubetexture.pngbin10429 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/main.qml328
-rw-r--r--examples/datavisualization/qmlaxisdrag/qmlaxisdrag.pro11
-rw-r--r--examples/datavisualization/qmlaxisdrag/qmlaxisdrag.qrc12
-rw-r--r--examples/datavisualization/qmlaxisformatter/customformatter.h81
-rw-r--r--examples/datavisualization/qmlaxisformatter/doc/images/qmlaxisformatter-example.pngbin132952 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlaxisformatter/doc/src/qmlaxisformatter.qdoc126
-rw-r--r--examples/datavisualization/qmlaxisformatter/main.cpp68
-rw-r--r--examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/main.qml194
-rw-r--r--examples/datavisualization/qmlaxisformatter/qmlaxisformatter.pro16
-rw-r--r--examples/datavisualization/qmlaxisformatter/qmlaxisformatter.qrc7
-rw-r--r--examples/datavisualization/qmlaxishandling/CMakeLists.txt60
-rw-r--r--examples/datavisualization/qmlaxishandling/customformatter.cpp (renamed from examples/datavisualization/qmlaxisformatter/customformatter.cpp)41
-rw-r--r--examples/datavisualization/qmlaxishandling/customformatter.h55
-rw-r--r--examples/datavisualization/qmlaxishandling/doc/images/qmlaxishandling-example.pngbin0 -> 132862 bytes
-rw-r--r--examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc188
-rw-r--r--examples/datavisualization/qmlaxishandling/main.cpp43
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml298
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml156
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml (renamed from examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/Data.qml)32
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cube.obj (renamed from examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cube.obj)0
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cubetexture.pngbin0 -> 3386 bytes
-rw-r--r--examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml47
-rw-r--r--examples/datavisualization/qmlaxishandling/qmlaxishandling.pro16
-rw-r--r--examples/datavisualization/qmlaxishandling/qmlaxishandling.qrc12
-rw-r--r--examples/datavisualization/qmlaxishandling/qmldir2
-rw-r--r--examples/datavisualization/qmlbars/CMakeLists.txt58
-rw-r--r--examples/datavisualization/qmlbars/doc/images/qmlbars-example.pngbin146667 -> 186928 bytes
-rw-r--r--examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc112
-rw-r--r--examples/datavisualization/qmlbars/main.cpp43
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml34
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/Data.qml214
-rw-r--r--examples/datavisualization/qmlbars/qml/qmlbars/main.qml405
-rw-r--r--examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.pngbin73150 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc90
-rw-r--r--examples/datavisualization/qmlcustominput/main.cpp59
-rw-r--r--examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml1106
-rw-r--r--examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml243
-rw-r--r--examples/datavisualization/qmlcustominput/qmlcustominput.pro12
-rw-r--r--examples/datavisualization/qmlcustominput/qmlcustominput.qrc7
-rw-r--r--examples/datavisualization/qmllegend/doc/images/qmllegend-example.pngbin98023 -> 0 bytes
-rw-r--r--examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc78
-rw-r--r--examples/datavisualization/qmllegend/main.cpp59
-rw-r--r--examples/datavisualization/qmllegend/qml/qmllegend/Data.qml89
-rw-r--r--examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml135
-rw-r--r--examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml63
-rw-r--r--examples/datavisualization/qmllegend/qml/qmllegend/main.qml241
-rw-r--r--examples/datavisualization/qmllegend/qmllegend.pro13
-rw-r--r--examples/datavisualization/qmllegend/qmllegend.qrc8
-rw-r--r--examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.pngbin82347 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc55
-rw-r--r--examples/datavisualization/qmlmultigraph/main.cpp58
-rw-r--r--examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml59
-rw-r--r--examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml221
-rw-r--r--examples/datavisualization/qmlmultigraph/qmlmultigraph.pro12
-rw-r--r--examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc7
-rw-r--r--examples/datavisualization/qmloscilloscope/datasource.h59
-rw-r--r--examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.pngbin129028 -> 0 bytes
-rw-r--r--examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc128
-rw-r--r--examples/datavisualization/qmloscilloscope/main.cpp76
-rw-r--r--examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml63
-rw-r--r--examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml338
-rw-r--r--examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc6
-rw-r--r--examples/datavisualization/qmlscatter/CMakeLists.txt53
-rw-r--r--examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.pngbin98086 -> 107603 bytes
-rw-r--r--examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc130
-rw-r--r--examples/datavisualization/qmlscatter/main.cpp33
-rw-r--r--examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml32
-rw-r--r--examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml247
-rw-r--r--examples/datavisualization/qmlscatter/qmlscatter.pro1
-rw-r--r--examples/datavisualization/qmlscatter/qmlscatter.qrc1
-rw-r--r--examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.pngbin80103 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc100
-rw-r--r--examples/datavisualization/qmlspectrogram/main.cpp53
-rw-r--r--examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml304
-rw-r--r--examples/datavisualization/qmlspectrogram/qmlspectrogram.pro12
-rw-r--r--examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc7
-rw-r--r--examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.pngbin334593 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc119
-rw-r--r--examples/datavisualization/qmlsurface/heightmap.pngbin38634 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurface/main.cpp58
-rw-r--r--examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml10040
-rw-r--r--examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml63
-rw-r--r--examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml263
-rw-r--r--examples/datavisualization/qmlsurface/qmlsurface.pro12
-rw-r--r--examples/datavisualization/qmlsurface/qmlsurface.qrc10
-rw-r--r--examples/datavisualization/qmlsurfacegallery/CMakeLists.txt60
-rw-r--r--examples/datavisualization/qmlsurfacegallery/datasource.cpp (renamed from examples/datavisualization/qmloscilloscope/datasource.cpp)92
-rw-r--r--examples/datavisualization/qmlsurfacegallery/datasource.h38
-rw-r--r--examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.pngbin0 -> 172206 bytes
-rw-r--r--examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc238
-rw-r--r--examples/datavisualization/qmlsurfacegallery/main.cpp52
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml (renamed from examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml)32
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml227
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml430
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml272
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.pngbin0 -> 638731 bytes
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme25
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml57
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro (renamed from examples/datavisualization/qmloscilloscope/qmloscilloscope.pro)7
-rw-r--r--examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc10
-rw-r--r--examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.pngbin91579 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc91
-rw-r--r--examples/datavisualization/qmlsurfacelayers/layer_1.pngbin34540 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurfacelayers/layer_2.pngbin10563 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurfacelayers/layer_3.pngbin13022 -> 0 bytes
-rw-r--r--examples/datavisualization/qmlsurfacelayers/main.cpp63
-rw-r--r--examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml65
-rw-r--r--examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml343
-rw-r--r--examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro12
-rw-r--r--examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc11
-rw-r--r--examples/datavisualization/rotations/doc/images/rotations-example.pngbin69487 -> 0 bytes
-rw-r--r--examples/datavisualization/rotations/doc/src/rotations.qdoc79
-rw-r--r--examples/datavisualization/rotations/main.cpp106
-rw-r--r--examples/datavisualization/rotations/mesh/largesphere.obj1938
-rw-r--r--examples/datavisualization/rotations/mesh/narrowarrow.obj413
-rw-r--r--examples/datavisualization/rotations/rotations.pro17
-rw-r--r--examples/datavisualization/rotations/rotations.qrc6
-rw-r--r--examples/datavisualization/rotations/scatterdatamodifier.cpp193
-rw-r--r--examples/datavisualization/rotations/scatterdatamodifier.h67
-rw-r--r--examples/datavisualization/scatter/doc/images/scatter-example.pngbin142496 -> 0 bytes
-rw-r--r--examples/datavisualization/scatter/doc/src/scatter.qdoc157
-rw-r--r--examples/datavisualization/scatter/main.cpp195
-rw-r--r--examples/datavisualization/scatter/scatter.pro17
-rw-r--r--examples/datavisualization/scatter/scatterdatamodifier.cpp218
-rw-r--r--examples/datavisualization/scatter/scatterdatamodifier.h80
-rw-r--r--examples/datavisualization/surface/doc/images/surface-example.pngbin149046 -> 0 bytes
-rw-r--r--examples/datavisualization/surface/doc/src/surface.qdoc147
-rw-r--r--examples/datavisualization/surface/main.cpp230
-rw-r--r--examples/datavisualization/surface/mountain.pngbin34540 -> 0 bytes
-rw-r--r--examples/datavisualization/surface/surface.pro20
-rw-r--r--examples/datavisualization/surface/surface.qrc5
-rw-r--r--examples/datavisualization/surface/surfacegraph.cpp279
-rw-r--r--examples/datavisualization/surface/surfacegraph.h99
-rw-r--r--examples/datavisualization/texturesurface/custominputhandler.h102
-rw-r--r--examples/datavisualization/texturesurface/doc/images/texturesurface-example.pngbin157373 -> 0 bytes
-rw-r--r--examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc137
-rw-r--r--examples/datavisualization/texturesurface/highlightseries.h63
-rw-r--r--examples/datavisualization/texturesurface/main.cpp120
-rw-r--r--examples/datavisualization/texturesurface/surfacegraph.cpp101
-rw-r--r--examples/datavisualization/texturesurface/surfacegraph.h63
-rw-r--r--examples/datavisualization/texturesurface/texturedsurface.qrc6
-rw-r--r--examples/datavisualization/texturesurface/texturesurface.pro25
-rw-r--r--examples/datavisualization/texturesurface/topographicseries.cpp84
-rw-r--r--examples/datavisualization/texturesurface/topographicseries.h56
-rw-r--r--examples/datavisualization/volumetric/CMakeLists.txt56
-rw-r--r--examples/datavisualization/volumetric/doc/images/volumetric-example.pngbin177203 -> 169556 bytes
-rw-r--r--examples/datavisualization/volumetric/doc/src/volumetric.qdoc127
-rw-r--r--examples/datavisualization/volumetric/main.cpp58
-rw-r--r--examples/datavisualization/volumetric/volumetric.cpp153
-rw-r--r--examples/datavisualization/volumetric/volumetric.h106
-rw-r--r--licenseRule.json89
-rw-r--r--qtdatavis3d.pro9
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/datavisualization/CMakeLists.txt430
-rw-r--r--src/datavisualization/axis/axis.pri20
-rw-r--r--src/datavisualization/axis/qabstract3daxis.cpp34
-rw-r--r--src/datavisualization/axis/qabstract3daxis.h48
-rw-r--r--src/datavisualization/axis/qabstract3daxis_p.h34
-rw-r--r--src/datavisualization/axis/qcategory3daxis.cpp34
-rw-r--r--src/datavisualization/axis/qcategory3daxis.h36
-rw-r--r--src/datavisualization/axis/qcategory3daxis_p.h40
-rw-r--r--src/datavisualization/axis/qlogvalue3daxisformatter.cpp34
-rw-r--r--src/datavisualization/axis/qlogvalue3daxisformatter.h46
-rw-r--r--src/datavisualization/axis/qlogvalue3daxisformatter_p.h34
-rw-r--r--src/datavisualization/axis/qvalue3daxis.cpp34
-rw-r--r--src/datavisualization/axis/qvalue3daxis.h44
-rw-r--r--src/datavisualization/axis/qvalue3daxis_p.h48
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter.cpp34
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter.h36
-rw-r--r--src/datavisualization/axis/qvalue3daxisformatter_p.h34
-rw-r--r--src/datavisualization/configure.cmake7
-rw-r--r--src/datavisualization/data/abstractitemmodelhandler.cpp34
-rw-r--r--src/datavisualization/data/abstractitemmodelhandler_p.h36
-rw-r--r--src/datavisualization/data/abstractrenderitem.cpp34
-rw-r--r--src/datavisualization/data/abstractrenderitem_p.h39
-rw-r--r--src/datavisualization/data/baritemmodelhandler.cpp48
-rw-r--r--src/datavisualization/data/baritemmodelhandler_p.h44
-rw-r--r--src/datavisualization/data/barrenderitem.cpp34
-rw-r--r--src/datavisualization/data/barrenderitem_p.h36
-rw-r--r--src/datavisualization/data/customrenderitem.cpp37
-rw-r--r--src/datavisualization/data/customrenderitem_p.h36
-rw-r--r--src/datavisualization/data/data.pri77
-rw-r--r--src/datavisualization/data/labelitem.cpp34
-rw-r--r--src/datavisualization/data/labelitem_p.h36
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp34
-rw-r--r--src/datavisualization/data/qabstract3dseries.h46
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h34
-rw-r--r--src/datavisualization/data/qabstractdataproxy.cpp34
-rw-r--r--src/datavisualization/data/qabstractdataproxy.h36
-rw-r--r--src/datavisualization/data/qabstractdataproxy_p.h34
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp77
-rw-r--r--src/datavisualization/data/qbar3dseries.h41
-rw-r--r--src/datavisualization/data/qbar3dseries_p.h44
-rw-r--r--src/datavisualization/data/qbardataitem.cpp34
-rw-r--r--src/datavisualization/data/qbardataitem.h36
-rw-r--r--src/datavisualization/data/qbardataitem_p.h34
-rw-r--r--src/datavisualization/data/qbardataproxy.cpp34
-rw-r--r--src/datavisualization/data/qbardataproxy.h36
-rw-r--r--src/datavisualization/data/qbardataproxy_p.h36
-rw-r--r--src/datavisualization/data/qcustom3ditem.cpp41
-rw-r--r--src/datavisualization/data/qcustom3ditem.h41
-rw-r--r--src/datavisualization/data/qcustom3ditem_p.h34
-rw-r--r--src/datavisualization/data/qcustom3dlabel.cpp34
-rw-r--r--src/datavisualization/data/qcustom3dlabel.h36
-rw-r--r--src/datavisualization/data/qcustom3dlabel_p.h34
-rw-r--r--src/datavisualization/data/qcustom3dvolume.cpp34
-rw-r--r--src/datavisualization/data/qcustom3dvolume.h36
-rw-r--r--src/datavisualization/data/qcustom3dvolume_p.h34
-rw-r--r--src/datavisualization/data/qheightmapsurfacedataproxy.cpp260
-rw-r--r--src/datavisualization/data/qheightmapsurfacedataproxy.h48
-rw-r--r--src/datavisualization/data/qheightmapsurfacedataproxy_p.h40
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy.cpp70
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy.h90
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy_p.h42
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy.cpp70
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy.h86
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy_p.h42
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy.cpp78
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy.h102
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy_p.h44
-rw-r--r--src/datavisualization/data/qscatter3dseries.cpp34
-rw-r--r--src/datavisualization/data/qscatter3dseries.h36
-rw-r--r--src/datavisualization/data/qscatter3dseries_p.h40
-rw-r--r--src/datavisualization/data/qscatterdataitem.cpp34
-rw-r--r--src/datavisualization/data/qscatterdataitem.h36
-rw-r--r--src/datavisualization/data/qscatterdataitem_p.h34
-rw-r--r--src/datavisualization/data/qscatterdataproxy.cpp34
-rw-r--r--src/datavisualization/data/qscatterdataproxy.h36
-rw-r--r--src/datavisualization/data/qscatterdataproxy_p.h36
-rw-r--r--src/datavisualization/data/qsurface3dseries.cpp68
-rw-r--r--src/datavisualization/data/qsurface3dseries.h44
-rw-r--r--src/datavisualization/data/qsurface3dseries_p.h42
-rw-r--r--src/datavisualization/data/qsurfacedataitem.cpp34
-rw-r--r--src/datavisualization/data/qsurfacedataitem.h36
-rw-r--r--src/datavisualization/data/qsurfacedataitem_p.h34
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.cpp126
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.h36
-rw-r--r--src/datavisualization/data/qsurfacedataproxy_p.h36
-rw-r--r--src/datavisualization/data/scatteritemmodelhandler.cpp44
-rw-r--r--src/datavisualization/data/scatteritemmodelhandler_p.h52
-rw-r--r--src/datavisualization/data/scatterrenderitem.cpp34
-rw-r--r--src/datavisualization/data/scatterrenderitem_p.h35
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler.cpp64
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler_p.h46
-rw-r--r--src/datavisualization/datavisualization.pro25
-rw-r--r--src/datavisualization/doc/qtdatavis3d.qdocconf70
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp33
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp33
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp33
-rw-r--r--src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp32
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp30
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp32
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro30
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-index.qdoc79
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-overview.qdoc48
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc57
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc45
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc30
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc32
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc36
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc36
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization.qdoc72
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp62
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h43
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp83
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h44
-rw-r--r--src/datavisualization/engine/abstractdeclarativeinterface.cpp11
-rw-r--r--src/datavisualization/engine/abstractdeclarativeinterface_p.h31
-rw-r--r--src/datavisualization/engine/axisrendercache.cpp36
-rw-r--r--src/datavisualization/engine/axisrendercache_p.h34
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp59
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h81
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp92
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h87
-rw-r--r--src/datavisualization/engine/barseriesrendercache.cpp34
-rw-r--r--src/datavisualization/engine/barseriesrendercache_p.h36
-rw-r--r--src/datavisualization/engine/drawer.cpp47
-rw-r--r--src/datavisualization/engine/drawer_p.h45
-rw-r--r--src/datavisualization/engine/engine.pri61
-rw-r--r--src/datavisualization/engine/engine.qrc74
-rw-r--r--src/datavisualization/engine/q3dbars.cpp71
-rw-r--r--src/datavisualization/engine/q3dbars.h41
-rw-r--r--src/datavisualization/engine/q3dbars_p.h40
-rw-r--r--src/datavisualization/engine/q3dcamera.cpp34
-rw-r--r--src/datavisualization/engine/q3dcamera.h50
-rw-r--r--src/datavisualization/engine/q3dcamera_p.h36
-rw-r--r--src/datavisualization/engine/q3dlight.cpp34
-rw-r--r--src/datavisualization/engine/q3dlight.h40
-rw-r--r--src/datavisualization/engine/q3dlight_p.h34
-rw-r--r--src/datavisualization/engine/q3dobject.cpp34
-rw-r--r--src/datavisualization/engine/q3dobject.h36
-rw-r--r--src/datavisualization/engine/q3dobject_p.h34
-rw-r--r--src/datavisualization/engine/q3dscatter.cpp44
-rw-r--r--src/datavisualization/engine/q3dscatter.h36
-rw-r--r--src/datavisualization/engine/q3dscatter_p.h40
-rw-r--r--src/datavisualization/engine/q3dscene.cpp34
-rw-r--r--src/datavisualization/engine/q3dscene.h40
-rw-r--r--src/datavisualization/engine/q3dscene_p.h40
-rw-r--r--src/datavisualization/engine/q3dsurface.cpp44
-rw-r--r--src/datavisualization/engine/q3dsurface.h36
-rw-r--r--src/datavisualization/engine/q3dsurface_p.h40
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp61
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.h65
-rw-r--r--src/datavisualization/engine/qabstract3dgraph_p.h34
-rw-r--r--src/datavisualization/engine/scatter3dcontroller.cpp36
-rw-r--r--src/datavisualization/engine/scatter3dcontroller_p.h64
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp46
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h88
-rw-r--r--src/datavisualization/engine/scatterseriesrendercache.cpp34
-rw-r--r--src/datavisualization/engine/scatterseriesrendercache_p.h36
-rw-r--r--src/datavisualization/engine/selectionpointer.cpp40
-rw-r--r--src/datavisualization/engine/selectionpointer_p.h34
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp34
-rw-r--r--src/datavisualization/engine/seriesrendercache_p.h34
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp36
-rw-r--r--src/datavisualization/engine/surface3dcontroller_p.h64
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp36
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h78
-rw-r--r--src/datavisualization/engine/surfaceseriesrendercache.cpp38
-rw-r--r--src/datavisualization/engine/surfaceseriesrendercache_p.h38
-rw-r--r--src/datavisualization/global/datavisualizationglobal_p.h35
-rw-r--r--src/datavisualization/global/global.pri5
-rw-r--r--src/datavisualization/global/qdatavisualizationglobal.h51
-rw-r--r--src/datavisualization/input/input.pri14
-rw-r--r--src/datavisualization/input/q3dinputhandler.cpp36
-rw-r--r--src/datavisualization/input/q3dinputhandler.h44
-rw-r--r--src/datavisualization/input/q3dinputhandler_p.h34
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler.cpp34
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler.h36
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler_p.h34
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.cpp52
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.h38
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler_p.h34
-rw-r--r--src/datavisualization/theme/q3dtheme.cpp58
-rw-r--r--src/datavisualization/theme/q3dtheme.h38
-rw-r--r--src/datavisualization/theme/q3dtheme_p.h38
-rw-r--r--src/datavisualization/theme/theme.pri10
-rw-r--r--src/datavisualization/theme/thememanager.cpp37
-rw-r--r--src/datavisualization/theme/thememanager_p.h34
-rw-r--r--src/datavisualization/utils/abstractobjecthelper.cpp34
-rw-r--r--src/datavisualization/utils/abstractobjecthelper_p.h34
-rw-r--r--src/datavisualization/utils/camerahelper.cpp34
-rw-r--r--src/datavisualization/utils/camerahelper_p.h34
-rw-r--r--src/datavisualization/utils/meshloader.cpp38
-rw-r--r--src/datavisualization/utils/meshloader_p.h34
-rw-r--r--src/datavisualization/utils/objecthelper.cpp120
-rw-r--r--src/datavisualization/utils/objecthelper_p.h34
-rw-r--r--src/datavisualization/utils/qutils.h40
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper.cpp70
-rw-r--r--src/datavisualization/utils/scatterobjectbufferhelper_p.h35
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper.cpp35
-rw-r--r--src/datavisualization/utils/scatterpointbufferhelper_p.h34
-rw-r--r--src/datavisualization/utils/shaderhelper.cpp41
-rw-r--r--src/datavisualization/utils/shaderhelper_p.h34
-rw-r--r--src/datavisualization/utils/surfaceobject.cpp37
-rw-r--r--src/datavisualization/utils/surfaceobject_p.h41
-rw-r--r--src/datavisualization/utils/texturehelper.cpp54
-rw-r--r--src/datavisualization/utils/texturehelper_p.h42
-rw-r--r--src/datavisualization/utils/utils.cpp62
-rw-r--r--src/datavisualization/utils/utils.pri26
-rw-r--r--src/datavisualization/utils/utils_p.h34
-rw-r--r--src/datavisualization/utils/vertexindexer.cpp35
-rw-r--r--src/datavisualization/utils/vertexindexer_p.h34
-rw-r--r--src/datavisualizationqml/CMakeLists.txt66
-rw-r--r--src/datavisualizationqml/abstractdeclarative.cpp (renamed from src/datavisualizationqml2/abstractdeclarative.cpp)112
-rw-r--r--src/datavisualizationqml/abstractdeclarative_p.h (renamed from src/datavisualizationqml2/abstractdeclarative_p.h)161
-rw-r--r--src/datavisualizationqml/colorgradient.cpp62
-rw-r--r--src/datavisualizationqml/colorgradient_p.h79
-rw-r--r--src/datavisualizationqml/declarativebars.cpp (renamed from src/datavisualizationqml2/declarativebars.cpp)53
-rw-r--r--src/datavisualizationqml/declarativebars_p.h (renamed from src/datavisualizationqml2/declarativebars_p.h)66
-rw-r--r--src/datavisualizationqml/declarativecolor.cpp26
-rw-r--r--src/datavisualizationqml/declarativecolor_p.h46
-rw-r--r--src/datavisualizationqml/declarativerendernode.cpp (renamed from src/datavisualizationqml2/declarativerendernode.cpp)38
-rw-r--r--src/datavisualizationqml/declarativerendernode_p.h (renamed from src/datavisualizationqml2/declarativerendernode_p.h)38
-rw-r--r--src/datavisualizationqml/declarativescatter.cpp (renamed from src/datavisualizationqml2/declarativescatter.cpp)39
-rw-r--r--src/datavisualizationqml/declarativescatter_p.h (renamed from src/datavisualizationqml2/declarativescatter_p.h)52
-rw-r--r--src/datavisualizationqml/declarativescene.cpp34
-rw-r--r--src/datavisualizationqml/declarativescene_p.h50
-rw-r--r--src/datavisualizationqml/declarativeseries.cpp (renamed from src/datavisualizationqml2/declarativeseries.cpp)135
-rw-r--r--src/datavisualizationqml/declarativeseries_p.h (renamed from src/datavisualizationqml2/declarativeseries_p.h)71
-rw-r--r--src/datavisualizationqml/declarativesurface.cpp (renamed from src/datavisualizationqml2/declarativesurface.cpp)39
-rw-r--r--src/datavisualizationqml/declarativesurface_p.h (renamed from src/datavisualizationqml2/declarativesurface_p.h)56
-rw-r--r--src/datavisualizationqml/declarativetheme.cpp (renamed from src/datavisualizationqml2/declarativetheme.cpp)44
-rw-r--r--src/datavisualizationqml/declarativetheme_p.h (renamed from src/datavisualizationqml2/declarativetheme_p.h)58
-rw-r--r--src/datavisualizationqml/designer/Bars3DSpecifics.qml (renamed from src/datavisualizationqml2/designer/Bars3DSpecifics.qml)30
-rw-r--r--src/datavisualizationqml/designer/Scatter3DSpecifics.qml (renamed from src/datavisualizationqml2/designer/Scatter3DSpecifics.qml)30
-rw-r--r--src/datavisualizationqml/designer/Surface3DSpecifics.qml (renamed from src/datavisualizationqml2/designer/Surface3DSpecifics.qml)30
-rw-r--r--src/datavisualizationqml/designer/default/Bars3D.qml23
-rw-r--r--src/datavisualizationqml/designer/default/Scatter3D.qml23
-rw-r--r--src/datavisualizationqml/designer/default/Surface3D.qml24
-rw-r--r--src/datavisualizationqml/designer/images/bars3d-icon.png (renamed from src/datavisualizationqml2/designer/images/bars3d-icon.png)bin1352 -> 1352 bytes
-rw-r--r--src/datavisualizationqml/designer/images/bars3d-icon16.png (renamed from src/datavisualizationqml2/designer/images/bars3d-icon16.png)bin1232 -> 1232 bytes
-rw-r--r--src/datavisualizationqml/designer/images/scatter3d-icon.png (renamed from src/datavisualizationqml2/designer/images/scatter3d-icon.png)bin1271 -> 1271 bytes
-rw-r--r--src/datavisualizationqml/designer/images/scatter3d-icon16.png (renamed from src/datavisualizationqml2/designer/images/scatter3d-icon16.png)bin1146 -> 1146 bytes
-rw-r--r--src/datavisualizationqml/designer/images/surface3d-icon.png (renamed from src/datavisualizationqml2/designer/images/surface3d-icon.png)bin1413 -> 1413 bytes
-rw-r--r--src/datavisualizationqml/designer/images/surface3d-icon16.png (renamed from src/datavisualizationqml2/designer/images/surface3d-icon16.png)bin1231 -> 1231 bytes
-rw-r--r--src/datavisualizationqml/designer/qtdatavisualization.metainfo (renamed from src/datavisualizationqml2/designer/qtdatavisualization.metainfo)0
-rw-r--r--src/datavisualizationqml/enumtostringmap.cpp (renamed from src/datavisualizationqml2/enumtostringmap.cpp)32
-rw-r--r--src/datavisualizationqml/enumtostringmap_p.h39
-rw-r--r--src/datavisualizationqml/foreigntypes_p.h122
-rw-r--r--src/datavisualizationqml/glstatestore.cpp (renamed from src/datavisualizationqml2/glstatestore.cpp)42
-rw-r--r--src/datavisualizationqml/glstatestore_p.h (renamed from src/datavisualizationqml2/glstatestore_p.h)32
-rw-r--r--src/datavisualizationqml2/colorgradient.cpp88
-rw-r--r--src/datavisualizationqml2/colorgradient_p.h99
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2.pro55
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.cpp153
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.h135
-rw-r--r--src/datavisualizationqml2/declarativecolor.cpp52
-rw-r--r--src/datavisualizationqml2/declarativecolor_p.h68
-rw-r--r--src/datavisualizationqml2/declarativescene.cpp60
-rw-r--r--src/datavisualizationqml2/declarativescene_p.h71
-rw-r--r--src/datavisualizationqml2/designer/default/Bars3D.qml49
-rw-r--r--src/datavisualizationqml2/designer/default/Scatter3D.qml49
-rw-r--r--src/datavisualizationqml2/designer/default/Surface3D.qml50
-rw-r--r--src/datavisualizationqml2/designer/designer.pri19
-rw-r--r--src/datavisualizationqml2/enumtostringmap_p.h64
-rw-r--r--src/datavisualizationqml2/plugins.qmltypes2375
-rw-r--r--src/datavisualizationqml2/qmldir4
-rw-r--r--src/src.pro5
-rw-r--r--sync.profile17
-rw-r--r--tests/CMakeLists.txt6
-rw-r--r--tests/auto/CMakeLists.txt9
-rw-r--r--tests/auto/auto.pro10
-rw-r--r--tests/auto/cpptest/CMakeLists.txt29
-rw-r--r--tests/auto/cpptest/common/cpptestutil.h29
-rw-r--r--tests/auto/cpptest/common/cpptestutil.pri2
-rw-r--r--tests/auto/cpptest/cpptest.pro26
-rw-r--r--tests/auto/cpptest/q3daxis-category/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3daxis-category/q3daxis-category.pro8
-rw-r--r--tests/auto/cpptest/q3daxis-category/tst_axis.cpp36
-rw-r--r--tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3daxis-logvalue/q3daxis-logvalue.pro8
-rw-r--r--tests/auto/cpptest/q3daxis-logvalue/tst_axis.cpp32
-rw-r--r--tests/auto/cpptest/q3daxis-value/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3daxis-value/q3daxis-value.pro8
-rw-r--r--tests/auto/cpptest/q3daxis-value/tst_axis.cpp36
-rw-r--r--tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt14
-rw-r--r--tests/auto/cpptest/q3dbars-modelproxy/q3dbars-modelproxy.pro9
-rw-r--r--tests/auto/cpptest/q3dbars-modelproxy/tst_proxy.cpp95
-rw-r--r--tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dbars-proxy/q3dbars-proxy.pro8
-rw-r--r--tests/auto/cpptest/q3dbars-proxy/tst_proxy.cpp40
-rw-r--r--tests/auto/cpptest/q3dbars-series/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dbars-series/q3dbars-series.pro8
-rw-r--r--tests/auto/cpptest/q3dbars-series/tst_series.cpp45
-rw-r--r--tests/auto/cpptest/q3dbars/CMakeLists.txt13
-rw-r--r--tests/auto/cpptest/q3dbars/q3dbars.pro10
-rw-r--r--tests/auto/cpptest/q3dbars/tst_bars.cpp95
-rw-r--r--tests/auto/cpptest/q3dcustom-label/CMakeLists.txt13
-rw-r--r--tests/auto/cpptest/q3dcustom-label/q3dcustom-label.pro9
-rw-r--r--tests/auto/cpptest/q3dcustom-label/tst_custom.cpp54
-rw-r--r--tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dcustom-volume/q3dcustom-volume.pro8
-rw-r--r--tests/auto/cpptest/q3dcustom-volume/tst_custom.cpp56
-rw-r--r--tests/auto/cpptest/q3dcustom/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dcustom/q3dcustom.pro8
-rw-r--r--tests/auto/cpptest/q3dcustom/tst_custom.cpp54
-rw-r--r--tests/auto/cpptest/q3dinput-touch/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dinput-touch/q3dinput-touch.pro8
-rw-r--r--tests/auto/cpptest/q3dinput-touch/tst_input.cpp32
-rw-r--r--tests/auto/cpptest/q3dinput/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dinput/q3dinput.pro8
-rw-r--r--tests/auto/cpptest/q3dinput/tst_input.cpp32
-rw-r--r--tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt11
-rw-r--r--tests/auto/cpptest/q3dscatter-modelproxy/q3dscatter-modelproxy.pro8
-rw-r--r--tests/auto/cpptest/q3dscatter-modelproxy/tst_proxy.cpp63
-rw-r--r--tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dscatter-proxy/q3dscatter-proxy.pro8
-rw-r--r--tests/auto/cpptest/q3dscatter-proxy/tst_proxy.cpp32
-rw-r--r--tests/auto/cpptest/q3dscatter-series/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dscatter-series/q3dscatter-series.pro8
-rw-r--r--tests/auto/cpptest/q3dscatter-series/tst_series.cpp32
-rw-r--r--tests/auto/cpptest/q3dscatter/CMakeLists.txt13
-rw-r--r--tests/auto/cpptest/q3dscatter/q3dscatter.pro9
-rw-r--r--tests/auto/cpptest/q3dscatter/tst_scatter.cpp64
-rw-r--r--tests/auto/cpptest/q3dscene-camera/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dscene-camera/q3dscene-camera.pro8
-rw-r--r--tests/auto/cpptest/q3dscene-camera/tst_camera.cpp58
-rw-r--r--tests/auto/cpptest/q3dscene-light/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dscene-light/q3dscene-light.pro8
-rw-r--r--tests/auto/cpptest/q3dscene-light/tst_light.cpp36
-rw-r--r--tests/auto/cpptest/q3dscene/CMakeLists.txt13
-rw-r--r--tests/auto/cpptest/q3dscene/q3dscene.pro9
-rw-r--r--tests/auto/cpptest/q3dscene/tst_scene.cpp32
-rw-r--r--tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt21
-rw-r--r--tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.pro11
-rw-r--r--tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.qrc5
-rw-r--r--tests/auto/cpptest/q3dsurface-heightproxy/tst_proxy.cpp34
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt14
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy-nan/tst_proxy.cpp266
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt14
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy/q3dsurface-modelproxy.pro9
-rw-r--r--tests/auto/cpptest/q3dsurface-modelproxy/tst_proxy.cpp93
-rw-r--r--tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dsurface-proxy/q3dsurface-proxy.pro8
-rw-r--r--tests/auto/cpptest/q3dsurface-proxy/tst_proxy.cpp42
-rw-r--r--tests/auto/cpptest/q3dsurface-series/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dsurface-series/q3dsurface-series.pro8
-rw-r--r--tests/auto/cpptest/q3dsurface-series/tst_series.cpp36
-rw-r--r--tests/auto/cpptest/q3dsurface/CMakeLists.txt13
-rw-r--r--tests/auto/cpptest/q3dsurface/q3dsurface.pro9
-rw-r--r--tests/auto/cpptest/q3dsurface/tst_surface.cpp64
-rw-r--r--tests/auto/cpptest/q3dtheme/CMakeLists.txt10
-rw-r--r--tests/auto/cpptest/q3dtheme/q3dtheme.pro8
-rw-r--r--tests/auto/cpptest/q3dtheme/tst_theme.cpp44
-rw-r--r--tests/auto/qmltest/CMakeLists.txt28
-rw-r--r--tests/auto/qmltest/axis3d/tst_category.qml30
-rw-r--r--tests/auto/qmltest/axis3d/tst_logvalue.qml30
-rw-r--r--tests/auto/qmltest/axis3d/tst_value.qml30
-rw-r--r--tests/auto/qmltest/bars3d/tst_bars.qml48
-rw-r--r--tests/auto/qmltest/bars3d/tst_barseries.qml55
-rw-r--r--tests/auto/qmltest/bars3d/tst_basic.qml121
-rw-r--r--tests/auto/qmltest/bars3d/tst_proxy.qml32
-rw-r--r--tests/auto/qmltest/custom3d/tst_customitem.qml30
-rw-r--r--tests/auto/qmltest/custom3d/tst_customlabel.qml30
-rw-r--r--tests/auto/qmltest/custom3d/tst_customvolume.qml30
-rw-r--r--tests/auto/qmltest/input3d/tst_input.qml30
-rw-r--r--tests/auto/qmltest/input3d/tst_touch.qml30
-rw-r--r--tests/auto/qmltest/qmltest.pro35
-rw-r--r--tests/auto/qmltest/qmltest.qrc6
-rw-r--r--tests/auto/qmltest/scatter3d/tst_basic.qml115
-rw-r--r--tests/auto/qmltest/scatter3d/tst_proxy.qml30
-rw-r--r--tests/auto/qmltest/scatter3d/tst_scatter.qml38
-rw-r--r--tests/auto/qmltest/scatter3d/tst_scatterseries.qml30
-rw-r--r--tests/auto/qmltest/scene3d/tst_camera.qml30
-rw-r--r--tests/auto/qmltest/scene3d/tst_light.qml30
-rw-r--r--tests/auto/qmltest/scene3d/tst_scene.qml36
-rw-r--r--tests/auto/qmltest/surface3d/tst_basic.qml111
-rw-r--r--tests/auto/qmltest/surface3d/tst_heightproxy.qml30
-rw-r--r--tests/auto/qmltest/surface3d/tst_proxy.qml30
-rw-r--r--tests/auto/qmltest/surface3d/tst_surface.qml38
-rw-r--r--tests/auto/qmltest/surface3d/tst_surfaceseries.qml37
-rw-r--r--tests/auto/qmltest/theme3d/tst_colorgradient.qml30
-rw-r--r--tests/auto/qmltest/theme3d/tst_theme.qml30
-rw-r--r--tests/auto/qmltest/theme3d/tst_themecolor.qml30
-rw-r--r--tests/auto/qmltest/tst_qmltest.cpp61
-rw-r--r--tests/manual/CMakeLists.txt24
-rw-r--r--tests/manual/barstest/CMakeLists.txt33
-rw-r--r--tests/manual/barstest/buttonwrapper.cpp14
-rw-r--r--tests/manual/barstest/buttonwrapper.h22
-rw-r--r--tests/manual/barstest/chart.cpp76
-rw-r--r--tests/manual/barstest/chart.h62
-rw-r--r--tests/manual/barstest/custominputhandler.cpp30
-rw-r--r--tests/manual/barstest/custominputhandler.h36
-rw-r--r--tests/manual/barstest/main.cpp150
-rw-r--r--tests/manual/barstest/sliderwrapper.cpp13
-rw-r--r--tests/manual/barstest/sliderwrapper.h23
-rw-r--r--tests/manual/directional/CMakeLists.txt16
-rw-r--r--tests/manual/directional/main.cpp31
-rw-r--r--tests/manual/directional/scatterdatamodifier.cpp32
-rw-r--r--tests/manual/directional/scatterdatamodifier.h34
-rw-r--r--tests/manual/galaxy/CMakeLists.txt14
-rw-r--r--tests/manual/galaxy/cumulativedistributor.cpp30
-rw-r--r--tests/manual/galaxy/cumulativedistributor.h30
-rw-r--r--tests/manual/galaxy/galaxydata.cpp30
-rw-r--r--tests/manual/galaxy/galaxydata.h30
-rw-r--r--tests/manual/galaxy/main.cpp30
-rw-r--r--tests/manual/galaxy/star.cpp30
-rw-r--r--tests/manual/galaxy/star.h30
-rw-r--r--tests/manual/itemmodeltest/CMakeLists.txt13
-rw-r--r--tests/manual/itemmodeltest/main.cpp49
-rw-r--r--tests/manual/minimalbars/CMakeLists.txt12
-rw-r--r--tests/manual/minimalscatter/CMakeLists.txt12
-rw-r--r--tests/manual/minimalsurface/CMakeLists.txt12
-rw-r--r--tests/manual/multigraphs/CMakeLists.txt27
-rw-r--r--tests/manual/multigraphs/data.cpp32
-rw-r--r--tests/manual/multigraphs/data.h32
-rw-r--r--tests/manual/multigraphs/main.cpp31
-rw-r--r--tests/manual/qmlbarsrowcolors/CMakeLists.txt31
-rw-r--r--tests/manual/qmlbarsrowcolors/main.cpp33
-rw-r--r--tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Axes.qml41
-rw-r--r--tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Data.qml118
-rw-r--r--tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/main.qml392
-rw-r--r--tests/manual/qmldynamicdata/CMakeLists.txt25
-rw-r--r--tests/manual/qmldynamicdata/main.cpp31
-rw-r--r--tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml54
-rw-r--r--tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml60
-rw-r--r--tests/manual/qmldynamicdata/qmldynamicdata.qrc1
-rw-r--r--tests/manual/qmlgradient/CMakeLists.txt30
-rw-r--r--tests/manual/qmlgradient/crater.pngbin0 -> 28296 bytes
-rw-r--r--tests/manual/qmlgradient/main.cpp37
-rw-r--r--tests/manual/qmlgradient/qml.qrc (renamed from examples/datavisualization/custominput/custominput.qrc)2
-rw-r--r--tests/manual/qmlgradient/qml/qmlgradient/main.qml191
-rw-r--r--tests/manual/qmlheightmap/CMakeLists.txt43
-rw-r--r--tests/manual/qmlheightmap/gradientGRAY16.pngbin0 -> 12392 bytes
-rw-r--r--tests/manual/qmlheightmap/gradientGRAY8.pngbin0 -> 26548 bytes
-rw-r--r--tests/manual/qmlheightmap/gradientRGB16.pngbin0 -> 12516 bytes
-rw-r--r--tests/manual/qmlheightmap/gradientRGB8.pngbin0 -> 26548 bytes
-rw-r--r--tests/manual/qmlheightmap/main.cpp37
-rw-r--r--tests/manual/qmlheightmap/qml.qrc (renamed from examples/datavisualization/customproxy/customproxy.qrc)2
-rw-r--r--tests/manual/qmlheightmap/qml/qmlheightmap/main.qml181
-rw-r--r--tests/manual/qmlmultitest/CMakeLists.txt26
-rw-r--r--tests/manual/qmlmultitest/main.cpp31
-rw-r--r--tests/manual/qmlmultitest/qml/qmlmultitest/Data.qml32
-rw-r--r--tests/manual/qmlmultitest/qml/qmlmultitest/NewButton.qml63
-rw-r--r--tests/manual/qmlmultitest/qml/qmlmultitest/main.qml52
-rw-r--r--tests/manual/qmlmultitest/qmlmultitest.qrc1
-rw-r--r--tests/manual/qmlperf/CMakeLists.txt28
-rw-r--r--tests/manual/qmlperf/datagenerator.cpp32
-rw-r--r--tests/manual/qmlperf/datagenerator.h32
-rw-r--r--tests/manual/qmlperf/main.cpp31
-rw-r--r--tests/manual/qmlperf/qml/qmlperf/main.qml60
-rw-r--r--tests/manual/qmlvolume/CMakeLists.txt28
-rw-r--r--tests/manual/qmlvolume/datasource.cpp34
-rw-r--r--tests/manual/qmlvolume/datasource.h32
-rw-r--r--tests/manual/qmlvolume/main.cpp31
-rw-r--r--tests/manual/qmlvolume/qml/qmlvolume/NewButton.qml63
-rw-r--r--tests/manual/qmlvolume/qml/qmlvolume/main.qml93
-rw-r--r--tests/manual/qmlvolume/qmlvolume.qrc1
-rw-r--r--tests/manual/scattertest/CMakeLists.txt18
-rw-r--r--tests/manual/scattertest/main.cpp31
-rw-r--r--tests/manual/scattertest/scatterchart.cpp45
-rw-r--r--tests/manual/scattertest/scatterchart.h44
-rw-r--r--tests/manual/surfacetest/CMakeLists.txt38
-rw-r--r--tests/manual/surfacetest/buttonwrapper.cpp14
-rw-r--r--tests/manual/surfacetest/buttonwrapper.h22
-rw-r--r--tests/manual/surfacetest/checkboxwrapper.cpp14
-rw-r--r--tests/manual/surfacetest/checkboxwrapper.h23
-rw-r--r--tests/manual/surfacetest/graphmodifier.cpp89
-rw-r--r--tests/manual/surfacetest/graphmodifier.h88
-rw-r--r--tests/manual/surfacetest/main.cpp84
-rw-r--r--tests/manual/volumetrictest/CMakeLists.txt33
-rw-r--r--tests/manual/volumetrictest/main.cpp31
-rw-r--r--tests/manual/volumetrictest/volumetrictest.cpp32
-rw-r--r--tests/manual/volumetrictest/volumetrictest.h32
-rw-r--r--tests/tests.pro11
748 files changed, 14762 insertions, 43294 deletions
diff --git a/.cmake.conf b/.cmake.conf
new file mode 100644
index 00000000..dc1d7a92
--- /dev/null
+++ b/.cmake.conf
@@ -0,0 +1,5 @@
+set(QT_REPO_MODULE_VERSION "6.8.0")
+set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
+set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1")
+list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1")
diff --git a/.qmake.conf b/.qmake.conf
deleted file mode 100644
index cd48c853..00000000
--- a/.qmake.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-load(qt_build_config)
-
-DEFINES += QT_NO_JAVA_STYLE_ITERATORS
-
-MODULE_VERSION = 6.0.0
-CONFIG += warning_clean
-CMAKE_MODULE_TESTS=-
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..f5428101
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+include(.cmake.conf)
+project(QtDataVisualization
+ VERSION "${QT_REPO_MODULE_VERSION}"
+ DESCRIPTION "Qt Data Visualization Libraries"
+ HOMEPAGE_URL "https://qt.io/"
+ LANGUAGES CXX C
+)
+
+find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals)
+find_package(Qt6 ${PROJECT_VERSION} CONFIG OPTIONAL_COMPONENTS
+ Core OpenGL Quick Qml Gui Widgets QuickTest Test)
+qt_internal_project_setup()
+
+macro(assertTargets)
+ foreach(qtTarget IN ITEMS ${ARGN})
+ if(NOT TARGET Qt::${qtTarget})
+ message(NOTICE "Skipping the build as the condition \"TARGET Qt::${qtTarget}\" is not met.")
+ return()
+ endif()
+ endforeach()
+endmacro()
+
+assertTargets(Gui Widgets OpenGL Quick Qml QuickTest Test)
+
+qt_build_repo()
diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt
new file mode 100644
index 00000000..b91bbd89
--- /dev/null
+++ b/LICENSES/BSD-3-Clause.txt
@@ -0,0 +1,9 @@
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSES/GFDL-1.3-no-invariants-only.txt b/LICENSES/GFDL-1.3-no-invariants-only.txt
new file mode 100644
index 00000000..857214dd
--- /dev/null
+++ b/LICENSES/GFDL-1.3-no-invariants-only.txt
@@ -0,0 +1,451 @@
+
+ GNU Free Documentation License
+ Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns. See
+https://www.gnu.org/licenses/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/LICENSE.GPL3 b/LICENSES/GPL-3.0-only.txt
index 94a9ed02..94a9ed02 100644
--- a/LICENSE.GPL3
+++ b/LICENSES/GPL-3.0-only.txt
diff --git a/LICENSES/LicenseRef-Qt-Commercial.txt b/LICENSES/LicenseRef-Qt-Commercial.txt
new file mode 100644
index 00000000..825b1f35
--- /dev/null
+++ b/LICENSES/LicenseRef-Qt-Commercial.txt
@@ -0,0 +1,8 @@
+Licensees holding valid commercial Qt licenses may use this software in
+accordance with the the terms contained in a written agreement between
+you and The Qt Company. Alternatively, the terms and conditions that were
+accepted by the licensee when buying and/or downloading the
+software do apply.
+
+For the latest licensing terms and conditions, see https://www.qt.io/terms-conditions.
+For further information use the contact form at https://www.qt.io/contact-us.
diff --git a/LICENSES/Qt-GPL-exception-1.0.txt b/LICENSES/Qt-GPL-exception-1.0.txt
new file mode 100644
index 00000000..d0322bf0
--- /dev/null
+++ b/LICENSES/Qt-GPL-exception-1.0.txt
@@ -0,0 +1,22 @@
+The Qt Company GPL Exception 1.0
+
+Exception 1:
+
+As a special exception you may create a larger work which contains the
+output of this application and distribute that work under terms of your
+choice, so long as the work is not otherwise derived from or based on
+this application and so long as the work does not in itself generate
+output that contains the output from this application in its original
+or modified form.
+
+Exception 2:
+
+As a special exception, you have permission to combine this application
+with Plugins licensed under the terms of your choice, to produce an
+executable, and to copy and distribute the resulting executable under
+the terms of your choice. However, the executable must be accompanied
+by a prominent notice offering all users of the executable the entire
+source code to this application, excluding the source code of the
+independent modules, but including any changes you have made to this
+application, under the terms of this license.
+
diff --git a/coin/axivion/ci_config_linux.json b/coin/axivion/ci_config_linux.json
new file mode 100644
index 00000000..7bf3dd7c
--- /dev/null
+++ b/coin/axivion/ci_config_linux.json
@@ -0,0 +1,41 @@
+{
+ "Project": {
+ "BuildSystemIntegration": {
+ "child_order": [
+ "GCCSetup",
+ "CMake",
+ "LinkLibraries"
+ ]
+ },
+ "CMake": {
+ "_active": true,
+ "_copy_from": "CMakeIntegration",
+ "build_environment": {},
+ "build_options": "-j4",
+ "generate_options": "--fresh",
+ "generator": "Ninja"
+ },
+ "GCCSetup": {
+ "_active": true,
+ "_copy_from": "Command",
+ "build_command": "gccsetup --cc gcc --cxx g++ --config ../../../axivion/"
+ },
+ "LinkLibraries": {
+ "_active": true,
+ "_copy_from": "AxivionLinker",
+ "input_files": [
+ "build/lib/lib*.so*.ir",
+ "build/qml/*/lib*.so*.ir"
+ ],
+ "ir": "build/$(env:TESTED_MODULE_COIN).ir"
+ }
+ },
+ "_Format": "1.0",
+ "_Version": "7.6.2",
+ "_VersionNum": [
+ 7,
+ 6,
+ 2,
+ 12725
+ ]
+}
diff --git a/coin/module_config.yaml b/coin/module_config.yaml
new file mode 100644
index 00000000..58c91b78
--- /dev/null
+++ b/coin/module_config.yaml
@@ -0,0 +1,23 @@
+version: 2
+accept_configuration:
+ condition: property
+ property: features
+ not_contains_value: Disable
+
+instructions:
+ Build:
+ - !include "{{qt/qtbase}}/coin_module_build_template_v2.yaml"
+
+ Test:
+ - type: Group
+ instructions:
+ - !include "{{qt/qtbase}}/coin_module_test_template_v3.yaml"
+ disable_if:
+ condition: or
+ conditions:
+ - condition: property
+ property: configureArgs
+ contains_value: "-DFEATURE_widgets=OFF"
+ - condition: property
+ property: configureArgs
+ contains_value: "-no-widgets"
diff --git a/dependencies.yaml b/dependencies.yaml
index 40c04da0..77867112 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -1,10 +1,10 @@
dependencies:
../qtbase:
- ref: cef009b1e4d3a3f8108a9f17e8c01e7140a587b4
+ ref: 488545ca72b7f2a59401a42c2c264f38916e15d1
required: true
../qtdeclarative:
- ref: 73894987a22c9821c508c921f38a0db442559c71
+ ref: 22f72aa17118346059179fc3e86a6ece7b7bfb7f
required: false
../qtmultimedia:
- ref: 11939c8856e5d27ef1b6f025c89a0ff1683075c0
+ ref: 3f831e82c5b54cdeddbc7e00c62a8a9fe048ce4f
required: false
diff --git a/dist/changes-5.15.1 b/dist/changes-5.15.1
new file mode 100644
index 00000000..332ee9d1
--- /dev/null
+++ b/dist/changes-5.15.1
@@ -0,0 +1,20 @@
+Qt 5.15.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.15.0.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.15 series is binary compatible with the 5.14.x series.
+Applications compiled for 5.14 will continue to run with 5.15.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+ - This release contains only minor code improvements.
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 00000000..9a9782af
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_examples_build_begin(EXTERNAL_BUILD)
+
+add_subdirectory(datavisualization)
+
+qt_examples_build_end()
diff --git a/examples/datavisualization/CMakeLists.txt b/examples/datavisualization/CMakeLists.txt
new file mode 100644
index 00000000..4e9514b1
--- /dev/null
+++ b/examples/datavisualization/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+if(TARGET Qt::Quick)
+ qt_internal_add_example(qmlaxishandling)
+ qt_internal_add_example(qmlbars)
+ qt_internal_add_example(qmlscatter)
+ qt_internal_add_example(qmlsurfacegallery)
+endif()
+if(NOT ANDROID AND NOT IOS AND NOT WINRT)
+ qt_internal_add_example(graphgallery)
+ qt_internal_add_example(volumetric)
+endif()
diff --git a/examples/datavisualization/audiolevels/audiolevels.cpp b/examples/datavisualization/audiolevels/audiolevels.cpp
deleted file mode 100644
index 65635fd2..00000000
--- a/examples/datavisualization/audiolevels/audiolevels.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "audiolevelsiodevice.h"
-#include "audiolevels.h"
-
-#include <QtDataVisualization/qbardataproxy.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qbar3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-#include <QtDataVisualization/qcustom3dlabel.h>
-
-#include <QtMultimedia/QAudioDeviceInfo>
-#include <QtMultimedia/QAudioInput>
-
-using namespace QtDataVisualization;
-
-AudioLevels::AudioLevels(Q3DBars *graph, QObject *parent)
- : QObject(parent),
- m_graph(graph),
- m_device(0),
- m_audioInput(0)
-{
- // Set up the graph
- m_graph->setBarThickness(0.5f);
- m_graph->setBarSpacing(QSizeF(0.0, 1.0));
- m_graph->valueAxis()->setRange(-100.0f, 100.0f);
- m_graph->valueAxis()->setSegmentCount(20);
- m_graph->valueAxis()->setLabelFormat(QStringLiteral("%d%%"));
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
- m_graph->setSelectionMode(QAbstract3DGraph::SelectionNone);
- m_graph->scene()->activeCamera()->setCameraPosition(-25.0f, 10.0f, 190.0f);
- m_graph->activeTheme()->setType(Q3DTheme::ThemeIsabelle);
- m_graph->activeTheme()->setGridEnabled(true);
- m_graph->activeTheme()->setBackgroundEnabled(false);
- QFont font = m_graph->activeTheme()->font();
- font.setPointSize(10);
- m_graph->activeTheme()->setFont(font);
- QBar3DSeries *series = new QBar3DSeries;
- series->setMesh(QAbstract3DSeries::MeshBar);
- m_graph->addSeries(series);
-
- //! [0]
- QAudioDeviceInfo inputDevice = QAudioDeviceInfo::defaultInputDevice();
-
- if (inputDevice.supportedSampleRates().size() > 0
- && inputDevice.supportedChannelCounts().size() > 0
- && inputDevice.supportedSampleSizes().size() > 0
- && inputDevice.supportedCodecs().size() > 0) {
- QAudioFormat formatAudio;
- formatAudio.setSampleRate(inputDevice.supportedSampleRates().at(0));
- formatAudio.setChannelCount(inputDevice.supportedChannelCounts().at(0));
- formatAudio.setSampleSize(inputDevice.supportedSampleSizes().at(0));
- formatAudio.setCodec(inputDevice.supportedCodecs().at(0));
- formatAudio.setByteOrder(QAudioFormat::LittleEndian);
- formatAudio.setSampleType(QAudioFormat::UnSignedInt);
-
- m_audioInput = new QAudioInput(inputDevice, formatAudio, this);
-#ifdef Q_OS_MAC
- // OS X seems to wait for entire buffer to fill before calling writeData, so use smaller buffer
- m_audioInput->setBufferSize(256);
-#else
- m_audioInput->setBufferSize(1024);
-#endif
-
- m_device = new AudioLevelsIODevice(m_graph->seriesList().at(0)->dataProxy(), this);
- m_device->open(QIODevice::WriteOnly);
-
- m_audioInput->start(m_device);
- } else {
- // No graph content can be shown, so add a custom warning label
- QCustom3DLabel *titleLabel = new QCustom3DLabel("No valid audio input device found",
- QFont(),
- QVector3D(0.2f, 0.2f, 0.0f),
- QVector3D(1.0f, 1.0f, 0.0f),
- QQuaternion());
- titleLabel->setPositionAbsolute(true);
- titleLabel->setFacingCamera(true);
- m_graph->addCustomItem(titleLabel);
- }
- //! [0]
-}
-
-AudioLevels::~AudioLevels()
-{
- if (m_audioInput)
- m_audioInput->stop();
- if (m_device)
- m_device->close();
-}
diff --git a/examples/datavisualization/audiolevels/audiolevels.h b/examples/datavisualization/audiolevels/audiolevels.h
deleted file mode 100644
index f9a7d9e5..00000000
--- a/examples/datavisualization/audiolevels/audiolevels.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AUDIOLEVELS_H
-#define AUDIOLEVELS_H
-
-#include <QtDataVisualization/q3dbars.h>
-
-using namespace QtDataVisualization;
-
-class AudioLevelsIODevice;
-
-QT_BEGIN_NAMESPACE
-class QAudioInput;
-QT_END_NAMESPACE
-
-class AudioLevels : public QObject
-{
- Q_OBJECT
-
-public:
- AudioLevels(Q3DBars *graph, QObject *parent = 0);
- ~AudioLevels();
-
-private:
- //! [0]
- Q3DBars *m_graph;
- AudioLevelsIODevice *m_device;
- QAudioInput *m_audioInput;
- //! [0]
-};
-
-#endif
diff --git a/examples/datavisualization/audiolevels/audiolevels.pro b/examples/datavisualization/audiolevels/audiolevels.pro
deleted file mode 100644
index de40e636..00000000
--- a/examples/datavisualization/audiolevels/audiolevels.pro
+++ /dev/null
@@ -1,23 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-requires(qtHaveModule(multimedia))
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-TARGET = audiolevels
-
-QT += multimedia
-
-SOURCES += main.cpp \
- audiolevels.cpp \
- audiolevelsiodevice.cpp
-
-HEADERS += audiolevels.h \
- audiolevelsiodevice.h
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp b/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp
deleted file mode 100644
index 7cd2bbb3..00000000
--- a/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "audiolevelsiodevice.h"
-#include <QtCore/QDebug>
-
-using namespace QtDataVisualization;
-
-//! [1]
-static const int resolution = 8;
-static const int rowSize = 800;
-static const int rowCount = 7; // Must be odd number
-static const int middleRow = rowCount / 2;
-//! [1]
-
-AudioLevelsIODevice::AudioLevelsIODevice(QBarDataProxy *proxy, QObject *parent)
- : QIODevice(parent),
- m_proxy(proxy),
- m_array(new QBarDataArray)
-{
- // We reuse the existing array for maximum performance, so construct the array here
- //! [0]
- m_array->reserve(rowCount);
- for (int i = 0; i < rowCount; i++)
- m_array->append(new QBarDataRow(rowSize));
- //! [0]
-
- qDebug() << "Total of" << (rowSize * rowCount) << "items in the array.";
-}
-
-// Implementation required for this pure virtual function
-qint64 AudioLevelsIODevice::readData(char *data, qint64 maxSize)
-{
- Q_UNUSED(data);
- Q_UNUSED(maxSize);
- return -1;
-}
-
-//! [2]
-qint64 AudioLevelsIODevice::writeData(const char *data, qint64 maxSize)
-{
- // The amount of new data available.
- int newDataSize = maxSize / resolution;
-
- // If we get more data than array size, we need to adjust the start index for new data.
- int newDataStartIndex = qMax(0, (newDataSize - rowSize));
-
- // Move the old data ahead in the rows (only do first half of rows + middle one now).
- // If the amount of new data was larger than row size, skip copying.
- if (!newDataStartIndex) {
- for (int i = 0; i <= middleRow; i++) {
- QBarDataItem *srcPos = m_array->at(i)->data();
- QBarDataItem *dstPos = srcPos + newDataSize;
- memmove((void *)dstPos, (void *)srcPos, (rowSize - newDataSize) * sizeof(QBarDataItem));
- }
- }
-
- // Insert data in reverse order, so that newest data is always at the front of the row.
- int index = 0;
- for (int i = newDataSize - 1; i >= newDataStartIndex; i--) {
- // Add 0.01 to the value to avoid gaps in the graph (i.e. zero height bars).
- // Also, scale to 0...100
- float value = float(quint8(data[resolution * i]) - 128) / 1.28f + 0.01f;
- (*m_array->at(middleRow))[index].setValue(value);
- // Insert a fractional value into front half of the rows.
- for (int j = 1; j <= middleRow; j++) {
- float fractionalValue = value / float(j + 1);
- (*m_array->at(middleRow - j))[index].setValue(fractionalValue);
- }
- index++;
- }
-
- // Copy the front half of rows to the back half for symmetry.
- index = 0;
- for (int i = rowCount - 1; i > middleRow; i--) {
- QBarDataItem *srcPos = m_array->at(index++)->data();
- QBarDataItem *dstPos = m_array->at(i)->data();
- memcpy((void *)dstPos, (void *)srcPos, rowSize * sizeof(QBarDataItem));
- }
-
- // Reset the proxy array now that data has been updated to trigger a redraw.
- m_proxy->resetArray(m_array);
-
- return maxSize;
-}
-//! [2]
-
-
diff --git a/examples/datavisualization/audiolevels/audiolevelsiodevice.h b/examples/datavisualization/audiolevels/audiolevelsiodevice.h
deleted file mode 100644
index 1a9f57b3..00000000
--- a/examples/datavisualization/audiolevels/audiolevelsiodevice.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AUDIOLEVELSIODEVICE_H
-#define AUDIOLEVELSIODEVICE_H
-
-#include <QtDataVisualization/qbardataproxy.h>
-#include <QtCore/QIODevice>
-
-using namespace QtDataVisualization;
-
-class AudioLevelsIODevice : public QIODevice
-{
- Q_OBJECT
-public:
- explicit AudioLevelsIODevice(QBarDataProxy *proxy, QObject *parent = 0);
-
-protected:
- qint64 readData(char *data, qint64 maxSize);
- qint64 writeData(const char *data, qint64 maxSize);
-
-private:
- //! [0]
- QBarDataProxy *m_proxy;
- QBarDataArray *m_array;
- //! [0]
-};
-
-#endif
diff --git a/examples/datavisualization/audiolevels/doc/images/audiolevels-example.png b/examples/datavisualization/audiolevels/doc/images/audiolevels-example.png
deleted file mode 100644
index ec79eb5a..00000000
--- a/examples/datavisualization/audiolevels/doc/images/audiolevels-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc b/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc
deleted file mode 100644
index 460715b3..00000000
--- a/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example audiolevels
- \title Audiolevels Example
- \ingroup qtdatavisualization_examples
- \brief Simple application showing real time audio data.
-
- The audiolevels example shows how feed real-time dynamic data to a graph using Q3DBars.
-
- This example reads the audio levels from a microphone and displays those levels
- in a bar graph. To increase the load for demonstration purposes, and to make the
- graph little fancier, slightly modified data is used to fill multiple rows.
-
- \image audiolevels-example.png
-
- The interesting stuff happens in \c AudioLevels and \c AudioLevelsIODevice classes, so we
- concentrate on those and skip explaining the basic Q3DBars functionality - for that see
- \l{Bars Example}.
-
- \include examples-run.qdocinc
-
- \section1 Visualizing Audio Levels
-
- \c AudioLevelsIODevice subclasses QIODevice and is given as input device for QAudioInput
- class, so it receives microphone data.
-
- In the header file for \c AudioLevels class we declare necessary members:
-
- \snippet audiolevels/audiolevels.h 0
-
- And initialize the microphone listening in the source:
-
- \snippet audiolevels/audiolevels.cpp 0
-
- In the header file for \c AudioLevelsIODevice class we store pointers to the data proxy and
- also the data array we give to the proxy, because we reuse the same array to keep memory
- reallocations to the minimum:
-
- \snippet audiolevels/audiolevelsiodevice.h 0
-
- In the source file we define some static constants to define size of the data array and
- the middle row index, as well as the resolution of the visualization. You may need to adjust
- these values to get decent performance in low-end devices:
-
- \snippet audiolevels/audiolevelsiodevice.cpp 1
-
- The \c resolution constant indicates the sample rate, for example, value 8 means every eighth
- byte from audio input is visualized. This is necessary to make the data readable, as it would
- otherwise make the graph scroll too fast.
-
- In the \c AudioLevelsIODevice class constructor we initialize the data array:
-
- \snippet audiolevels/audiolevelsiodevice.cpp 0
-
- The \c AudioLevelsIODevice::writeData function is called whenever there is new audio data
- available to be visualized. There we move the old data along the rows and insert new
- data in the beginning of the rows:
-
- \snippet audiolevels/audiolevelsiodevice.cpp 2
-
- We use a couple of techniques here to improve performance. First, we reuse
- the existing data array, as this allows us to avoid any extra memory allocations in our
- application code. This also means the data array dimensions do not change, which further
- improves efficiency in the bar graph renderer.
- Secondly, since each row is a QList of bar data items, which do not allocate any data that needs
- deletion, we can utilize \c memmove and \c memcpy functions to quickly move and copy data around.
-
- \note In the future versions of Qt Data Visualization, QBarDataItem might get extended so that
- it does allocate some memory to store other optional bar properties besides the value.
- In use cases where those optional properties are used, using \c memmove and \c memcpy could lead to
- memory leaks, so use them with care.
-*/
diff --git a/examples/datavisualization/audiolevels/main.cpp b/examples/datavisualization/audiolevels/main.cpp
deleted file mode 100644
index eeb7baff..00000000
--- a/examples/datavisualization/audiolevels/main.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "audiolevels.h"
-
-#include <QtGui/QGuiApplication>
-#include <QtMultimedia/QAudio>
-
-using namespace QtDataVisualization;
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- Q3DBars window;
-
- if (!window.hasContext()) {
- qWarning() << QStringLiteral("Couldn't initialize the OpenGL context.") ;
- return -1;
- }
-
- window.setFlags(window.flags() ^ Qt::FramelessWindowHint);
- window.resize(800, 500);
- window.setTitle("Qt Data Visualization - Microphone audio levels visualizer");
- window.show();
-
- AudioLevels audioLevels(&window);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/bars/bars.pro b/examples/datavisualization/bars/bars.pro
deleted file mode 100644
index 148fc66e..00000000
--- a/examples/datavisualization/bars/bars.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp graphmodifier.cpp
-HEADERS += graphmodifier.h
-
-QT += widgets
-requires(qtConfig(fontcombobox))
-requires(qtConfig(combobox))
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/bars/doc/images/bars-example.png b/examples/datavisualization/bars/doc/images/bars-example.png
deleted file mode 100644
index c06fe2c1..00000000
--- a/examples/datavisualization/bars/doc/images/bars-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/bars/doc/src/bars.qdoc b/examples/datavisualization/bars/doc/src/bars.qdoc
deleted file mode 100644
index 1d2ad1ae..00000000
--- a/examples/datavisualization/bars/doc/src/bars.qdoc
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example bars
- \title Bars Example
- \ingroup qtdatavisualization_examples
- \brief Using Q3DBars in a widget application.
-
- The bars example shows how to make a 3D bar graph using Q3DBars and combining the use of
- widgets for adjusting several adjustable qualities. The example shows how to:
-
- \list
- \li Create an application with Q3DBars and some widgets
- \li Use QBar3DSeries and QBarDataProxy to set data to the graph
- \li Adjust some graph and series properties using widget controls
- \li Select a row or a column by clicking an axis label
- \endlist
-
- It also demonstrates how having negative bar values affects the graph.
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image bars-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container
- for it:
-
- \snippet bars/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
- layout into the horizontal one:
-
- \snippet bars/main.cpp 1
-
- We're not using the vertical layout for anything yet, but we'll get back to it in
- \l {Using widgets to control the graph}
-
- Next, let's create another class to handle the data addition and other interaction with the
- graph. Let's call it \c GraphModifier (See \l {Setting up the graph} and
- \l {Adding data to the graph} for details):
-
- \snippet bars/main.cpp 2
-
- The application main is done and we can show the graph and start the event loop:
-
- \snippet bars/main.cpp 3
-
- \section1 Setting up the Graph
-
- Let's set up the graph in the constructor of the \c GraphModifier class we instantiated in the
- application main:
-
- \snippet bars/graphmodifier.cpp 0
-
- Let's take a closer look at parts of the code.
-
- First we're creating the axes and the series into member variables to support changing them
- easily later on, if we want to:
-
- \snippet bars/graphmodifier.cpp 1
-
- Then we're setting some of the visual qualities for the graph:
-
- \snippet bars/graphmodifier.cpp 2
-
- We're also setting up the axes and setting them to the graph as active axes:
-
- \snippet bars/graphmodifier.cpp 3
-
- We give axis labels a small autorotation angle to make them orient somewhat toward the
- camera. This is done to improve axis label readability at extreme camera angles.
-
- Next we initialize the visual properties of the series.
- Note that the second series is initially not visible:
-
- \snippet bars/graphmodifier.cpp 8
-
- The series need to be added to the graph to show them:
-
- \snippet bars/graphmodifier.cpp 4
-
- Finally, we set the camera angle by calling the same method the camera angle change button
- in the UI uses to cycle through various camera angles:
-
- \snippet bars/graphmodifier.cpp 6
-
- There you can see that the camera is controlled via the scene object of the graph:
-
- \snippet bars/graphmodifier.cpp 10
-
- For more information about using scene and cameras, see Q3DScene and Q3DCamera.
-
- That concludes setting up the graph.
-
- \section1 Adding Data to the Graph
-
- At the end of the constructor there's a call:
-
- \snippet bars/graphmodifier.cpp 9
-
- This method is used to add data to the proxies of the two series:
-
- \snippet bars/graphmodifier.cpp 5
-
- Now the series have data to show.
-
- \section1 Using Widgets to Control the Graph
-
- There isn't much interaction yet, so let's continue by adding some widgets back in the
- application main. Let's just focus on two as an example:
-
- \snippet bars/main.cpp 4
-
- We can use these slider widgets to rotate the graph instead of just using the mouse or
- touch.
-
- Let's add them to the vertical layout we created earlier:
-
- \snippet bars/main.cpp 5
-
- Then we'll connect them to methods in \c GraphModifier:
-
- \snippet bars/main.cpp 6
-
- Here are the methods in \c GraphModifier the signals were connected to. The camera
- is controlled via the scene object. This time we specify the actual camera position
- along the orbit around the center point, instead of specifying a preset camera angle:
-
- \snippet bars/graphmodifier.cpp 7
-
- Now these two sliders can be used to rotate the graph.
-
- And so we have an application in which we can control:
-
- \list
- \li Graph rotation
- \li Label style
- \li Camera preset
- \li Background visibility
- \li Grid visibility
- \li Bar shading smoothness
- \li Visibility of the second bar series
- \li Value axis direction
- \li Axis title visibility and rotation
- \li Data range to be shown
- \li Bar style
- \li Selection mode
- \li Theme
- \li Shadow quality
- \li Font
- \li Font size
- \li Axis label rotation
- \endlist
-
- \section1 Selecting a Row/column by Clicking an Axis Label
-
- Selection by axis label is default functionality for bar graphs. As an example, you can select
- rows by clicking an axis label in the following way:
-
- \list
- \li Change selection mode to \c SelectionRow
- \li Click a year label
- \li The row with the clicked year is selected
- \endlist
-
- You can use the same method with \c SelectionSlice and \c SelectionItem flags, as long as
- you have either \c SelectionRow or \c SelectionColumn set as well.
-
- \section1 Zooming to Selection
-
- As an example of adjusting camera target we have implemented an animation of zooming to
- selection via a button press. Animation initializations are done in the constructor:
-
- \snippet bars/graphmodifier.cpp 12
-
- The function \c{GraphModifier::zoomToSelectedBar()} contains the rest of the functionality:
-
- \snippet bars/graphmodifier.cpp 11
-
- The QPropertyAnimation \c m_animationCameraTarget targets Q3DCamera::target property,
- which takes a value normalized to the range (-1, 1). We figure out where the selected bar
- is relative to axes, and use that as the end value for \c{m_animationCameraTarget}:
-
- \snippet bars/graphmodifier.cpp 13
- \dots
- \snippet bars/graphmodifier.cpp 14
-
- Likewise, we want to angle the camera so that it always points approximately to the center of
- the graph at the end of the animation:
-
- \snippet bars/graphmodifier.cpp 15
-
- \section1 Example Contents
-
-*/
diff --git a/examples/datavisualization/bars/graphmodifier.h b/examples/datavisualization/bars/graphmodifier.h
deleted file mode 100644
index bc223a75..00000000
--- a/examples/datavisualization/bars/graphmodifier.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GRAPHMODIFIER_H
-#define GRAPHMODIFIER_H
-
-#include <QtDataVisualization/q3dbars.h>
-#include <QtDataVisualization/qbardataproxy.h>
-#include <QtDataVisualization/qabstract3dseries.h>
-
-#include <QtGui/QFont>
-#include <QtCore/QDebug>
-#include <QtCore/QStringList>
-#include <QtCore/QPointer>
-#include <QtCore/QPropertyAnimation>
-
-using namespace QtDataVisualization;
-
-class GraphModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit GraphModifier(Q3DBars *bargraph);
- ~GraphModifier();
-
- void resetTemperatureData();
- void changePresetCamera();
- void changeLabelBackground();
- void changeFont(const QFont &font);
- void changeFontSize(int fontsize);
- void rotateX(int rotation);
- void rotateY(int rotation);
- void setBackgroundEnabled(int enabled);
- void setGridEnabled(int enabled);
- void setSmoothBars(int smooth);
- void setSeriesVisibility(int enabled);
- void setReverseValueAxis(int enabled);
- void setReflection(bool enabled);
-
-public Q_SLOTS:
- void changeRange(int range);
- void changeStyle(int style);
- void changeSelectionMode(int selectionMode);
- void changeTheme(int theme);
- void changeShadowQuality(int quality);
- void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
- void changeLabelRotation(int rotation);
- void setAxisTitleVisibility(bool enabled);
- void setAxisTitleFixed(bool enabled);
- void zoomToSelectedBar();
-
-Q_SIGNALS:
- void shadowQualityChanged(int quality);
- void backgroundEnabledChanged(bool enabled);
- void gridEnabledChanged(bool enabled);
- void fontChanged(QFont font);
- void fontSizeChanged(int size);
-
-private:
- Q3DBars *m_graph;
- float m_xRotation;
- float m_yRotation;
- int m_fontSize;
- int m_segments;
- int m_subSegments;
- float m_minval;
- float m_maxval;
- QStringList m_months;
- QStringList m_years;
- QValue3DAxis *m_temperatureAxis;
- QCategory3DAxis *m_yearAxis;
- QCategory3DAxis *m_monthAxis;
- QBar3DSeries *m_primarySeries;
- QBar3DSeries *m_secondarySeries;
- QAbstract3DSeries::Mesh m_barMesh;
- bool m_smooth;
- QPropertyAnimation m_animationCameraX;
- QPropertyAnimation m_animationCameraY;
- QPropertyAnimation m_animationCameraZoom;
- QPropertyAnimation m_animationCameraTarget;
- float m_defaultAngleX;
- float m_defaultAngleY;
- float m_defaultZoom;
- QVector3D m_defaultTarget;
-};
-
-#endif
diff --git a/examples/datavisualization/bars/main.cpp b/examples/datavisualization/bars/main.cpp
deleted file mode 100644
index 6eb718fa..00000000
--- a/examples/datavisualization/bars/main.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "graphmodifier.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QFontComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QFontDatabase>
-
-int main(int argc, char **argv)
-{
- //! [0]
- QApplication app(argc, argv);
- Q3DBars *widgetgraph = new Q3DBars();
- QWidget *container = QWidget::createWindowContainer(widgetgraph);
- //! [0]
-
- if (!widgetgraph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = widgetgraph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- //! [1]
-
- widget->setWindowTitle(QStringLiteral("Average temperatures in Oulu and Helsinki, Finland (2006-2013)"));
-
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
- themeList->setCurrentIndex(0);
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QCheckBox *smoothCheckBox = new QCheckBox(widget);
- smoothCheckBox->setText(QStringLiteral("Smooth bars"));
- smoothCheckBox->setChecked(false);
-
-
- QComboBox *barStyleList = new QComboBox(widget);
- barStyleList->addItem(QStringLiteral("Bar"), int(QAbstract3DSeries::MeshBar));
- barStyleList->addItem(QStringLiteral("Pyramid"), int(QAbstract3DSeries::MeshPyramid));
- barStyleList->addItem(QStringLiteral("Cone"), int(QAbstract3DSeries::MeshCone));
- barStyleList->addItem(QStringLiteral("Cylinder"), int(QAbstract3DSeries::MeshCylinder));
- barStyleList->addItem(QStringLiteral("Bevel bar"), int(QAbstract3DSeries::MeshBevelBar));
- barStyleList->addItem(QStringLiteral("Sphere"), int(QAbstract3DSeries::MeshSphere));
- barStyleList->setCurrentIndex(4);
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
- QPushButton *zoomToSelectedButton = new QPushButton(widget);
- zoomToSelectedButton->setText(QStringLiteral("Zoom to selected bar"));
-
- QComboBox *selectionModeList = new QComboBox(widget);
- selectionModeList->addItem(QStringLiteral("None"),
- int(QAbstract3DGraph::SelectionNone));
- selectionModeList->addItem(QStringLiteral("Bar"),
- int(QAbstract3DGraph::SelectionItem));
- selectionModeList->addItem(QStringLiteral("Row"),
- int(QAbstract3DGraph::SelectionRow));
- selectionModeList->addItem(QStringLiteral("Bar and Row"),
- int(QAbstract3DGraph::SelectionItemAndRow));
- selectionModeList->addItem(QStringLiteral("Column"),
- int(QAbstract3DGraph::SelectionColumn));
- selectionModeList->addItem(QStringLiteral("Bar and Column"),
- int(QAbstract3DGraph::SelectionItemAndColumn));
- selectionModeList->addItem(QStringLiteral("Row and Column"),
- int(QAbstract3DGraph::SelectionRowAndColumn));
- selectionModeList->addItem(QStringLiteral("Bar, Row and Column"),
- int(QAbstract3DGraph::SelectionItemRowAndColumn));
- selectionModeList->addItem(QStringLiteral("Slice into Row"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionRow));
- selectionModeList->addItem(QStringLiteral("Slice into Row and Item"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow));
- selectionModeList->addItem(QStringLiteral("Slice into Column"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionColumn));
- selectionModeList->addItem(QStringLiteral("Slice into Column and Item"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn));
- selectionModeList->addItem(QStringLiteral("Multi: Bar, Row, Col"),
- int(QAbstract3DGraph::SelectionItemRowAndColumn
- | QAbstract3DGraph::SelectionMultiSeries));
- selectionModeList->addItem(QStringLiteral("Multi, Slice: Row, Item"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow
- | QAbstract3DGraph::SelectionMultiSeries));
- selectionModeList->addItem(QStringLiteral("Multi, Slice: Col, Item"),
- int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn
- | QAbstract3DGraph::SelectionMultiSeries));
- selectionModeList->setCurrentIndex(1);
-
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
- backgroundCheckBox->setChecked(false);
-
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
- gridCheckBox->setChecked(true);
-
- QCheckBox *seriesCheckBox = new QCheckBox(widget);
- seriesCheckBox->setText(QStringLiteral("Show second series"));
- seriesCheckBox->setChecked(false);
-
- QCheckBox *reverseValueAxisCheckBox = new QCheckBox(widget);
- reverseValueAxisCheckBox->setText(QStringLiteral("Reverse value axis"));
- reverseValueAxisCheckBox->setChecked(false);
-
- QCheckBox *reflectionCheckBox = new QCheckBox(widget);
- reflectionCheckBox->setText(QStringLiteral("Show reflections"));
- reflectionCheckBox->setChecked(false);
-
- //! [4]
- QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
- rotationSliderX->setTickInterval(30);
- rotationSliderX->setTickPosition(QSlider::TicksBelow);
- rotationSliderX->setMinimum(-180);
- rotationSliderX->setValue(0);
- rotationSliderX->setMaximum(180);
- QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
- rotationSliderY->setTickInterval(15);
- rotationSliderY->setTickPosition(QSlider::TicksAbove);
- rotationSliderY->setMinimum(-90);
- rotationSliderY->setValue(0);
- rotationSliderY->setMaximum(90);
- //! [4]
-
- QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
- fontSizeSlider->setTickInterval(10);
- fontSizeSlider->setTickPosition(QSlider::TicksBelow);
- fontSizeSlider->setMinimum(1);
- fontSizeSlider->setValue(30);
- fontSizeSlider->setMaximum(100);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
- fontList->setCurrentFont(QFont("Times New Roman"));
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->addItem(QStringLiteral("Low Soft"));
- shadowQuality->addItem(QStringLiteral("Medium Soft"));
- shadowQuality->addItem(QStringLiteral("High Soft"));
- shadowQuality->setCurrentIndex(5);
-
- QComboBox *rangeList = new QComboBox(widget);
- rangeList->addItem(QStringLiteral("2006"));
- rangeList->addItem(QStringLiteral("2007"));
- rangeList->addItem(QStringLiteral("2008"));
- rangeList->addItem(QStringLiteral("2009"));
- rangeList->addItem(QStringLiteral("2010"));
- rangeList->addItem(QStringLiteral("2011"));
- rangeList->addItem(QStringLiteral("2012"));
- rangeList->addItem(QStringLiteral("2013"));
- rangeList->addItem(QStringLiteral("All"));
- rangeList->setCurrentIndex(8);
-
- QCheckBox *axisTitlesVisibleCB = new QCheckBox(widget);
- axisTitlesVisibleCB->setText(QStringLiteral("Axis titles visible"));
- axisTitlesVisibleCB->setChecked(true);
-
- QCheckBox *axisTitlesFixedCB = new QCheckBox(widget);
- axisTitlesFixedCB->setText(QStringLiteral("Axis titles fixed"));
- axisTitlesFixedCB->setChecked(true);
-
- QSlider *axisLabelRotationSlider = new QSlider(Qt::Horizontal, widget);
- axisLabelRotationSlider->setTickInterval(10);
- axisLabelRotationSlider->setTickPosition(QSlider::TicksBelow);
- axisLabelRotationSlider->setMinimum(0);
- axisLabelRotationSlider->setValue(30);
- axisLabelRotationSlider->setMaximum(90);
-
- //! [5]
- vLayout->addWidget(new QLabel(QStringLiteral("Rotate horizontally")));
- vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Rotate vertically")));
- vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
- //! [5]
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(zoomToSelectedButton, 0, Qt::AlignTop);
- vLayout->addWidget(backgroundCheckBox);
- vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(smoothCheckBox);
- vLayout->addWidget(reflectionCheckBox);
- vLayout->addWidget(seriesCheckBox);
- vLayout->addWidget(reverseValueAxisCheckBox);
- vLayout->addWidget(axisTitlesVisibleCB);
- vLayout->addWidget(axisTitlesFixedCB);
- vLayout->addWidget(new QLabel(QStringLiteral("Show year")));
- vLayout->addWidget(rangeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change bar style")));
- vLayout->addWidget(barStyleList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change selection mode")));
- vLayout->addWidget(selectionModeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
- vLayout->addWidget(themeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
- vLayout->addWidget(fontSizeSlider);
- vLayout->addWidget(new QLabel(QStringLiteral("Axis label rotation")));
- vLayout->addWidget(axisLabelRotationSlider, 1, Qt::AlignTop);
-
- //! [2]
- GraphModifier *modifier = new GraphModifier(widgetgraph);
- //! [2]
-
- //! [6]
- QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &GraphModifier::rotateX);
- QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &GraphModifier::rotateY);
- //! [6]
-
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &GraphModifier::changeLabelBackground);
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &GraphModifier::changePresetCamera);
- QObject::connect(zoomToSelectedButton, &QPushButton::clicked, modifier,
- &GraphModifier::zoomToSelectedBar);
-
- QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setBackgroundEnabled);
- QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setGridEnabled);
- QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setSmoothBars);
- QObject::connect(seriesCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setSeriesVisibility);
- QObject::connect(reverseValueAxisCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setReverseValueAxis);
- QObject::connect(reflectionCheckBox, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setReflection);
-
- QObject::connect(modifier, &GraphModifier::backgroundEnabledChanged,
- backgroundCheckBox, &QCheckBox::setChecked);
- QObject::connect(modifier, &GraphModifier::gridEnabledChanged,
- gridCheckBox, &QCheckBox::setChecked);
-
- QObject::connect(rangeList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeRange(int)));
-
- QObject::connect(barStyleList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeStyle(int)));
-
- QObject::connect(selectionModeList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeSelectionMode(int)));
-
- QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeTheme(int)));
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
-
- QObject::connect(modifier, &GraphModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
- QObject::connect(widgetgraph, &Q3DBars::shadowQualityChanged, modifier,
- &GraphModifier::shadowQualityUpdatedByVisual);
-
- QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
- &GraphModifier::changeFontSize);
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &GraphModifier::changeFont);
-
- QObject::connect(modifier, &GraphModifier::fontSizeChanged, fontSizeSlider,
- &QSlider::setValue);
- QObject::connect(modifier, &GraphModifier::fontChanged, fontList,
- &QFontComboBox::setCurrentFont);
-
- QObject::connect(axisTitlesVisibleCB, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setAxisTitleVisibility);
- QObject::connect(axisTitlesFixedCB, &QCheckBox::stateChanged, modifier,
- &GraphModifier::setAxisTitleFixed);
- QObject::connect(axisLabelRotationSlider, &QSlider::valueChanged, modifier,
- &GraphModifier::changeLabelRotation);
- //! [3]
- widget->show();
- return app.exec();
- //! [3]
-}
diff --git a/examples/datavisualization/custominput/custominput.pro b/examples/datavisualization/custominput/custominput.pro
deleted file mode 100644
index 1fe1c57b..00000000
--- a/examples/datavisualization/custominput/custominput.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp scatterdatamodifier.cpp \
- custominputhandler.cpp
-HEADERS += scatterdatamodifier.h \
- custominputhandler.h
-
-QT += widgets
-requires(qtConfig(combobox))
-
-RESOURCES += custominput.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/custominput/custominputhandler.cpp b/examples/datavisualization/custominput/custominputhandler.cpp
deleted file mode 100644
index e6fe9aa5..00000000
--- a/examples/datavisualization/custominput/custominputhandler.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "custominputhandler.h"
-
-#include <QtDataVisualization/Q3DCamera>
-
-CustomInputHandler::CustomInputHandler(QObject *parent) :
- QAbstract3DInputHandler(parent)
-{
-}
-
-//! [0]
-void CustomInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos)
-{
- Q_UNUSED(event);
- setInputPosition(mousePos);
-}
-//! [0]
-
-//! [1]
-void CustomInputHandler::wheelEvent(QWheelEvent *event)
-{
- // Adjust zoom level based on what zoom range we're in.
- int zoomLevel = scene()->activeCamera()->zoomLevel();
- if (zoomLevel > 100)
- zoomLevel += event->angleDelta().y() / 12;
- else if (zoomLevel > 50)
- zoomLevel += event->angleDelta().y() / 60;
- else
- zoomLevel += event->angleDelta().y() / 120;
- if (zoomLevel > 500)
- zoomLevel = 500;
- else if (zoomLevel < 10)
- zoomLevel = 10;
-
- scene()->activeCamera()->setZoomLevel(zoomLevel);
-}
-//! [1]
diff --git a/examples/datavisualization/custominput/custominputhandler.h b/examples/datavisualization/custominput/custominputhandler.h
deleted file mode 100644
index ef07d5ec..00000000
--- a/examples/datavisualization/custominput/custominputhandler.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOMINPUTHANDLER_H
-#define CUSTOMINPUTHANDLER_H
-
-#include <QtDataVisualization/QAbstract3DInputHandler>
-
-using namespace QtDataVisualization;
-
-class CustomInputHandler : public QAbstract3DInputHandler
-{
- Q_OBJECT
-public:
- explicit CustomInputHandler(QObject *parent = 0);
-
- virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void wheelEvent(QWheelEvent *event);
-};
-
-#endif
diff --git a/examples/datavisualization/custominput/data/data.txt b/examples/datavisualization/custominput/data/data.txt
deleted file mode 100644
index d0689b1f..00000000
--- a/examples/datavisualization/custominput/data/data.txt
+++ /dev/null
@@ -1,1060 +0,0 @@
-# Each line contains 3 floating point values
-# for x, y and z values in the scatter chart
--10.0084,5.01799,-5.04425,
--9.06229,3.07132,-4.54268,
--8.55132,4.19424,-4.03318,
--8.03806,4.75162,-3.99583,
--9.50337,4.90684,-4.21947,
--9.93819,3.42724,-3.58955,
--7.84971,3.15272,-4.90367,
--7.30477,2.91062,-4.11078,
--7.11201,3.68863,-4.52683,
--8.83267,2.96504,-3.61108,
--6.94874,2.49808,-2.92883,
--9.02606,4.7496,-4.18193,
--9.5434,3.15534,-3.83789,
--6.8679,3.66922,-3.58288,
--8.16487,1.82227,-4.64523,
--7.42165,3.18192,-4.22791,
--7.99257,3.06559,-4.33262,
--8.98851,2.64924,-4.44595,
--6.36774,3.96697,-4.38998,
--7.18413,3.32417,-4.04636,
--7.91649,3.46826,-2.78126,
--7.49495,3.12306,-3.14539,
--7.5445,2.85744,-3.68421,
-2.25354,1.36828,-1.32025,
--2.35524,-0.081203,1.23267,
-2.6517,-1.20549,2.73606,
--2.55382,3.48814,-0.454971,
--3.85468,0.263955,0.578276,
-2.85275,1.32315,1.0565,
--0.404099,-2.36811,-1.60324,
-1.58908,0.363782,-0.554303,
-0.251507,0.124637,-0.752568,
--2.45626,-0.722719,-1.11764,
-4.15342,1.92247,-0.954975,
-2.05845,0.643191,-0.121564,
-0.253468,0.814651,3.05732,
-1.51724,0.244303,2.25864,
-1.15,-0.487518,0.815931,
--0.0538979,0.124927,0.251571,
-0.941523,-0.483498,-3.2731,
-3.55074,-1.04714,-0.954301,
--2.43125,-0.964099,-0.658537,
-4.25459,0.163296,2.05563,
--0.612031,1.03234,-0.227175,
-7.8338,-0.847922,-0.959189,
--4.20076,1.44907,0.853836,
--1.59466,-1.27511,-1.5686,
--3.3567,-1.96864,1.83224,
--2.75169,-0.964221,-1.26465,
--2.45624,0.287046,-4.55032,
-2.73649,-1.48789,-0.653082,
-2.73284,2.2912,-2.4933,
--0.854321,-2.04288,3.7516,
--1.35708,-1.84915,2.35985,
--3.25001,-1.64456,-4.45419,
--0.356834,-0.569139,-1.75308,
--0.813569,-0.287899,-0.0535036,
-4.75975,-1.48817,-2.45957,
-4.35294,1.46154,0.814214,
--3.22467,2.76903,0.510435,
-2.49494,1.9286,0.552287,
--0.456521,0.688277,-0.82788,
--2.72568,2.80278,-2.45782,
--1.65023,1.32005,-2.05754,
--1.63551,1.88519,-3.65544,
--1.20008,-0.723785,0.853563,
-1.45448,1.08701,2.17385,
--3.9042,-1.16916,-0.85395,
-3.15645,0.123932,-0.950988,
--1.35924,-2.64015,-0.54254,
--4.15753,1.28294,-4.47502,
--2.7885,2.48535,-0.159651,
--3.44364,0.627232,6.11881,
--1.55639,-0.967484,2.35497,
--0.752853,1.16736,-0.757871,
--0.859974,0.640213,-1.75453,
-0.85744,0.480175,2.97204,
-4.0571,3.24083,-0.183622,
-0.658087,0.841418,0.357839,
--2.13027,0.920836,-2.758,
--0.65825,0.164257,1.69478,
--1.88335,-1.4811,-2.15408,
--1.67331,2.96982,1.85521,
--0.750937,0.282914,-0.758707,
-2.29891,1.16949,2.65927,
-2.69132,2.92632,-0.206126,
--1.65771,3.28846,2.50201,
--0.568799,2.5289,-1.15875,
--1.85383,0.528953,-2.32418,
-0.159422,-2.36165,-0.569393,
--3.96506,0.282374,-0.254519,
-0.150933,-3.88058,-0.759422,
--1.17917,-1.96176,0.95589,
--0.340817,-3.52333,-1.45715,
-3.21784,-2.56593,2.55468,
-0.609650,-2.44153,1.35813,
-1.4594,-1.96511,0.170228,
-3.55017,-2.16882,1.75539,
-2.89487,-0.727481,-0.39588,
--1.65151,-0.603877,0.250508,
--4.35232,-1.32155,-2.31877,
-2.75852,-1.88931,1.77874,
-2.75452,-0.64123,2.45546,
-0.151914,-0.888395,-0.260935,
-0.150593,0.0461652,-0.158206,
--1.22087,-2.92034,-3.78604,
--0.761622,0.161856,3.5586,
--1.88456,-2.48094,0.287091,
-1.25293,2.64374,1.6532,
--0.657609,1.32547,-0.557301,
-3.85995,2.32568,-1.38265,
-1.65572,-2.28977,0.957488,
--2.45312,-2.96071,3.45147,
--1.75259,0.365259,1.60113,
-1.14045,-0.844805,0.359343,
--1.55951,1.65687,-3.10398,
-0.441652,-1.36623,-1.55494,
--3.95762,0.288753,3.7791,
--1.80101,-0.241499,2.29693,
--0.456931,1.64399,1.35559,
--0.691421,-0.723378,2.51839,
--1.20658,-3.04063,-1.552,
--0.958574,1.48688,0.950152,
-1.76319,-1.36072,2.15866,
--3.91301,-0.328932,-2.45524,
-2.9553,3.12703,-2.43321,
-3.55939,-1.48028,0.152252,
--1.41545,3.247,0.779314,
--3.34482,-0.894538,2.09302,
-1.15338,0.362332,-2.7924,
-0.468852,0.120872,1.35593,
-1.98778,-3.32292,-0.758591,
-0.420718,-0.225014,-2.44806,
-0.550207,1.56432,2.25317,
-4.35156,-0.966178,-0.791032,
-3.35179,-1.04981,-0.854089,
-1.70857,-0.281369,-0.254686,
--3.05855,-0.443693,1.30251,
--3.9509,-2.72179,-3.83489,
-2.19632,1.32915,1.15345,
-1.42782,-0.449435,-2.85005,
--2.19053,0.049866,2.87493,
-2.45196,-2.44705,-2.85302,
-4.35263,0.245956,1.12886,
-1.8167,1.85407,-0.714159,
-1.88577,2.04227,-0.959396,
-1.6522,-2.48289,0.355373,
--3.39965,0.286834,-1.68171,
-1.85639,1.47419,2.25749,
--2.5216,-0.88573,-2.69594,
--0.143043,0.28453,-1.75898,
--2.52745,-2.76741,-0.257011,
-0.381448,-1.64793,-0.756889,
-2.30469,-1.28844,-2.79271,
--1.72491,-1.48634,-2.61686,
-0.503342,0.248352,-2.27162,
-0.457491,-1.88183,-0.951124,
--1.23123,0.963519,2.3569,
--0.55709,-0.364372,-1.82528,
-2.73963,-0.567024,-0.496936,
-1.17979,2.76252,-2.35641,
--1.20723,-2.1692,3.14368,
--0.0504301,1.76714,1.64265,
-1.45714,-0.725448,0.739217,
-0.246123,-3.27811,-0.251218,
--0.894632,1.08758,-0.17184,
--2.45217,0.565077,-0.557015,
-2.51301,1.1271,2.25057,
--1.05099,-2.1688,-1.88996,
-1.26945,-2.1225,-1.55031,
--4.30129,-0.760298,0.259868,
--0.157336,-0.237532,-2.69483,
--2.95778,1.36212,-3.65524,
-2.74003,1.16234,2.05928,
-0.955294,-1.52182,-1.05684,
--1.87004,2.72729,-0.550608,
-0.459439,2.88101,-4.4135,
-1.35069,1.08445,-0.808625,
--2.70034,-1.36291,-2.65126,
-0.353099,2.32354,-1.61885,
--0.453359,1.67524,0.122888,
-3.7506,1.12855,-3.86338,
-0.548626,2.63101,0.552261,
--0.753935,-3.52241,-3.21122,
-0.258935,-1.32453,2.25745,
--2.8797,-1.60832,-2.45626,
-0.151838,-0.565264,3.98539,
-2.1508,-1.68734,-1.75076,
--4.23947,-1.92531,2.35438,
-1.95273,-1.32736,0.313398,
-0.533647,0.646686,0.75712,
-0.856619,-0.843249,-0.577773,
--2.15649,-1.64285,-2.31055,
--0.851309,-2.84717,-0.324933,
--3.17772,-0.324817,-0.858394,
-3.45303,5.29449,0.818094,
-1.42912,0.238088,0.385617,
-0.459586,1.7661,-0.153761,
-0.855577,3.16845,-2.19548,
-2.15181,0.729021,-0.955922,
--2.40113,0.665756,-0.521366,
-1.45469,-0.462177,-1.95869,
-0.629115,-1.84769,1.86755,
-3.47576,-0.209875,-0.555502,
-0.295075,-0.840772,4.68895,
--0.253301,-2.49078,2.11749,
--1.15923,-3.163,-3.05671,
-1.45484,0.963654,-0.734942,
-0.354307,0.520772,-1.32278,
-2.65725,0.284589,-0.856856,
--1.2596,0.765493,-1.66469,
--0.656057,-2.16906,3.72144,
--0.251559,-2.36406,-1.89709,
-0.35608,-0.80463,1.85674,
-0.0508692,0.615674,0.856785,
--2.50726,2.28743,-2.05697,
-1.65272,1.29604,2.11481,
--3.2878,-0.244516,0.799732,
--2.18989,-0.847222,-0.264559,
-0.452832,0.960993,2.53691,
--2.43913,1.28957,2.75427,
--1.72889,-3.29414,-2.31426,
-0.952615,-0.0844651,0.346607,
-1.41175,0.889643,0.450356,
-2.13145,1.08697,0.223055,
--2.16002,-0.225505,-0.602641,
-0.54028,1.24765,-0.456129,
-2.55086,-0.56734,-2.65051,
--4.53921,-0.483588,-1.25013,
-3.45413,-0.44258,2.29687,
--0.257456,0.64624,1.65041,
-1.25559,-0.65493,-0.358872,
-1.9599,-1.56965,-4.17044,
-2.75996,-1.98665,3.31794,
-3.05837,1.04847,-0.975536,
--2.95407,1.40294,-2.25825,
-1.38718,0.360709,-2.98211,
-0.481728,-2.48564,3.25864,
--1.15089,0.363522,0.458662,
--2.25551,0.0421839,0.650008,
--1.85862,-0.969237,4.25313,
-1.55797,0.0465051,-3.85709,
-0.0555338,0.682957,-2.45556,
--0.186868,-0.482811,1.96957,
-2.197,-1.5248,-4.20912,
-3.40636,6.26268,-2.05757,
-0.780426,2.68048,-0.852693,
-1.65184,1.68951,-0.892089,
-2.11929,-2.44406,1.21168,
--0.153348,-1.88112,-0.357374,
--0.359393,1.76654,1.63063,
--2.15954,0.0819277,0.757621,
--0.159898,-3.36316,0.359582,
-2.74125,-2.84148,0.355785,
--1.3558,0.27827,-0.588162,
--0.354346,-2.56747,-0.984403,
--2.75082,-3.56807,1.5599,
--2.54708,-0.686147,2.75649,
-1.35138,0.692978,-2.24969,
--1.39826,-0.246682,-1.65876,
--1.46629,-1.44446,4.45293,
--1.89442,3.64549,2.05732,
--0.658093,0.0815129,3.95269,
-2.25603,2.96329,-2.35993,
-1.36323,1.64488,-0.0538547,
-1.75659,2.24227,-2.8522,
--0.0566584,-1.56465,-0.0503143,
--3.8532,-0.822258,-0.345406,
-0.951328,0.329296,-2.52211,
--2.48659,0.410856,-3.55401,
-3.72676,2.36324,3.65589,
-0.559972,0.884984,3.15283,
--1.37624,-1.36007,-2.16578,
-2.05543,0.4472,-0.82911,
--4.75258,1.8779,-1.75376,
-0.15648,2.64039,-2.21467,
--2.0593,-2.56775,1.15037,
--3.70217,2.12375,1.3652,
-1.05566,6.8299,4.02985,
--0.766882,-0.88359,1.35525,
-0.951335,-1.84689,0.178337,
-0.751608,1.1691,4.25273,
--1.36367,0.728904,0.655858,
-3.17581,-0.0844758,-1.75811,
-2.85546,-0.683618,0.653701,
--0.471118,3.04176,-2.35393,
-3.0574,-0.601996,-0.611932,
--0.854024,-0.44532,0.355575,
-0.504700,-1.92888,6.4818,
--1.25515,-1.44466,1.90429,
--1.67201,0.0461708,-0.796655,
-1.45345,-1.66159,-3.48143,
--2.84514,-1.24586,-3.47945,
-0.287402,-0.688276,-3.75664,
-3.35908,0.687828,-1.94406,
--2.39167,1.08322,-1.73508,
-1.52152,1.86032,-1.25351,
-1.55931,3.64414,1.35944,
-1.15954,-1.36058,0.758814,
--1.95325,0.0851092,-0.854106,
--2.25254,-0.523024,1.05486,
--2.68036,-1.32901,1.05877,
--0.485956,-1.52164,2.45303,
--0.0546215,0.640683,-2.85953,
-4.45295,-0.246051,-0.159626,
-3.4523,1.7215,-1.10587,
-3.35142,-1.72053,-0.252105,
-1.74251,2.76108,2.51524,
-2.15054,-2.88101,-1.7527,
--3.70517,-0.0470951,0.258921,
--0.45593,-3.47184,-2.95345,
-3.15988,-2.32107,0.105299,
-0.751449,-2.88762,-3.45245,
-2.9794,0.493172,-0.654683,
--1.87713,-2.48632,-3.534,
-1.65266,3.16008,2.1579,
--1.25239,-0.763119,2.15776,
-3.5572,0.282681,2.44174,
-0.251145,0.520256,2.3184,
--1.78596,-1.36913,-2.50818,
-3.82122,1.04473,0.456159,
-2.45979,-0.722759,-4.05123,
--0.855594,0.163792,-0.553702,
-0.656895,0.529982,3.35129,
-0.857952,-0.0885677,0.695128,
--0.143269,1.12972,-3.155,
--2.95923,0.241767,0.832165,
-0.253329,-0.622952,-0.459799,
-0.151499,2.5297,1.53059,
-0.655464,-1.49902,-1.51071,
-4.7585,1.76425,1.15164,
--1.75063,-1.44645,-3.65525,
-0.850392,0.0417223,-0.340588,
--0.557015,-0.282305,-1.85291,
--4.05639,0.522959,-2.3507,
--0.358137,-0.967852,0.807832,
--1.82056,-0.0483894,0.0541359,
--2.16623,0.129809,-2.52513,
--1.85591,-1.04417,-1.28501,
--1.79647,-3.44045,-1.73399,
-2.25342,0.161308,-0.0517495,
--1.37877,0.243596,-1.52931,
--0.059299,-0.480825,1.7137,
--2.54357,0.286685,-2.11495,
-3.92334,-0.442936,-0.852895,
--0.390023,-1.96437,1.38718,
-1.35263,2.92968,-1.1545,
--2.25892,-2.27429,-0.451533,
--0.2215,-0.126727,0.155541,
-0.715932,1.47509,-3.52895,
--0.382939,3.16461,2.65165,
--1.14437,-1.44682,0.456601,
-0.251892,-1.0431,4.31548,
--2.23281,-2.48698,0.46995,
-0.954231,-3.4323,-1.20233,
-2.75569,-1.66383,-1.95486,
-0.750644,-1.84163,-0.159206,
--0.757387,-1.84192,0.354209,
--2.85509,-2.12151,-0.954754,
--0.888427,-2.8403,-0.157387,
--1.95265,-0.445753,2.17956,
--1.05845,-2.48694,-1.25315,
--2.66497,-1.48251,0.873192,
-2.50491,-1.0833,1.99667,
-0.453931,2.52158,0.456875,
-1.55859,-0.161924,0.256619,
--2.92585,0.368018,0.35908,
-2.95509,-1.56248,-2.74469,
-3.46082,-1.76026,3.05835,
-1.75644,-2.84241,0.507631,
--0.959006,0.649579,1.10824,
-2.63856,2.0417,0.187281,
--0.150004,-0.0838836,-0.949314,
-2.26402,-1.28916,2.85284,
--0.821239,2.68795,-0.317185,
-3.47124,0.840813,-2.65322,
--0.253209,-0.244177,0.457348,
-2.76181,1.64033,-1.95329,
-1.35105,-2.96027,0.659952,
--1.45423,-0.24358,0.832696,
-1.45109,1.64958,-3.45448,
--1.15659,3.08225,1.11445,
-0.806359,1.88298,-2.13001,
-1.15538,3.04545,-0.759437,
--0.450074,1.36121,-0.155042,
--2.80924,-1.24207,2.55513,
-4.48859,2.04394,1.25324,
--0.958741,1.24575,3.65169,
-3.45143,1.3276,2.5144,
--3.25232,1.12514,-1.21425,
--2.45327,0.681109,4.35764,
-0.55395,-0.128353,-3.95705,
--0.352458,3.08882,-0.340631,
-1.35213,-2.92251,-3.31166,
-0.52621,-0.279201,0.959619,
-1.2243,-0.240093,-0.75247,
--1.29854,2.16477,3.3507,
--3.35677,2.36713,3.4585,
-0.957717,-0.885793,1.25827,
-0.150983,1.24269,5.39106,
-1.84986,1.56932,-1.05811,
--1.35563,3.82103,-1.45287,
-1.4544,-2.6453,0.58082,
-2.05908,1.16496,1.44075,
-2.9507,-2.4957,0.153512,
--1.10289,0.763085,-1.65351,
--2.50708,-2.467,1.05892,
-3.55284,-1.8509,-2.55732,
--0.848034,1.24305,-3.7516,
--1.35051,-2.48178,2.85326,
--2.18554,1.48771,-0.155205,
--0.459278,2.68404,2.85727,
-0.854722,1.47322,-3.35951,
--2.23505,-2.24254,0.353203,
-1.42395,-2.32169,0.558188,
-3.65106,1.12201,-4.58409,
-0.11,-0.68782,1.85804,
--1.9551,-0.560204,-2.0577,
-1.85964,1.32737,-4.40673,
--0.616311,0.649737,-0.30189,
--1.55375,1.52043,-3.75629,
-1.85417,0.486964,0.654806,
-3.35638,2.52599,1.94343,
-0.491389,1.40427,-1.31935,
--2.72939,0.844341,1.62621,
--0.525985,1.31415,0.484015,
-2.25998,-1.719,1.25143,
-1.79268,2.46378,-0.951188,
--3.55105,1.04122,3.9501,
-0.954251,1.28296,2.05486,
--3.15267,1.96498,-0.361707,
-1.35358,-0.921098,-1.71743,
--3.16896,-3.08548,0.903411,
-1.25127,-2.44903,2.25616,
--3.88899,0.761334,-1.05751,
--1.05163,-3.89783,-0.883668,
--4.189,1.24176,-2.63816,
-2.45671,-1.84859,0.352808,
--1.59618,2.16255,4.33699,
-2.10913,-1.88673,-0.952497,
--1.85571,-0.287392,0.277176,
-0.751967,1.04568,-1.35427,
-2.85792,1.60982,-2.05454,
--2.13152,-0.260207,-2.15124,
-1.75432,2.28936,0.756254,
-1.95711,-0.681098,-2.38037,
--0.826273,1.08361,1.6515,
--1.85118,1.89481,-0.756754,
--3.0571,2.44795,0.355341,
--0.455122,-3.58071,-2.85209,
--0.95805,0.641282,2.15189,
--1.35515,-0.234803,-0.825819,
-2.12472,-0.0444431,0.651227,
-2.67573,0.223987,2.75712,
-1.65871,-0.163059,1.6513,
--1.85429,0.68862,1.9576,
--3.05186,-2.2804,0.100919,
-3.41813,-1.88775,3.67075,
--0.753778,0.36467,1.55333,
-2.97628,-1.36502,-1.85135,
-0.477128,1.08862,0.858931,
--1.0531,1.0488,2.15218,
-2.66911,-2.08876,-0.182397,
-5.117,-2.84097,-0.953684,
-0.468302,1.88616,2.05369,
--3.16099,-2.76085,-2.75679,
--2.6593,3.52373,-1.24072,
--4.37957,-0.286903,3.63863,
--2.85958,-2.56921,-2.85723,
--0.159735,2.72758,-2.80575,
--0.951849,-0.607465,1.05633,
-1.93077,2.56422,1.25446,
--0.859754,0.248106,0.0584456,
-2.4023,2.56659,-1.2588,
-2.35295,-1.08729,2.7851,
--2.1537,-0.765032,2.83652,
-1.40185,1.29804,2.3588,
--0.991566,1.72049,4.17146,
-3.76736,-1.48837,2.05329,
--0.251896,0.765367,-1.4087,
--1.6228,0.328693,0.0528287,
-2.56735,-3.08103,0.853144,
-0.0531812,-1.96216,1.55734,
--3.77052,0.8421,-0.258953,
-2.35523,0.676643,-1.55789,
-1.16702,2.64474,-1.45533,
-2.55709,-1.56013,2.05351,
--2.15518,3.56253,3.257,
--0.553936,-1.24935,2.65224,
--0.355931,1.32374,0.859863,
--1.92974,1.2482,1.15936,
-0.350652,-2.44371,-1.35611,
-2.98996,-1.08527,-4.30641,
-1.82765,-0.440236,1.25528,
--0.689231,-1.08813,-0.668663,
--0.326426,-0.881857,-1.45371,
--1.0655,2.12466,2.34146,
-3.1563,0.523166,-2.8572,
-0.455505,2.48775,-1.33482,
-0.53939,-0.847333,0.732877,
--0.683025,-0.448889,-1.35747,
--1.7711,-0.125587,-2.55083,
--0.512871,0.520964,1.40731,
-4.93857,-1.6805,-0.127298,
-1.46098,-1.64073,1.35833,
-0.0518058,0.285151,-2.2437,
-1.5587,-1.23067,0.458753,
-3.13089,3.64132,1.45181,
--1.55648,2.167,0.153491,
-3.94451,-2.56372,-1.25276,
-4.15866,0.646921,2.65542,
--2.88189,0.562407,-1.35379,
-1.31686,1.2808,0.804375,
--2.36912,-3.08775,1.28335,
-0.575203,-0.36483,-2.43958,
-0.613108,0.526892,2.75368,
-3.96027,-0.525425,-4.25746,
--0.510821,1.28578,-0.058488,
--0.254704,-3.847,3.15258,
--0.925874,-1.72014,-3.15341,
-0.85704,0.84788,-1.75947,
--3.35712,0.722104,2.15645,
--1.67305,0.681216,1.65726,
--3.64682,0.867926,2.63525,
--0.715921,1.96081,-0.939934,
--2.45646,1.3249,-2.75733,
--1.75798,0.725382,-0.851921,
--2.78528,0.679275,-2.59212,
--2.24551,-3.4597,-1.85735,
-0.85142,2.28058,-3.75328,
--3.85054,2.44519,4.35081,
--3.6553,0.521917,0.293354,
--4.35959,-0.528198,1.55557,
-1.45186,-0.0891161,-0.468118,
-1.85594,-0.761461,-4.68083,
-0.950642,0.526239,-1.30614,
--2.50526,-0.885606,-0.362569,
--2.96569,1.68519,-1.15965,
--3.212,0.260715,1.18472,
-0.950556,-0.282806,0.776252,
-3.66678,1.08585,-2.15646,
--0.806289,1.72784,2.85906,
-0.363827,1.76644,0.931866,
--1.34204,-0.563686,-2.34091,
--2.81333,0.415358,4.28363,
-1.52053,-0.327359,0.35052,
--0.633441,-0.240518,4.05745,
--2.38947,-1.84662,-2.29572,
--1.95744,-0.863705,1.85889,
--0.0509082,-0.164164,3.8571,
-0.156438,-2.64188,1.75836,
--3.85642,1.48025,0.171659,
-0.253545,1.0852,-2.45243,
--4.11318,4.1655,-0.120976,
--1.44928,-0.328222,-0.871279,
--1.90972,-1.8495,-3.16966,
-0.359433,1.3236,-3.95045,
--2.60974,-1.04138,4.25836,
--3.16336,-0.961581,-1.65161,
--0.552909,-1.16942,4.05164,
--3.10918,-1.2402,-0.555073,
-2.25494,1.24432,3.44063,
--1.24998,-1.24928,-4.05493,
-3.05441,1.92762,1.43329,
-0.557032,-2.7688,-3.25463,
--2.05665,1.6357,0.656665,
--0.459042,0.122664,-0.152961,
-2.17715,2.96833,1.1332,
-0.0536573,-2.08635,-0.736471,
--3.15658,1.0818,-0.172166,
--1.95784,0.44402,0.612685,
-0.15168,-0.323951,2.85563,
-0.559356,1.63101,0.558005,
--2.05643,1.84615,-1.87964,
--0.254098,0.368208,1.23061,
-4.6438,-0.209283,0.695869,
--1.95087,-0.859788,0.0539467,
--0.351737,-1.04291,0.869198,
-0.776319,3.04922,-3.55278,
--0.158751,1.12538,-2.59681,
--0.560997,-1.68381,1.56935,
-1.71385,-0.446223,-1.56843,
-4.05142,-1.3243,2.85052,
-1.68685,-1.56305,2.159,
-0.359977,-1.16029,1.25037,
--2.65045,-1.28532,0.459338,
-5.42068,1.52601,-1.35562,
-1.34386,1.68231,-2.75114,
-1.25123,0.43108,0.383897,
--0.952936,3.6889,1.75759,
--3.55855,0.484241,1.15503,
--1.71394,-2.64568,-3.30684,
--2.23513,-2.46812,1.05321,
-0.160986,0.442362,-1.05077,
-2.05433,0.473204,0.823968,
-0.482077,0.0477338,4.21712,
--1.25348,0.767612,0.455813,
-1.61308,2.04125,-2.95433,
--2.05862,-0.444052,1.35177,
--3.2582,0.44354,2.15898,
--1.75935,0.0459283,2.35061,
--4.15501,0.68674,0.802439,
--1.66005,1.12067,0.552901,
--0.150828,3.4151,3.05446,
--0.274381,0.0405946,-1.45463,
-2.94543,-0.360918,1.45895,
--1.42494,1.56503,1.31012,
-3.45402,-1.27808,-4.29049,
--1.14819,0.674339,1.55807,
--0.356159,1.52295,-0.351445,
-0.387809,0.965119,1.84271,
-2.56165,-1.84639,1.65056,
--0.619108,2.24004,-2.92134,
--0.254288,-2.32744,-0.720931,
-3.3508,-2.24501,1.58268,
-1.69434,1.96814,3.97439,
-1.80785,0.685502,-1.55595,
-2.71587,1.76415,-2.98124,
--2.35151,-0.697338,-3.96269,
--1.85759,1.96899,-1.25212,
--4.05922,1.12838,-2.7597,
--2.85434,-1.36487,0.659987,
--1.75616,2.12969,-1.35032,
--2.95985,-0.0854955,3.65545,
--2.46049,2.45378,4.51969,
--0.0577358,0.0427911,0.359068,
--3.25346,0.161829,1.12956,
-3.55498,2.32482,1.33302,
-4.99905,-1.88748,0.450165,
--2.35406,-1.44715,-0.745307,
-2.44217,-0.642981,0.126924,
-1.73283,1.67362,1.91136,
-1.34239,-0.434386,-0.449795,
--0.9813,-2.72962,-3.6889,
-1.29807,-0.448566,2.13911,
-0.654017,3.54591,-1.55982,
--1.55508,-2.64564,0.555,
-1.92722,-0.322513,-2.13691,
-1.35913,-2.84853,-0.470788,
-0.257868,-2.68874,-0.268328,
--2.05043,-1.68405,-3.05075,
-1.65173,-0.446801,-0.75339,
--1.25655,0.965275,-4.15374,
--4.27942,-0.564403,1.45826,
-0.950669,-2.4416,-1.68235,
--0.0541107,0.882274,3.15308,
--1.65016,-0.886156,-3.85588,
-0.355613,0.217671,4.25412,
-0.800472,0.847259,3.11114,
-1.8599,-2.16981,-2.22314,
--2.05061,0.164561,-0.452181,
-0.854144,1.84334,-1.45981,
-1.68547,1.56536,-1.45874,
-1.25244,-0.844991,-2.95475,
--1.92348,2.32119,-1.80444,
--0.645646,2.45193,-3.65332,
-4.45803,0.527732,3.02031,
-2.74572,0.287964,-1.80485,
-0.35961,-2.56437,3.97194,
--0.956828,-1.28915,1.64424,
-0.414971,-0.235061,-2.15757,
--0.0530542,-1.08464,-4.11853,
-3.17203,-1.21013,-3.85806,
-0.758948,0.124698,-3.10188,
--1.65404,-1.16204,-1.65357,
--1.65985,3.84433,4.65101,
-2.83444,-2.69529,-1.65021,
-1.29814,-2.76926,-2.27139,
-0.462382,3.04217,3.45153,
--3.61944,1.04723,-0.638308,
-2.25235,1.64048,2.95175,
--3.05826,-0.76526,-2.38243,
--2.8506,2.12102,-0.659444,
--0.10046,0.0887098,-1.63621,
--1.55585,-1.36073,2.2076,
--0.474968,1.56568,-0.302349,
-0.36584,-2.36102,1.35289,
-0.224784,-0.637694,1.62444,
--0.658172,1.9689,-3.13712,
-0.646334,-1.04672,2.59285,
--2.63054,-1.08263,-0.851087,
-1.45804,-2.56159,-2.66388,
--2.45748,0.0409116,-2.85428,
--0.0561462,-1.24229,-1.25145,
--2.95391,-1.80896,-2.05036,
-4.36778,-0.969951,3.53686,
-2.15582,-1.67173,-0.831609,
--1.27059,-1.14919,1.7569,
--1.57398,-1.28091,-0.251735,
-2.59506,-2.6408,-0.345589,
--1.64147,-0.360324,3.1562,
--0.125427,-0.641484,-3.66095,
--1.9148,1.8885,2.12972,
--2.85768,-2.28782,-1.55719,
--1.37239,-0.485964,-2.22291,
-0.516294,0.281078,0.652612,
--1.13028,0.246659,-2.25636,
-1.7555,-1.41602,0.348449,
-1.5355,-1.32646,-2.82417,
--0.95426,2.0824,-0.383507,
-2.75739,0.241779,0.755701,
-0.752655,0.56204,-1.55738,
-1.1271,-3.76145,4.3701,
-0.326656,-1.24467,2.62222,
--0.259702,2.68152,-3.18542,
-1.88504,-0.760623,4.42592,
-2.51673,4.72252,-1.99239,
--1.66934,-0.129677,-2.49048,
--1.25499,2.36151,-2.98447,
-2.65331,0.0443886,0.108819,
--3.35439,0.0872109,-1.33429,
-3.35597,0.0403626,2.8203,
-4.45191,1.24824,-0.95821,
--0.171441,-1.52622,-4.68253,
-1.19986,1.72992,-3.29566,
--0.451339,1.92976,1.21534,
--0.743119,-0.160688,0.805688,
-2.38678,0.272829,2.75457,
-1.72464,2.08232,-0.950389,
-2.11167,1.56576,1.21969,
-3.05157,-1.56838,-0.450535,
-0.132417,-3.08279,-1.34127,
-1.65441,-0.325204,-0.825145,
-2.05515,-1.8417,1.8561,
--0.555858,1.52007,-0.80122,
--2.05026,1.52773,2.33529,
--2.35231,-3.28716,3.53598,
--2.25771,2.5667,-1.92243,
-0.386884,-3.28674,3.49336,
-0.957272,-1.68124,-1.89095,
-2.99881,2.24992,-0.0535837,
-3.19604,2.92893,-2.16276,
-2.55903,3.12413,2.95022,
--0.570758,-2.85326,-0.339255,
-0.356627,0.641074,0.355538,
--1.15777,-0.162227,-0.455885,
--2.4871,-0.885492,-0.374875,
-1.55464,-1.48929,-0.593706,
--0.852655,-2.08736,-1.18281,
-0.504087,-0.879247,1.35148,
--2.15261,1.04511,-3.25543,
--0.653745,-1.32873,-3.18964,
-0.35973,-0.844255,-1.72034,
--2.11112,0.962572,2.59386,
-1.47531,-0.693626,-3.15249,
--1.35814,0.767202,3.45094,
--3.05812,-1.26298,1.45287,
--1.63927,0.893568,-1.94978,
-0.751992,1.68559,2.3618,
-5.8205,-0.769076,-0.958994,
--2.38512,-0.166005,-1.25855,
--0.556071,-2.28164,1.57032,
-5.89172,-0.244834,0.553728,
--0.468648,-0.927756,-0.737048,
--2.66659,-1.64374,-0.995568,
-0.251499,-1.24569,0.95028,
-0.737721,2.88575,0.448918,
--0.634421,-1.84377,-2.47094,
-0.556349,2.86774,1.62621,
--3.29644,3.28642,-3.45459,
--1.45045,2.52138,2.75329,
-1.87449,-2.68651,3.60371,
--0.656424,-2.56828,1.35509,
-1.95771,-1.48325,-3.85265,
-3.85074,0.0825779,-1.65283,
--1.17278,-1.69258,-1.05875,
-1.25754,-0.0439433,1.3571,
-2.91459,2.08715,0.259842,
-0.748196,2.52132,0.659051,
--1.85745,-1.88355,1.05259,
-1.69311,1.12299,-3.05453,
--2.86301,0.123274,0.559289,
--1.43146,1.64425,-1.95053,
-2.35287,0.414621,-0.950807,
-0.952585,-0.280452,-0.844588,
--1.53836,-1.76396,2.51742,
--3.05431,2.45,-0.26571,
--0.637412,1.12028,-0.587387,
--1.71017,-0.728497,-1.05087,
-0.454027,0.849208,-0.151716,
--3.54846,0.367137,1.1484,
-0.200816,-2.08832,0.255433,
--2.15817,0.725338,0.852676,
--2.45708,-0.725538,-0.859435,
-4.25339,1.84177,-0.555145,
-0.119319,-1.32041,-1.45864,
--3.65177,0.361323,0.351554,
-0.928598,0.321024,-3.64759,
--0.250062,1.84912,7.49887,
-3.59593,0.929451,-2.15224,
-0.658599,2.36796,4.11632,
-0.55841,-1.08657,0.258326,
-1.9419,0.0488641,-3.75375,
-0.0589998,0.521351,-3.85723,
-3.45108,0.562199,4.20946,
--0.255073,2.36504,-3.556,
-1.95848,1.28698,4.25014,
-1.85411,3.12131,0.652769,
--3.3589,0.801817,-1.5591,
-2.48128,-0.163406,1.25243,
-2.52135,0.960467,1.45432,
-0.827496,-0.163021,-0.558886,
--3.45032,-0.0831453,0.851212,
--3.45334,0.855944,1.35596,
--0.834644,0.245598,-1.23878,
-3.64558,1.16831,-0.18559,
--1.45919,-3.08196,-0.329805,
--3.65715,-1.04485,0.159208,
-1.35463,-0.766382,0.558632,
--2.75899,-1.67431,-1.55069,
-1.67539,2.04337,0.912884,
-3.51677,-3.24285,0.170272,
--4.25189,0.56589,-4.35936,
--2.68545,-0.448243,0.540342,
-0.279844,-0.641466,-0.353986,
--3.27626,-3.52006,1.77644,
--0.724096,-1.84647,-2.45271,
--4.18603,0.123376,3.85066,
--4.05156,0.0499386,-0.332945,
-2.69508,2.32777,1.26256,
--0.353726,1.07252,-0.738837,
--0.947178,0.36459,1.55593,
--0.058346,2.44781,-4.35023,
-1.51586,-0.961109,-3.43483,
--2.8852,2.08863,-1.75468,
--0.297867,0.722757,0.91355,
--1.12917,-1.68328,0.175315,
--1.24248,-0.323519,-0.854841,
-0.751943,0.564075,3.95073,
-1.15436,2.81813,0.653114,
--2.55058,-2.56486,0.756618,
-0.959794,0.845224,-0.854001,
--2.15033,0.248556,-3.16151,
-0.353224,-1.68637,0.457949,
--0.753237,-2.48313,-0.355373,
-0.296585,2.04822,0.198473,
--2.4737,0.682952,1.85349,
-1.9027,0.882796,1.45908,
-0.254799,1.92572,-1.70848,
--0.951602,-0.698987,-2.22682,
-0.262582,-2.44093,1.05636,
-0.385415,-0.685667,-3.35928,
-0.055981,0.523585,-3.36093,
--0.0518635,-0.889068,-0.840648,
-0.455171,2.84624,-1.98276,
-2.85475,-0.685697,-2.45695,
--1.05047,-1.92121,0.931666,
--2.75962,-0.164458,-1.55261,
-1.91811,1.65767,3.15004,
--2.25653,0.856735,-4.351,
-1.89178,-0.728669,-3.8803,
--3.25958,-1.16223,-1.85148,
--1.6291,-2.32967,-0.874786,
-3.17524,0.327351,2.15337,
--1.05094,-0.560694,-3.4581,
-0.759785,-1.0801,-0.257876,
--0.4597,-2.2404,2.54341,
-0.242266,0.121832,7.80878,
--1.6573,1.56049,-1.61749,
-1.39912,-2.84395,-0.25965,
-0.552342,1.36924,2.95278,
--1.92932,-0.883981,0.0589583,
--1.9026,0.56297,-0.723523,
--1.25867,-0.529617,2.3503,
-2.16527,-0.723364,-1.45609,
--0.984608,-0.720375,-2.05144,
-0.946803,-0.969188,-3.14625,
-2.7986,-2.36069,1.25827,
-3.37979,-1.11699,-3.55116,
--0.753992,-1.9649,2.98548,
--0.456321,0.525303,-0.109174,
-0.8642,1.53147,-3.34749,
--0.450507,-0.443265,-2.8325,
--3.24876,3.12791,0.576143,
--3.14755,2.84502,-0.45749,
-0.226819,-1.28172,0.939501,
--0.650725,-1.40317,-1.35211,
--0.451625,1.84271,-0.950536,
--1.36693,0.850218,-1.09799,
-2.35374,-0.28759,1.55815,
-2.60577,-2.46765,1.2633,
-1.21562,-1.72153,-0.4034,
--2.43216,3.04268,1.90109,
--1.85365,-0.16523,-2.98947,
--0.953475,-2.76164,2.53396,
-2.55264,-0.645611,3.25479,
--0.675476,-0.724382,-1.4566,
-0.801062,0.16778,2.21815,
-0.680443,0.0407888,3.27279,
--3.75426,-0.247624,0.26307,
-0.427609,-0.322312,0.652005,
--2.17428,-3.68643,0.256619,
-0.456732,-2.44858,3.13051,
-0.524175,-1.88231,-1.93171,
-7.2311,1.8354,-1.2502,
-2.69502,2.25543,-4.25127,
-0.259357,2.28099,-0.476734,
--0.327316,-1.24908,0.78628,
-0.190362,-3.26019,0.0545844,
--1.25409,-0.761609,2.65361,
-2.86816,0.443709,0.556137,
-2.60289,-0.680561,0.248414,
-1.75631,-0.162859,-3.62488,
--0.559754,-0.16222,2.35858,
-0.157552,-1.72639,-0.48056,
-3.69492,-0.848265,-0.256413,
--1.4264,-1.48589,-2.724,
-1.15372,-0.27228,-2.75499,
--1.85159,1.76577,-0.858854,
-0.0580466,-0.41133,1.05649,
--1.25289,0.528142,-0.386138,
--0.858101,-0.245127,1.95078,
--1.95302,-0.0862415,-1.95806,
--2.79133,-0.527094,-0.356931,
-0.110597,0.167534,4.12784,
--0.637771,-0.526587,-1.25734,
--2.311,-0.489068,-2.8594,
--0.352617,-1.23939,-1.85435,
-1.78814,-0.265883,3.35913,
-2.75557,-2.32271,3.15559,
-2.85426,0.443661,0.921828,
--2.14262,0.400863,1.11614,
-4.45496,-0.488668,-3.7533,
-0.754719,-1.44165,0.853323,
--0.856506,1.76559,1.05702,
--0.418565,-0.921031,-2.43699,
--1.29292,-0.282271,-1.62927,
--0.759531,0.566692,-0.750991,
-0.559787,1.72479,-0.26667,
-2.75533,-0.245187,-0.543844,
--2.27924,-1.04154,-4.05156,
-3.35852,-0.561129,-2.98986,
-2.41843,-0.321119,-1.55651,
-0.85431,-0.883719,-2.17826,
-0.417867,0.242995,-0.456326,
--4.17449,-0.720086,0.355145,
--0.577386,0.0440364,-0.950268,
--2.8156,2.92346,0.958713,
--1.65138,0.963561,1.25265,
-1.45117,0.845424,0.252789,
-2.27848,-1.76777,0.117707,
--0.754248,1.08381,-2.15345,
--3.15415,-0.162292,-1.15347,
-2.55396,-1.68912,1.15698,
-0.159561,1.84202,0.428428,
--1.58079,2.04207,3.29578,
--1.05711,-0.843112,-1.98122,
-0.138866,-2.96642,-0.212247,
-2.6778,0.686972,-2.6553,
--0.498291,-0.362846,-1.0538,
-1.19872,0.0476518,-2.42077,
--2.3972,1.40393,-0.1943,
-0.85034,-1.24222,1.5646,
-0.142174,0.249903,-2.75252,
-1.15197,1.32746,-1.70104,
-0.359387,-1.65115,-2.75243,
-0.357917,-1.36406,2.55102,
--1.65268,-0.28339,2.75665,
--3.82681,-3.28984,2.55128,
--2.61371,1.08247,-0.457068,
-1.67152,-2.25527,2.45819,
--0.753832,1.1682,-1.95913,
--2.05131,3.04537,1.91954,
--0.695378,2.88924,1.41965,
-3.25767,-2.76934,-0.354127,
--0.746795,1.36034,1.85953,
-0.859135,1.08222,0.959116,
-1.15898,1.32443,3.41981,
-3.67954,0.447177,-0.414029,
-0.907323,2.12852,1.95837,
--0.683456,-0.247536,1.05621,
--1.67809,0.641544,-1.31143,
--1.30192,-0.677394,-1.95159,
--0.105665,0.365205,-1.2567,
-1.12189,-1.48969,0.957166,
-1.25554,-1.92186,-0.904086,
-0.117786,2.23836,-0.498009,
--2.85788,0.643364,0.55867,
--1.66115,2.56146,-2.28632,
--3.29334,-0.0894367,-0.656519,
-3.15561,-0.769732,1.15695,
-1.25684,0.64652,-2.6002,
-2.65231,-3.52625,1.55617,
--1.8573,-1.76276,-1.74075,
--1.55648,1.2592,2.1585,
--0.555522,2.88068,-2.85423,
--3.14249,-0.288592,-3.35534,
-2.45413,0.0854903,-2.20507,
--2.05464,0.887836,-0.658349,
-1.12708,-0.568106,-3.65865,
--0.59147,-0.685439,0.301612,
-0.473679,0.886411,-1.65386,
-1.65166,0.166741,0.751119,
--0.299287,1.72233,0.618559,
-1.15181,-0.488026,0.124448,
-0.0561315,1.04877,2.15922,
-0.154258,-0.64401,-1.31179,
-1.75863,-1.88571,-2.8537,
-3.35024,1.28154,-1.05461,
--3.71738,-2.88631,-1.05314,
--1.78258,3.08967,0.150476,
-3.47828,-2.524,-2.45502,
--0.159138,0.160633,-0.338796,
--2.15885,-0.82959,1.25022,
--1.95268,-0.841195,-3.19487,
--0.281381,-0.887435,-3.55807,
-0.415164,0.326482,-1.55411,
-1.92868,-2.84771,-0.556196,
-1.05804,1.32866,0.66596,
-2.46545,1.00747,2.35957,
--0.77358,0.284677,-1.38805,
-0.851046,0.960742,-2.70934,
--0.858208,-0.884015,1.16663,
-1.55291,0.282705,-3.18254,
-1.99034,0.286298,-1.75821,
-0.259097,-2.04379,-0.858936,
--1.5956,2.04693,-1.35234,
--0.775432,1.24465,1.95935,
-1.65595,-1.04954,-0.954437,
--2.35417,-1.76095,-0.248306,
-0.855717,-2.92161,3.4496,
--0.717941,2.52993,1.25007,
--3.42927,0.673305,0.995742,
-8.03373,-2.05136,4.02113,
-7.88929,-2.2029,5.0036,
-7.61596,-2.44569,4.54892,
-7.41949,-2.64169,3.82339,
-7.21192,-2.87947,4.89423,
-7.08346,-2.38649,4.19212,
-6.90279,-3.33038,4.9273,
-6.78959,-3.55575,3.55127,
-6.57074,-3.75902,3.32517,
-6.30756,-3.40499,3.78366,
-7.90893,-3.3237,2.48012,
-6.24078,-4.04978,3.47459,
-8.0691,-4.6865,4.08057,
-5.98731,-2.26113,2.82166,
-5.46898,-3.99581,3.25024,
-8.1461,-3.34471,3.42168,
-6.8456,-5.00126,2.36145,
-7.62888,-3.82465,2.7879,
-7.18034,-3.94376,2.74348,
-6.02527,-4.36523,2.56247,
-8.64577,-3.04345,2.62974,
-7.82539,-3.6881,2.96164,
-7.10508,-3.6174,4.22416,
-7.64684,-3.88431,3.9336,
-7.46411,-4.21516,3.32001,
-6.98777,-3.94024,3.14694,
-7.36355,-4.24875,1.72061,
-8.42011,-4.52065,2.62078,
-6.04598,-4.48682,2.74494,
-8.7682,-3.9271,3.82815,
-6.76279,-3.58031,2.92525,
-7.14794,-4.42742,2.62365,
-5.32696,-3.28733,3.34916,
-6.43655,-4.60784,2.41548,
-5.66033,-4.98497,3.72282
diff --git a/examples/datavisualization/custominput/doc/images/custominput-example.png b/examples/datavisualization/custominput/doc/images/custominput-example.png
deleted file mode 100644
index b2656b69..00000000
--- a/examples/datavisualization/custominput/doc/images/custominput-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/custominput/doc/src/custominput.qdoc b/examples/datavisualization/custominput/doc/src/custominput.qdoc
deleted file mode 100644
index 2149bd2f..00000000
--- a/examples/datavisualization/custominput/doc/src/custominput.qdoc
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example custominput
- \title Custom Input Example
- \ingroup qtdatavisualization_examples
- \brief Implementing custom input handler in a widget application.
-
- The Custom Input example shows how to customize the 3D graph controls in a widget application
- using a custom graph input handler to capture and process mouse events.
- The code in this example shows also how the camera is controlled by using QPropertyAnimation
- to animate the camera and item selection is done on mouseover rather than clicking any mouse
- buttons. Also the code shows how to implement similar zoom with mouse wheel functionality as
- the default input handler implements.
-
- \image custominput-example.png
-
- \include examples-run.qdocinc
-
- \section1 Replacing Default Input Handling
-
- The default input handling mechanism is replaced by setting the active input handler of
- Q3DScatter to \c CustomInputHandler that implements the custom behavior.
-
- \snippet custominput/scatterdatamodifier.cpp 0
-
- \section1 Implementing Custom Selection Handling
-
- The on mouseover selection handling is implemented in the \c CustomInputHandler that captures
- the mouse events. It then stores the last known coordinates to the
- QAbstract3DInputHandler::inputPosition property.
-
- \snippet custominput/custominputhandler.cpp 0
-
- As the selection is one shot, and is cleared each time a 3D frame is rendered, a timer is setup
- to retrigger selection so that the selection moves to the item currently under the mouse cursor
- as the camera animates around the graph even when the mouse cursor is not moving.
-
- \snippet custominput/scatterdatamodifier.cpp 1
-
- \section1 Implementing Custom Zoom Handling
-
- The camera has a zoom factor that represents amount of zoom in percentages. In this example the
- zoom range is limited between 10% and 500%. This range is then divided to four subranges where
- \c angleDelta is scaled to different amount of zoom change based on the current subrange.
-
- \snippet custominput/custominputhandler.cpp 1
-
- \section1 Implementing Custom Camera Handling
-
- The camera is animated to constantly rotate around the graph with two animations. The rotation
- around the graph is done with a simple QPropertyAnimation that just increments during 20
- seconds from 0 degrees to 360 degrees and sets the Q3DCamera::xRotation property.
-
- \snippet custominput/scatterdatamodifier.cpp 2
-
- The camera movement up and down is implemented with a QSequentialAnimationGroup that varies
- the Q3DCamera::yRotation property of the camera from 5 degrees to 45 degrees and back with in
- and out easing.
-
- \snippet custominput/scatterdatamodifier.cpp 3
-*/
diff --git a/examples/datavisualization/custominput/main.cpp b/examples/datavisualization/custominput/main.cpp
deleted file mode 100644
index d9e3b403..00000000
--- a/examples/datavisualization/custominput/main.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QFontDatabase>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- widget->setWindowTitle(QStringLiteral("Custom Input Handling"));
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Toggle Camera Animation"));
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->addItem(QStringLiteral("Low Soft"));
- shadowQuality->addItem(QStringLiteral("Medium Soft"));
- shadowQuality->addItem(QStringLiteral("High Soft"));
- shadowQuality->setCurrentIndex(2);
-
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")), 0, Qt::AlignTop);
- vLayout->addWidget(shadowQuality, 1, Qt::AlignTop);
-
- ScatterDataModifier *modifier = new ScatterDataModifier(graph);
-
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::toggleCameraAnimation);
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
-
- QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
-
- widget->show();
- modifier->start();
- return app.exec();
-}
diff --git a/examples/datavisualization/custominput/scatterdatamodifier.cpp b/examples/datavisualization/custominput/scatterdatamodifier.cpp
deleted file mode 100644
index 3c6abd76..00000000
--- a/examples/datavisualization/custominput/scatterdatamodifier.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-
-#include <QtDataVisualization/QScatterDataProxy>
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DScene>
-#include <QtDataVisualization/Q3DCamera>
-#include <QtDataVisualization/QScatter3DSeries>
-#include <QtDataVisualization/Q3DTheme>
-#include <QtCore/qmath.h>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtCore/QDebug>
-
-using namespace QtDataVisualization;
-
-ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
- : m_graph(scatter),
- m_inputHandler(new CustomInputHandler())
-{
- m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
-
- m_graph->setAxisX(new QValue3DAxis);
- m_graph->setAxisY(new QValue3DAxis);
- m_graph->setAxisZ(new QValue3DAxis);
-
- m_graph->axisX()->setRange(-10.0f, 10.0f);
- m_graph->axisY()->setRange(-5.0f, 5.0f);
- m_graph->axisZ()->setRange(-5.0f, 5.0f);
-
- QScatter3DSeries *series = new QScatter3DSeries;
- series->setItemLabelFormat(QStringLiteral("@xLabel, @yLabel, @zLabel"));
- series->setMesh(QAbstract3DSeries::MeshCube);
- series->setItemSize(0.15f);
- m_graph->addSeries(series);
-
- //! [2]
- m_animationCameraX = new QPropertyAnimation(m_graph->scene()->activeCamera(), "xRotation");
- m_animationCameraX->setDuration(20000);
- m_animationCameraX->setStartValue(QVariant::fromValue(0.0f));
- m_animationCameraX->setEndValue(QVariant::fromValue(360.0f));
- m_animationCameraX->setLoopCount(-1);
- //! [2]
-
- //! [3]
- QPropertyAnimation *upAnimation = new QPropertyAnimation(m_graph->scene()->activeCamera(), "yRotation");
- upAnimation->setDuration(9000);
- upAnimation->setStartValue(QVariant::fromValue(5.0f));
- upAnimation->setEndValue(QVariant::fromValue(45.0f));
-
- QPropertyAnimation *downAnimation = new QPropertyAnimation(m_graph->scene()->activeCamera(), "yRotation");
- downAnimation->setDuration(9000);
- downAnimation->setStartValue(QVariant::fromValue(45.0f));
- downAnimation->setEndValue(QVariant::fromValue(5.0f));
-
- m_animationCameraY = new QSequentialAnimationGroup();
- m_animationCameraY->setLoopCount(-1);
- m_animationCameraY->addAnimation(upAnimation);
- m_animationCameraY->addAnimation(downAnimation);
- //! [3]
-
- m_animationCameraX->start();
- m_animationCameraY->start();
-
- // Give ownership of the handler to the graph and make it the active handler
- //! [0]
- m_graph->setActiveInputHandler(m_inputHandler);
- //! [0]
-
- //! [1]
- m_selectionTimer = new QTimer(this);
- m_selectionTimer->setInterval(10);
- m_selectionTimer->setSingleShot(false);
- QObject::connect(m_selectionTimer, &QTimer::timeout, this,
- &ScatterDataModifier::triggerSelection);
- m_selectionTimer->start();
- //! [1]
-}
-
-ScatterDataModifier::~ScatterDataModifier()
-{
- delete m_graph;
-}
-
-void ScatterDataModifier::start()
-{
- addData();
-}
-
-void ScatterDataModifier::addData()
-{
- QList<QVector3D> itemList;
-
- // Read data items from the file to QList
- QTextStream stream;
- QFile dataFile(":/data/data.txt");
- if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- stream.setDevice(&dataFile);
- while (!stream.atEnd()) {
- QString line = stream.readLine();
- if (line.startsWith("#")) // Ignore comments
- continue;
- QStringList strList = line.split(",", Qt::SkipEmptyParts);
- // Each line has three data items: xPos, yPos and zPos value
- if (strList.size() < 3) {
- qWarning() << "Invalid row read from data:" << line;
- continue;
- }
- itemList.append(QVector3D(
- strList.at(0).trimmed().toFloat(),
- strList.at(1).trimmed().toFloat(),
- strList.at(2).trimmed().toFloat()));
- }
- } else {
- qWarning() << "Unable to open data file:" << dataFile.fileName();
- }
-
- // Add data from the QList to datamodel
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(itemList.count());
- QScatterDataItem *ptrToDataArray = &dataArray->first();
- for (int i = 0; i < itemList.count(); i++) {
- ptrToDataArray->setPosition(itemList.at(i));
- ptrToDataArray++;
- }
-
- m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
-}
-
-void ScatterDataModifier::toggleCameraAnimation()
-{
- if (m_animationCameraX->state() != QAbstractAnimation::Paused) {
- m_animationCameraX->pause();
- m_animationCameraY->pause();
- } else {
- m_animationCameraX->resume();
- m_animationCameraY->resume();
- }
-}
-
-void ScatterDataModifier::triggerSelection()
-{
- m_graph->scene()->setSelectionQueryPosition(m_inputHandler->inputPosition());
-}
-
-void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq)
-{
- int quality = int(sq);
- emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp
-}
-
-void ScatterDataModifier::changeShadowQuality(int quality)
-{
- QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality);
- m_graph->setShadowQuality(sq);
-}
diff --git a/examples/datavisualization/custominput/scatterdatamodifier.h b/examples/datavisualization/custominput/scatterdatamodifier.h
deleted file mode 100644
index 41f09f94..00000000
--- a/examples/datavisualization/custominput/scatterdatamodifier.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SCATTERDATAMODIFIER_H
-#define SCATTERDATAMODIFIER_H
-
-#include "custominputhandler.h"
-
-#include <QtDataVisualization/q3dscatter.h>
-#include <QtGui/QFont>
-#include <QtCore/QTimer>
-#include <QtCore/QPropertyAnimation>
-#include <QtCore/QSequentialAnimationGroup>
-#include <QtGui/QVector3D>
-
-using namespace QtDataVisualization;
-
-class ScatterDataModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit ScatterDataModifier(Q3DScatter *scatter);
- ~ScatterDataModifier();
-
- void addData();
- void toggleCameraAnimation();
- void start();
-
-public Q_SLOTS:
- void changeShadowQuality(int quality);
- void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
- void triggerSelection();
-
-Q_SIGNALS:
- void shadowQualityChanged(int quality);
-
-private:
- Q3DScatter *m_graph;
- QPropertyAnimation *m_animationCameraX;
- QSequentialAnimationGroup *m_animationCameraY;
- CustomInputHandler *m_inputHandler;
- QTimer *m_selectionTimer;
-};
-
-#endif
diff --git a/examples/datavisualization/customitems/customitemgraph.cpp b/examples/datavisualization/customitems/customitemgraph.cpp
deleted file mode 100644
index 512f059e..00000000
--- a/examples/datavisualization/customitems/customitemgraph.cpp
+++ /dev/null
@@ -1,331 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "customitemgraph.h"
-
-#include <QtDataVisualization/Q3DTheme>
-#include <QtDataVisualization/QCustom3DItem>
-#include <QtDataVisualization/QCustom3DLabel>
-#include <QtGui/QImage>
-
-using namespace QtDataVisualization;
-
-CustomItemGraph::CustomItemGraph(Q3DSurface *surface, QLabel *label)
- : m_graph(surface),
- m_textField(label),
- m_previouslyAnimatedItem(0)
-{
- QImage layerOneHMap(":/maps/layer_1.png");
- QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
- QSurface3DSeries *layerOneSeries = new QSurface3DSeries(layerOneProxy);
- layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerOneSeries->setFlatShadingEnabled(false);
-
- QImage layerTwoHMap(":/maps/layer_2.png");
- QHeightMapSurfaceDataProxy *layerTwoProxy = new QHeightMapSurfaceDataProxy(layerTwoHMap);
- QSurface3DSeries *layerTwoSeries = new QSurface3DSeries(layerTwoProxy);
- layerTwoSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerTwoProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerTwoSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerTwoSeries->setFlatShadingEnabled(false);
-
- QImage layerThreeHMap(":/maps/layer_3.png");
- QHeightMapSurfaceDataProxy *layerThreeProxy = new QHeightMapSurfaceDataProxy(layerThreeHMap);
- QSurface3DSeries *layerThreeSeries = new QSurface3DSeries(layerThreeProxy);
- layerThreeSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- layerThreeProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- layerThreeSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- layerThreeSeries->setFlatShadingEnabled(false);
-
- m_graph->axisX()->setLabelFormat("%.1f N");
- m_graph->axisZ()->setLabelFormat("%.1f E");
- m_graph->axisX()->setRange(34.0f, 40.0f);
- m_graph->axisY()->setRange(0.0f, 200.0f);
- m_graph->axisZ()->setRange(18.0f, 24.0f);
-
- m_graph->axisX()->setTitle(QStringLiteral("Latitude"));
- m_graph->axisY()->setTitle(QStringLiteral("Height"));
- m_graph->axisZ()->setTitle(QStringLiteral("Longitude"));
-
- m_graph->addSeries(layerOneSeries);
- m_graph->addSeries(layerTwoSeries);
- m_graph->addSeries(layerThreeSeries);
-
- QLinearGradient grOne;
- grOne.setColorAt(0.0, Qt::black);
- grOne.setColorAt(0.38, Qt::darkYellow);
- grOne.setColorAt(0.39, Qt::darkGreen);
- grOne.setColorAt(0.5, Qt::darkGray);
- grOne.setColorAt(1.0, Qt::gray);
- m_graph->seriesList().at(0)->setBaseGradient(grOne);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- QLinearGradient grTwo;
- grTwo.setColorAt(0.385, Qt::blue);
- grTwo.setColorAt(0.395, Qt::white);
- m_graph->seriesList().at(1)->setBaseGradient(grTwo);
- m_graph->seriesList().at(1)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::white);
- grThree.setColorAt(0.05, Qt::black);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- m_graph->seriesList().at(2)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
-
- connect(m_graph, &QAbstract3DGraph::selectedElementChanged,
- this, &CustomItemGraph::handleElementSelected);
-
- m_selectionAnimation = new QPropertyAnimation(this);
- m_selectionAnimation->setPropertyName("scaling");
- m_selectionAnimation->setDuration(500);
- m_selectionAnimation->setLoopCount(-1);
-
- QFont titleFont = QFont("Century Gothic", 30);
- titleFont.setBold(true);
- QCustom3DLabel *titleLabel = new QCustom3DLabel("Oil Rigs on Imaginary Sea", titleFont,
- QVector3D(0.0f, 1.2f, 0.0f),
- QVector3D(1.0f, 1.0f, 0.0f),
- QQuaternion());
- titleLabel->setPositionAbsolute(true);
- titleLabel->setFacingCamera(true);
- titleLabel->setBackgroundColor(QColor(0x66cdaa));
- m_graph->addCustomItem(titleLabel);
-
- toggleItemOne(true);
- toggleItemTwo(true);
-}
-
-CustomItemGraph::~CustomItemGraph()
-{
- delete m_graph;
-}
-
-void CustomItemGraph::toggleItemOne(bool show)
-{
- //! [1]
- QVector3D positionOne = QVector3D(39.0f, 77.0f, 19.2f);
- //! [1]
- QVector3D positionOnePipe = QVector3D(39.0f, 45.0f, 19.2f);
- QVector3D positionOneLabel = QVector3D(39.0f, 107.0f, 19.2f);
- if (show) {
- //! [0]
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::red);
- //! [0]
- //! [2]
- QCustom3DItem *item = new QCustom3DItem(":/items/oilrig.obj", positionOne,
- QVector3D(0.025f, 0.025f, 0.025f),
- QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 45.0f),
- color);
- //! [2]
- //! [3]
- m_graph->addCustomItem(item);
- //! [3]
- item = new QCustom3DItem(":/items/pipe.obj", positionOnePipe,
- QVector3D(0.005f, 0.5f, 0.005f),
- QQuaternion(),
- color);
- item->setShadowCasting(false);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Oil Rig One");
- label->setPosition(positionOneLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- //! [4]
- m_graph->removeCustomItemAt(positionOne);
- //! [4]
- m_graph->removeCustomItemAt(positionOnePipe);
- m_graph->removeCustomItemAt(positionOneLabel);
- }
-}
-
-void CustomItemGraph::toggleItemTwo(bool show)
-{
- QVector3D positionTwo = QVector3D(34.5f, 77.0f, 23.4f);
- QVector3D positionTwoPipe = QVector3D(34.5f, 45.0f, 23.4f);
- QVector3D positionTwoLabel = QVector3D(34.5f, 107.0f, 23.4f);
- if (show) {
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::red);
- QCustom3DItem *item = new QCustom3DItem();
- item->setMeshFile(":/items/oilrig.obj");
- item->setPosition(positionTwo);
- item->setScaling(QVector3D(0.025f, 0.025f, 0.025f));
- item->setRotation(QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 25.0f));
- item->setTextureImage(color);
- m_graph->addCustomItem(item);
- item = new QCustom3DItem(":/items/pipe.obj", positionTwoPipe,
- QVector3D(0.005f, 0.5f, 0.005f),
- QQuaternion(),
- color);
- item->setShadowCasting(false);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Oil Rig Two");
- label->setPosition(positionTwoLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- m_graph->removeCustomItemAt(positionTwo);
- m_graph->removeCustomItemAt(positionTwoPipe);
- m_graph->removeCustomItemAt(positionTwoLabel);
- }
-}
-
-void CustomItemGraph::toggleItemThree(bool show)
-{
- QVector3D positionThree = QVector3D(34.5f, 86.0f, 19.1f);
- QVector3D positionThreeLabel = QVector3D(34.5f, 116.0f, 19.1f);
- if (show) {
- QImage color = QImage(2, 2, QImage::Format_RGB32);
- color.fill(Qt::darkMagenta);
- QCustom3DItem *item = new QCustom3DItem();
- item->setMeshFile(":/items/refinery.obj");
- item->setPosition(positionThree);
- item->setScaling(QVector3D(0.04f, 0.04f, 0.04f));
- item->setRotation(QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 75.0f));
- item->setTextureImage(color);
- m_graph->addCustomItem(item);
-
- QCustom3DLabel *label = new QCustom3DLabel();
- label->setText("Refinery");
- label->setPosition(positionThreeLabel);
- label->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
- m_graph->addCustomItem(label);
- } else {
- resetSelection();
- m_graph->removeCustomItemAt(positionThree);
- m_graph->removeCustomItemAt(positionThreeLabel);
- }
-}
-
-void CustomItemGraph::toggleSeeThrough(bool seethrough)
-{
- if (seethrough) {
- m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawWireframe);
- m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawWireframe);
- } else {
- m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawSurface);
- m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawSurface);
- }
-}
-
-void CustomItemGraph::toggleOilHighlight(bool highlight)
-{
- if (highlight) {
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::black);
- grThree.setColorAt(0.05, Qt::red);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- } else {
- QLinearGradient grThree;
- grThree.setColorAt(0.0, Qt::white);
- grThree.setColorAt(0.05, Qt::black);
- m_graph->seriesList().at(2)->setBaseGradient(grThree);
- }
-}
-
-void CustomItemGraph::toggleShadows(bool shadows)
-{
- if (shadows)
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
- else
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
-}
-
-void CustomItemGraph::handleElementSelected(QAbstract3DGraph::ElementType type)
-{
- resetSelection();
- if (type == QAbstract3DGraph::ElementCustomItem) {
- QCustom3DItem *item = m_graph->selectedCustomItem();
- QString text;
- if (qobject_cast<QCustom3DLabel *>(item) != 0) {
- text.append("Custom label: ");
- } else {
- QStringList split = item->meshFile().split("/");
- text.append(split.last());
- text.append(": ");
- }
- int index = m_graph->selectedCustomItemIndex();
- text.append(QString::number(index));
- m_textField->setText(text);
- m_previouslyAnimatedItem = item;
- m_previousScaling = item->scaling();
- m_selectionAnimation->setTargetObject(item);
- m_selectionAnimation->setStartValue(item->scaling());
- m_selectionAnimation->setEndValue(item->scaling() * 1.5f);
- m_selectionAnimation->start();
- } else if (type == QAbstract3DGraph::ElementSeries) {
- QString text = "Surface (";
- QSurface3DSeries *series = m_graph->selectedSeries();
- if (series) {
- QPoint point = series->selectedPoint();
- QString posStr;
- posStr.setNum(point.x());
- text.append(posStr);
- text.append(", ");
- posStr.setNum(point.y());
- text.append(posStr);
- }
- text.append(")");
- m_textField->setText(text);
- } else if (type > QAbstract3DGraph::ElementSeries
- && type < QAbstract3DGraph::ElementCustomItem) {
- int index = m_graph->selectedLabelIndex();
- QString text;
- if (type == QAbstract3DGraph::ElementAxisXLabel)
- text.append("Axis X label: ");
- else if (type == QAbstract3DGraph::ElementAxisYLabel)
- text.append("Axis Y label: ");
- else
- text.append("Axis Z label: ");
- text.append(QString::number(index));
- m_textField->setText(text);
- } else {
- m_textField->setText("Nothing");
- }
-}
-
-void CustomItemGraph::resetSelection()
-{
- m_selectionAnimation->stop();
- if (m_previouslyAnimatedItem)
- m_previouslyAnimatedItem->setScaling(m_previousScaling);
- m_previouslyAnimatedItem = 0;
-}
diff --git a/examples/datavisualization/customitems/customitemgraph.h b/examples/datavisualization/customitems/customitemgraph.h
deleted file mode 100644
index 2b977817..00000000
--- a/examples/datavisualization/customitems/customitemgraph.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOMITEMGRAPH_H
-#define CUSTOMITEMGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurfaceDataProxy>
-#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QLabel>
-#include <QtCore/QPropertyAnimation>
-
-using namespace QtDataVisualization;
-
-class CustomItemGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit CustomItemGraph(Q3DSurface *surface, QLabel *label);
- ~CustomItemGraph();
-
- void toggleItemOne(bool show);
- void toggleItemTwo(bool show);
- void toggleItemThree(bool show);
- void toggleSeeThrough(bool seethrough);
- void toggleOilHighlight(bool highlight);
- void toggleShadows(bool shadows);
-
-private:
- void handleElementSelected(QAbstract3DGraph::ElementType type);
- void resetSelection();
-
-private:
- Q3DSurface *m_graph;
- QLabel *m_textField;
- QPropertyAnimation *m_selectionAnimation;
- QCustom3DItem *m_previouslyAnimatedItem;
- QVector3D m_previousScaling;
-};
-
-#endif
diff --git a/examples/datavisualization/customitems/customitems.pro b/examples/datavisualization/customitems/customitems.pro
deleted file mode 100644
index d366e349..00000000
--- a/examples/datavisualization/customitems/customitems.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- customitemgraph.cpp
-
-HEADERS += customitemgraph.h
-
-QT += widgets
-
-RESOURCES += customitems.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/customitems/customitems.qrc b/examples/datavisualization/customitems/customitems.qrc
deleted file mode 100644
index 1337c9fc..00000000
--- a/examples/datavisualization/customitems/customitems.qrc
+++ /dev/null
@@ -1,12 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file>layer_1.png</file>
- <file>layer_2.png</file>
- <file>layer_3.png</file>
- </qresource>
- <qresource prefix="/items">
- <file>refinery.obj</file>
- <file>oilrig.obj</file>
- <file>pipe.obj</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/customitems/doc/images/customitems-example.png b/examples/datavisualization/customitems/doc/images/customitems-example.png
deleted file mode 100644
index 2732638e..00000000
--- a/examples/datavisualization/customitems/doc/images/customitems-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/customitems/doc/src/customitems.qdoc b/examples/datavisualization/customitems/doc/src/customitems.qdoc
deleted file mode 100644
index a8d1dac0..00000000
--- a/examples/datavisualization/customitems/doc/src/customitems.qdoc
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example customitems
- \title Custom Items Example
- \ingroup qtdatavisualization_examples
- \brief Adding custom items to a surface graph.
- \since QtDataVisualization 1.1
-
- The custom items example shows how to add your own custom meshes as items to a graph, and how
- to remove them.
-
- \image customitems-example.png
-
- \include examples-run.qdocinc
-
- \section1 Adding Custom Meshes to the Application
-
- We'll add the meshes in a resource file:
-
- \code
- <RCC>
- ...
- <qresource prefix="/items">
- <file>refinery.obj</file>
- <file>oilrig.obj</file>
- </qresource>
- </RCC>
- \endcode
-
- \section1 Adding Custom Item to a Graph
-
- In this example we do not have specific textures for our meshes, so we'll just create a small
- QImage and fill it with a single color:
-
- \snippet customitems/customitemgraph.cpp 0
-
- Then we'll specify the position for the item in a variable. This way we'll be able to use it
- later for removing the correct item:
-
- \snippet customitems/customitemgraph.cpp 1
-
- Then we'll create a new QCustom3DItem with all the parameters:
-
- \snippet customitems/customitemgraph.cpp 2
-
- And finally we'll just add the item:
-
- \snippet customitems/customitemgraph.cpp 3
-
- \section1 Removing Custom Item from a Graph
-
- We'll just call \c removeCustomItemAt() with the position of the item:
-
- \snippet customitems/customitemgraph.cpp 4
-
- \note Removing a custom item from the graph also deletes it. If you want to preserve the item,
- you need to use \c releaseCustomItem() method instead.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/customitems/main.cpp b/examples/datavisualization/customitems/main.cpp
deleted file mode 100644
index 2261cf54..00000000
--- a/examples/datavisualization/customitems/main.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "customitemgraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- container->setMinimumSize(QSize(800, 600));
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayoutLeft = new QVBoxLayout();
- vLayoutLeft->setAlignment(Qt::AlignTop);
- QVBoxLayout *vLayoutRight = new QVBoxLayout();
- vLayoutRight->setAlignment(Qt::AlignTop);
- hLayout->addLayout(vLayoutLeft);
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayoutRight);
-
- QFont font = QFont("Century Gothic", 14);
- QLabel *label = new QLabel("Show:");
- font.setBold(true);
- label->setFont(font);
- vLayoutLeft->addWidget(label);
-
- font.setBold(false);
- QCheckBox *checkboxOne = new QCheckBox("Oil Rig 1");
- checkboxOne->setChecked(true);
- checkboxOne->setFont(font);
- vLayoutLeft->addWidget(checkboxOne);
-
- QCheckBox *checkboxTwo = new QCheckBox("Oil Rig 2");
- checkboxTwo->setChecked(true);
- checkboxTwo->setFont(font);
- vLayoutLeft->addWidget(checkboxTwo);
-
- QCheckBox *checkboxThree = new QCheckBox("Refinery");
- checkboxThree->setFont(font);
- vLayoutLeft->addWidget(checkboxThree);
-
- QLabel *label2 = new QLabel("Visuals:");
- font.setBold(true);
- label2->setFont(font);
- vLayoutRight->addWidget(label2);
-
- QCheckBox *checkboxOneRight = new QCheckBox("See-Through");
- font.setBold(false);
- checkboxOneRight->setFont(font);
- vLayoutRight->addWidget(checkboxOneRight);
-
- QCheckBox *checkboxTwoRight = new QCheckBox("Highlight Oil");
- checkboxTwoRight->setFont(font);
- vLayoutRight->addWidget(checkboxTwoRight);
-
- QCheckBox *checkboxThreeRight = new QCheckBox("Shadows");
- checkboxThreeRight->setFont(font);
- checkboxThreeRight->setChecked(true);
- vLayoutRight->addWidget(checkboxThreeRight);
-
- QLabel *label3 = new QLabel("Selection:");
- font.setBold(true);
- label3->setFont(font);
- vLayoutRight->addWidget(label3);
-
- QLabel *label4 = new QLabel("Nothing");
- font.setBold(false);
- font.setPointSize(11);
- label4->setFont(font);
- vLayoutRight->addWidget(label4);
-
- widget->setWindowTitle(QStringLiteral("Custom Items Example"));
-
- widget->show();
-
- CustomItemGraph *modifier = new CustomItemGraph(graph, label4);
-
- QObject::connect(checkboxOne, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemOne);
- QObject::connect(checkboxTwo, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemTwo);
- QObject::connect(checkboxThree, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleItemThree);
-
- QObject::connect(checkboxOneRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleSeeThrough);
- QObject::connect(checkboxTwoRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleOilHighlight);
- QObject::connect(checkboxThreeRight, &QCheckBox::stateChanged,
- modifier, &CustomItemGraph::toggleShadows);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/customproxy/customproxy.pro b/examples/datavisualization/customproxy/customproxy.pro
deleted file mode 100644
index fd5e0852..00000000
--- a/examples/datavisualization/customproxy/customproxy.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- rainfallgraph.cpp \
- variantdataset.cpp \
- variantbardataproxy.cpp \
- variantbardatamapping.cpp \
-
-HEADERS += \
- rainfallgraph.h \
- variantdataset.h \
- variantbardataproxy.h \
- variantbardatamapping.h
-
-RESOURCES += customproxy.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- data/raindata.txt
diff --git a/examples/datavisualization/customproxy/data/raindata.txt b/examples/datavisualization/customproxy/data/raindata.txt
deleted file mode 100644
index 531d66be..00000000
--- a/examples/datavisualization/customproxy/data/raindata.txt
+++ /dev/null
@@ -1,158 +0,0 @@
-# Rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo)
-# Format: year, month, rainfall
-2000,1, 72,
-2000,2, 47,
-2000,3, 37,
-2000,4, 79,
-2000,5, 42,
-2000,6, 73,
-2000,7, 94,
-2000,8, 37,
-2000,9, 17,
-2000,10,69,
-2000,11,42,
-2000,12,42,
-2001,1, 25,
-2001,2, 47,
-2001,3, 20,
-2001,4, 70,
-2001,5, 27,
-2001,6, 40,
-2001,7, 123,
-2001,8, 39,
-2001,9, 66,
-2001,10,55,
-2001,11,29,
-2001,12,12,
-2002,1, 24,
-2002,2, 45,
-2002,3, 27,
-2002,4, 30,
-2002,5, 16,
-2002,6, 98,
-2002,7, 122,
-2002,8, 20,
-2002,9, 50,
-2002,10,24,
-2002,11,22,
-2002,12,12,
-2003,1, 43,
-2003,2, 17,
-2003,3, 26,
-2003,4, 22,
-2003,5, 60,
-2003,6, 14,
-2003,7, 86,
-2003,8, 77,
-2003,9, 69,
-2003,10,49,
-2003,11,23,
-2003,12,44,
-2004,1, 15,
-2004,2, 19,
-2004,3, 10,
-2004,4, 11,
-2004,5, 41,
-2004,6, 29,
-2004,7, 49,
-2004,8, 72,
-2004,9, 50,
-2004,10,18,
-2004,11,19,
-2004,12,40,
-2005,1, 60,
-2005,2, 24,
-2005,3, 12,
-2005,4, 50,
-2005,5, 88,
-2005,6, 32,
-2005,7, 76,
-2005,8, 55,
-2005,9, 92,
-2005,10,35,
-2005,11,105,
-2005,12,59,
-2006,1, 27,
-2006,2, 18,
-2006,3, 17,
-2006,4, 26,
-2006,5, 24,
-2006,6, 18,
-2006,7, 35,
-2006,8, 28,
-2006,9, 80,
-2006,10,52,
-2006,11,43,
-2006,12,44,
-2007,1, 41,
-2007,2, 21,
-2007,3, 30,
-2007,4, 20,
-2007,5, 53,
-2007,6, 29,
-2007,7, 139,
-2007,8, 52,
-2007,9, 51,
-2007,10,24,
-2007,11,47,
-2007,12,33,
-2008,1, 67,
-2008,2, 19,
-2008,3, 30,
-2008,4, 31,
-2008,5, 29,
-2008,6, 79,
-2008,7, 75,
-2008,8, 99,
-2008,9, 34,
-2008,10,52,
-2008,11,60,
-2008,12,20,
-2009,1, 9,
-2009,2, 22,
-2009,3, 11,
-2009,4, 10,
-2009,5, 69,
-2009,6, 30,
-2009,7, 78,
-2009,8, 93,
-2009,9, 70,
-2009,10,32,
-2009,11,56,
-2009,12,23,
-2010,1, 12,
-2010,2, 28,
-2010,3, 55,
-2010,4, 20,
-2010,5, 65,
-2010,6, 26,
-2010,7, 134,
-2010,8, 57,
-2010,9, 51,
-2010,10,53,
-2010,11,8,
-2010,12,9,
-2011,1, 34,
-2011,2, 20,
-2011,3, 30,
-2011,4, 31,
-2011,5, 42,
-2011,6, 78,
-2011,7, 85,
-2011,8, 33,
-2011,9, 42,
-2011,10,87,
-2011,11,41,
-2011,12,72,
-2012,1, 32,
-2012,2, 42,
-2012,3, 30,
-2012,4, 50,
-2012,5, 30,
-2012,6, 70,
-2012,7, 52,
-2012,8, 20,
-2012,9, 99,
-2012,10,70,
-2012,11,69,
-2012,12,49
diff --git a/examples/datavisualization/customproxy/doc/images/customproxy-example.png b/examples/datavisualization/customproxy/doc/images/customproxy-example.png
deleted file mode 100644
index 4f82943a..00000000
--- a/examples/datavisualization/customproxy/doc/images/customproxy-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/customproxy/doc/src/customproxy.qdoc b/examples/datavisualization/customproxy/doc/src/customproxy.qdoc
deleted file mode 100644
index 0952128e..00000000
--- a/examples/datavisualization/customproxy/doc/src/customproxy.qdoc
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example customproxy
- \title Custom Proxy Example
- \ingroup qtdatavisualization_examples
- \brief Using Q3DBars with a custom proxy.
-
- The custom proxy example shows how to create a custom proxy to use with Q3DBars.
-
- \image customproxy-example.png
-
- The interesting thing about custom proxy example is the custom dataset and the corresponding
- proxy usage, so we concentrate on that and skip explaining the basic Q3DBars functionality
- - for that see \l{Bars Example}.
-
- This example defines a simple flexible data set \c VariantDataSet where each data item is a
- a variant list. Each item can have multiple different values, identified by their index in
- the list. In this example, the data set is storing monthly rainfall data, where the value in
- index zero is the year, the value in index one is the month, and the value in index two is
- the amount of rainfall in that month.
-
- The custom proxy we provide here is similar to item model based proxies provided by Qt
- Data Visualization in that it requires a mapping to interpret the data.
-
- \include examples-run.qdocinc
-
- \section1 VariantDataSet
-
- \c VariantDataSet class provides a simple API:
-
- \snippet customproxy/variantdataset.h 1
- \dots 0
- \codeline
- \snippet customproxy/variantdataset.h 0
-
- As you can see, the data items are simply QVariantList objects, and the data can be added either
- singly or in lists. The only additional functionality provided is clearing the data set and querying
- for a reference to the data contained in the set. Signals are emitted when data is added or the set
- is cleared.
-
- \section1 VariantBarDataProxy
-
- \c VariantBarDataProxy is a subclass of QBarDataProxy and provides a simple API of just getters
- and setters for the data set and the mapping:
-
- \snippet customproxy/variantbardataproxy.h 0
- \dots 0
- \codeline
- \snippet customproxy/variantbardataproxy.h 1
-
- On the implementation side, the proxy listens for the changes in the data set and the mapping,
- and resolves the data set if any changes are detected. It is not particularly efficient
- implementation in that any change will cause re-resolving of the entire data set, but that is not
- an issue for this example. The interesting part is the \c resolveDataSet() method:
-
- \snippet customproxy/variantbardataproxy.cpp 0
-
- In \c resolveDataSet() method we sort the variant data values into rows and columns based on the
- mapping. This is very similar to how QItemModelBarDataProxy handles mapping, except we use
- list indexes instead of item model roles here. Once the values are sorted, we generate \c QBarDataArray
- out of them, and call \c resetArray() method on the parent class.
-
- \section1 VariantBarDataMapping
-
- \c VariantBarDataMapping stores the mapping information between \c VariantDataSet data item indexes
- and rows, columns, and values of \c QBarDataArray. It also contains the lists of rows and columns to
- be included in the resolved data:
-
- \snippet customproxy/variantbardatamapping.h 0
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 1
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 2
- \dots 0
- \codeline
- \snippet customproxy/variantbardatamapping.h 3
-
- The primary way to use a \c VariantBarDataMapping object is to give the mappings already at the
- constructor, though they can be set later individually or all together with the \c remap() method.
- A signal is emitted if mapping changes. It is basically a simplified version of the mapping
- functionality of QItemModelBarDataProxy adapted to work with variant lists instead of item models.
-
- \section1 RainfallGraph
-
- \c RainfallGraph class handles the setup of the graph. The interesting part is the \c addDataSet()
- method:
-
- \snippet customproxy/rainfallgraph.cpp 0
-
- The bulk of that method is used for populating the variant data set. Once the set is populated,
- visualizing the data is trivial with the help of our custom proxy:
-
- \snippet customproxy/rainfallgraph.cpp 1
-*/
diff --git a/examples/datavisualization/customproxy/main.cpp b/examples/datavisualization/customproxy/main.cpp
deleted file mode 100644
index 8c0d9346..00000000
--- a/examples/datavisualization/customproxy/main.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "rainfallgraph.h"
-#include <QtGui/QGuiApplication>
-
-using namespace QtDataVisualization;
-
-int main(int argc, char **argv)
-{
- QGuiApplication app(argc, argv);
-
- Q3DBars *rainfall = new Q3DBars;
-
- if (!rainfall->hasContext()) {
- qWarning() << QStringLiteral("Couldn't initialize the OpenGL context.") ;
- return -1;
- }
-
- rainfall->setFlags(rainfall->flags() ^ Qt::FramelessWindowHint);
- rainfall->resize(1000, 800);
- rainfall->setPosition(QPoint(10, 30));
- rainfall->show();
-
- RainfallGraph rainfallgraph(rainfall);
- rainfallgraph.start();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/customproxy/rainfallgraph.cpp b/examples/datavisualization/customproxy/rainfallgraph.cpp
deleted file mode 100644
index 73cb5bee..00000000
--- a/examples/datavisualization/customproxy/rainfallgraph.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "rainfallgraph.h"
-#include <QtDataVisualization/qcategory3daxis.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qbar3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-#include <QtGui/QGuiApplication>
-#include <QtGui/QFont>
-#include <QtCore/QDebug>
-#include <QtCore/QTextStream>
-#include <QtCore/QFile>
-
-using namespace QtDataVisualization;
-
-RainfallGraph::RainfallGraph(Q3DBars *rainfall)
- : m_graph(rainfall)
-{
- // In data file the months are in numeric format, so create custom list
- for (int i = 1; i <= 12; i++)
- m_numericMonths << QString::number(i);
-
- m_columnCount = m_numericMonths.size();
-
- m_proxy = new VariantBarDataProxy;
- QBar3DSeries *series = new QBar3DSeries(m_proxy);
- m_graph->addSeries(series);
-
- updateYearsList(2000, 2012);
-
- // Set up bar specifications; make the bars as wide as they are deep,
- // and add a small space between the bars
- m_graph->setBarThickness(1.0f);
- m_graph->setBarSpacing(QSizeF(1.1, 1.1));
-
- // Set axis labels and titles
- QStringList months;
- months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_graph->rowAxis()->setTitle("Year");
- m_graph->columnAxis()->setTitle("Month");
- m_graph->valueAxis()->setTitle("rainfall");
- m_graph->valueAxis()->setLabelFormat("%d mm");
- m_graph->valueAxis()->setSegmentCount(5);
- m_graph->rowAxis()->setLabels(m_years);
- m_graph->columnAxis()->setLabels(months);
-
- // Set bar type to cylinder
- series->setMesh(QAbstract3DSeries::MeshCylinder);
-
- // Set shadows to medium
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
-
- // Set selection mode to bar and column
- m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn | QAbstract3DGraph::SelectionSlice);
-
- // Set theme
- m_graph->activeTheme()->setType(Q3DTheme::ThemeArmyBlue);
-
- // Override font in theme
- m_graph->activeTheme()->setFont(QFont("Century Gothic", 30));
-
- // Override label background for theme
- m_graph->activeTheme()->setLabelBackgroundEnabled(false);
-
- // Set camera position and zoom
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRightHigh);
-
- // Set window title
- m_graph->setTitle(QStringLiteral("Monthly rainfall in Northern Finland"));
-
- // Set reflections on
- m_graph->setReflection(true);
-}
-
-RainfallGraph::~RainfallGraph()
-{
- delete m_mapping;
- delete m_dataSet;
- delete m_graph;
-}
-
-void RainfallGraph::start()
-{
- addDataSet();
-}
-
-void RainfallGraph::updateYearsList(int start, int end)
-{
- m_years.clear();
- for (int i = start; i <= end; i++)
- m_years << QString::number(i);
-
- m_rowCount = m_years.size();
-}
-
-//! [0]
-void RainfallGraph::addDataSet()
-{
- // Create a new variant data set and data item list
- m_dataSet = new VariantDataSet;
- VariantDataItemList *itemList = new VariantDataItemList;
-
- // Read data from a data file into the data item list
- QTextStream stream;
- QFile dataFile(":/data/raindata.txt");
- if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- stream.setDevice(&dataFile);
- while (!stream.atEnd()) {
- QString line = stream.readLine();
- if (line.startsWith("#")) // Ignore comments
- continue;
- QStringList strList = line.split(",", Qt::SkipEmptyParts);
- // Each line has three data items: Year, month, and rainfall value
- if (strList.size() < 3) {
- qWarning() << "Invalid row read from data:" << line;
- continue;
- }
- // Store year and month as strings, and rainfall value as double
- // into a variant data item and add the item to the item list.
- VariantDataItem *newItem = new VariantDataItem;
- for (int i = 0; i < 2; i++)
- newItem->append(strList.at(i).trimmed());
- newItem->append(strList.at(2).trimmed().toDouble());
- itemList->append(newItem);
- }
- } else {
- qWarning() << "Unable to open data file:" << dataFile.fileName();
- }
-
- //! [1]
- // Add items to the data set and set it to the proxy
- m_dataSet->addItems(itemList);
- m_proxy->setDataSet(m_dataSet);
-
- // Create new mapping for the data and set it to the proxy
- m_mapping = new VariantBarDataMapping(0, 1, 2, m_years, m_numericMonths);
- m_proxy->setMapping(m_mapping);
- //! [1]
-}
-//! [0]
diff --git a/examples/datavisualization/customproxy/rainfallgraph.h b/examples/datavisualization/customproxy/rainfallgraph.h
deleted file mode 100644
index 425dcef6..00000000
--- a/examples/datavisualization/customproxy/rainfallgraph.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef RAINFALLGRAPH_H
-#define RAINFALLGRAPH_H
-
-#include "variantbardataproxy.h"
-#include <QtDataVisualization/q3dbars.h>
-
-using namespace QtDataVisualization;
-
-class RainfallGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit RainfallGraph(Q3DBars *rainfall);
- ~RainfallGraph();
-
- void addDataSet();
- void start();
-
-private:
-
- void updateYearsList(int start, int end);
- Q3DBars *m_graph;
- int m_columnCount;
- int m_rowCount;
- QStringList m_years;
- QStringList m_numericMonths;
- VariantBarDataProxy *m_proxy;
- VariantBarDataMapping *m_mapping;
- VariantDataSet *m_dataSet;
-};
-
-
-#endif
diff --git a/examples/datavisualization/customproxy/variantbardatamapping.cpp b/examples/datavisualization/customproxy/variantbardatamapping.cpp
deleted file mode 100644
index fda2f67e..00000000
--- a/examples/datavisualization/customproxy/variantbardatamapping.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "variantbardatamapping.h"
-
-VariantBarDataMapping::VariantBarDataMapping()
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
-{
-}
-
-VariantBarDataMapping::VariantBarDataMapping(const VariantBarDataMapping &other)
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
-{
- operator=(other);
-}
-
-VariantBarDataMapping::VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
- : QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
-{
- m_rowIndex = rowIndex;
- m_columnIndex = columnIndex;
- m_valueIndex = valueIndex;
- m_rowCategories = rowCategories;
- m_columnCategories = columnCategories;
-}
-
-VariantBarDataMapping::~VariantBarDataMapping()
-{
-}
-
-VariantBarDataMapping &VariantBarDataMapping::operator=(const VariantBarDataMapping &other)
-{
- m_rowIndex = other.m_rowIndex;
- m_columnIndex = other.m_columnIndex;
- m_valueIndex = other.m_valueIndex;
- m_rowCategories = other.m_rowCategories;
- m_columnCategories = other.m_columnCategories;
-
- return *this;
-}
-
-void VariantBarDataMapping::setRowIndex(int index)
-{
- m_rowIndex = index;
- emit mappingChanged();
-}
-
-int VariantBarDataMapping::rowIndex() const
-{
- return m_rowIndex;
-}
-
-void VariantBarDataMapping::setColumnIndex(int index)
-{
- m_columnIndex = index;
- emit mappingChanged();
-}
-
-int VariantBarDataMapping::columnIndex() const
-{
- return m_columnIndex;
-}
-
-void VariantBarDataMapping::setValueIndex(int index)
-{
- m_valueIndex = index;
- emit mappingChanged();
-}
-
-int VariantBarDataMapping::valueIndex() const
-{
- return m_valueIndex;
-}
-
-void VariantBarDataMapping::setRowCategories(const QStringList &categories)
-{
- m_rowCategories = categories;
- emit mappingChanged();
-}
-
-const QStringList &VariantBarDataMapping::rowCategories() const
-{
- return m_rowCategories;
-}
-
-void VariantBarDataMapping::setColumnCategories(const QStringList &categories)
-{
- m_columnCategories = categories;
- emit mappingChanged();
-}
-
-const QStringList &VariantBarDataMapping::columnCategories() const
-{
- return m_columnCategories;
-}
-
-void VariantBarDataMapping::remap(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
-{
- m_rowIndex = rowIndex;
- m_columnIndex = columnIndex;
- m_valueIndex = valueIndex;
- m_rowCategories = rowCategories;
- m_columnCategories = columnCategories;
- emit mappingChanged();
-}
diff --git a/examples/datavisualization/customproxy/variantbardatamapping.h b/examples/datavisualization/customproxy/variantbardatamapping.h
deleted file mode 100644
index 2f1d5a3d..00000000
--- a/examples/datavisualization/customproxy/variantbardatamapping.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef VARIANTBARDATAMAPPING_H
-#define VARIANTBARDATAMAPPING_H
-
-#include <QtCore/QObject>
-#include <QtCore/QStringList>
-
-class VariantBarDataMapping : public QObject
-{
- Q_OBJECT
- //! [0]
- Q_PROPERTY(int rowIndex READ rowIndex WRITE setRowIndex)
- Q_PROPERTY(int columnIndex READ columnIndex WRITE setColumnIndex)
- Q_PROPERTY(int valueIndex READ valueIndex WRITE setValueIndex)
- Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories)
- Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories)
- //! [0]
-public:
- explicit VariantBarDataMapping();
- VariantBarDataMapping(const VariantBarDataMapping &other);
- //! [1]
- VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories);
- //! [1]
- virtual ~VariantBarDataMapping();
-
- VariantBarDataMapping &operator=(const VariantBarDataMapping &other);
-
- void setRowIndex(int index);
- int rowIndex() const;
- void setColumnIndex(int index);
- int columnIndex() const;
- void setValueIndex(int index);
- int valueIndex() const;
-
- void setRowCategories(const QStringList &categories);
- const QStringList &rowCategories() const;
- void setColumnCategories(const QStringList &categories);
- const QStringList &columnCategories() const;
-
- //! [2]
- void remap(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories);
- //! [2]
-Q_SIGNALS:
- //! [3]
- void mappingChanged();
- //! [3]
-
-private:
- // Indexes of the mapped items in the VariantDataItem
- int m_rowIndex;
- int m_columnIndex;
- int m_valueIndex;
-
- // For row/column items, sort items into these categories. Other categories are ignored.
- QStringList m_rowCategories;
- QStringList m_columnCategories;
-};
-
-#endif
diff --git a/examples/datavisualization/customproxy/variantbardataproxy.h b/examples/datavisualization/customproxy/variantbardataproxy.h
deleted file mode 100644
index 762b5afc..00000000
--- a/examples/datavisualization/customproxy/variantbardataproxy.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef VARIANTBARDATAPROXY_H
-#define VARIANTBARDATAPROXY_H
-
-#include "qbardataproxy.h"
-#include "variantdataset.h"
-#include "variantbardatamapping.h"
-#include <QtCore/QStringList>
-#include <QtCore/QMap>
-#include <QtCore/QPointer>
-
-using namespace QtDataVisualization;
-
-//! [0]
-class VariantBarDataProxy : public QBarDataProxy
-//! [0]
-{
- Q_OBJECT
-
-public:
- explicit VariantBarDataProxy();
- explicit VariantBarDataProxy(VariantDataSet *newSet, VariantBarDataMapping *mapping);
- virtual ~VariantBarDataProxy();
-
- //! [1]
- // Doesn't gain ownership of the dataset, but does connect to it to listen for data changes.
- void setDataSet(VariantDataSet *newSet);
- VariantDataSet *dataSet();
-
- // Map key (row, column, value) to value index in data item (VariantItem).
- // Doesn't gain ownership of mapping, but does connect to it to listen for mapping changes.
- // Modifying mapping that is set to proxy will trigger dataset re-resolving.
- void setMapping(VariantBarDataMapping *mapping);
- VariantBarDataMapping *mapping();
- //! [1]
-
-public Q_SLOTS:
- void handleItemsAdded(int index, int count);
- void handleDataCleared();
- void handleMappingChanged();
-
-private:
- void resolveDataSet();
-
- QPointer<VariantDataSet> m_dataSet;
- QPointer<VariantBarDataMapping> m_mapping;
-
- Q_DISABLE_COPY(VariantBarDataProxy)
-};
-
-#endif
diff --git a/examples/datavisualization/customproxy/variantdataset.cpp b/examples/datavisualization/customproxy/variantdataset.cpp
deleted file mode 100644
index b748f82b..00000000
--- a/examples/datavisualization/customproxy/variantdataset.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "variantdataset.h"
-
-VariantDataSet::VariantDataSet()
- : QObject(0)
-{
-}
-
-VariantDataSet::~VariantDataSet()
-{
- clear();
-}
-
-void VariantDataSet::clear()
-{
- foreach (VariantDataItem *item, m_variantData) {
- item->clear();
- delete item;
- }
- m_variantData.clear();
- emit dataCleared();
-}
-
-int VariantDataSet::addItem(VariantDataItem *item)
-{
- m_variantData.append(item);
- int addIndex = m_variantData.size();
-
- emit itemsAdded(addIndex, 1);
- return addIndex;
-}
-
-int VariantDataSet::addItems(VariantDataItemList *itemList)
-{
- int newCount = itemList->size();
- int addIndex = m_variantData.size();
- m_variantData.append(*itemList);
- delete itemList;
- emit itemsAdded(addIndex, newCount);
- return addIndex;
-}
-
-const VariantDataItemList &VariantDataSet::itemList() const
-{
- return m_variantData;
-}
diff --git a/examples/datavisualization/customproxy/variantdataset.h b/examples/datavisualization/customproxy/variantdataset.h
deleted file mode 100644
index 3e608c39..00000000
--- a/examples/datavisualization/customproxy/variantdataset.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef VARIANTDATASET_H
-#define VARIANTDATASET_H
-
-#include <QtCore/QScopedPointer>
-#include <QtCore/QVariantList>
-
-//! [1]
-typedef QVariantList VariantDataItem;
-typedef QList<VariantDataItem *> VariantDataItemList;
-//! [1]
-
-class VariantDataSet : public QObject
-{
- Q_OBJECT
-
-public:
- explicit VariantDataSet();
- ~VariantDataSet();
-
- //! [0]
- void clear();
-
- int addItem(VariantDataItem *item);
- int addItems(VariantDataItemList *itemList);
-
- const VariantDataItemList &itemList() const;
-
-Q_SIGNALS:
- void itemsAdded(int index, int count);
- void dataCleared();
- //! [0]
-
-private:
- VariantDataItemList m_variantData;
-
- Q_DISABLE_COPY(VariantDataSet)
-};
-
-#endif
diff --git a/examples/datavisualization/datavisualization.pro b/examples/datavisualization/datavisualization.pro
index f9fce6af..ff9af2c5 100644
--- a/examples/datavisualization/datavisualization.pro
+++ b/examples/datavisualization/datavisualization.pro
@@ -2,30 +2,12 @@ TEMPLATE = subdirs
qtHaveModule(quick) {
SUBDIRS += qmlbars \
qmlscatter \
- qmlsurface \
- qmlcustominput \
- qmllegend \
- qmlmultigraph \
- qmloscilloscope \
- qmlsurfacelayers \
- qmlaxisformatter \
- qmlaxisdrag \
- qmlspectrogram
+ qmlaxishandling \
+ qmlsurfacegallery
}
!android:!ios:!winrt {
- SUBDIRS += bars \
- custominput \
- customproxy \
- itemmodel \
- scatter \
- surface \
- rotations \
- draggableaxes \
- customitems \
- texturesurface \
+ SUBDIRS += graphgallery \
volumetric
-
- qtHaveModule(multimedia): SUBDIRS += audiolevels
}
diff --git a/examples/datavisualization/draggableaxes/axesinputhandler.h b/examples/datavisualization/draggableaxes/axesinputhandler.h
deleted file mode 100644
index 8d43c478..00000000
--- a/examples/datavisualization/draggableaxes/axesinputhandler.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AXESINPUTHANDLER_H
-#define AXESINPUTHANDLER_H
-
-#include <QtDataVisualization/Q3DInputHandler>
-#include <QtDataVisualization/QAbstract3DGraph>
-#include <QtDataVisualization/QValue3DAxis>
-
-using namespace QtDataVisualization;
-
-//! [0]
-class AxesInputHandler : public Q3DInputHandler
-//! [0]
-{
- Q_OBJECT
-
- enum InputState {
- StateNormal = 0,
- StateDraggingX,
- StateDraggingZ,
- StateDraggingY
- };
-
-public:
- explicit AxesInputHandler(QAbstract3DGraph *graph, QObject *parent = 0);
-
- inline void setAxes(QValue3DAxis *axisX, QValue3DAxis *axisZ, QValue3DAxis *axisY) {
- m_axisX = axisX;
- m_axisZ = axisZ;
- m_axisY = axisY;
- }
-
- //! [1]
- inline void setDragSpeedModifier(float modifier) { m_speedModifier = modifier; }
- //! [1]
-
- virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
-
-private:
- void handleElementSelected(QAbstract3DGraph::ElementType type);
- void handleAxisDragging();
-
-private:
- bool m_mousePressed;
- InputState m_state;
- QValue3DAxis *m_axisX;
- QValue3DAxis *m_axisZ;
- QValue3DAxis *m_axisY;
- float m_speedModifier;
-};
-
-#endif
diff --git a/examples/datavisualization/draggableaxes/data.cpp b/examples/datavisualization/draggableaxes/data.cpp
deleted file mode 100644
index f7f4a31e..00000000
--- a/examples/datavisualization/draggableaxes/data.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "data.h"
-
-#include <QtCore/QRandomGenerator>
-#include <QtDataVisualization/QScatterDataProxy>
-#include <QtDataVisualization/Q3DScene>
-#include <QtDataVisualization/Q3DCamera>
-#include <QtDataVisualization/QScatter3DSeries>
-#include <QtDataVisualization/Q3DTheme>
-
-using namespace QtDataVisualization;
-
-const int itemCount = 500;
-
-Data::Data(Q3DScatter *scatter)
- : m_graph(scatter),
- //! [1]
- m_inputHandler(new AxesInputHandler(scatter)),
- //! [1]
- m_autoAdjust(false)
-{
- m_graph->activeTheme()->setType(Q3DTheme::ThemeEbony);
- m_graph->activeTheme()->setLabelBorderEnabled(true);
- m_graph->activeTheme()->setLabelBackgroundColor(QColor(QRgb(0x151550)));
- m_graph->activeTheme()->setLabelTextColor(Qt::lightGray);
- m_graph->activeTheme()->setFont(QFont("Arial Black", 30));
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRight);
-
- m_graph->axisX()->setRange(-20.0f, 20.0f);
- m_graph->axisY()->setRange(-10.0f, 10.0f);
- m_graph->axisZ()->setRange(-20.0f, 20.0f);
-
- //! [0]
- // Give ownership of the handler to the graph and make it the active handler
- m_graph->setActiveInputHandler(m_inputHandler);
- //! [0]
-
- //! [2]
- // Give our axes to the input handler
- m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisZ(), m_graph->axisY());
- //! [2]
-
- addData();
-}
-
-Data::~Data()
-{
- delete m_graph;
-}
-
-void Data::toggleRanges()
-{
- if (!m_autoAdjust) {
- m_graph->axisX()->setAutoAdjustRange(true);
- m_graph->axisZ()->setAutoAdjustRange(true);
- m_graph->axisY()->setAutoAdjustRange(true);
- m_inputHandler->setDragSpeedModifier(1.5f);
- m_autoAdjust = true;
- } else {
- m_graph->axisX()->setRange(-20.0f, 20.0f);
- m_graph->axisY()->setRange(-10.0f, 10.0f);
- m_graph->axisZ()->setRange(-20.0f, 20.0f);
- m_inputHandler->setDragSpeedModifier(15.0f);
- m_autoAdjust = false;
- }
-}
-
-void Data::addData()
-{
- QScatter3DSeries *series = new QScatter3DSeries;
- series->setMesh(QAbstract3DSeries::MeshCube);
- series->setMeshSmooth(true);
- m_graph->addSeries(series);
-
- QScatter3DSeries *series2 = new QScatter3DSeries;
- series2->setMesh(QAbstract3DSeries::MeshMinimal);
- series2->setMeshSmooth(true);
- m_graph->addSeries(series2);
-
- QScatter3DSeries *series3 = new QScatter3DSeries;
- series3->setMesh(QAbstract3DSeries::MeshSphere);
- series3->setMeshSmooth(true);
- m_graph->addSeries(series3);
-
- QScatter3DSeries *series4 = new QScatter3DSeries;
- series4->setMesh(QAbstract3DSeries::MeshBevelCube);
- series4->setMeshSmooth(true);
- m_graph->addSeries(series4);
-
- QScatter3DSeries *series5 = new QScatter3DSeries;
- series5->setMesh(QAbstract3DSeries::MeshSphere);
- m_graph->addSeries(series5);
-
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(itemCount);
- QScatterDataItem *ptrToDataArray = &dataArray->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray2 = new QScatterDataArray;
- dataArray2->resize(itemCount);
- ptrToDataArray = &dataArray2->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray3 = new QScatterDataArray;
- dataArray3->resize(itemCount);
- ptrToDataArray = &dataArray3->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray4 = new QScatterDataArray;
- dataArray4->resize(itemCount);
- ptrToDataArray = &dataArray4->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
- QScatterDataArray *dataArray5 = new QScatterDataArray;
- dataArray5->resize(itemCount);
- ptrToDataArray = &dataArray5->first();
- for (int i = 0; i < itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
-
- m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- m_graph->seriesList().at(1)->dataProxy()->resetArray(dataArray2);
- m_graph->seriesList().at(2)->dataProxy()->resetArray(dataArray3);
- m_graph->seriesList().at(3)->dataProxy()->resetArray(dataArray4);
- m_graph->seriesList().at(4)->dataProxy()->resetArray(dataArray5);
-}
-
-QVector3D Data::randVector()
-{
- return QVector3D(
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f);
-}
diff --git a/examples/datavisualization/draggableaxes/data.h b/examples/datavisualization/draggableaxes/data.h
deleted file mode 100644
index 3fb8969e..00000000
--- a/examples/datavisualization/draggableaxes/data.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef DATA_H
-#define DATA_H
-
-#include "axesinputhandler.h"
-
-#include <QtDataVisualization/q3dscatter.h>
-#include <QtGui/QVector3D>
-
-using namespace QtDataVisualization;
-
-class Data : public QObject
-{
- Q_OBJECT
-public:
- explicit Data(Q3DScatter *scatter);
- ~Data();
-
- void toggleRanges();
-
-private:
- void addData();
- QVector3D randVector();
-
-private:
- Q3DScatter *m_graph;
- AxesInputHandler *m_inputHandler;
- bool m_autoAdjust;
-};
-
-#endif
diff --git a/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png b/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png
deleted file mode 100644
index 018694b5..00000000
--- a/examples/datavisualization/draggableaxes/doc/images/draggableaxes-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc b/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc
deleted file mode 100644
index d5b74ae7..00000000
--- a/examples/datavisualization/draggableaxes/doc/src/draggableaxes.qdoc
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example draggableaxes
- \title Axis Range Dragging With Labels Example
- \ingroup qtdatavisualization_examples
- \brief Implementing a custom input handler to support axis dragging.
- \since QtDataVisualization 1.1
-
- The Axis Range Dragging example shows how to customize the 3D graph controls in a widget
- application to allow changing axis ranges by clicking on an axis label and dragging. This is
- done by implementing a custom input handler to react to selection signals emitted from the
- graph.
-
- \image draggableaxes-example.png
-
- \include examples-run.qdocinc
-
- \section1 Replacing Default Input Handling
-
- The default input handling mechanism is replaced by setting the active input handler of
- Q3DScatter to \c AxesInputHandler that implements the custom behavior:
-
- \snippet draggableaxes/data.cpp 0
-
- \c m_inputHandler was initialized in the constructor:
-
- \snippet draggableaxes/data.cpp 1
-
- We will also need the pointers to the axes, so we will pass them to our input handler too:
-
- \snippet draggableaxes/data.cpp 2
-
- \section1 Extending Mouse Event Handling
-
- First of all, we inherited our input handler from Q3DInputHandler instead of
- QAbstract3DInputHandler. The reason for doing this is to keep all the functionality of the
- default input handling, and to add our own functionality on top of it:
-
- \snippet draggableaxes/axesinputhandler.h 0
-
- We start extending the default functionality by re-implementing some of the mouse events.
- Let's start with \c {mousePressEvent}. We'll just add button pressed flag for left mouse button
- into it, and keep the rest of the default functionality:
-
- \snippet draggableaxes/axesinputhandler.cpp 0
-
- We'll need to modify \c mouseReleaseEvent too to clear the flag and reset the internal state:
-
- \snippet draggableaxes/axesinputhandler.cpp 1
-
- Then we'll modify \c {mouseMoveEvent}. Here we check if the \c m_mousePressed is \c true and
- our internal state is something other than \c StateNormal. If so, we'll set the input positions
- for mouse move distance calculations and call the axis dragging function (see
- \l {Implementing axis dragging} for details):
-
- \snippet draggableaxes/axesinputhandler.cpp 2
-
- We don't need to change the functionality of mouse wheel, so we will not re-implement that.
-
- \section1 Implementing Axis Dragging
-
- First we need to start listening to the selection signal from the graph. We do that in the
- constructor, and connect it to \c handleElementSelected method:
-
- \snippet draggableaxes/axesinputhandler.cpp 3
-
- In \c handleElementSelected we check the type of the selection and set our internal state based on
- it:
-
- \snippet draggableaxes/axesinputhandler.cpp 4
-
- The actual dragging logic is implemented in \c handleAxisDragging method, which we call from
- \c mouseMoveEvent in case the required conditions are met:
-
- \snippet draggableaxes/axesinputhandler.cpp 5
-
- In \c handleAxisDragging we first get the scene orientation from our active camera:
-
- \snippet draggableaxes/axesinputhandler.cpp 6
-
- Then we calculate the modifiers to mouse move direction based on the orientation:
-
- \snippet draggableaxes/axesinputhandler.cpp 7
-
- After that, we calculate the mouse movement, and modify it based on the y rotation of the
- camera:
-
- \snippet draggableaxes/axesinputhandler.cpp 8
-
- And finally apply the moved distance to the correct axis:
-
- \snippet draggableaxes/axesinputhandler.cpp 9
-
- We also have a function for setting the dragging speed:
-
- \snippet draggableaxes/axesinputhandler.h 1
-
- This is needed, as the mouse movement distance is absolute (in screen coordinates) and we
- need to adjust it to the axis range. The larger the value, the slower the dragging will be.
- Note that on this example we do not take scene zoom level into account when determining the
- drag speed, so you'll notice changes in the range adjustment as you change the zoom level.
-
- The modifier could be adjusted automatically based on the axis range and camera zoom level, but
- we'll leave implementing that as an excercise for the reader.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/draggableaxes/draggableaxes.pro b/examples/datavisualization/draggableaxes/draggableaxes.pro
deleted file mode 100644
index 2f21aee6..00000000
--- a/examples/datavisualization/draggableaxes/draggableaxes.pro
+++ /dev/null
@@ -1,18 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- data.cpp \
- axesinputhandler.cpp
-HEADERS += data.h \
- axesinputhandler.h
-
-QT += widgets
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/draggableaxes/main.cpp b/examples/datavisualization/draggableaxes/main.cpp
deleted file mode 100644
index f2d2c703..00000000
--- a/examples/datavisualization/draggableaxes/main.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "data.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QCommandLinkButton>
-#include <QtWidgets/QMessageBox>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- container->setMinimumSize(800, 600);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- QCommandLinkButton *rangeButton = new QCommandLinkButton(widget);
- rangeButton->setText(QStringLiteral("Toggle axis ranges"));
- rangeButton->setDescription(QStringLiteral("Switch between automatic axis ranges and preset ranges"));
- rangeButton->setIconSize(QSize(0, 0));
-
- vLayout->addWidget(rangeButton, 1, Qt::AlignTop);
-
- widget->setWindowTitle(QStringLiteral("Input Handling for Axes"));
-
- Data *graphData = new Data(graph);
-
- QObject::connect(rangeButton, &QCommandLinkButton::clicked, graphData, &Data::toggleRanges);
-
- widget->show();
- return app.exec();
-}
diff --git a/examples/datavisualization/graphgallery/CMakeLists.txt b/examples/datavisualization/graphgallery/CMakeLists.txt
new file mode 100644
index 00000000..c66fee25
--- /dev/null
+++ b/examples/datavisualization/graphgallery/CMakeLists.txt
@@ -0,0 +1,75 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(graphgallery LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(graphgallery
+ main.cpp
+ bargraph.cpp bargraph.h
+ graphmodifier.cpp graphmodifier.h
+ rainfalldata.cpp rainfalldata.h
+ variantbardatamapping.cpp variantbardatamapping.h
+ variantbardataproxy.cpp variantbardataproxy.h
+ variantdataset.cpp variantdataset.h
+ scattergraph.cpp scattergraph.h
+ scatterdatamodifier.cpp scatterdatamodifier.h
+ axesinputhandler.cpp axesinputhandler.h
+ surfacegraph.cpp surfacegraph.h
+ surfacegraphmodifier.cpp surfacegraphmodifier.h
+ custominputhandler.cpp custominputhandler.h
+ highlightseries.cpp highlightseries.h
+ topographicseries.cpp topographicseries.h
+)
+set_target_properties(graphgallery PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(graphgallery PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+)
+
+set(graphgallery_resource_files
+ "data/raindata.txt"
+ "data/layer_1.png"
+ "data/layer_2.png"
+ "data/layer_3.png"
+ "data/oilrig.obj"
+ "data/pipe.obj"
+ "data/refinery.obj"
+ "data/maptexture.jpg"
+ "data/topography.png"
+)
+
+qt6_add_resources(graphgallery "graphgallery"
+ PREFIX
+ "/"
+ FILES
+ ${graphgallery_resource_files}
+)
+
+install(TARGETS graphgallery
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/draggableaxes/axesinputhandler.cpp b/examples/datavisualization/graphgallery/axesinputhandler.cpp
index 5a839503..3292650e 100644
--- a/examples/datavisualization/draggableaxes/axesinputhandler.cpp
+++ b/examples/datavisualization/graphgallery/axesinputhandler.cpp
@@ -1,43 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "axesinputhandler.h"
#include <QtCore/qmath.h>
AxesInputHandler::AxesInputHandler(QAbstract3DGraph *graph, QObject *parent) :
- Q3DInputHandler(parent),
- m_mousePressed(false),
- m_state(StateNormal),
- m_axisX(0),
- m_axisZ(0),
- m_axisY(0),
- m_speedModifier(15.0f)
+ Q3DInputHandler(parent)
{
//! [3]
// Connect to the item selection signal from graph
diff --git a/examples/datavisualization/graphgallery/axesinputhandler.h b/examples/datavisualization/graphgallery/axesinputhandler.h
new file mode 100644
index 00000000..bb8432ac
--- /dev/null
+++ b/examples/datavisualization/graphgallery/axesinputhandler.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef AXESINPUTHANDLER_H
+#define AXESINPUTHANDLER_H
+
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtDataVisualization/qabstract3dgraph.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+
+//! [0]
+class AxesInputHandler : public Q3DInputHandler
+//! [0]
+{
+ Q_OBJECT
+
+ enum InputState {
+ StateNormal = 0,
+ StateDraggingX,
+ StateDraggingZ,
+ StateDraggingY
+ };
+
+public:
+ explicit AxesInputHandler(QAbstract3DGraph *graph, QObject *parent = 0);
+
+ inline void setAxes(QValue3DAxis *axisX, QValue3DAxis *axisZ, QValue3DAxis *axisY) {
+ m_axisX = axisX;
+ m_axisZ = axisZ;
+ m_axisY = axisY;
+ }
+
+ //! [1]
+ inline void setDragSpeedModifier(float modifier) { m_speedModifier = modifier; }
+ //! [1]
+
+ virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
+ virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
+ virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
+
+private:
+ void handleElementSelected(QAbstract3DGraph::ElementType type);
+ void handleAxisDragging();
+
+private:
+ bool m_mousePressed = false;
+ InputState m_state = StateNormal;
+ QValue3DAxis *m_axisX = nullptr;
+ QValue3DAxis *m_axisZ = nullptr;
+ QValue3DAxis *m_axisY = nullptr;
+ float m_speedModifier = 15.f;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/bargraph.cpp b/examples/datavisualization/graphgallery/bargraph.cpp
new file mode 100644
index 00000000..5873c757
--- /dev/null
+++ b/examples/datavisualization/graphgallery/bargraph.cpp
@@ -0,0 +1,329 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "bargraph.h"
+#include "graphmodifier.h"
+
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qpushbutton.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qfontcombobox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qbuttongroup.h>
+#include <QtGui/qfontdatabase.h>
+
+using namespace Qt::StringLiterals;
+
+BarGraph::BarGraph()
+{
+ //! [0]
+ m_barsGraph = new Q3DBars();
+ //! [0]
+}
+
+BarGraph::~BarGraph() = default;
+
+bool BarGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_barsGraph->hasContext())
+ return false;
+
+ //! [1]
+ m_barsWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_barsWidget);
+ m_container = QWidget::createWindowContainer(m_barsGraph, m_barsWidget);
+ m_barsGraph->resize(minimumGraphSize);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
+ hLayout->addLayout(vLayout);
+ //! [1]
+
+ auto *themeList = new QComboBox(m_barsWidget);
+ themeList->addItem(u"Qt"_s);
+ themeList->addItem(u"Primary Colors"_s);
+ themeList->addItem(u"Digia"_s);
+ themeList->addItem(u"Stone Moss"_s);
+ themeList->addItem(u"Army Blue"_s);
+ themeList->addItem(u"Retro"_s);
+ themeList->addItem(u"Ebony"_s);
+ themeList->addItem(u"Isabelle"_s);
+ themeList->setCurrentIndex(0);
+
+ auto *labelButton = new QPushButton(m_barsWidget);
+ labelButton->setText(u"Change label style"_s);
+
+ auto *smoothCheckBox = new QCheckBox(m_barsWidget);
+ smoothCheckBox->setText(u"Smooth bars"_s);
+ smoothCheckBox->setChecked(false);
+
+ auto *barStyleList = new QComboBox(m_barsWidget);
+ barStyleList->addItem(u"Bar"_s, QAbstract3DSeries::MeshBar);
+ barStyleList->addItem(u"Pyramid"_s, QAbstract3DSeries::MeshPyramid);
+ barStyleList->addItem(u"Cone"_s, QAbstract3DSeries::MeshCone);
+ barStyleList->addItem(u"Cylinder"_s, QAbstract3DSeries::MeshCylinder);
+ barStyleList->addItem(u"Bevel bar"_s, QAbstract3DSeries::MeshBevelBar);
+ barStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
+ barStyleList->setCurrentIndex(4);
+
+ auto *cameraButton = new QPushButton(m_barsWidget);
+ cameraButton->setText(u"Change camera preset"_s);
+
+ auto *zoomToSelectedButton = new QPushButton(m_barsWidget);
+ zoomToSelectedButton->setText(u"Zoom to selected bar"_s);
+
+ auto *selectionModeList = new QComboBox(m_barsWidget);
+ selectionModeList->addItem(u"None"_s,
+ int(QAbstract3DGraph::SelectionNone));
+ selectionModeList->addItem(u"Bar"_s,
+ int(QAbstract3DGraph::SelectionItem));
+ selectionModeList->addItem(u"Row"_s,
+ int(QAbstract3DGraph::SelectionRow));
+ selectionModeList->addItem(u"Bar and Row"_s,
+ int(QAbstract3DGraph::SelectionItemAndRow));
+ selectionModeList->addItem(u"Column"_s,
+ int(QAbstract3DGraph::SelectionColumn));
+ selectionModeList->addItem(u"Bar and Column"_s,
+ int(QAbstract3DGraph::SelectionItemAndColumn));
+ selectionModeList->addItem(u"Row and Column"_s,
+ int(QAbstract3DGraph::SelectionRowAndColumn));
+ selectionModeList->addItem(u"Bar, Row and Column"_s,
+ int(QAbstract3DGraph::SelectionItemRowAndColumn));
+ selectionModeList->addItem(u"Slice into Row"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionRow));
+ selectionModeList->addItem(u"Slice into Row and Item"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow));
+ selectionModeList->addItem(u"Slice into Column"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionColumn));
+ selectionModeList->addItem(u"Slice into Column and Item"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn));
+ selectionModeList->addItem(u"Multi: Bar, Row, Col"_s,
+ int(QAbstract3DGraph::SelectionItemRowAndColumn
+ | QAbstract3DGraph::SelectionMultiSeries));
+ selectionModeList->addItem(u"Multi, Slice: Row, Item"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow
+ | QAbstract3DGraph::SelectionMultiSeries));
+ selectionModeList->addItem(u"Multi, Slice: Col, Item"_s,
+ int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn
+ | QAbstract3DGraph::SelectionMultiSeries));
+ selectionModeList->setCurrentIndex(1);
+
+ auto *backgroundCheckBox = new QCheckBox(m_barsWidget);
+ backgroundCheckBox->setText(u"Show background"_s);
+ backgroundCheckBox->setChecked(false);
+
+ auto *gridCheckBox = new QCheckBox(m_barsWidget);
+ gridCheckBox->setText(u"Show grid"_s);
+ gridCheckBox->setChecked(true);
+
+ auto *seriesCheckBox = new QCheckBox(m_barsWidget);
+ seriesCheckBox->setText(u"Show second series"_s);
+ seriesCheckBox->setChecked(false);
+
+ auto *reverseValueAxisCheckBox = new QCheckBox(m_barsWidget);
+ reverseValueAxisCheckBox->setText(u"Reverse value axis"_s);
+ reverseValueAxisCheckBox->setChecked(false);
+
+ auto *reflectionCheckBox = new QCheckBox(m_barsWidget);
+ reflectionCheckBox->setText(u"Show reflections"_s);
+ reflectionCheckBox->setChecked(false);
+
+ //! [3]
+ auto *rotationSliderX = new QSlider(Qt::Horizontal, m_barsWidget);
+ rotationSliderX->setTickInterval(30);
+ rotationSliderX->setTickPosition(QSlider::TicksBelow);
+ rotationSliderX->setMinimum(-180);
+ rotationSliderX->setValue(0);
+ rotationSliderX->setMaximum(180);
+ //! [3]
+ auto *rotationSliderY = new QSlider(Qt::Horizontal, m_barsWidget);
+ rotationSliderY->setTickInterval(15);
+ rotationSliderY->setTickPosition(QSlider::TicksAbove);
+ rotationSliderY->setMinimum(-90);
+ rotationSliderY->setValue(0);
+ rotationSliderY->setMaximum(90);
+
+ auto *fontSizeSlider = new QSlider(Qt::Horizontal, m_barsWidget);
+ fontSizeSlider->setTickInterval(10);
+ fontSizeSlider->setTickPosition(QSlider::TicksBelow);
+ fontSizeSlider->setMinimum(1);
+ fontSizeSlider->setValue(30);
+ fontSizeSlider->setMaximum(100);
+
+ auto *fontList = new QFontComboBox(m_barsWidget);
+ fontList->setCurrentFont(QFont("Times New Roman"));
+
+ auto *shadowQuality = new QComboBox(m_barsWidget);
+ shadowQuality->addItem(u"None"_s);
+ shadowQuality->addItem(u"Low"_s);
+ shadowQuality->addItem(u"Medium"_s);
+ shadowQuality->addItem(u"High"_s);
+ shadowQuality->addItem(u"Low Soft"_s);
+ shadowQuality->addItem(u"Medium Soft"_s);
+ shadowQuality->addItem(u"High Soft"_s);
+ shadowQuality->setCurrentIndex(5);
+
+ auto *rangeList = new QComboBox(m_barsWidget);
+ rangeList->addItem(u"2015"_s);
+ rangeList->addItem(u"2016"_s);
+ rangeList->addItem(u"2017"_s);
+ rangeList->addItem(u"2018"_s);
+ rangeList->addItem(u"2019"_s);
+ rangeList->addItem(u"2020"_s);
+ rangeList->addItem(u"2021"_s);
+ rangeList->addItem(u"2022"_s);
+ rangeList->addItem(u"All"_s);
+ rangeList->setCurrentIndex(8);
+
+ auto *axisTitlesVisibleCB = new QCheckBox(m_barsWidget);
+ axisTitlesVisibleCB->setText(u"Axis titles visible"_s);
+ axisTitlesVisibleCB->setChecked(true);
+
+ auto *axisTitlesFixedCB = new QCheckBox(m_barsWidget);
+ axisTitlesFixedCB->setText(u"Axis titles fixed"_s);
+ axisTitlesFixedCB->setChecked(true);
+
+ auto *axisLabelRotationSlider = new QSlider(Qt::Horizontal, m_barsWidget);
+ axisLabelRotationSlider->setTickInterval(10);
+ axisLabelRotationSlider->setTickPosition(QSlider::TicksBelow);
+ axisLabelRotationSlider->setMinimum(0);
+ axisLabelRotationSlider->setValue(30);
+ axisLabelRotationSlider->setMaximum(90);
+
+ auto *modeGroup = new QButtonGroup(m_barsWidget);
+ auto *modeWeather = new QRadioButton(u"Temperature Data"_s, m_barsWidget);
+ modeWeather->setChecked(true);
+ auto *modeCustomProxy = new QRadioButton(u"Custom Proxy Data"_s, m_barsWidget);
+ modeGroup->addButton(modeWeather);
+ modeGroup->addButton(modeCustomProxy);
+
+ //! [4]
+ vLayout->addWidget(new QLabel(u"Rotate horizontally"_s));
+ vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
+ //! [4]
+ vLayout->addWidget(new QLabel(u"Rotate vertically"_s));
+ vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
+ vLayout->addWidget(labelButton, 0, Qt::AlignTop);
+ vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
+ vLayout->addWidget(zoomToSelectedButton, 0, Qt::AlignTop);
+ vLayout->addWidget(backgroundCheckBox);
+ vLayout->addWidget(gridCheckBox);
+ vLayout->addWidget(smoothCheckBox);
+ vLayout->addWidget(reflectionCheckBox);
+ vLayout->addWidget(seriesCheckBox);
+ vLayout->addWidget(reverseValueAxisCheckBox);
+ vLayout->addWidget(axisTitlesVisibleCB);
+ vLayout->addWidget(axisTitlesFixedCB);
+ vLayout->addWidget(new QLabel(u"Show year"_s));
+ vLayout->addWidget(rangeList);
+ vLayout->addWidget(new QLabel(u"Change bar style"_s));
+ vLayout->addWidget(barStyleList);
+ vLayout->addWidget(new QLabel(u"Change selection mode"_s));
+ vLayout->addWidget(selectionModeList);
+ vLayout->addWidget(new QLabel(u"Change theme"_s));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(new QLabel(u"Adjust shadow quality"_s));
+ vLayout->addWidget(shadowQuality);
+ vLayout->addWidget(new QLabel(u"Change font"_s));
+ vLayout->addWidget(fontList);
+ vLayout->addWidget(new QLabel(u"Adjust font size"_s));
+ vLayout->addWidget(fontSizeSlider);
+ vLayout->addWidget(new QLabel(u"Axis label rotation"_s));
+ vLayout->addWidget(axisLabelRotationSlider, 0, Qt::AlignTop);
+ vLayout->addWidget(modeWeather, 0, Qt::AlignTop);
+ vLayout->addWidget(modeCustomProxy, 1, Qt::AlignTop);
+
+ //! [2]
+ auto *modifier = new GraphModifier(m_barsGraph, this);
+ //! [2]
+
+ //! [5]
+ QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &GraphModifier::rotateX);
+ //! [5]
+ QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &GraphModifier::rotateY);
+
+ QObject::connect(labelButton, &QPushButton::clicked, modifier,
+ &GraphModifier::changeLabelBackground);
+ QObject::connect(cameraButton, &QPushButton::clicked, modifier,
+ &GraphModifier::changePresetCamera);
+ QObject::connect(zoomToSelectedButton, &QPushButton::clicked, modifier,
+ &GraphModifier::zoomToSelectedBar);
+
+ QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setBackgroundEnabled);
+ QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setGridEnabled);
+ QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setSmoothBars);
+ QObject::connect(seriesCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setSeriesVisibility);
+ QObject::connect(reverseValueAxisCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setReverseValueAxis);
+ QObject::connect(reflectionCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setReflection);
+
+ QObject::connect(modifier, &GraphModifier::backgroundEnabledChanged,
+ backgroundCheckBox, &QCheckBox::setChecked);
+ QObject::connect(modifier, &GraphModifier::gridEnabledChanged,
+ gridCheckBox, &QCheckBox::setChecked);
+
+ QObject::connect(rangeList, &QComboBox::currentIndexChanged, modifier,
+ &GraphModifier::changeRange);
+
+ QObject::connect(barStyleList, &QComboBox::currentIndexChanged, modifier,
+ &GraphModifier::changeStyle);
+
+ QObject::connect(selectionModeList, &QComboBox::currentIndexChanged, modifier,
+ &GraphModifier::changeSelectionMode);
+
+ QObject::connect(themeList, &QComboBox::currentIndexChanged, modifier,
+ &GraphModifier::changeTheme);
+
+ QObject::connect(shadowQuality, &QComboBox::currentIndexChanged, modifier,
+ &GraphModifier::changeShadowQuality);
+
+ QObject::connect(modifier, &GraphModifier::shadowQualityChanged, shadowQuality,
+ &QComboBox::setCurrentIndex);
+ QObject::connect(m_barsGraph, &Q3DBars::shadowQualityChanged, modifier,
+ &GraphModifier::shadowQualityUpdatedByVisual);
+
+ QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
+ &GraphModifier::changeFontSize);
+ QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
+ &GraphModifier::changeFont);
+
+ QObject::connect(modifier, &GraphModifier::fontSizeChanged, fontSizeSlider,
+ &QSlider::setValue);
+ QObject::connect(modifier, &GraphModifier::fontChanged, fontList,
+ &QFontComboBox::setCurrentFont);
+
+ QObject::connect(axisTitlesVisibleCB, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setAxisTitleVisibility);
+ QObject::connect(axisTitlesFixedCB, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setAxisTitleFixed);
+ QObject::connect(axisLabelRotationSlider, &QSlider::valueChanged, modifier,
+ &GraphModifier::changeLabelRotation);
+
+ QObject::connect(modeWeather, &QRadioButton::toggled, modifier,
+ &GraphModifier::setDataModeToWeather);
+ QObject::connect(modeCustomProxy, &QRadioButton::toggled, modifier,
+ &GraphModifier::setDataModeToCustom);
+ QObject::connect(modeWeather, &QRadioButton::toggled, seriesCheckBox,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, rangeList,
+ &QComboBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisTitlesVisibleCB,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisTitlesFixedCB,
+ &QCheckBox::setEnabled);
+ QObject::connect(modeWeather, &QRadioButton::toggled, axisLabelRotationSlider,
+ &QSlider::setEnabled);
+
+ return true;
+}
diff --git a/examples/datavisualization/graphgallery/bargraph.h b/examples/datavisualization/graphgallery/bargraph.h
new file mode 100644
index 00000000..004c14eb
--- /dev/null
+++ b/examples/datavisualization/graphgallery/bargraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BARGRAPH_H
+#define BARGRAPH_H
+
+#include <QtDataVisualization/q3dbars.h>
+#include <QtCore/qobject.h>
+
+class BarGraph : public QObject
+{
+ Q_OBJECT
+public:
+ BarGraph();
+ ~BarGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *barsWidget() { return m_barsWidget; }
+
+private:
+ Q3DBars *m_barsGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_barsWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/texturesurface/custominputhandler.cpp b/examples/datavisualization/graphgallery/custominputhandler.cpp
index e8e693a0..f9f06871 100644
--- a/examples/datavisualization/texturesurface/custominputhandler.cpp
+++ b/examples/datavisualization/graphgallery/custominputhandler.cpp
@@ -1,45 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "custominputhandler.h"
-#include <QtDataVisualization/Q3DCamera>
+#include <QtDataVisualization/q3dcamera.h>
#include <QtCore/qmath.h>
CustomInputHandler::CustomInputHandler(QAbstract3DGraph *graph, QObject *parent) :
- Q3DInputHandler(parent),
- m_highlight(0),
- m_mousePressed(false),
- m_state(StateNormal),
- m_axisX(0),
- m_axisZ(0),
- m_speedModifier(20.0f)
+ Q3DInputHandler(parent)
{
// Connect to the item selection signal from graph
connect(graph, &QAbstract3DGraph::selectedElementChanged, this,
@@ -69,7 +37,7 @@ void CustomInputHandler::wheelEvent(QWheelEvent *event)
float y = (m_axisXMaxValue - m_axisXMinValue) * m_aspectRatio;
m_axisX->setRange(m_axisXMinValue, m_axisXMaxValue);
- m_axisY->setRange(100.0f, y);
+ m_axisY->setRange(100.f, y);
m_axisZ->setRange(m_axisZMinValue, m_axisZMaxValue);
}
//! [1]
@@ -110,7 +78,7 @@ void CustomInputHandler::handleElementSelected(QAbstract3DGraph::ElementType typ
void CustomInputHandler::handleAxisDragging()
{
- float distance = 0.0f;
+ float distance = 0.f;
// Get scene orientation from active camera
float xRotation = scene()->activeCamera()->xRotation();
@@ -126,7 +94,7 @@ void CustomInputHandler::handleAxisDragging()
// Adjust axes
switch (m_state) {
-//! [0]
+ //! [0]
case StateDraggingX:
distance = (move.x() * xMulX - move.y() * xMulY) * m_speedModifier;
m_axisXMinValue -= distance;
@@ -143,7 +111,7 @@ void CustomInputHandler::handleAxisDragging()
}
m_axisX->setRange(m_axisXMinValue, m_axisXMaxValue);
break;
-//! [0]
+ //! [0]
case StateDraggingZ:
distance = (move.x() * zMulX + move.y() * zMulY) * m_speedModifier;
m_axisZMinValue += distance;
@@ -167,18 +135,18 @@ void CustomInputHandler::handleAxisDragging()
void CustomInputHandler::checkConstraints()
{
-//! [2]
+ //! [2]
if (m_axisXMinValue < m_areaMinValue)
m_axisXMinValue = m_areaMinValue;
if (m_axisXMaxValue > m_areaMaxValue)
m_axisXMaxValue = m_areaMaxValue;
// Don't allow too much zoom in
if ((m_axisXMaxValue - m_axisXMinValue) < m_axisXMinRange) {
- float adjust = (m_axisXMinRange - (m_axisXMaxValue - m_axisXMinValue)) / 2.0f;
+ float adjust = (m_axisXMinRange - (m_axisXMaxValue - m_axisXMinValue)) / 2.f;
m_axisXMinValue -= adjust;
m_axisXMaxValue += adjust;
}
-//! [2]
+ //! [2]
if (m_axisZMinValue < m_areaMinValue)
m_axisZMinValue = m_areaMinValue;
@@ -186,7 +154,7 @@ void CustomInputHandler::checkConstraints()
m_axisZMaxValue = m_areaMaxValue;
// Don't allow too much zoom in
if ((m_axisZMaxValue - m_axisZMinValue) < m_axisZMinRange) {
- float adjust = (m_axisZMinRange - (m_axisZMaxValue - m_axisZMinValue)) / 2.0f;
+ float adjust = (m_axisZMinRange - (m_axisZMaxValue - m_axisZMinValue)) / 2.f;
m_axisZMinValue -= adjust;
m_axisZMaxValue += adjust;
}
diff --git a/examples/datavisualization/graphgallery/custominputhandler.h b/examples/datavisualization/graphgallery/custominputhandler.h
new file mode 100644
index 00000000..a28b5851
--- /dev/null
+++ b/examples/datavisualization/graphgallery/custominputhandler.h
@@ -0,0 +1,76 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CUSTOMINPUTHANDLER_H
+#define CUSTOMINPUTHANDLER_H
+
+#include "highlightseries.h"
+
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtDataVisualization/qabstract3dgraph.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+
+class CustomInputHandler : public Q3DInputHandler
+{
+ Q_OBJECT
+
+ enum InputState {
+ StateNormal = 0,
+ StateDraggingX,
+ StateDraggingZ,
+ StateDraggingY
+ };
+
+public:
+ explicit CustomInputHandler(QAbstract3DGraph *graph, QObject *parent = 0);
+
+ inline void setLimits(float min, float max, float minRange) {
+ m_areaMinValue = min;
+ m_areaMaxValue = max;
+ m_axisXMinValue = m_areaMinValue;
+ m_axisXMaxValue = m_areaMaxValue;
+ m_axisZMinValue = m_areaMinValue;
+ m_axisZMaxValue = m_areaMaxValue;
+ m_axisXMinRange = minRange;
+ m_axisZMinRange = minRange;
+ }
+ inline void setAxes(QValue3DAxis *axisX, QValue3DAxis *axisY, QValue3DAxis *axisZ) {
+ m_axisX = axisX;
+ m_axisY = axisY;
+ m_axisZ = axisZ;
+ }
+ inline void setAspectRatio(float ratio) { m_aspectRatio = ratio; }
+ inline void setHighlightSeries(HighlightSeries *series) { m_highlight = series; }
+ inline void setDragSpeedModifier(float modifier) { m_speedModifier = modifier; }
+
+protected:
+ virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
+ virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
+ virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
+ virtual void wheelEvent(QWheelEvent *event);
+
+private:
+ void handleElementSelected(QAbstract3DGraph::ElementType type);
+ void handleAxisDragging();
+ void checkConstraints();
+
+private:
+ HighlightSeries *m_highlight = nullptr;
+ bool m_mousePressed = false;
+ InputState m_state = StateNormal;
+ QValue3DAxis *m_axisX = nullptr;
+ QValue3DAxis *m_axisY = nullptr;
+ QValue3DAxis *m_axisZ = nullptr;
+ float m_speedModifier = 20.f;
+ float m_aspectRatio = 0.f;
+ float m_axisXMinValue = 0.f;
+ float m_axisXMaxValue = 0.f;
+ float m_axisXMinRange = 0.f;
+ float m_axisZMinValue = 0.f;
+ float m_axisZMaxValue = 0.f;
+ float m_axisZMinRange = 0.f;
+ float m_areaMinValue = 0.f;
+ float m_areaMaxValue = 0.f;
+};
+
+#endif
diff --git a/examples/datavisualization/customitems/layer_1.png b/examples/datavisualization/graphgallery/data/layer_1.png
index 9138c710..9138c710 100644
--- a/examples/datavisualization/customitems/layer_1.png
+++ b/examples/datavisualization/graphgallery/data/layer_1.png
Binary files differ
diff --git a/examples/datavisualization/customitems/layer_2.png b/examples/datavisualization/graphgallery/data/layer_2.png
index 61631ae8..61631ae8 100644
--- a/examples/datavisualization/customitems/layer_2.png
+++ b/examples/datavisualization/graphgallery/data/layer_2.png
Binary files differ
diff --git a/examples/datavisualization/customitems/layer_3.png b/examples/datavisualization/graphgallery/data/layer_3.png
index 066ffbe7..066ffbe7 100644
--- a/examples/datavisualization/customitems/layer_3.png
+++ b/examples/datavisualization/graphgallery/data/layer_3.png
Binary files differ
diff --git a/examples/datavisualization/texturesurface/license.txt b/examples/datavisualization/graphgallery/data/license.txt
index 749daf31..749daf31 100644
--- a/examples/datavisualization/texturesurface/license.txt
+++ b/examples/datavisualization/graphgallery/data/license.txt
diff --git a/examples/datavisualization/texturesurface/maptexture.jpg b/examples/datavisualization/graphgallery/data/maptexture.jpg
index ae5d66eb..ae5d66eb 100644
--- a/examples/datavisualization/texturesurface/maptexture.jpg
+++ b/examples/datavisualization/graphgallery/data/maptexture.jpg
Binary files differ
diff --git a/examples/datavisualization/customitems/oilrig.obj b/examples/datavisualization/graphgallery/data/oilrig.obj
index c3b6ea57..c3b6ea57 100644
--- a/examples/datavisualization/customitems/oilrig.obj
+++ b/examples/datavisualization/graphgallery/data/oilrig.obj
diff --git a/examples/datavisualization/customitems/pipe.obj b/examples/datavisualization/graphgallery/data/pipe.obj
index 6ccbb286..6ccbb286 100644
--- a/examples/datavisualization/customitems/pipe.obj
+++ b/examples/datavisualization/graphgallery/data/pipe.obj
diff --git a/examples/datavisualization/graphgallery/data/raindata.txt b/examples/datavisualization/graphgallery/data/raindata.txt
new file mode 100644
index 00000000..d9558921
--- /dev/null
+++ b/examples/datavisualization/graphgallery/data/raindata.txt
@@ -0,0 +1,158 @@
+# Rainfall per month from 2010 to 2022 in Northern Finland (Oulu)
+# Format: year, month, rainfall
+2010,1, 0,
+2010,2, 3.4,
+2010,3, 52,
+2010,4, 33.8,
+2010,5, 45.6,
+2010,6, 43.8,
+2010,7, 104.6,
+2010,8, 105.4,
+2010,9, 107.2,
+2010,10,38.6,
+2010,11,17.8,
+2010,12,0,
+2011,1, 8.2,
+2011,2, 1.6,
+2011,3, 27.4,
+2011,4, 15.8,
+2011,5, 57.6,
+2011,6, 85.2,
+2011,7, 127,
+2011,8, 72.2,
+2011,9, 82.2,
+2011,10,62.4,
+2011,11,31.6,
+2011,12,53.8,
+2012,1, 0,
+2012,2, 5,
+2012,3, 32.4,
+2012,4, 57.6,
+2012,5, 71.4,
+2012,6, 60.8,
+2012,7, 109,
+2012,8, 43.6,
+2012,9, 79.4,
+2012,10,117.2,
+2012,11,59,
+2012,12,0.2,
+2013,1, 28,
+2013,2, 19,
+2013,3, 0,
+2013,4, 37.6,
+2013,5, 44.2,
+2013,6, 104.8,
+2013,7, 84.2,
+2013,8, 57.2,
+2013,9, 37.2,
+2013,10,64.6,
+2013,11,77.8,
+2013,12,92.8,
+2014,1, 23.8,
+2014,2, 23.6,
+2014,3, 15.4,
+2014,4, 13.2,
+2014,5, 36.4,
+2014,6, 26.4,
+2014,7, 95.8,
+2014,8, 81.8,
+2014,9, 13.8,
+2014,10,94.6,
+2014,11,44.6,
+2014,12,31,
+2015,1, 37.4,
+2015,2, 21,
+2015,3, 42,
+2015,4, 8.8,
+2015,5, 82.4,
+2015,6, 150,
+2015,7, 56.8,
+2015,8, 67.2,
+2015,9, 131.2,
+2015,10,38.4,
+2015,11,83.4,
+2015,12,47.8,
+2016,1, 12.4,
+2016,2, 34.8,
+2016,3, 29,
+2016,4, 40.4,
+2016,5, 32.4,
+2016,6, 80.2,
+2016,7, 102.6,
+2016,8, 95.6,
+2016,9, 40.2,
+2016,10,7.8,
+2016,11,39.6,
+2016,12,8.8,
+2017,1, 9.4,
+2017,2, 6.6,
+2017,3, 29,
+2017,4, 46.2,
+2017,5, 43.2,
+2017,6, 25.2,
+2017,7, 72.4,
+2017,8, 58.8,
+2017,9, 68.8,
+2017,10,45.8,
+2017,11,36.8,
+2017,12,29.6,
+2018,1, 19.8,
+2018,2, 0.8,
+2018,3, 4,
+2018,4, 23.2,
+2018,5, 13.2,
+2018,6, 62.8,
+2018,7, 33,
+2018,8, 96.6,
+2018,9, 72.6,
+2018,10,48.8,
+2018,11,31.8,
+2018,12,12.8,
+2019,1, 0.2,
+2019,2, 24.8,
+2019,3, 32,
+2019,4, 8.8,
+2019,5, 71.4,
+2019,6, 65.8,
+2019,7, 17.6,
+2019,8, 90,
+2019,9, 50,
+2019,10,77,
+2019,11,27,
+2019,12,43.2,
+2020,1, 28.8,
+2020,2, 45,
+2020,3, 18.6,
+2020,4, 13,
+2020,5, 30.8,
+2020,6, 21.4,
+2020,7, 163.6,
+2020,8, 12,
+2020,9, 102.4,
+2020,10,133.2,
+2020,11,69.8,
+2020,12,40.6,
+2021,1, 0.4,
+2021,2, 21.6,
+2021,3, 24,
+2021,4, 51.4,
+2021,5, 76.4,
+2021,6, 29.2,
+2021,7, 36.4,
+2021,8, 116,
+2021,9, 72.4,
+2021,10,93.4,
+2021,11,21,
+2021,12,10.2,
+2022,1, 8.6,
+2022,2, 6.6,
+2022,3, 5.2,
+2022,4, 15.2,
+2022,5, 37.6,
+2022,6, 45,
+2022,7, 67.4,
+2022,8, 161.6,
+2022,9, 22.8,
+2022,10,75.2,
+2022,11,21.8,
+2022,12,0.2
diff --git a/examples/datavisualization/customitems/refinery.obj b/examples/datavisualization/graphgallery/data/refinery.obj
index ed90c361..ed90c361 100644
--- a/examples/datavisualization/customitems/refinery.obj
+++ b/examples/datavisualization/graphgallery/data/refinery.obj
diff --git a/examples/datavisualization/texturesurface/topography.png b/examples/datavisualization/graphgallery/data/topography.png
index 9349cdb3..9349cdb3 100644
--- a/examples/datavisualization/texturesurface/topography.png
+++ b/examples/datavisualization/graphgallery/data/topography.png
Binary files differ
diff --git a/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png b/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png
new file mode 100644
index 00000000..f3320c8e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/doc/images/graphgallery-example.png
Binary files differ
diff --git a/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc b/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc
new file mode 100644
index 00000000..ff7761d2
--- /dev/null
+++ b/examples/datavisualization/graphgallery/doc/src/graphgallery.qdoc
@@ -0,0 +1,705 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example graphgallery
+ \meta tags {DataVisualization, Q3DBars, Bar Graph, Custom Proxy, Q3DScatter, Scatter Graph, Custom Input Handler, Q3DSurface, Surface Graph, QCustom3DItem, Textured Surface}
+ \title Graph Gallery
+ \ingroup qtdatavisualization_examples
+ \brief Gallery of Bar, Scatter, and Surface graphs.
+
+ \e {Graph Gallery} demonstrates all three graph types and some of their special features.
+ The graphs have their own tabs in the application.
+
+ \image graphgallery-example.png
+
+ \include examples-run.qdocinc
+
+ \section1 Bar Graph
+
+ In the \uicontrol {Bar Graph} tab, create a 3D bar graph using Q3DBars and combine the use of
+ widgets to adjust various bar graph qualities. The example shows how to:
+
+ \list
+ \li Create an application with Q3DBars and some widgets
+ \li Use QBar3DSeries and QBarDataProxy to set data to the graph
+ \li Adjust some graph and series properties using widget controls
+ \li Select a row or a column by clicking an axis label
+ \li Create a custom proxy to use with Q3DBars
+ \endlist
+
+ For information about interacting with the graph, see
+ \l{Qt Data Visualization Interacting with Data}{this page}.
+
+ \section2 Creating the Application
+
+ First, in \c{bargraph.cpp}, instantiate Q3DBars:
+
+ \snippet graphgallery/bargraph.cpp 0
+
+ Then, create the widget, and horizontal and vertical layouts.
+
+ The graph is embedded in a window container using
+ QWidget::createWindowContainer(). This is required because all data
+ visualization graph classes (Q3DBars, Q3DScatter, Q3DSurface) inherit
+ QWindow. This is the only way to use a class inheriting QWindow as a widget.
+
+ Add the graph and the vertical layout to the
+ horizontal one:
+
+ \snippet graphgallery/bargraph.cpp 1
+
+ Next, create another class to handle the data addition and other interaction with the
+ graph:
+
+ \snippet graphgallery/bargraph.cpp 2
+
+ \section2 Setting up the Bar Graph
+
+ Set up the graph in the constructor of the \c GraphModifier class:
+
+ \snippet graphgallery/graphmodifier.cpp 0
+
+ First, create the axes and the series into member variables to support changing them easily:
+
+ \snippet graphgallery/graphmodifier.cpp 1
+
+ Then, set some visual qualities for the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 2
+
+ Set up the axes and make them the active axes of the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 3
+
+ Give axis labels a small autorotation angle with setLabelAutoRotation() to make them orient
+ slightly toward the camera. This improves axis label readability at extreme camera angles.
+
+ Next, initialize the visual properties of the series. Note that the second series is initially
+ not visible:
+
+ \snippet graphgallery/graphmodifier.cpp 4
+
+ Add the series to the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 5
+
+ Finally, set the camera angle by calling the same method the camera angle change button
+ in the UI uses to cycle through various camera angles:
+
+ \snippet graphgallery/graphmodifier.cpp 6
+
+ The camera is controlled via the scene object of the graph:
+
+ \snippet graphgallery/graphmodifier.cpp 7
+
+ For more information about using scene and cameras, see Q3DScene and Q3DCamera.
+
+ \section2 Adding Data to the Graph
+
+ At the end of the constructor, call a method that sets up the data:
+
+ \snippet graphgallery/graphmodifier.cpp 8
+
+ This method adds data to the proxies of the two series:
+
+ \snippet graphgallery/graphmodifier.cpp 9a
+ \dots 0
+ \snippet graphgallery/graphmodifier.cpp 9b
+
+ \section2 Using Widgets to Control the Graph
+
+ Continue by adding some widgets in \c{bargraph.cpp}. Add a slider:
+
+ \snippet graphgallery/bargraph.cpp 3
+
+ Use the slider to rotate the graph instead of just using a mouse or touch. Add it to the
+ vertical layout:
+
+ \snippet graphgallery/bargraph.cpp 4
+
+ Then, connect it to a method in \c GraphModifier:
+
+ \snippet graphgallery/bargraph.cpp 5
+
+ Create a slot in \c GraphModifier for the signal connection. The camera is controlled via the
+ scene object. This time, specify the actual camera position along the orbit around the center
+ point, instead of specifying a preset camera angle:
+
+ \snippet graphgallery/graphmodifier.cpp 10
+
+ You can now use the slider to rotate the graph.
+
+ Add more widgets to the vertical layout to control:
+
+ \list
+ \li Graph rotation
+ \li Label style
+ \li Camera preset
+ \li Background visibility
+ \li Grid visibility
+ \li Bar shading smoothness
+ \li Visibility of the second bar series
+ \li Value axis direction
+ \li Axis title visibility and rotation
+ \li Data range to be shown
+ \li Bar style
+ \li Selection mode
+ \li Theme
+ \li Shadow quality
+ \li Font
+ \li Font size
+ \li Axis label rotation
+ \li Data mode
+ \endlist
+
+ Some widget controls are intentionally disabled when in the \uicontrol {Custom Proxy Data}
+ data mode.
+
+ \section2 Selecting a Row or Column by Clicking an Axis Label
+
+ Selection by axis label is default functionality for bar graphs. As an example, you can select
+ rows by clicking an axis label in the following way:
+
+ \list 1
+ \li Change selection mode to \c SelectionRow
+ \li Click a year label
+ \li The row with the clicked year is selected
+ \endlist
+
+ The same method works with \c SelectionSlice and \c SelectionItem flags, as long as
+ either \c SelectionRow or \c SelectionColumn is set as well.
+
+ \section2 Zooming to Selection
+
+ As an example of adjusting the camera target, implement an animation of zooming to
+ selection via a button press. Animation initializations are done in the constructor:
+
+ \snippet graphgallery/graphmodifier.cpp 11
+
+ Function \c{GraphModifier::zoomToSelectedBar()} contains the zooming functionality.
+ QPropertyAnimation \c m_animationCameraTarget targets Q3DCamera::target property,
+ which takes a value normalized to the range (-1, 1).
+
+ Figure out where the selected bar is relative to axes, and use that as the end value for
+ \c{m_animationCameraTarget}:
+
+ \snippet graphgallery/graphmodifier.cpp 12
+ \dots 0
+ \snippet graphgallery/graphmodifier.cpp 13
+
+ Then, rotate the camera so that it always points approximately to the center of
+ the graph at the end of the animation:
+
+ \snippet graphgallery/graphmodifier.cpp 14
+
+ \section2 Custom Proxy for Data
+
+ By toggling \uicontrol {Custom Proxy Data} data mode on, a custom dataset and the corresponding
+ proxy are taken into use.
+
+ Define a simple flexible data set, \c{VariantDataSet}, where each data item is
+ a variant list. Each item can have multiple values, identified by their index in
+ the list. In this case, the data set is storing monthly rainfall data, where the value in
+ index zero is the year, the value in index one is the month, and the value in index two is
+ the amount of rainfall in that month.
+
+ The custom proxy is similar to itemmodel-based proxies provided by Qt Data Visualization, and
+ it requires mapping to interpret the data.
+
+ \section3 VariantDataSet
+
+ Define the data items as QVariantList objects. Add functionality for clearing the data set and
+ querying for a reference to the data contained in the set. Also, add signals to be emitted when
+ data is added or the set is cleared:
+
+ \snippet graphgallery/variantdataset.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantdataset.h 1
+
+ \section3 VariantBarDataProxy
+
+ Subclass \c VariantBarDataProxy from QBarDataProxy and provide a simple API of getters and
+ setters for the data set and the mapping:
+
+ \snippet graphgallery/variantbardataproxy.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardataproxy.h 1
+
+ The proxy listens for the changes in the data set and the mapping, and resolves the data set
+ if any changes are detected. This is not a particularly efficient implementation, as any change
+ will cause re-resolving of the entire data set, but that is not an issue for this example.
+
+ In \c resolveDataSet() method, sort the variant data values into rows and columns based on the
+ mapping. This is very similar to how QItemModelBarDataProxy handles mapping, except you use
+ list indexes instead of item model roles here. Once the values are sorted, generate
+ \c QBarDataArray out of them, and call the \c resetArray() method in the parent class:
+
+ \snippet graphgallery/variantbardataproxy.cpp 0
+
+ \section3 VariantBarDataMapping
+
+ Store the mapping information between \c VariantDataSet data item indexes and rows, columns,
+ and values of \c QBarDataArray in \c VariantBarDataMapping. It contains the lists of rows and
+ columns to be included in the resolved data:
+
+ \snippet graphgallery/variantbardatamapping.h 0
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 1
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 2
+ \dots 0
+ \codeline
+ \snippet graphgallery/variantbardatamapping.h 3
+
+ The primary way to use a \c VariantBarDataMapping object is to give the mappings in the
+ constructor, though you can use the \c remap() method to set them later, either individually or
+ all together. Emit a signal if mapping changes. The outcome is a simplified version of the
+ mapping functionality of QItemModelBarDataProxy, adapted to work with variant lists instead of
+ item models.
+
+ \section3 RainfallData
+
+ Handle the setup of QBar3DSeries with the custom proxy in the \c RainfallData class:
+
+ \snippet graphgallery/rainfalldata.cpp 0
+
+ Populate the variant data set in the \c addDataSet() method:
+
+ \snippet graphgallery/rainfalldata.cpp 1
+ \dots
+
+ Add the data set to the custom proxy and set the mapping:
+
+ \snippet graphgallery/rainfalldata.cpp 2
+
+ Finally, add a function for getting the created series for displaying:
+
+ \snippet graphgallery/rainfalldata.h 0
+
+ \section1 Scatter Graph
+
+ In the \uicontrol {Scatter Graph} tab, create a 3D scatter graph using Q3DScatter.
+ The example shows how to:
+
+ \list
+ \li Set up Q3DScatter graph
+ \li Use QScatterDataProxy to set data to the graph
+ \li Create a custom input handler by extending Q3DInputHandler
+ \endlist
+
+ For basic application creation, see \l {Bar Graph}.
+
+ \section2 Setting up the Scatter Graph
+
+ First, set up some visual qualities for the graph in the constructor of the
+ \c ScatterDataModifier:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 0
+
+ None of these are mandatory, but are used to override graph defaults. You can try how it looks
+ with the preset defaults by commenting out the block above.
+
+ Next, create a QScatterDataProxy and the associated QScatter3DSeries. Set a custom label format
+ and mesh smoothing for the series and add it to the graph:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 1
+
+ \section2 Adding Scatter Data
+
+ The last thing to do in the \c ScatterDataModifier constructor is to add data to the graph:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 2
+
+ The actual data addition is done in \c addData() method. First, configure the axes:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 3
+
+ You could do this also in the constructor of \c {ScatterDataModifier}. Doing it here
+ keeps the constructor simpler and the axes' configuration near the data.
+
+ Next, create a data array and populate it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 4
+ \dots
+ \snippet graphgallery/scatterdatamodifier.cpp 5
+
+ Finally, tell the proxy to start using the data we gave it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 6
+
+ Now, the graph has the data and is ready for use. For information about adding widgets
+ to control the graph, see \l {Using Widgets to Control the Graph}.
+
+ \section2 Replacing Default Input Handling
+
+ Initialize \c m_inputHandler in the constructor with a pointer to the scatter graph instance:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 7
+
+ Replace the default input handling mechanism by setting the active input handler of
+ Q3DScatter to \c {AxesInputHandler}, which implements the custom behavior:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 8
+
+ The input handler needs access to the axes of the graph, so pass them to it:
+
+ \snippet graphgallery/scatterdatamodifier.cpp 9
+
+ \section2 Extending Mouse Event Handling
+
+ First, inherit the custom input handler from Q3DInputHandler instead of QAbstract3DInputHandler
+ to keep all the functionality of the default input handling, and to add the custom
+ functionality on top of it:
+
+ \snippet graphgallery/axesinputhandler.h 0
+
+ Start extending the default functionality by re-implementing some of the mouse events.
+ First, extend \c {mousePressEvent}. Add a \c{m_mousePressed} flag for the left mouse button
+ to it, and keep the rest of the default functionality:
+
+ \snippet graphgallery/axesinputhandler.cpp 0
+
+ Next, modify \c mouseReleaseEvent to clear the flag, and reset the internal state:
+
+ \snippet graphgallery/axesinputhandler.cpp 1
+
+ Then, modify \c {mouseMoveEvent}. Check if \c m_mousePressed flag is \c {true} and
+ the internal state is something other than \c StateNormal. If so, set the input positions
+ for mouse movement distance calculations, and call the axis dragging function (see
+ \l {Implementing Axis Dragging} for details):
+
+ \snippet graphgallery/axesinputhandler.cpp 2
+
+ \section2 Implementing Axis Dragging
+
+ First, start listening to the selection signal from the graph. Do that in the
+ constructor, and connect it to the \c handleElementSelected method:
+
+ \snippet graphgallery/axesinputhandler.cpp 3
+
+ In \c {handleElementSelected}, check the type of the selection, and set the internal state
+ based on it:
+
+ \snippet graphgallery/axesinputhandler.cpp 4
+
+ The actual dragging logic is implemented in the \c handleAxisDragging method, which is called
+ from \c {mouseMoveEvent}, if the required conditions are met:
+
+ \snippet graphgallery/axesinputhandler.cpp 5
+
+ In \c {handleAxisDragging}, first get the scene orientation from the active camera:
+
+ \snippet graphgallery/axesinputhandler.cpp 6
+
+ Then, calculate the modifiers for mouse movement direction based on the orientation:
+
+ \snippet graphgallery/axesinputhandler.cpp 7
+
+ After that, calculate the mouse movement, and modify it based on the y rotation of the
+ camera:
+
+ \snippet graphgallery/axesinputhandler.cpp 8
+
+ Then, apply the moved distance to the correct axis:
+
+ \snippet graphgallery/axesinputhandler.cpp 9
+
+ Finally, add a function for setting the dragging speed:
+
+ \snippet graphgallery/axesinputhandler.h 1
+
+ This is needed, as the mouse movement distance is absolute in screen coordinates, and you
+ need to adjust it to the axis range. The larger the value, the slower the dragging will be.
+ Note that in this example, the scene zoom level is not taken into account when determining the
+ drag speed, so you'll notice changes in the range adjustment as you change the zoom level.
+
+ You could also adjust the modifier automatically based on the axis range and camera zoom level.
+
+ \section1 Surface Graph
+
+ In the \uicontrol {Surface Graph} tab, create a 3D surface graph using Q3DSurface.
+ The example shows how to:
+
+ \list
+ \li Set up a basic QSurfaceDataProxy and set data for it.
+ \li Use QHeightMapSurfaceDataProxy for showing 3D height maps.
+ \li Use topographic data to create 3D height maps.
+ \li Use three different selection modes for studying the graph.
+ \li Use axis ranges to display selected portions of the graph.
+ \li Set a custom surface gradient.
+ \li Add custom items and labels with QCustom3DItem and QCustom3DLabel.
+ \li Use custom input handler to enable zooming and panning.
+ \li Highlight an area of the surface.
+ \endlist
+
+ For basic application creation, see \l {Bar Graph}.
+
+ \section2 Simple Surface with Generated Data
+
+ First, instantiate a new QSurfaceDataProxy and attach it to a new QSurface3DSeries:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 0
+
+ Then, fill the proxy with a simple square root and sine wave data. Create a new
+ \c QSurfaceDataArray instance, and add \c QSurfaceDataRow elements to it.
+ Set the created \c QSurfaceDataArray as the data array for the QSurfaceDataProxy by calling
+ \c{resetArray()}.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 1
+
+ \section2 Multiseries Height Map Data
+
+ Create the height map by instantiating a QHeightMapSurfaceDataProxy with a QImage containing
+ the height data. Use QHeightMapSurfaceDataProxy::setValueRanges() to define the
+ value range of the map. In the example, the map is from an imaginary position of
+ 34.0\unicode 0x00B0 N - 40.0\unicode 0x00B0 N and 18.0\unicode 0x00B0 E - 24.0\unicode 0x00B0 E.
+ These values are used to position the map on the axes.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 2
+
+ Add the other surface layers the same way, by creating a proxy and a series for them using
+ height map images.
+
+ \section2 Topographic Map Data
+
+ The topographic data is obtained from the National Land Survey of Finland. It provides a product
+ called \c{Elevation Model 2 m}, which is suitable for this example.
+ The topography data is from Levi fell. The accuracy of the data is well beyond the need, and
+ therefore it is compressed and encoded into a PNG file. The height value of the original
+ ASCII data is encoded into RGB format using a multiplier, which you will see later in
+ a code extract. The multiplier is calculated by dividing the largest 24-bit value with the
+ highest point in Finland.
+
+ QHeightMapSurfaceDataProxy converts only one-byte values. To utilize the higher accuracy of
+ the data from the National Land Survey of Finland, read the data from the PNG file and decode
+ it into QSurface3DSeries.
+
+ First, define the encoding multiplier:
+
+ \snippet graphgallery/topographicseries.cpp 0
+
+ Then, perform the actual decoding:
+
+ \snippet graphgallery/topographicseries.cpp 1
+
+ Now, the data is usable by the proxy.
+
+ \section2 Selecting the Data Set
+
+ To demonstrate different proxies, \uicontrol {Surface Graph} has three radio buttons to
+ switch between the series.
+
+ With \uicontrol {Sqrt & Sin}, the simple generated series is activated. First, set
+ the decorative features, such as enabling the grid for the surface, and selecting the flat
+ shading mode. Next, define the axis label format and value ranges. Set automatic label rotation
+ to improve label readability at low camera angles. Finally, make sure the correct series is
+ added to the graph and the others are not:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 3
+
+ With \uicontrol {Multiseries Height Map}, the height map series are activated and others
+ disabled. Auto-adjusting Y-axis range works well for the height map surface, so ensure it is
+ set.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 4
+
+ With \uicontrol {Textured Topography}, the topographic series is activated and others disabled.
+ Activate a custom input handler for this series, to be able to highlight areas on it:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 5
+
+ See \l {Use Custom Input Handler to Enable Zooming and Panning} for information about the
+ custom input handler for this data set.
+
+ \section2 Selection Modes
+
+ The three selection modes supported by Q3DSurface can be used with radio buttons.
+ To activate the selected mode or to clear it, add the following inline methods:
+
+ \snippet graphgallery/surfacegraphmodifier.h 0
+
+ Add \c{QAbstract3DGraph::SelectionSlice} and \c{QAbstract3DGraph::SelectionMultiSeries} flags
+ for the row and column selection modes to support doing a slice selection to all visible series
+ in the graph simultaneously.
+
+ \section2 Axis Ranges for Studying the Graph
+
+ The example has four slider controls for adjusting the min and max values for X and Z
+ axes. When selecting the proxy, these sliders are adjusted to match the axis ranges of the
+ current data set:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 6
+
+ Add support for setting the X range from the widget controls to the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 7
+
+ Add the support for Z range the same way.
+
+ \section2 Custom Surface Gradients
+
+ With the \uicontrol {Sqrt & Sin} data set, custom surface gradients can be taken into use
+ with two push buttons. Define the gradient with QLinearGradient, where the desired colors are
+ set. Also, change the color style to Q3DTheme::ColorStyleRangeGradient to use the gradient.
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 8
+
+ \section2 Adding Custom Meshes to the Application
+
+ Add the mesh files to \c{CMakeLists.txt} for cmake build:
+
+ \badcode
+ set(graphgallery_resource_files
+ ...
+ "data/oilrig.obj"
+ "data/pipe.obj"
+ "data/refinery.obj"
+ ...
+ )
+
+ qt6_add_resources(graphgallery "graphgallery"
+ PREFIX
+ "/"
+ FILES
+ ${graphgallery_resource_files}
+ )
+ \endcode
+
+ Also, add them in the qrc resource file for use with qmake:
+
+ \badcode
+ <RCC>
+ <qresource prefix="/">
+ ...
+ <file>data/refinery.obj</file>
+ <file>data/oilrig.obj</file>
+ <file>data/pipe.obj</file>
+ ...
+ </qresource>
+ </RCC>
+ \endcode
+
+ \section2 Adding Custom Item to a Graph
+
+ With the \uicontrol {Multiseries Height Map} data set, custom items are inserted into the
+ graph and can be toggled on or off using checkboxes. Other visual qualities can also be
+ controlled with another set of checkboxes, including see-through for the two top layers, and
+ a highlight for the bottom layer.
+
+ Begin by creating a small QImage. Fill it with a single color to use as the color for the
+ custom object:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 9
+
+ Then, specify the position of the item in a variable. The position can then be used for
+ removing the correct item from the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 10
+
+ Then, create a new QCustom3DItem with all the parameters:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 11
+
+ Finally, add the item to the graph:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 12
+
+ \section2 Adding Custom Label to a Graph
+
+ Adding a custom label is very similar to adding a custom item. For the label, a custom mesh is
+ not needed, but just a QCustom3DLabel instance:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 13
+
+ \section2 Removing Custom Item from a Graph
+
+ To remove a specific item from the graph, call \c removeCustomItemAt() with the position of
+ the item:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 14
+
+ \note Removing a custom item from the graph also deletes the object. If you want to preserve
+ the item, use the \c releaseCustomItem() method instead.
+
+ \section2 Texture to a Surface Series
+
+ With the \uicontrol {Textured Topography} data set, create a map texture to be used with the
+ topographic height map.
+
+ Set an image to be used as the texture on a surface with QSurface3DSeries::setTextureFile().
+ Add a check box to control if the texture is set or not, and a handler to react to the checkbox
+ state:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 15
+
+ The image in this example is read from a JPG file. Setting an empty file with the method clears
+ the texture, and the surface uses the gradients or colors from the theme.
+
+ \section2 Use Custom Input Handler to Enable Zooming and Panning
+
+ With the \uicontrol {Textured Topography} data set, create a custom input handler to
+ highlight the selection on the graph and allow panning the graph.
+
+ The panning implementation is similar to the one shown in \l{Implementing Axis Dragging}.
+ The difference is that, in this example, you follow only the X and Z axes and don't allow
+ dragging the surface outside the graph. To limit the dragging, follow the limits of the axes
+ and do nothing if going outside the graph:
+
+ \snippet graphgallery/custominputhandler.cpp 0
+
+ For zooming, catch the \c wheelEvent and adjust the X and Y axis ranges according to the delta
+ value on QWheelEvent. Adjust the Y axis so that the aspect ratio between the Y axis and the XZ
+ plane stays the same. This prevents getting a graph in which the height is exaggerated:
+
+ \snippet graphgallery/custominputhandler.cpp 1
+
+ Next, add some limits to the zoom level, so that it won't get too near to or far from the
+ surface. For instance, if the value for the X axis gets below the allowed limit, i.e. zooming
+ gets too far, the value is set to the minimum allowed value. If the range is going to below
+ the range minimum, both ends of the axis are adjusted so that the range stays at the limit:
+
+ \snippet graphgallery/custominputhandler.cpp 2
+
+ \section2 Highlight an Area of the Surface
+
+ To implement a highlight to be displayed on the surface, create a copy of the series and add
+ some offset to the y value. In this example, the class \c HighlightSeries implements the
+ creation of the copy in its \c handlePositionChange method.
+
+ First, give \c HighlightSeries the pointer to the original series, and then start listening to
+ the QSurface3DSeries::selectedPointChanged signal:
+
+ \snippet graphgallery/highlightseries.cpp 0
+
+ When the signal triggers, check that the position is valid. Then, calculate the ranges
+ for the copied area, and check that they stay within the bounds. Finally, fill the data array
+ of the highlight series with the range from the data array of the topography series:
+
+ \snippet graphgallery/highlightseries.cpp 1
+
+ \section2 A Gradient to the Highlight Series
+
+ Since the \c HighlightSeries is QSurface3DSeries, all the decoration methods a series can
+ have are available. In this example, add a gradient to emphasize the elevation. Because the
+ suitable gradient style depends on the range of the Y axis and we change the range when
+ zooming, the gradient color positions need to be adjusted as the range changes. Do this by
+ defining proportional values for the gradient color positions:
+
+ \snippet graphgallery/highlightseries.cpp 2
+
+ The gradient modification is done in the \c handleGradientChange method, so connect it to
+ react to changes on the Y axis:
+
+ \snippet graphgallery/surfacegraphmodifier.cpp 16
+
+ When a change in the Y axis max value happens, calculate the new gradient color positions:
+
+ \snippet graphgallery/highlightseries.cpp 3
+
+ \section1 Example Contents
+*/
diff --git a/examples/datavisualization/graphgallery/graphgallery.pro b/examples/datavisualization/graphgallery/graphgallery.pro
new file mode 100644
index 00000000..c9bd96f6
--- /dev/null
+++ b/examples/datavisualization/graphgallery/graphgallery.pro
@@ -0,0 +1,49 @@
+android|ios|winrt {
+ error( "This example is not supported for android, ios, or winrt." )
+}
+
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+QT += widgets
+requires(qtConfig(fontcombobox))
+requires(qtConfig(combobox))
+
+SOURCES += main.cpp \
+ bargraph.cpp \
+ graphmodifier.cpp \
+ rainfalldata.cpp \
+ variantdataset.cpp \
+ variantbardataproxy.cpp \
+ variantbardatamapping.cpp \
+ scattergraph.cpp \
+ scatterdatamodifier.cpp \
+ axesinputhandler.cpp \
+ surfacegraph.cpp \
+ surfacegraphmodifier.cpp \
+ custominputhandler.cpp \
+ highlightseries.cpp \
+ topographicseries.cpp
+
+HEADERS += \
+ bargraph.h \
+ graphmodifier.h \
+ rainfalldata.h \
+ variantdataset.h \
+ variantbardataproxy.h \
+ variantbardatamapping.h \
+ scattergraph.h \
+ scatterdatamodifier.h \
+ axesinputhandler.h \
+ surfacegraph.h \
+ surfacegraphmodifier.h \
+ custominputhandler.h \
+ highlightseries.h \
+ topographicseries.h
+
+RESOURCES += graphgallery.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ data/*
diff --git a/examples/datavisualization/graphgallery/graphgallery.qrc b/examples/datavisualization/graphgallery/graphgallery.qrc
new file mode 100644
index 00000000..6df5703d
--- /dev/null
+++ b/examples/datavisualization/graphgallery/graphgallery.qrc
@@ -0,0 +1,13 @@
+<RCC>
+ <qresource prefix="/">
+ <file>data/raindata.txt</file>
+ <file>data/layer_1.png</file>
+ <file>data/layer_2.png</file>
+ <file>data/layer_3.png</file>
+ <file>data/refinery.obj</file>
+ <file>data/oilrig.obj</file>
+ <file>data/pipe.obj</file>
+ <file>data/maptexture.jpg</file>
+ <file>data/topography.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/datavisualization/bars/graphmodifier.cpp b/examples/datavisualization/graphgallery/graphmodifier.cpp
index a130b0ff..b0cb6f48 100644
--- a/examples/datavisualization/bars/graphmodifier.cpp
+++ b/examples/datavisualization/graphgallery/graphmodifier.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "graphmodifier.h"
+#include "rainfalldata.h"
+
#include <QtDataVisualization/qcategory3daxis.h>
#include <QtDataVisualization/qvalue3daxis.h>
#include <QtDataVisualization/qbardataproxy.h>
@@ -35,33 +11,26 @@
#include <QtDataVisualization/q3dcamera.h>
#include <QtDataVisualization/qbar3dseries.h>
#include <QtDataVisualization/q3dtheme.h>
-#include <QtCore/QTime>
-#include <QtWidgets/QComboBox>
#include <QtCore/qmath.h>
+#include <QtWidgets/qcombobox.h>
-using namespace QtDataVisualization;
+using namespace Qt::StringLiterals;
-const QString celsiusString = QString(QChar(0xB0)) + "C";
+// TODO: Many of the values do not affect custom proxy series now - should be fixed
//! [0]
-GraphModifier::GraphModifier(Q3DBars *bargraph)
- : m_graph(bargraph),
- m_xRotation(0.0f),
- m_yRotation(0.0f),
- m_fontSize(30),
- m_segments(4),
- m_subSegments(3),
- m_minval(-20.0f),
- m_maxval(20.0f),
+GraphModifier::GraphModifier(Q3DBars *bargraph, QObject *parent) :
+ QObject(parent),
+ m_graph(bargraph),
+ //! [0]
//! [1]
m_temperatureAxis(new QValue3DAxis),
m_yearAxis(new QCategory3DAxis),
m_monthAxis(new QCategory3DAxis),
m_primarySeries(new QBar3DSeries),
m_secondarySeries(new QBar3DSeries),
- //! [1]
- m_barMesh(QAbstract3DSeries::MeshBevelBar),
- m_smooth(false)
+ m_celsiusString(u"°C"_s)
+ //! [1]
{
//! [2]
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftMedium);
@@ -71,15 +40,16 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_graph->setMultiSeriesUniform(true);
//! [2]
- m_months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_years << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012" << "2013";
+ m_months = {"January", "February", "March", "April", "May", "June" , "July",
+ "August", "September", "October" , "November", "December"};
+ m_years = {"2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022"};
//! [3]
m_temperatureAxis->setTitle("Average temperature");
m_temperatureAxis->setSegmentCount(m_segments);
m_temperatureAxis->setSubSegmentCount(m_subSegments);
m_temperatureAxis->setRange(m_minval, m_maxval);
- m_temperatureAxis->setLabelFormat(QString(QStringLiteral("%.1f ") + celsiusString));
+ m_temperatureAxis->setLabelFormat(u"%.1f "_s + m_celsiusString);
m_temperatureAxis->setLabelAutoRotation(30.0f);
m_temperatureAxis->setTitleVisible(true);
@@ -95,32 +65,32 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_graph->setColumnAxis(m_monthAxis);
//! [3]
- //! [8]
- m_primarySeries->setItemLabelFormat(QStringLiteral("Oulu - @colLabel @rowLabel: @valueLabel"));
+ //! [4]
+ m_primarySeries->setItemLabelFormat(u"Oulu - @colLabel @rowLabel: @valueLabel"_s);
m_primarySeries->setMesh(QAbstract3DSeries::MeshBevelBar);
m_primarySeries->setMeshSmooth(false);
- m_secondarySeries->setItemLabelFormat(QStringLiteral("Helsinki - @colLabel @rowLabel: @valueLabel"));
+ m_secondarySeries->setItemLabelFormat(u"Helsinki - @colLabel @rowLabel: @valueLabel"_s);
m_secondarySeries->setMesh(QAbstract3DSeries::MeshBevelBar);
m_secondarySeries->setMeshSmooth(false);
m_secondarySeries->setVisible(false);
- //! [8]
-
//! [4]
+
+ //! [5]
m_graph->addSeries(m_primarySeries);
m_graph->addSeries(m_secondarySeries);
- //! [4]
+ //! [5]
//! [6]
changePresetCamera();
//! [6]
- //! [9]
+ //! [8]
resetTemperatureData();
- //! [9]
+ //! [8]
// Set up property animations for zooming to the selected bar
- //! [12]
+ //! [11]
Q3DCamera *camera = m_graph->scene()->activeCamera();
m_defaultAngleX = camera->xRotation();
m_defaultAngleY = camera->yRotation();
@@ -150,53 +120,54 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_animationCameraZoom.setKeyValueAt(zoomOutFraction, QVariant::fromValue(50.0f));
m_animationCameraTarget.setKeyValueAt(zoomOutFraction,
QVariant::fromValue(QVector3D(0.0f, 0.0f, 0.0f)));
- //! [12]
+ //! [11]
+
+ m_customData = new RainfallData();
}
-//! [0]
GraphModifier::~GraphModifier()
{
- delete m_graph;
+ delete m_customData;
}
void GraphModifier::resetTemperatureData()
{
- //! [5]
+ //! [9a]
// Set up data
static const float tempOulu[8][12] = {
- {-6.7f, -11.7f, -9.7f, 3.3f, 9.2f, 14.0f, 16.3f, 17.8f, 10.2f, 2.1f, -2.6f, -0.3f}, // 2006
- {-6.8f, -13.3f, 0.2f, 1.5f, 7.9f, 13.4f, 16.1f, 15.5f, 8.2f, 5.4f, -2.6f, -0.8f}, // 2007
- {-4.2f, -4.0f, -4.6f, 1.9f, 7.3f, 12.5f, 15.0f, 12.8f, 7.6f, 5.1f, -0.9f, -1.3f}, // 2008
- {-7.8f, -8.8f, -4.2f, 0.7f, 9.3f, 13.2f, 15.8f, 15.5f, 11.2f, 0.6f, 0.7f, -8.4f}, // 2009
- {-14.4f, -12.1f, -7.0f, 2.3f, 11.0f, 12.6f, 18.8f, 13.8f, 9.4f, 3.9f, -5.6f, -13.0f}, // 2010
- {-9.0f, -15.2f, -3.8f, 2.6f, 8.3f, 15.9f, 18.6f, 14.9f, 11.1f, 5.3f, 1.8f, -0.2f}, // 2011
- {-8.7f, -11.3f, -2.3f, 0.4f, 7.5f, 12.2f, 16.4f, 14.1f, 9.2f, 3.1f, 0.3f, -12.1f}, // 2012
- {-7.9f, -5.3f, -9.1f, 0.8f, 11.6f, 16.6f, 15.9f, 15.5f, 11.2f, 4.0f, 0.1f, -1.9f} // 2013
+ {-7.4f, -2.4f, 0.0f, 3.0f, 8.2f, 11.6f, 14.7f, 15.4f, 11.4f, 4.2f, 2.1f, -2.3f}, // 2015
+ {-13.4f, -3.9f, -1.8f, 3.1f, 10.6f, 13.7f, 17.8f, 13.6f, 10.7f, 3.5f, -3.1f, -4.2f}, // 2016
+ //! [9a]
+ {-5.7f, -6.7f, -3.0f, -0.1f, 4.7f, 12.4f, 16.1f, 14.1f, 9.4f, 3.0f, -0.3f, -3.2f}, // 2017
+ {-6.4f, -11.9f, -7.4f, 1.9f, 11.4f, 12.4f, 21.5f, 16.1f, 11.0f, 4.4f, 2.1f, -4.1f}, // 2018
+ {-11.7f, -6.1f, -2.4f, 3.9f, 7.2f, 14.5f, 15.6f, 14.4f, 8.5f, 2.0f, -3.0f, -1.5f}, // 2019
+ {-2.1f, -3.4f, -1.8f, 0.6f, 7.0f, 17.1f, 15.6f, 15.4f, 11.1f, 5.6f, 1.9f, -1.7f}, // 2020
+ {-9.6f, -11.6f, -3.2f, 2.4f, 7.8f, 17.3f, 19.4f, 14.2f, 8.0f, 5.2f, -2.2f, -8.6f}, // 2021
+ {-7.3f, -6.4f, -1.8f, 1.3f, 8.1f, 15.5f, 17.6f, 17.6f, 9.1f, 5.4f, -1.5f, -4.4f} // 2022
};
static const float tempHelsinki[8][12] = {
- {-3.7f, -7.8f, -5.4f, 3.4f, 10.7f, 15.4f, 18.6f, 18.7f, 14.3f, 8.5f, 2.9f, 4.1f}, // 2006
- {-1.2f, -7.5f, 3.1f, 5.5f, 10.3f, 15.9f, 17.4f, 17.9f, 11.2f, 7.3f, 1.1f, 0.5f}, // 2007
- {-0.6f, 1.2f, 0.2f, 6.3f, 10.2f, 13.8f, 18.1f, 15.1f, 10.1f, 9.4f, 2.5f, 0.4f}, // 2008
- {-2.9f, -3.5f, -0.9f, 4.7f, 10.9f, 14.0f, 17.4f, 16.8f, 13.2f, 4.1f, 2.6f, -2.3f}, // 2009
- {-10.2f, -8.0f, -1.9f, 6.6f, 11.3f, 14.5f, 21.0f, 18.8f, 12.6f, 6.1f, -0.5f, -7.3f}, // 2010
- {-4.4f, -9.1f, -2.0f, 5.5f, 9.9f, 15.6f, 20.8f, 17.8f, 13.4f, 8.9f, 3.6f, 1.5f}, // 2011
- {-3.5f, -3.2f, -0.7f, 4.0f, 11.1f, 13.4f, 17.3f, 15.8f, 13.1f, 6.4f, 4.1f, -5.1f}, // 2012
- {-4.8f, -1.8f, -5.0f, 2.9f, 12.8f, 17.2f, 18.0f, 17.1f, 12.5f, 7.5f, 4.5f, 2.3f} // 2013
+ {-2.0f, -0.1f, 1.8f, 5.1f, 9.7f, 13.7f, 16.3f, 17.3f, 12.7f, 5.4f, 4.6f, 2.1f}, // 2015
+ {-10.3f, -0.6f, 0.0f, 4.9f, 14.3f, 15.7f, 17.7f, 16.0f, 12.7f, 4.6f, -1.0f, -0.9f}, // 2016
+ {-2.9f, -3.3f, 0.7f, 2.3f, 9.9f, 13.8f, 16.1f, 15.9f, 11.4f, 5.0f, 2.7f, 0.7f}, // 2017
+ {-2.2f, -8.4f, -4.7f, 5.0f, 15.3f, 15.8f, 21.2f, 18.2f, 13.3f, 6.7f, 2.8f, -2.0f}, // 2018
+ {-6.2f, -0.5f, -0.3f, 6.8f, 10.6f, 17.9f, 17.5f, 16.8f, 11.3f, 5.2f, 1.8f, 1.4f}, // 2019
+ {1.9f, 0.5f, 1.7f, 4.5f, 9.5f, 18.4f, 16.5f, 16.8f, 13.0f, 8.2f, 4.4f, 0.9f}, // 2020
+ {-4.7f, -8.1f, -0.9f, 4.5f, 10.4f, 19.2f, 20.9f, 15.4f, 9.5f, 8.0f, 1.5f, -6.7f}, // 2021
+ {-3.3f, -2.2f, -0.2f, 3.3f, 9.6f, 16.9f, 18.1f, 18.9f, 9.2f, 7.6f, 2.3f, -3.4f} // 2022
};
// Create data arrays
- QBarDataArray *dataSet = new QBarDataArray;
- QBarDataArray *dataSet2 = new QBarDataArray;
- QBarDataRow *dataRow;
- QBarDataRow *dataRow2;
+ //! [9b]
+ auto *dataSet = new QBarDataArray;
+ auto *dataSet2 = new QBarDataArray;
dataSet->reserve(m_years.size());
- for (int year = 0; year < m_years.size(); year++) {
+ for (qsizetype 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++) {
+ auto *dataRow = new QBarDataRow(m_months.size());
+ auto *dataRow2 = new QBarDataRow(m_months.size());
+ for (qsizetype month = 0; month < m_months.size(); ++month) {
// Add data to the row
(*dataRow)[month].setValue(tempOulu[year][month]);
(*dataRow2)[month].setValue(tempHelsinki[year][month]);
@@ -209,7 +180,7 @@ void GraphModifier::resetTemperatureData()
// Add data to the data proxy (the data proxy assumes ownership of it)
m_primarySeries->dataProxy()->resetArray(dataSet, m_years, m_months);
m_secondarySeries->dataProxy()->resetArray(dataSet2, m_years, m_months);
- //! [5]
+ //! [9b]
}
void GraphModifier::changeRange(int range)
@@ -222,11 +193,12 @@ void GraphModifier::changeRange(int range)
void GraphModifier::changeStyle(int style)
{
- QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
+ auto *comboBox = qobject_cast<QComboBox *>(sender());
if (comboBox) {
- m_barMesh = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt());
+ m_barMesh = comboBox->itemData(style).value<QAbstract3DSeries::Mesh>();
m_primarySeries->setMesh(m_barMesh);
m_secondarySeries->setMesh(m_barMesh);
+ m_customData->customSeries()->setMesh(m_barMesh);
}
}
@@ -240,14 +212,14 @@ void GraphModifier::changePresetCamera()
// Restore camera target in case animation has changed it
m_graph->scene()->activeCamera()->setTarget(QVector3D(0.0f, 0.0f, 0.0f));
- //! [10]
+ //! [7]
static int preset = Q3DCamera::CameraPresetFront;
m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset);
if (++preset > Q3DCamera::CameraPresetDirectlyBelow)
preset = Q3DCamera::CameraPresetFrontLow;
- //! [10]
+ //! [7]
}
void GraphModifier::changeTheme(int theme)
@@ -267,7 +239,7 @@ void GraphModifier::changeLabelBackground()
void GraphModifier::changeSelectionMode(int selectionMode)
{
- QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
+ auto *comboBox = qobject_cast<QComboBox *>(sender());
if (comboBox) {
int flags = comboBox->itemData(selectionMode).toInt();
m_graph->setSelectionMode(QAbstract3DGraph::SelectionFlags(flags));
@@ -316,7 +288,6 @@ void GraphModifier::setAxisTitleFixed(bool enabled)
m_yearAxis->setTitleFixed(enabled);
}
-//! [11]
void GraphModifier::zoomToSelectedBar()
{
m_animationCameraX.stop();
@@ -341,7 +312,7 @@ void GraphModifier::zoomToSelectedBar()
if (selectedBar != QBar3DSeries::invalidSelectionPosition()) {
// Normalize selected bar position within axis range to determine target coordinates
- //! [13]
+ //! [12]
QVector3D endTarget;
float xMin = m_graph->columnAxis()->min();
float xRange = m_graph->columnAxis()->max() - xMin;
@@ -349,10 +320,10 @@ void GraphModifier::zoomToSelectedBar()
float zRange = m_graph->rowAxis()->max() - zMin;
endTarget.setX((selectedBar.y() - xMin) / xRange * 2.0f - 1.0f);
endTarget.setZ((selectedBar.x() - zMin) / zRange * 2.0f - 1.0f);
- //! [13]
+ //! [12]
// Rotate the camera so that it always points approximately to the graph center
- //! [15]
+ //! [14]
qreal endAngleX = 90.0 - qRadiansToDegrees(qAtan(qreal(endTarget.z() / endTarget.x())));
if (endTarget.x() > 0.0f)
endAngleX -= 180.0f;
@@ -361,14 +332,14 @@ void GraphModifier::zoomToSelectedBar()
float endAngleY = barValue >= 0.0f ? 30.0f : -30.0f;
if (m_graph->valueAxis()->reversed())
endAngleY *= -1.0f;
- //! [15]
+ //! [14]
m_animationCameraX.setEndValue(QVariant::fromValue(float(endAngleX)));
m_animationCameraY.setEndValue(QVariant::fromValue(endAngleY));
m_animationCameraZoom.setEndValue(QVariant::fromValue(250));
- //! [14]
+ //! [13]
m_animationCameraTarget.setEndValue(QVariant::fromValue(endTarget));
- //! [14]
+ //! [13]
} else {
// No selected bar, so return to the default view
m_animationCameraX.setEndValue(QVariant::fromValue(m_defaultAngleX));
@@ -382,7 +353,18 @@ void GraphModifier::zoomToSelectedBar()
m_animationCameraZoom.start();
m_animationCameraTarget.start();
}
-//! [11]
+
+void GraphModifier::setDataModeToWeather(bool enabled)
+{
+ if (enabled)
+ changeDataMode(false);
+}
+
+void GraphModifier::setDataModeToCustom(bool enabled)
+{
+ if (enabled)
+ changeDataMode(true);
+}
void GraphModifier::changeShadowQuality(int quality)
{
@@ -391,19 +373,19 @@ void GraphModifier::changeShadowQuality(int quality)
emit shadowQualityChanged(quality);
}
-//! [7]
+//! [10]
void GraphModifier::rotateX(int rotation)
{
m_xRotation = rotation;
m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
}
+//! [10]
void GraphModifier::rotateY(int rotation)
{
m_yRotation = rotation;
m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
}
-//! [7]
void GraphModifier::setBackgroundEnabled(int enabled)
{
@@ -420,6 +402,7 @@ void GraphModifier::setSmoothBars(int smooth)
m_smooth = bool(smooth);
m_primarySeries->setMeshSmooth(m_smooth);
m_secondarySeries->setMeshSmooth(m_smooth);
+ m_customData->customSeries()->setMeshSmooth(m_smooth);
}
void GraphModifier::setSeriesVisibility(int enabled)
@@ -436,3 +419,23 @@ void GraphModifier::setReflection(bool enabled)
{
m_graph->setReflection(enabled);
}
+
+void GraphModifier::changeDataMode(bool customData)
+{
+ // Change between weather data and data from custom proxy
+ if (customData) {
+ m_graph->removeSeries(m_primarySeries);
+ m_graph->removeSeries(m_secondarySeries);
+ m_graph->addSeries(m_customData->customSeries());
+ m_graph->setValueAxis(m_customData->valueAxis());
+ m_graph->setRowAxis(m_customData->rowAxis());
+ m_graph->setColumnAxis(m_customData->colAxis());
+ } else {
+ m_graph->removeSeries(m_customData->customSeries());
+ m_graph->addSeries(m_primarySeries);
+ m_graph->addSeries(m_secondarySeries);
+ m_graph->setValueAxis(m_temperatureAxis);
+ m_graph->setRowAxis(m_yearAxis);
+ m_graph->setColumnAxis(m_monthAxis);
+ }
+}
diff --git a/examples/datavisualization/graphgallery/graphmodifier.h b/examples/datavisualization/graphgallery/graphmodifier.h
new file mode 100644
index 00000000..0d112c0d
--- /dev/null
+++ b/examples/datavisualization/graphgallery/graphmodifier.h
@@ -0,0 +1,87 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef GRAPHMODIFIER_H
+#define GRAPHMODIFIER_H
+
+#include <QtDataVisualization/q3dbars.h>
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtCore/qpropertyanimation.h>
+
+class RainfallData;
+
+class GraphModifier : public QObject
+{
+ Q_OBJECT
+public:
+ explicit GraphModifier(Q3DBars *bargraph, QObject *parent);
+ ~GraphModifier();
+
+ void resetTemperatureData();
+ void changePresetCamera();
+ void changeLabelBackground();
+ void changeFont(const QFont &font);
+ void changeFontSize(int fontsize);
+ void rotateX(int rotation);
+ void rotateY(int rotation);
+ void setBackgroundEnabled(int enabled);
+ void setGridEnabled(int enabled);
+ void setSmoothBars(int smooth);
+ void setSeriesVisibility(int enabled);
+ void setReverseValueAxis(int enabled);
+ void setReflection(bool enabled);
+ void changeDataMode(bool customData);
+
+public Q_SLOTS:
+ void changeRange(int range);
+ void changeStyle(int style);
+ void changeSelectionMode(int selectionMode);
+ void changeTheme(int theme);
+ void changeShadowQuality(int quality);
+ void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
+ void changeLabelRotation(int rotation);
+ void setAxisTitleVisibility(bool enabled);
+ void setAxisTitleFixed(bool enabled);
+ void zoomToSelectedBar();
+ void setDataModeToWeather(bool enabled);
+ void setDataModeToCustom(bool enabled);
+
+Q_SIGNALS:
+ void shadowQualityChanged(int quality);
+ void backgroundEnabledChanged(bool enabled);
+ void gridEnabledChanged(bool enabled);
+ void fontChanged(const QFont &font);
+ void fontSizeChanged(int size);
+
+private:
+ Q3DBars *m_graph = nullptr;
+ float m_xRotation = 0.f;
+ float m_yRotation = 0.f;
+ int m_fontSize = 30;
+ int m_segments = 4;
+ int m_subSegments = 3;
+ float m_minval = -20.f;
+ float m_maxval = 20.f;
+ QStringList m_months = {};
+ QStringList m_years = {};
+ QValue3DAxis *m_temperatureAxis = nullptr;
+ QCategory3DAxis *m_yearAxis = nullptr;
+ QCategory3DAxis *m_monthAxis = nullptr;
+ QBar3DSeries *m_primarySeries = nullptr;
+ QBar3DSeries *m_secondarySeries = nullptr;
+ QAbstract3DSeries::Mesh m_barMesh = QAbstract3DSeries::MeshBevelBar;
+ bool m_smooth = false;
+ QPropertyAnimation m_animationCameraX = {};
+ QPropertyAnimation m_animationCameraY = {};
+ QPropertyAnimation m_animationCameraZoom = {};
+ QPropertyAnimation m_animationCameraTarget = {};
+ float m_defaultAngleX = 0.f;
+ float m_defaultAngleY = 0.f;
+ float m_defaultZoom = 0.f;
+ QVector3D m_defaultTarget = {};
+ const QString m_celsiusString;
+ RainfallData *m_customData = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/texturesurface/highlightseries.cpp b/examples/datavisualization/graphgallery/highlightseries.cpp
index 7807c7ea..3f10b421 100644
--- a/examples/datavisualization/texturesurface/highlightseries.cpp
+++ b/examples/datavisualization/graphgallery/highlightseries.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "highlightseries.h"
-using namespace QtDataVisualization;
-
//! [2]
-const float darkRedPos = 1.0f;
+const float darkRedPos = 1.f;
const float redPos = 0.8f;
const float yellowPos = 0.6f;
const float greenPos = 0.4f;
@@ -40,8 +12,6 @@ const float darkGreenPos = 0.2f;
//! [2]
HighlightSeries::HighlightSeries()
- : m_width(100),
- m_height(100)
{
setDrawMode(QSurface3DSeries::DrawSurface);
setFlatShadingEnabled(true);
@@ -71,7 +41,6 @@ void HighlightSeries::handlePositionChange(const QPoint &position)
if (position == invalidSelectionPosition()) {
setVisible(false);
-
return;
}
@@ -94,16 +63,18 @@ void HighlightSeries::handlePositionChange(const QPoint &position)
QSurfaceDataProxy *srcProxy = m_topographicSeries->dataProxy();
const QSurfaceDataArray &srcArray = *srcProxy->array();
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ auto *dataArray = new QSurfaceDataArray;
dataArray->reserve(endZ - startZ);
- for (int i = startZ; i < endZ; i++) {
- QSurfaceDataRow *newRow = new QSurfaceDataRow(endX - startX);
+ for (int i = startZ; i < endZ; ++i) {
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(endX - startX);
QSurfaceDataRow *srcRow = srcArray.at(i);
- for (int j = startX, p = 0; j < endX; j++, p++) {
+ for (int j = startX; j < endX; ++j) {
QVector3D pos = srcRow->at(j).position();
- (*newRow)[p].setPosition(QVector3D(pos.x(), pos.y() + 0.1f, pos.z()));
+ pos.setY(pos.y() + 0.1f);
+ newRow->append(QSurfaceDataItem(pos));
}
- *dataArray << newRow;
+ dataArray->append(newRow);
}
dataProxy()->resetArray(dataArray);
@@ -117,7 +88,7 @@ void HighlightSeries::handleGradientChange(float value)
float ratio = m_minHeight / value;
QLinearGradient gr;
- gr.setColorAt(0.0f, Qt::black);
+ gr.setColorAt(0.f, Qt::black);
gr.setColorAt(darkGreenPos * ratio, Qt::darkGreen);
gr.setColorAt(greenPos * ratio, Qt::green);
gr.setColorAt(yellowPos * ratio, Qt::yellow);
diff --git a/examples/datavisualization/graphgallery/highlightseries.h b/examples/datavisualization/graphgallery/highlightseries.h
new file mode 100644
index 00000000..c74a6b84
--- /dev/null
+++ b/examples/datavisualization/graphgallery/highlightseries.h
@@ -0,0 +1,35 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HIGHLIGHTSERIES_H
+#define HIGHLIGHTSERIES_H
+
+#include <QtDataVisualization/qsurface3dseries.h>
+
+#include "topographicseries.h"
+
+class HighlightSeries : public QSurface3DSeries
+{
+ Q_OBJECT
+public:
+ explicit HighlightSeries();
+ ~HighlightSeries();
+
+ void setTopographicSeries(TopographicSeries *series);
+ inline void setMinHeight(float height) { m_minHeight = height; }
+
+public Q_SLOTS:
+ void handlePositionChange(const QPoint &position);
+ void handleGradientChange(float value);
+
+private:
+ int m_width = 100;
+ int m_height = 100;
+ int m_srcWidth = 0;
+ int m_srcHeight = 0;
+ QPoint m_position = {};
+ TopographicSeries *m_topographicSeries = nullptr;
+ float m_minHeight = 0.f;
+};
+
+#endif // HIGHLIGHTSERIES_H
diff --git a/examples/datavisualization/graphgallery/main.cpp b/examples/datavisualization/graphgallery/main.cpp
new file mode 100644
index 00000000..4bffa1c1
--- /dev/null
+++ b/examples/datavisualization/graphgallery/main.cpp
@@ -0,0 +1,52 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "bargraph.h"
+#include "scattergraph.h"
+#include "surfacegraph.h"
+
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qmessagebox.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qtabwidget.h>
+#include <QtGui/qscreen.h>
+
+using namespace Qt::StringLiterals;
+
+int main(int argc, char **argv)
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+
+ QApplication app(argc, argv);
+
+ // Create a tab widget for creating own tabs for Q3DBars, Q3DScatter, and Q3DSurface
+ QTabWidget tabWidget;
+ tabWidget.setWindowTitle(u"Graph Gallery"_s);
+
+ const QSize screenSize = tabWidget.screen()->size();
+ const QSize minimumGraphSize{screenSize.width() / 2, qRound(screenSize.height() / 1.75)};
+
+ // Create bar graph
+ BarGraph bars;
+ // Create scatter graph
+ ScatterGraph scatter;
+ // Create surface graph
+ SurfaceGraph surface;
+
+ if (!bars.initialize(minimumGraphSize, screenSize)
+ || !scatter.initialize(minimumGraphSize, screenSize)
+ || !surface.initialize(minimumGraphSize, screenSize)) {
+ QMessageBox::warning(nullptr, u"Graph Gallery"_s, u"Couldn't initialize the OpenGL context."_s);
+ return -1;
+ }
+
+ // Add bars widget
+ tabWidget.addTab(bars.barsWidget(), u"Bar Graph"_s);
+ // Add scatter widget
+ tabWidget.addTab(scatter.scatterWidget(), u"Scatter Graph"_s);
+ // Add surface widget
+ tabWidget.addTab(surface.surfaceWidget(), u"Surface Graph"_s);
+
+ tabWidget.show();
+ return app.exec();
+}
diff --git a/examples/datavisualization/graphgallery/rainfalldata.cpp b/examples/datavisualization/graphgallery/rainfalldata.cpp
new file mode 100644
index 00000000..66a2553a
--- /dev/null
+++ b/examples/datavisualization/graphgallery/rainfalldata.cpp
@@ -0,0 +1,117 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "rainfalldata.h"
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+#include <QtDataVisualization/qbar3dseries.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtCore/qtextstream.h>
+#include <QtCore/qfile.h>
+
+using namespace Qt::StringLiterals;
+
+RainfallData::RainfallData()
+{
+ // In data file the months are in numeric format, so create custom list
+ for (int i = 1; i <= 12; ++i)
+ m_numericMonths << QString::number(i);
+
+ m_columnCount = m_numericMonths.size();
+
+ updateYearsList(2010, 2022);
+
+ // Create proxy and series
+ //! [0]
+ m_proxy = new VariantBarDataProxy;
+ m_series = new QBar3DSeries(m_proxy);
+ //! [0]
+
+ m_series->setItemLabelFormat(u"%.1f mm"_s);
+
+ // Create the axes
+ m_rowAxis = new QCategory3DAxis(this);
+ m_colAxis = new QCategory3DAxis(this);
+ m_valueAxis = new QValue3DAxis(this);
+ m_rowAxis->setAutoAdjustRange(true);
+ m_colAxis->setAutoAdjustRange(true);
+ m_valueAxis->setAutoAdjustRange(true);
+
+ // Set axis labels and titles
+ QStringList months{"January", "February", "March", "April",
+ "May", "June", "July", "August", "September", "October",
+ "November","December"};
+ m_rowAxis->setTitle("Year");
+ m_colAxis->setTitle("Month");
+ m_valueAxis->setTitle("rainfall (mm)");
+ m_valueAxis->setSegmentCount(5);
+ m_rowAxis->setLabels(m_years);
+ m_colAxis->setLabels(months);
+ m_rowAxis->setTitleVisible(true);
+ m_colAxis->setTitleVisible(true);
+ m_valueAxis->setTitleVisible(true);
+
+ addDataSet();
+}
+
+RainfallData::~RainfallData()
+{
+ delete m_mapping;
+ delete m_dataSet;
+ delete m_proxy;
+}
+
+void RainfallData::updateYearsList(int start, int end)
+{
+ m_years.clear();
+
+ for (int i = start; i <= end; ++i)
+ m_years << QString::number(i);
+
+ m_rowCount = m_years.size();
+}
+
+//! [1]
+void RainfallData::addDataSet()
+{
+ // Create a new variant data set and data item list
+ m_dataSet = new VariantDataSet;
+ auto *itemList = new VariantDataItemList;
+
+ // Read data from a data file into the data item list
+ QFile dataFile(":/data/raindata.txt");
+ if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QTextStream stream(&dataFile);
+ while (!stream.atEnd()) {
+ QString line = stream.readLine();
+ if (line.startsWith('#')) // Ignore comments
+ continue;
+ const auto strList = QStringView{line}.split(',', Qt::SkipEmptyParts);
+ // Each line has three data items: Year, month, and rainfall value
+ if (strList.size() < 3) {
+ qWarning() << "Invalid row read from data:" << line;
+ continue;
+ }
+ // Store year and month as strings, and rainfall value as double
+ // into a variant data item and add the item to the item list.
+ auto *newItem = new VariantDataItem;
+ for (int i = 0; i < 2; ++i)
+ newItem->append(strList.at(i).trimmed().toString());
+ newItem->append(strList.at(2).trimmed().toDouble());
+ itemList->append(newItem);
+ }
+ } else {
+ qWarning() << "Unable to open data file:" << dataFile.fileName();
+ }
+ //! [1]
+
+ //! [2]
+ // Add items to the data set and set it to the proxy
+ m_dataSet->addItems(itemList);
+ m_proxy->setDataSet(m_dataSet);
+
+ // Create new mapping for the data and set it to the proxy
+ m_mapping = new VariantBarDataMapping(0, 1, 2, m_years, m_numericMonths);
+ m_proxy->setMapping(m_mapping);
+ //! [2]
+}
diff --git a/examples/datavisualization/graphgallery/rainfalldata.h b/examples/datavisualization/graphgallery/rainfalldata.h
new file mode 100644
index 00000000..c71f072b
--- /dev/null
+++ b/examples/datavisualization/graphgallery/rainfalldata.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef RAINFALLDATA_H
+#define RAINFALLDATA_H
+
+#include "variantbardataproxy.h"
+#include <QtDataVisualization/qcategory3daxis.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+
+class RainfallData : public QObject
+{
+ Q_OBJECT
+public:
+ explicit RainfallData();
+ ~RainfallData();
+
+ void addDataSet();
+
+ //! [0]
+ QBar3DSeries *customSeries() { return m_series; }
+ //! [0]
+
+ QValue3DAxis *valueAxis() { return m_valueAxis; }
+ QCategory3DAxis *rowAxis() { return m_rowAxis; }
+ QCategory3DAxis *colAxis() { return m_colAxis; }
+
+private:
+ void updateYearsList(int start, int end);
+ int m_columnCount;
+ int m_rowCount;
+ QStringList m_years;
+ QStringList m_numericMonths;
+ VariantBarDataProxy *m_proxy;
+ VariantBarDataMapping *m_mapping;
+ VariantDataSet *m_dataSet;
+ QBar3DSeries *m_series;
+ QValue3DAxis *m_valueAxis;
+ QCategory3DAxis *m_rowAxis;
+ QCategory3DAxis *m_colAxis;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/scatterdatamodifier.cpp b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp
new file mode 100644
index 00000000..1f3ec7ed
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scatterdatamodifier.cpp
@@ -0,0 +1,191 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "scatterdatamodifier.h"
+#include <QtDataVisualization/qscatterdataproxy.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+#include <QtDataVisualization/qscatter3dseries.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtCore/qmath.h>
+#include <QtCore/qrandom.h>
+#include <QtWidgets/qcombobox.h>
+
+using namespace Qt::StringLiterals;
+
+//#define RANDOM_SCATTER // Uncomment this to switch to random scatter
+
+const int numberOfItems = 10000;
+const float curveDivider = 7.5f;
+const int lowerNumberOfItems = 900;
+const float lowerCurveDivider = 0.75f;
+
+ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter, QObject *parent) :
+ QObject(parent),
+ m_graph(scatter),
+ m_itemCount(lowerNumberOfItems),
+ m_curveDivider(lowerCurveDivider),
+ //! [7]
+ m_inputHandler(new AxesInputHandler(scatter))
+ //! [7]
+{
+ //! [0]
+ m_graph->activeTheme()->setType(Q3DTheme::ThemeStoneMoss);
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftHigh);
+ m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
+ m_graph->scene()->activeCamera()->setZoomLevel(80.f);
+ //! [0]
+
+ //! [1]
+ auto *proxy = new QScatterDataProxy;
+ auto *series = new QScatter3DSeries(proxy);
+ series->setItemLabelFormat(u"@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"_s);
+ series->setMeshSmooth(m_smooth);
+ m_graph->addSeries(series);
+ //! [1]
+
+ //! [8]
+ // Give ownership of the handler to the graph and make it the active handler
+ m_graph->setActiveInputHandler(m_inputHandler);
+ //! [8]
+
+ //! [9]
+ // Give our axes to the input handler
+ m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisZ(), m_graph->axisY());
+ //! [9]
+
+ //! [2]
+ addData();
+ //! [2]
+}
+
+void ScatterDataModifier::addData()
+{
+ // Configure the axes according to the data
+ //! [3]
+ m_graph->axisX()->setTitle("X");
+ m_graph->axisY()->setTitle("Y");
+ m_graph->axisZ()->setTitle("Z");
+ //! [3]
+
+ //! [4]
+ auto *dataArray = new QScatterDataArray;
+ dataArray->reserve(m_itemCount);
+ //! [4]
+
+#ifdef RANDOM_SCATTER
+ for (int i = 0; i < m_itemCount; ++i)
+ dataArray->append(QScatterDataItem(randVector()));
+#else
+ //! [5]
+ const float limit = qSqrt(m_itemCount) / 2.0f;
+ for (int i = -limit; i < limit; ++i) {
+ for (int j = -limit; j < limit; ++j) {
+ const float x = float(i) + 0.5f;
+ const float y = qCos(qDegreesToRadians(float(i * j) / m_curveDivider));
+ const float z = float(j) + 0.5f;
+ dataArray->append(QScatterDataItem({x, y, z}));
+ }
+ }
+ //! [5]
+#endif
+
+ //! [6]
+ m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
+ //! [6]
+}
+
+void ScatterDataModifier::changeStyle(int style)
+{
+ QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
+ if (comboBox) {
+ m_style = comboBox->itemData(style).value<QAbstract3DSeries::Mesh>();
+ if (!m_graph->seriesList().isEmpty())
+ m_graph->seriesList().at(0)->setMesh(m_style);
+ }
+}
+
+void ScatterDataModifier::setSmoothDots(int smooth)
+{
+ m_smooth = bool(smooth);
+ QScatter3DSeries *series = m_graph->seriesList().at(0);
+ series->setMeshSmooth(m_smooth);
+}
+
+void ScatterDataModifier::changeTheme(int theme)
+{
+ Q3DTheme *currentTheme = m_graph->activeTheme();
+ currentTheme->setType(Q3DTheme::Theme(theme));
+ emit backgroundEnabledChanged(currentTheme->isBackgroundEnabled());
+ emit gridEnabledChanged(currentTheme->isGridEnabled());
+}
+
+void ScatterDataModifier::changePresetCamera()
+{
+ static int preset = Q3DCamera::CameraPresetFrontLow;
+
+ m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset);
+
+ if (++preset > Q3DCamera::CameraPresetDirectlyBelow)
+ preset = Q3DCamera::CameraPresetFrontLow;
+}
+
+void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq)
+{
+ int quality = int(sq);
+ emit shadowQualityChanged(quality); // connected to a checkbox in scattergraph.cpp
+}
+
+void ScatterDataModifier::changeShadowQuality(int quality)
+{
+ QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality);
+ m_graph->setShadowQuality(sq);
+}
+
+void ScatterDataModifier::setBackgroundEnabled(int enabled)
+{
+ m_graph->activeTheme()->setBackgroundEnabled(enabled == Qt::Checked);
+}
+
+void ScatterDataModifier::setGridEnabled(int enabled)
+{
+ m_graph->activeTheme()->setGridEnabled(enabled == Qt::Checked);
+}
+
+void ScatterDataModifier::toggleItemCount()
+{
+ if (m_itemCount == numberOfItems) {
+ m_itemCount = lowerNumberOfItems;
+ m_curveDivider = lowerCurveDivider;
+ } else {
+ m_itemCount = numberOfItems;
+ m_curveDivider = curveDivider;
+ }
+ m_graph->seriesList().at(0)->dataProxy()->resetArray(0);
+ addData();
+}
+
+void ScatterDataModifier::toggleRanges()
+{
+ if (!m_autoAdjust) {
+ m_graph->axisX()->setAutoAdjustRange(true);
+ m_graph->axisZ()->setAutoAdjustRange(true);
+ m_inputHandler->setDragSpeedModifier(1.5f);
+ m_autoAdjust = true;
+ } else {
+ m_graph->axisX()->setRange(-10.0f, 10.0f);
+ m_graph->axisZ()->setRange(-10.0f, 10.0f);
+ m_inputHandler->setDragSpeedModifier(15.0f);
+ m_autoAdjust = false;
+ }
+}
+
+QVector3D ScatterDataModifier::randVector()
+{
+ auto *generator = QRandomGenerator::global();
+ const auto x = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f;
+ const auto y = float(generator->bounded(100)) / 100.0f - float(generator->bounded(100)) / 100.0f;
+ const auto z = float(generator->bounded(100)) / 2.0f - float(generator->bounded(100)) / 2.0f;
+ return {x, y, z};
+}
diff --git a/examples/datavisualization/graphgallery/scatterdatamodifier.h b/examples/datavisualization/graphgallery/scatterdatamodifier.h
new file mode 100644
index 00000000..53f557e6
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scatterdatamodifier.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SCATTERDATAMODIFIER_H
+#define SCATTERDATAMODIFIER_H
+
+#include "axesinputhandler.h"
+
+#include <QtDataVisualization/q3dscatter.h>
+#include <QtDataVisualization/qabstract3dseries.h>
+
+class ScatterDataModifier : public QObject
+{
+ Q_OBJECT
+public:
+ explicit ScatterDataModifier(Q3DScatter *scatter, QObject *parent);
+
+ void addData();
+
+public Q_SLOTS:
+ void setBackgroundEnabled(int enabled);
+ void setGridEnabled(int enabled);
+ void setSmoothDots(int smooth);
+ void changePresetCamera();
+ void toggleItemCount();
+ void toggleRanges();
+ void changeStyle(int style);
+ void changeTheme(int theme);
+ void changeShadowQuality(int quality);
+ void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
+
+Q_SIGNALS:
+ void backgroundEnabledChanged(bool enabled);
+ void gridEnabledChanged(bool enabled);
+ void shadowQualityChanged(int quality);
+
+private:
+ QVector3D randVector();
+ Q3DScatter *m_graph = nullptr;
+ QAbstract3DSeries::Mesh m_style = QAbstract3DSeries::MeshSphere;
+ bool m_smooth = true;
+ int m_itemCount;
+ float m_curveDivider;
+
+ AxesInputHandler *m_inputHandler;
+ bool m_autoAdjust = true;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/scattergraph.cpp b/examples/datavisualization/graphgallery/scattergraph.cpp
new file mode 100644
index 00000000..a426c10a
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scattergraph.cpp
@@ -0,0 +1,142 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "scattergraph.h"
+#include "scatterdatamodifier.h"
+
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qcombobox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qcommandlinkbutton.h>
+
+using namespace Qt::StringLiterals;
+
+ScatterGraph::ScatterGraph()
+{
+ m_scatterGraph = new Q3DScatter();
+}
+
+ScatterGraph::~ScatterGraph() = default;
+
+bool ScatterGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_scatterGraph->hasContext())
+ return false;
+
+ m_scatterWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_scatterWidget);
+ m_container = QWidget::createWindowContainer(m_scatterGraph, m_scatterWidget);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
+ hLayout->addLayout(vLayout);
+
+ auto *cameraButton = new QCommandLinkButton(m_scatterWidget);
+ cameraButton->setText(u"Change camera preset"_s);
+ cameraButton->setDescription(u"Switch between a number of preset camera positions"_s);
+ cameraButton->setIconSize(QSize(0, 0));
+
+ auto *itemCountButton = new QCommandLinkButton(m_scatterWidget);
+ itemCountButton->setText(u"Toggle item count"_s);
+ itemCountButton->setDescription(u"Switch between 900 and 10000 data points"_s);
+ itemCountButton->setIconSize(QSize(0, 0));
+
+ auto *rangeButton = new QCommandLinkButton(m_scatterWidget);
+ rangeButton->setText(u"Toggle axis ranges"_s);
+ rangeButton->setDescription(u"Switch between automatic axis ranges and preset ranges"_s);
+ rangeButton->setIconSize(QSize(0, 0));
+
+ auto *backgroundCheckBox = new QCheckBox(m_scatterWidget);
+ backgroundCheckBox->setText(u"Show background"_s);
+ backgroundCheckBox->setChecked(true);
+
+ auto *gridCheckBox = new QCheckBox(m_scatterWidget);
+ gridCheckBox->setText(u"Show grid"_s);
+ gridCheckBox->setChecked(true);
+
+ auto *smoothCheckBox = new QCheckBox(m_scatterWidget);
+ smoothCheckBox->setText(u"Smooth dots"_s);
+ smoothCheckBox->setChecked(true);
+
+ auto *itemStyleList = new QComboBox(m_scatterWidget);
+ itemStyleList->addItem(u"Sphere"_s, QAbstract3DSeries::MeshSphere);
+ itemStyleList->addItem(u"Cube"_s, QAbstract3DSeries::MeshCube);
+ itemStyleList->addItem(u"Minimal"_s, QAbstract3DSeries::MeshMinimal);
+ itemStyleList->addItem(u"Point"_s, QAbstract3DSeries::MeshPoint);
+ itemStyleList->setCurrentIndex(0);
+
+ auto *themeList = new QComboBox(m_scatterWidget);
+ themeList->addItem(u"Qt"_s);
+ themeList->addItem(u"Primary Colors"_s);
+ themeList->addItem(u"Digia"_s);
+ themeList->addItem(u"Stone Moss"_s);
+ themeList->addItem(u"Army Blue"_s);
+ themeList->addItem(u"Retro"_s);
+ themeList->addItem(u"Ebony"_s);
+ themeList->addItem(u"Isabelle"_s);
+ themeList->setCurrentIndex(3);
+
+ auto *shadowQuality = new QComboBox(m_scatterWidget);
+ shadowQuality->addItem(u"None"_s);
+ shadowQuality->addItem(u"Low"_s);
+ shadowQuality->addItem(u"Medium"_s);
+ shadowQuality->addItem(u"High"_s);
+ shadowQuality->addItem(u"Low Soft"_s);
+ shadowQuality->addItem(u"Medium Soft"_s);
+ shadowQuality->addItem(u"High Soft"_s);
+ shadowQuality->setCurrentIndex(6);
+
+ vLayout->addWidget(cameraButton);
+ vLayout->addWidget(itemCountButton);
+ vLayout->addWidget(rangeButton);
+ vLayout->addWidget(backgroundCheckBox);
+ vLayout->addWidget(gridCheckBox);
+ vLayout->addWidget(smoothCheckBox);
+ vLayout->addWidget(new QLabel(u"Change dot style"_s));
+ vLayout->addWidget(itemStyleList);
+ vLayout->addWidget(new QLabel(u"Change theme"_s));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(new QLabel(u"Adjust shadow quality"_s));
+ vLayout->addWidget(shadowQuality, 1, Qt::AlignTop);
+
+ auto *modifier = new ScatterDataModifier(m_scatterGraph, this);
+
+ QObject::connect(cameraButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::changePresetCamera);
+ QObject::connect(itemCountButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::toggleItemCount);
+ QObject::connect(rangeButton, &QCommandLinkButton::clicked, modifier,
+ &ScatterDataModifier::toggleRanges);
+
+ QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setBackgroundEnabled);
+ QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setGridEnabled);
+ QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setSmoothDots);
+
+ QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged,
+ backgroundCheckBox, &QCheckBox::setChecked);
+ QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged,
+ gridCheckBox, &QCheckBox::setChecked);
+ QObject::connect(itemStyleList, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeStyle);
+
+ QObject::connect(themeList, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeTheme);
+
+ QObject::connect(shadowQuality, &QComboBox::currentIndexChanged, modifier,
+ &ScatterDataModifier::changeShadowQuality);
+
+ QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
+ &QComboBox::setCurrentIndex);
+ QObject::connect(m_scatterGraph, &Q3DScatter::shadowQualityChanged, modifier,
+ &ScatterDataModifier::shadowQualityUpdatedByVisual);
+
+ return true;
+}
diff --git a/examples/datavisualization/graphgallery/scattergraph.h b/examples/datavisualization/graphgallery/scattergraph.h
new file mode 100644
index 00000000..eb8c7c52
--- /dev/null
+++ b/examples/datavisualization/graphgallery/scattergraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SCATTERGRAPH_H
+#define SCATTERGRAPH_H
+
+#include <QtCore/qobject.h>
+#include <QtDataVisualization/q3dscatter.h>
+
+class ScatterGraph : public QObject
+{
+ Q_OBJECT
+public:
+ ScatterGraph();
+ ~ScatterGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *scatterWidget() { return m_scatterWidget; }
+
+private:
+ Q3DScatter *m_scatterGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_scatterWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/surfacegraph.cpp b/examples/datavisualization/graphgallery/surfacegraph.cpp
new file mode 100644
index 00000000..88cbc72f
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraph.cpp
@@ -0,0 +1,346 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "surfacegraph.h"
+#include "surfacegraphmodifier.h"
+
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qcombobox.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qgroupbox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qcommandlinkbutton.h>
+#include <QtGui/qpainter.h>
+
+using namespace Qt::StringLiterals;
+
+static QPixmap gradientBtoYPB_Pixmap()
+{
+ QLinearGradient grBtoY(0, 0, 1, 100);
+ grBtoY.setColorAt(1.f, Qt::black);
+ grBtoY.setColorAt(0.67f, Qt::blue);
+ grBtoY.setColorAt(0.33f, Qt::red);
+ grBtoY.setColorAt(0.f, Qt::yellow);
+ QPixmap pm(24, 100);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grBtoY));
+ pmp.setPen(Qt::NoPen);
+ pmp.drawRect(0, 0, 24, 100);
+ return pm;
+}
+
+static QPixmap gradientGtoRPB_Pixmap()
+{
+ QLinearGradient grGtoR(0, 0, 1, 100);
+ grGtoR.setColorAt(1.f, Qt::darkGreen);
+ grGtoR.setColorAt(0.5f, Qt::yellow);
+ grGtoR.setColorAt(0.2f, Qt::red);
+ grGtoR.setColorAt(0.f, Qt::darkRed);
+ QPixmap pm(24, 100);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grGtoR));
+ pmp.drawRect(0, 0, 24, 100);
+ return pm;
+}
+
+static QPixmap highlightPixmap()
+{
+ constexpr int height = 400;
+ constexpr int width = 110;
+ constexpr int border = 10;
+ QLinearGradient gr(0, 0, 1, height - 2 * border);
+ gr.setColorAt(1.f, Qt::black);
+ gr.setColorAt(0.8f, Qt::darkGreen);
+ gr.setColorAt(0.6f, Qt::green);
+ gr.setColorAt(0.4f, Qt::yellow);
+ gr.setColorAt(0.2f, Qt::red);
+ gr.setColorAt(0.f, Qt::darkRed);
+
+ QPixmap pmHighlight(width, height);
+ pmHighlight.fill(Qt::transparent);
+ QPainter pmpHighlight(&pmHighlight);
+ pmpHighlight.setBrush(QBrush(gr));
+ pmpHighlight.setPen(Qt::NoPen);
+ pmpHighlight.drawRect(border, border, 35, height - 2 * border);
+ pmpHighlight.setPen(Qt::black);
+ int step = (height - 2 * border) / 5;
+ for (int i = 0; i < 6; ++i) {
+ int yPos = i * step + border;
+ pmpHighlight.drawLine(border, yPos, 55, yPos);
+ const int height = 550 - (i * 110);
+ pmpHighlight.drawText(60, yPos + 2, QString::number(height) + u" m"_s);
+ }
+ return pmHighlight;
+}
+
+SurfaceGraph::SurfaceGraph()
+{
+ m_surfaceGraph = new Q3DSurface();
+}
+
+SurfaceGraph::~SurfaceGraph() = default;
+
+bool SurfaceGraph::initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize)
+{
+ if (!m_surfaceGraph->hasContext())
+ return false;
+
+ m_surfaceWidget = new QWidget;
+ auto *hLayout = new QHBoxLayout(m_surfaceWidget);
+ m_container = QWidget::createWindowContainer(m_surfaceGraph, m_surfaceWidget);
+ m_container->setMinimumSize(minimumGraphSize);
+ m_container->setMaximumSize(maximumGraphSize);
+ m_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_container->setFocusPolicy(Qt::StrongFocus);
+ hLayout->addWidget(m_container, 1);
+
+ auto *vLayout = new QVBoxLayout();
+ hLayout->addLayout(vLayout);
+ vLayout->setAlignment(Qt::AlignTop);
+
+ // Create control widgets
+ auto *modelGroupBox = new QGroupBox(u"Model"_s);
+
+ auto *sqrtSinModelRB = new QRadioButton(m_surfaceWidget);
+ sqrtSinModelRB->setText(u"Sqrt && Sin"_s);
+ sqrtSinModelRB->setChecked(false);
+
+ auto *heightMapModelRB = new QRadioButton(m_surfaceWidget);
+ heightMapModelRB->setText(u"Multiseries\nHeight Map"_s);
+ heightMapModelRB->setChecked(false);
+
+ auto *texturedModelRB = new QRadioButton(m_surfaceWidget);
+ texturedModelRB->setText(u"Textured\nTopography"_s);
+ texturedModelRB->setChecked(false);
+
+ auto *modelVBox = new QVBoxLayout;
+ modelVBox->addWidget(sqrtSinModelRB);
+ modelVBox->addWidget(heightMapModelRB);
+ modelVBox->addWidget(texturedModelRB);
+ modelGroupBox->setLayout(modelVBox);
+
+ auto *selectionGroupBox = new QGroupBox(u"Graph Selection Mode"_s);
+
+ auto *modeNoneRB = new QRadioButton(m_surfaceWidget);
+ modeNoneRB->setText(u"No selection"_s);
+ modeNoneRB->setChecked(false);
+
+ auto *modeItemRB = new QRadioButton(m_surfaceWidget);
+ modeItemRB->setText(u"Item"_s);
+ modeItemRB->setChecked(false);
+
+ auto *modeSliceRowRB = new QRadioButton(m_surfaceWidget);
+ modeSliceRowRB->setText(u"Row Slice"_s);
+ modeSliceRowRB->setChecked(false);
+
+ auto *modeSliceColumnRB = new QRadioButton(m_surfaceWidget);
+ modeSliceColumnRB->setText(u"Column Slice"_s);
+ modeSliceColumnRB->setChecked(false);
+
+ auto *selectionVBox = new QVBoxLayout;
+ selectionVBox->addWidget(modeNoneRB);
+ selectionVBox->addWidget(modeItemRB);
+ selectionVBox->addWidget(modeSliceRowRB);
+ selectionVBox->addWidget(modeSliceColumnRB);
+ selectionGroupBox->setLayout(selectionVBox);
+
+ auto *axisGroupBox = new QGroupBox(u"Axis ranges"_s);
+
+ auto *axisMinSliderX = new QSlider(Qt::Horizontal);
+ axisMinSliderX->setMinimum(0);
+ axisMinSliderX->setTickInterval(1);
+ axisMinSliderX->setEnabled(true);
+ auto *axisMaxSliderX = new QSlider(Qt::Horizontal);
+ axisMaxSliderX->setMinimum(1);
+ axisMaxSliderX->setTickInterval(1);
+ axisMaxSliderX->setEnabled(true);
+ auto *axisMinSliderZ = new QSlider(Qt::Horizontal);
+ axisMinSliderZ->setMinimum(0);
+ axisMinSliderZ->setTickInterval(1);
+ axisMinSliderZ->setEnabled(true);
+ auto *axisMaxSliderZ = new QSlider(Qt::Horizontal);
+ axisMaxSliderZ->setMinimum(1);
+ axisMaxSliderZ->setTickInterval(1);
+ axisMaxSliderZ->setEnabled(true);
+
+ auto *axisVBox = new QVBoxLayout;
+ axisVBox->addWidget(new QLabel(u"Column range"_s));
+ axisVBox->addWidget(axisMinSliderX);
+ axisVBox->addWidget(axisMaxSliderX);
+ axisVBox->addWidget(new QLabel(u"Row range"_s));
+ axisVBox->addWidget(axisMinSliderZ);
+ axisVBox->addWidget(axisMaxSliderZ);
+ axisGroupBox->setLayout(axisVBox);
+
+ // Mode-dependent controls
+ // sqrt-sin
+ auto *colorGroupBox = new QGroupBox(u"Custom gradient"_s);
+
+ QPixmap pixmap = gradientBtoYPB_Pixmap();
+ auto *gradientBtoYPB = new QPushButton(m_surfaceWidget);
+ gradientBtoYPB->setIcon(QIcon(pixmap));
+ gradientBtoYPB->setIconSize(pixmap.size());
+
+ pixmap = gradientGtoRPB_Pixmap();
+ auto *gradientGtoRPB = new QPushButton(m_surfaceWidget);
+ gradientGtoRPB->setIcon(QIcon(pixmap));
+ gradientGtoRPB->setIconSize(pixmap.size());
+ auto *colorHBox = new QHBoxLayout;
+ colorHBox->addWidget(gradientBtoYPB);
+ colorHBox->addWidget(gradientGtoRPB);
+ colorGroupBox->setLayout(colorHBox);
+
+ // Multiseries heightmap
+ auto *showGroupBox = new QGroupBox(u"_show Object"_s);
+ showGroupBox->setVisible(false);
+
+ auto *checkboxShowOilRigOne = new QCheckBox(u"Oil Rig 1"_s);
+ checkboxShowOilRigOne->setChecked(true);
+
+ auto *checkboxShowOilRigTwo = new QCheckBox(u"Oil Rig 2"_s);
+ checkboxShowOilRigTwo->setChecked(true);
+
+ auto *checkboxShowRefinery = new QCheckBox(u"Refinery"_s);
+
+ auto *showVBox = new QVBoxLayout;
+ showVBox->addWidget(checkboxShowOilRigOne);
+ showVBox->addWidget(checkboxShowOilRigTwo);
+ showVBox->addWidget(checkboxShowRefinery);
+ showGroupBox->setLayout(showVBox);
+
+ auto *visualsGroupBox = new QGroupBox(u"Visuals"_s);
+ visualsGroupBox->setVisible(false);
+
+ auto *checkboxVisualsSeeThrough = new QCheckBox(u"See-Through"_s);
+
+ auto *checkboxHighlightOil = new QCheckBox(u"Highlight Oil"_s);
+
+ auto *checkboxShowShadows = new QCheckBox(u"Shadows"_s);
+ checkboxShowShadows->setChecked(true);
+
+ auto *visualVBox = new QVBoxLayout;
+ visualVBox->addWidget(checkboxVisualsSeeThrough);
+ visualVBox->addWidget(checkboxHighlightOil);
+ visualVBox->addWidget(checkboxShowShadows);
+ visualsGroupBox->setLayout(visualVBox);
+
+ auto *labelSelection = new QLabel(u"Selection:"_s);
+ labelSelection->setVisible(false);
+
+ auto *labelSelectedItem = new QLabel(u"Nothing"_s);
+ labelSelectedItem->setVisible(false);
+
+ // Textured topography heightmap
+ auto *enableTexture = new QCheckBox(u"Surface texture"_s);
+ enableTexture->setVisible(false);
+
+ auto *label = new QLabel(m_surfaceWidget);
+ label->setPixmap(highlightPixmap());
+
+ auto *heightMapGroupBox = new QGroupBox(u"Highlight color map"_s);
+ auto *colorMapVBox = new QVBoxLayout;
+ colorMapVBox->addWidget(label);
+ heightMapGroupBox->setLayout(colorMapVBox);
+ heightMapGroupBox->setVisible(false);
+
+ // Populate vertical layout
+ // Common
+ vLayout->addWidget(modelGroupBox);
+ vLayout->addWidget(selectionGroupBox);
+ vLayout->addWidget(axisGroupBox);
+
+ // Sqrt Sin
+ vLayout->addWidget(colorGroupBox);
+
+ // Multiseries heightmap
+ vLayout->addWidget(showGroupBox);
+ vLayout->addWidget(visualsGroupBox);
+ vLayout->addWidget(labelSelection);
+ vLayout->addWidget(labelSelectedItem);
+
+ // Textured topography
+ vLayout->addWidget(heightMapGroupBox);
+ vLayout->addWidget(enableTexture);
+
+ // Create the controller
+ auto *modifier = new SurfaceGraphModifier(m_surfaceGraph, labelSelectedItem, this);
+
+ // Connect widget controls to controller
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableHeightMapModel);
+ QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableSqrtSinModel);
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::enableTopographyModel);
+
+ QObject::connect(modeNoneRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeNone);
+ QObject::connect(modeItemRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeItem);
+ QObject::connect(modeSliceRowRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeSliceRow);
+ QObject::connect(modeSliceColumnRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraphModifier::toggleModeSliceColumn);
+
+ QObject::connect(axisMinSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustXMin);
+ QObject::connect(axisMaxSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustXMax);
+ QObject::connect(axisMinSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustZMin);
+ QObject::connect(axisMaxSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraphModifier::adjustZMax);
+
+ // Mode dependent connections
+ QObject::connect(gradientBtoYPB, &QPushButton::pressed,
+ modifier, &SurfaceGraphModifier::setBlackToYellowGradient);
+ QObject::connect(gradientGtoRPB, &QPushButton::pressed,
+ modifier, &SurfaceGraphModifier::setGreenToRedGradient);
+
+ QObject::connect(checkboxShowOilRigOne, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemOne);
+ QObject::connect(checkboxShowOilRigTwo, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemTwo);
+ QObject::connect(checkboxShowRefinery, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleItemThree);
+
+ QObject::connect(checkboxVisualsSeeThrough, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleSeeThrough);
+ QObject::connect(checkboxHighlightOil, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleOilHighlight);
+ QObject::connect(checkboxShowShadows, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleShadows);
+
+ QObject::connect(enableTexture, &QCheckBox::stateChanged,
+ modifier, &SurfaceGraphModifier::toggleSurfaceTexture);
+
+ // Connections to disable features depending on mode
+ QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
+ colorGroupBox, &QGroupBox::setVisible);
+
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ showGroupBox, &QGroupBox::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ visualsGroupBox, &QGroupBox::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ labelSelection, &QLabel::setVisible);
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ labelSelectedItem, &QLabel::setVisible);
+
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ enableTexture, &QLabel::setVisible);
+ QObject::connect(texturedModelRB, &QRadioButton::toggled,
+ heightMapGroupBox, &QGroupBox::setVisible);
+
+ modifier->setAxisMinSliderX(axisMinSliderX);
+ modifier->setAxisMaxSliderX(axisMaxSliderX);
+ modifier->setAxisMinSliderZ(axisMinSliderZ);
+ modifier->setAxisMaxSliderZ(axisMaxSliderZ);
+
+ sqrtSinModelRB->setChecked(true);
+ modeItemRB->setChecked(true);
+ enableTexture->setChecked(true);
+
+ return true;
+}
diff --git a/examples/datavisualization/graphgallery/surfacegraph.h b/examples/datavisualization/graphgallery/surfacegraph.h
new file mode 100644
index 00000000..5ec29930
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraph.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SURFACEGRAPH_H
+#define SURFACEGRAPH_H
+
+#include <QtCore/qobject.h>
+#include <QtDataVisualization/q3dsurface.h>
+
+class SurfaceGraph : public QObject
+{
+ Q_OBJECT
+public:
+ SurfaceGraph();
+ ~SurfaceGraph();
+
+ bool initialize(const QSize &minimumGraphSize, const QSize &maximumGraphSize);
+ QWidget *surfaceWidget() { return m_surfaceWidget; }
+
+private:
+ Q3DSurface *m_surfaceGraph = nullptr;
+ QWidget *m_container = nullptr;
+ QWidget *m_surfaceWidget = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp
new file mode 100644
index 00000000..190a96b9
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraphmodifier.cpp
@@ -0,0 +1,647 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "surfacegraphmodifier.h"
+#include "highlightseries.h"
+#include "topographicseries.h"
+#include "custominputhandler.h"
+
+#include <QtDataVisualization/qvalue3daxis.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtGui/qimage.h>
+#include <QtCore/qmath.h>
+
+using namespace Qt::StringLiterals;
+
+const int sampleCountX = 150;
+const int sampleCountZ = 150;
+const int heightMapGridStepX = 6;
+const int heightMapGridStepZ = 6;
+const float sampleMin = -8.f;
+const float sampleMax = 8.f;
+
+const float areaWidth = 8000.f;
+const float areaHeight = 8000.f;
+const float aspectRatio = 0.1389f;
+const float minRange = areaWidth * 0.49f;
+
+SurfaceGraphModifier::SurfaceGraphModifier(Q3DSurface *surface, QLabel *label, QObject *parent) :
+ QObject(parent),
+ m_graph(surface),
+ m_textField(label)
+{
+ m_graph->scene()->activeCamera()->setZoomLevel(85.f);
+ m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricRight);
+ m_graph->activeTheme()->setType(Q3DTheme::ThemeRetro);
+
+ m_graph->setAxisX(new QValue3DAxis);
+ m_graph->setAxisY(new QValue3DAxis);
+ m_graph->setAxisZ(new QValue3DAxis);
+
+ //
+ // Sqrt Sin
+ //
+ //! [0]
+ m_sqrtSinProxy = new QSurfaceDataProxy();
+ m_sqrtSinSeries = new QSurface3DSeries(m_sqrtSinProxy);
+ //! [0]
+ fillSqrtSinProxy();
+
+ //
+ // Multisurface heightmap
+ //
+ //! [2]
+ // Create the first surface layer
+ QImage heightMapImageOne(":/data/layer_1.png");
+ m_heightMapProxyOne = new QHeightMapSurfaceDataProxy(heightMapImageOne);
+ m_heightMapSeriesOne = new QSurface3DSeries(m_heightMapProxyOne);
+ m_heightMapSeriesOne->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyOne->setValueRanges(34.f, 40.f, 18.f, 24.f);
+ //! [2]
+
+ // Create the other 2 surface layers
+ QImage heightMapImageTwo(":/data/layer_2.png");
+ m_heightMapProxyTwo = new QHeightMapSurfaceDataProxy(heightMapImageTwo);
+ m_heightMapSeriesTwo = new QSurface3DSeries(m_heightMapProxyTwo);
+ m_heightMapSeriesTwo->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyTwo->setValueRanges(34.f, 40.f, 18.f, 24.f);
+
+ QImage heightMapImageThree(":/data/layer_3.png");
+ m_heightMapProxyThree = new QHeightMapSurfaceDataProxy(heightMapImageThree);
+ m_heightMapSeriesThree = new QSurface3DSeries(m_heightMapProxyThree);
+ m_heightMapSeriesThree->setItemLabelFormat(u"(@xLabel, @zLabel): @yLabel"_s);
+ m_heightMapProxyThree->setValueRanges(34.f, 40.f, 18.f, 24.f);
+
+ // The images are the same size, so it's enough to get the dimensions from one
+ m_heightMapWidth = heightMapImageOne.width();
+ m_heightMapHeight = heightMapImageOne.height();
+
+ // Set the gradients for multi-surface layers
+ QLinearGradient grOne;
+ grOne.setColorAt(0.f, Qt::black);
+ grOne.setColorAt(0.38f, Qt::darkYellow);
+ grOne.setColorAt(0.39f, Qt::darkGreen);
+ grOne.setColorAt(0.5f, Qt::darkGray);
+ grOne.setColorAt(1.f, Qt::gray);
+ m_heightMapSeriesOne->setBaseGradient(grOne);
+ m_heightMapSeriesOne->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ QLinearGradient grTwo;
+ grTwo.setColorAt(0.39f, Qt::blue);
+ grTwo.setColorAt(0.4f, Qt::white);
+ m_heightMapSeriesTwo->setBaseGradient(grTwo);
+ m_heightMapSeriesTwo->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ QLinearGradient grThree;
+ grThree.setColorAt(0.f, Qt::white);
+ grThree.setColorAt(0.05f, Qt::black);
+ m_heightMapSeriesThree->setBaseGradient(grThree);
+ m_heightMapSeriesThree->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+
+ // Custom items and label
+ connect(m_graph, &QAbstract3DGraph::selectedElementChanged,
+ this, &SurfaceGraphModifier::handleElementSelected);
+
+ m_selectionAnimation = new QPropertyAnimation(this);
+ m_selectionAnimation->setPropertyName("scaling");
+ m_selectionAnimation->setDuration(500);
+ m_selectionAnimation->setLoopCount(-1);
+
+ QFont titleFont = QFont("Century Gothic", 30);
+ titleFont.setBold(true);
+ m_titleLabel = new QCustom3DLabel("Oil Rigs on Imaginary Sea", titleFont,
+ QVector3D(0.f, 1.2f, 0.f),
+ QVector3D(1.f, 1.f, 0.f),
+ QQuaternion());
+ m_titleLabel->setPositionAbsolute(true);
+ m_titleLabel->setFacingCamera(true);
+ m_titleLabel->setBackgroundColor(QColor(0x66cdaa));
+ m_graph->addCustomItem(m_titleLabel);
+ m_titleLabel->setVisible(false);
+
+ // Make two of the custom object visible
+ toggleItemOne(true);
+ toggleItemTwo(true);
+
+ //
+ // Topographic map
+ //
+ m_topography = new TopographicSeries();
+ m_topography->setTopographyFile(":/data/topography.png", areaWidth, areaHeight);
+ m_topography->setItemLabelFormat(u"@yLabel m"_s);
+
+ m_highlight = new HighlightSeries();
+ m_highlight->setTopographicSeries(m_topography);
+ m_highlight->setMinHeight(minRange * aspectRatio);
+ m_highlight->handleGradientChange(areaWidth * aspectRatio);
+ //! [16]
+ QObject::connect(m_graph->axisY(), &QValue3DAxis::maxChanged,
+ m_highlight, &HighlightSeries::handleGradientChange);
+ //! [16]
+
+ m_customInputHandler = new CustomInputHandler(m_graph);
+ m_customInputHandler->setHighlightSeries(m_highlight);
+ m_customInputHandler->setAxes(m_graph->axisX(), m_graph->axisY(), m_graph->axisZ());
+ m_customInputHandler->setLimits(0.f, areaWidth, minRange);
+ m_customInputHandler->setAspectRatio(aspectRatio);
+}
+
+void SurfaceGraphModifier::fillSqrtSinProxy()
+{
+ float stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
+ float stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
+
+ //! [1]
+ auto *dataArray = new QSurfaceDataArray;
+ dataArray->reserve(sampleCountZ);
+ for (int i = 0 ; i < sampleCountZ ; ++i) {
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(sampleCountX);
+ // Keep values within range bounds, since just adding step can cause minor drift due
+ // to the rounding errors.
+ float z = qMin(sampleMax, (i * stepZ + sampleMin));
+ for (int j = 0; j < sampleCountX; ++j) {
+ float x = qMin(sampleMax, (j * stepX + sampleMin));
+ float R = qSqrt(z * z + x * x) + 0.01f;
+ float y = (qSin(R) / R + 0.24f) * 1.61f;
+ newRow->append(QSurfaceDataItem({x, y, z}));
+ }
+ dataArray->append(newRow);
+ }
+
+ m_sqrtSinProxy->resetArray(dataArray);
+ //! [1]
+}
+
+void SurfaceGraphModifier::enableSqrtSinModel(bool enable)
+{
+ if (enable) {
+ //! [3]
+ m_sqrtSinSeries->setDrawMode(QSurface3DSeries::DrawSurfaceAndWireframe);
+ m_sqrtSinSeries->setFlatShadingEnabled(true);
+
+ m_graph->axisX()->setLabelFormat("%.2f");
+ m_graph->axisZ()->setLabelFormat("%.2f");
+ m_graph->axisX()->setRange(sampleMin, sampleMax);
+ m_graph->axisY()->setRange(0.f, 2.f);
+ m_graph->axisZ()->setRange(sampleMin, sampleMax);
+ m_graph->axisX()->setLabelAutoRotation(30.f);
+ m_graph->axisY()->setLabelAutoRotation(90.f);
+ m_graph->axisZ()->setLabelAutoRotation(30.f);
+
+ m_graph->removeSeries(m_heightMapSeriesOne);
+ m_graph->removeSeries(m_heightMapSeriesTwo);
+ m_graph->removeSeries(m_heightMapSeriesThree);
+ m_graph->removeSeries(m_topography);
+ m_graph->removeSeries(m_highlight);
+
+ m_graph->addSeries(m_sqrtSinSeries);
+ //! [3]
+
+ m_titleLabel->setVisible(false);
+ m_graph->axisX()->setTitleVisible(false);
+ m_graph->axisY()->setTitleVisible(false);
+ m_graph->axisZ()->setTitleVisible(false);
+
+ m_graph->axisX()->setTitle({});
+ m_graph->axisY()->setTitle({});
+ m_graph->axisZ()->setTitle({});
+
+ m_graph->setActiveInputHandler(m_defaultInputHandler);
+
+ //! [6]
+ // Reset range sliders for Sqrt & Sin
+ m_rangeMinX = sampleMin;
+ m_rangeMinZ = sampleMin;
+ m_stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
+ m_stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(sampleCountX - 2);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(1);
+ m_axisMaxSliderX->setMaximum(sampleCountX - 1);
+ m_axisMaxSliderX->setValue(sampleCountX - 1);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(sampleCountZ - 2);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(1);
+ m_axisMaxSliderZ->setMaximum(sampleCountZ - 1);
+ m_axisMaxSliderZ->setValue(sampleCountZ - 1);
+ //! [6]
+ }
+}
+
+void SurfaceGraphModifier::enableHeightMapModel(bool enable)
+{
+ if (enable) {
+ m_heightMapSeriesOne->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesOne->setFlatShadingEnabled(false);
+ m_heightMapSeriesTwo->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesTwo->setFlatShadingEnabled(false);
+ m_heightMapSeriesThree->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_heightMapSeriesThree->setFlatShadingEnabled(false);
+
+ m_graph->axisX()->setLabelFormat("%.1f N");
+ m_graph->axisZ()->setLabelFormat("%.1f E");
+ m_graph->axisX()->setRange(34.f, 40.f);
+ //! [4]
+ m_graph->axisY()->setAutoAdjustRange(true);
+ //! [4]
+ m_graph->axisZ()->setRange(18.f, 24.f);
+
+ m_graph->axisX()->setTitle(u"Latitude"_s);
+ m_graph->axisY()->setTitle(u"Height"_s);
+ m_graph->axisZ()->setTitle(u"Longitude"_s);
+
+ m_graph->removeSeries(m_sqrtSinSeries);
+ m_graph->removeSeries(m_topography);
+ m_graph->removeSeries(m_highlight);
+ m_graph->addSeries(m_heightMapSeriesOne);
+ m_graph->addSeries(m_heightMapSeriesTwo);
+ m_graph->addSeries(m_heightMapSeriesThree);
+
+ m_graph->setActiveInputHandler(m_defaultInputHandler);
+
+ m_titleLabel->setVisible(true);
+ m_graph->axisX()->setTitleVisible(true);
+ m_graph->axisY()->setTitleVisible(true);
+ m_graph->axisZ()->setTitleVisible(true);
+
+ // Reset range sliders for height map
+ int mapGridCountX = m_heightMapWidth / heightMapGridStepX;
+ int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ;
+ m_rangeMinX = 34.f;
+ m_rangeMinZ = 18.f;
+ m_stepX = 6.f / float(mapGridCountX - 1);
+ m_stepZ = 6.f / float(mapGridCountZ - 1);
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(mapGridCountX - 2);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(1);
+ m_axisMaxSliderX->setMaximum(mapGridCountX - 1);
+ m_axisMaxSliderX->setValue(mapGridCountX - 1);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(mapGridCountZ - 2);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(1);
+ m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1);
+ m_axisMaxSliderZ->setValue(mapGridCountZ - 1);
+ }
+}
+
+void SurfaceGraphModifier::enableTopographyModel(bool enable)
+{
+ if (enable) {
+ m_graph->axisX()->setLabelFormat("%i");
+ m_graph->axisZ()->setLabelFormat("%i");
+ m_graph->axisX()->setRange(0.f, areaWidth);
+ m_graph->axisY()->setRange(100.f, areaWidth * aspectRatio);
+ m_graph->axisZ()->setRange(0.f, areaHeight);
+ m_graph->axisX()->setLabelAutoRotation(30.f);
+ m_graph->axisY()->setLabelAutoRotation(90.f);
+ m_graph->axisZ()->setLabelAutoRotation(30.f);
+
+ m_graph->removeSeries(m_heightMapSeriesOne);
+ m_graph->removeSeries(m_heightMapSeriesTwo);
+ m_graph->removeSeries(m_heightMapSeriesThree);
+ m_graph->addSeries(m_topography);
+ m_graph->addSeries(m_highlight);
+
+ m_titleLabel->setVisible(false);
+ m_graph->axisX()->setTitleVisible(false);
+ m_graph->axisY()->setTitleVisible(false);
+ m_graph->axisZ()->setTitleVisible(false);
+
+ m_graph->axisX()->setTitle({});
+ m_graph->axisY()->setTitle({});
+ m_graph->axisZ()->setTitle({});
+
+ //! [5]
+ m_graph->setActiveInputHandler(m_customInputHandler);
+ //! [5]
+
+ // Reset range sliders for topography map
+ m_rangeMinX = 0.f;
+ m_rangeMinZ = 0.f;
+ m_stepX = 1.f;
+ m_stepZ = 1.f;
+ m_axisMinSliderX->setMinimum(0);
+ m_axisMinSliderX->setMaximum(areaWidth - 200);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMinimum(200);
+ m_axisMaxSliderX->setMaximum(areaWidth);
+ m_axisMaxSliderX->setValue(areaWidth);
+ m_axisMinSliderZ->setMinimum(0);
+ m_axisMinSliderZ->setMaximum(areaHeight - 200);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMinimum(200);
+ m_axisMaxSliderZ->setMaximum(areaHeight);
+ m_axisMaxSliderZ->setValue(areaHeight);
+ }
+}
+
+void SurfaceGraphModifier::adjustXMin(int min)
+{
+ float minX = m_stepX * float(min) + m_rangeMinX;
+
+ int max = m_axisMaxSliderX->value();
+ if (min >= max) {
+ max = min + 1;
+ m_axisMaxSliderX->setValue(max);
+ }
+ float maxX = m_stepX * max + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraphModifier::adjustXMax(int max)
+{
+ float maxX = m_stepX * float(max) + m_rangeMinX;
+
+ int min = m_axisMinSliderX->value();
+ if (max <= min) {
+ min = max - 1;
+ m_axisMinSliderX->setValue(min);
+ }
+ float minX = m_stepX * min + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraphModifier::adjustZMin(int min)
+{
+ float minZ = m_stepZ * float(min) + m_rangeMinZ;
+
+ int max = m_axisMaxSliderZ->value();
+ if (min >= max) {
+ max = min + 1;
+ m_axisMaxSliderZ->setValue(max);
+ }
+ float maxZ = m_stepZ * max + m_rangeMinZ;
+
+ setAxisZRange(minZ, maxZ);
+}
+
+void SurfaceGraphModifier::adjustZMax(int max)
+{
+ float maxX = m_stepZ * float(max) + m_rangeMinZ;
+
+ int min = m_axisMinSliderZ->value();
+ if (max <= min) {
+ min = max - 1;
+ m_axisMinSliderZ->setValue(min);
+ }
+ float minX = m_stepZ * min + m_rangeMinZ;
+
+ setAxisZRange(minX, maxX);
+}
+
+//! [7]
+void SurfaceGraphModifier::setAxisXRange(float min, float max)
+{
+ m_graph->axisX()->setRange(min, max);
+}
+//! [7]
+
+void SurfaceGraphModifier::setAxisZRange(float min, float max)
+{
+ m_graph->axisZ()->setRange(min, max);
+}
+
+void SurfaceGraphModifier::setBlackToYellowGradient()
+{
+ //! [8]
+ QLinearGradient gr;
+ gr.setColorAt(0.f, Qt::black);
+ gr.setColorAt(0.33f, Qt::blue);
+ gr.setColorAt(0.67f, Qt::red);
+ gr.setColorAt(1.f, Qt::yellow);
+
+ m_sqrtSinSeries->setBaseGradient(gr);
+ m_sqrtSinSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+ //! [8]
+}
+
+void SurfaceGraphModifier::setGreenToRedGradient()
+{
+ QLinearGradient gr;
+ gr.setColorAt(0.f, Qt::darkGreen);
+ gr.setColorAt(0.5f, Qt::yellow);
+ gr.setColorAt(0.8f, Qt::red);
+ gr.setColorAt(1.f, Qt::darkRed);
+
+ m_sqrtSinSeries->setBaseGradient(gr);
+ m_sqrtSinSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
+}
+
+void SurfaceGraphModifier::toggleItemOne(bool show)
+{
+ //! [10]
+ QVector3D positionOne = QVector3D(39.f, 77.f, 19.2f);
+ //! [10]
+ QVector3D positionOnePipe = QVector3D(39.f, 45.f, 19.2f);
+ QVector3D positionOneLabel = QVector3D(39.f, 107.f, 19.2f);
+ if (show) {
+ //! [9]
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::red);
+ //! [9]
+ //! [11]
+ auto *item = new QCustom3DItem(":/data/oilrig.obj", positionOne,
+ QVector3D(0.025f, 0.025f, 0.025f),
+ QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 45.f),
+ color);
+ //! [11]
+ //! [12]
+ m_graph->addCustomItem(item);
+ //! [12]
+ item = new QCustom3DItem(":/data/pipe.obj", positionOnePipe,
+ QVector3D(0.005f, 0.5f, 0.005f),
+ QQuaternion(),
+ color);
+ item->setShadowCasting(false);
+ m_graph->addCustomItem(item);
+
+ //! [13]
+ auto *label = new QCustom3DLabel();
+ label->setText("Oil Rig One");
+ label->setPosition(positionOneLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ //! [13]
+ } else {
+ resetSelection();
+ //! [14]
+ m_graph->removeCustomItemAt(positionOne);
+ //! [14]
+ m_graph->removeCustomItemAt(positionOnePipe);
+ m_graph->removeCustomItemAt(positionOneLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleItemTwo(bool show)
+{
+ QVector3D positionTwo = QVector3D(34.5f, 77.f, 23.4f);
+ QVector3D positionTwoPipe = QVector3D(34.5f, 45.f, 23.4f);
+ QVector3D positionTwoLabel = QVector3D(34.5f, 107.f, 23.4f);
+ if (show) {
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::red);
+ auto *item = new QCustom3DItem();
+ item->setMeshFile(":/data/oilrig.obj");
+ item->setPosition(positionTwo);
+ item->setScaling(QVector3D(0.025f, 0.025f, 0.025f));
+ item->setRotation(QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 25.f));
+ item->setTextureImage(color);
+ m_graph->addCustomItem(item);
+ item = new QCustom3DItem(":/data/pipe.obj", positionTwoPipe,
+ QVector3D(0.005f, 0.5f, 0.005f),
+ QQuaternion(),
+ color);
+ item->setShadowCasting(false);
+ m_graph->addCustomItem(item);
+
+ auto *label = new QCustom3DLabel();
+ label->setText("Oil Rig Two");
+ label->setPosition(positionTwoLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ } else {
+ resetSelection();
+ m_graph->removeCustomItemAt(positionTwo);
+ m_graph->removeCustomItemAt(positionTwoPipe);
+ m_graph->removeCustomItemAt(positionTwoLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleItemThree(bool show)
+{
+ QVector3D positionThree = QVector3D(34.5f, 86.f, 19.1f);
+ QVector3D positionThreeLabel = QVector3D(34.5f, 116.f, 19.1f);
+ if (show) {
+ QImage color = QImage(2, 2, QImage::Format_RGB32);
+ color.fill(Qt::darkMagenta);
+ auto *item = new QCustom3DItem();
+ item->setMeshFile(":/data/refinery.obj");
+ item->setPosition(positionThree);
+ item->setScaling(QVector3D(0.04f, 0.04f, 0.04f));
+ item->setRotation(QQuaternion::fromAxisAndAngle(0.f, 1.f, 0.f, 75.f));
+ item->setTextureImage(color);
+ m_graph->addCustomItem(item);
+
+ auto *label = new QCustom3DLabel();
+ label->setText("Refinery");
+ label->setPosition(positionThreeLabel);
+ label->setScaling(QVector3D(1.f, 1.f, 1.f));
+ m_graph->addCustomItem(label);
+ } else {
+ resetSelection();
+ m_graph->removeCustomItemAt(positionThree);
+ m_graph->removeCustomItemAt(positionThreeLabel);
+ }
+}
+
+void SurfaceGraphModifier::toggleSeeThrough(bool seethrough)
+{
+ if (seethrough) {
+ m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawWireframe);
+ m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawWireframe);
+ } else {
+ m_graph->seriesList().at(0)->setDrawMode(QSurface3DSeries::DrawSurface);
+ m_graph->seriesList().at(1)->setDrawMode(QSurface3DSeries::DrawSurface);
+ }
+}
+
+void SurfaceGraphModifier::toggleOilHighlight(bool highlight)
+{
+ if (highlight) {
+ QLinearGradient grThree;
+ grThree.setColorAt(0.0, Qt::black);
+ grThree.setColorAt(0.05, Qt::red);
+ m_graph->seriesList().at(2)->setBaseGradient(grThree);
+ } else {
+ QLinearGradient grThree;
+ grThree.setColorAt(0.0, Qt::white);
+ grThree.setColorAt(0.05, Qt::black);
+ m_graph->seriesList().at(2)->setBaseGradient(grThree);
+ }
+}
+
+void SurfaceGraphModifier::toggleShadows(bool shadows)
+{
+ if (shadows)
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityMedium);
+ else
+ m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
+}
+
+//! [15]
+void SurfaceGraphModifier::toggleSurfaceTexture(bool enable)
+{
+ if (enable)
+ m_topography->setTextureFile(":/data/maptexture.jpg");
+ else
+ m_topography->setTextureFile("");
+}
+//! [15]
+
+void SurfaceGraphModifier::handleElementSelected(QAbstract3DGraph::ElementType type)
+{
+ resetSelection();
+ if (type == QAbstract3DGraph::ElementCustomItem) {
+ QCustom3DItem *item = m_graph->selectedCustomItem();
+ QString text;
+ if (qobject_cast<QCustom3DLabel *>(item) != 0) {
+ text.append("Custom label: ");
+ } else {
+ QStringList split = item->meshFile().split("/");
+ text.append(split.last());
+ text.append(": ");
+ }
+ int index = m_graph->selectedCustomItemIndex();
+ text.append(QString::number(index));
+ m_textField->setText(text);
+ m_previouslyAnimatedItem = item;
+ m_previousScaling = item->scaling();
+ m_selectionAnimation->setTargetObject(item);
+ m_selectionAnimation->setStartValue(item->scaling());
+ m_selectionAnimation->setEndValue(item->scaling() * 1.5f);
+ m_selectionAnimation->start();
+ } else if (type == QAbstract3DGraph::ElementSeries) {
+ QString text = "Surface (";
+ QSurface3DSeries *series = m_graph->selectedSeries();
+ if (series) {
+ QPoint point = series->selectedPoint();
+ QString posStr;
+ posStr.setNum(point.x());
+ text.append(posStr);
+ text.append(", ");
+ posStr.setNum(point.y());
+ text.append(posStr);
+ }
+ text.append(")");
+ m_textField->setText(text);
+ } else if (type > QAbstract3DGraph::ElementSeries
+ && type < QAbstract3DGraph::ElementCustomItem) {
+ int index = m_graph->selectedLabelIndex();
+ QString text;
+ if (type == QAbstract3DGraph::ElementAxisXLabel)
+ text.append("Axis X label: ");
+ else if (type == QAbstract3DGraph::ElementAxisYLabel)
+ text.append("Axis Y label: ");
+ else
+ text.append("Axis Z label: ");
+ text.append(QString::number(index));
+ m_textField->setText(text);
+ } else {
+ m_textField->setText("Nothing");
+ }
+}
+
+void SurfaceGraphModifier::resetSelection()
+{
+ m_selectionAnimation->stop();
+ if (m_previouslyAnimatedItem)
+ m_previouslyAnimatedItem->setScaling(m_previousScaling);
+ m_previouslyAnimatedItem = nullptr;
+}
diff --git a/examples/datavisualization/graphgallery/surfacegraphmodifier.h b/examples/datavisualization/graphgallery/surfacegraphmodifier.h
new file mode 100644
index 00000000..1a54958e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/surfacegraphmodifier.h
@@ -0,0 +1,109 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SURFACEGRAPHMODIFIER_H
+#define SURFACEGRAPHMODIFIER_H
+
+#include <QtDataVisualization/q3dsurface.h>
+#include <QtDataVisualization/qsurfacedataproxy.h>
+#include <QtDataVisualization/qheightmapsurfacedataproxy.h>
+#include <QtDataVisualization/qsurface3dseries.h>
+#include <QtDataVisualization/qcustom3ditem.h>
+#include <QtDataVisualization/qcustom3dlabel.h>
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qlabel.h>
+#include <QtCore/qpropertyanimation.h>
+
+class TopographicSeries;
+class HighlightSeries;
+class CustomInputHandler;
+
+class SurfaceGraphModifier : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SurfaceGraphModifier(Q3DSurface *surface, QLabel *label, QObject *parent);
+
+ //! [0]
+ void toggleModeNone() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionNone); }
+ void toggleModeItem() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItem); }
+ void toggleModeSliceRow() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow
+ | QAbstract3DGraph::SelectionSlice
+ | QAbstract3DGraph::SelectionMultiSeries); }
+ void toggleModeSliceColumn() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn
+ | QAbstract3DGraph::SelectionSlice
+ | QAbstract3DGraph::SelectionMultiSeries); }
+ //! [0]
+
+ void setBlackToYellowGradient();
+ void setGreenToRedGradient();
+
+ void setAxisMinSliderX(QSlider *slider) { m_axisMinSliderX = slider; }
+ void setAxisMaxSliderX(QSlider *slider) { m_axisMaxSliderX = slider; }
+ void setAxisMinSliderZ(QSlider *slider) { m_axisMinSliderZ = slider; }
+ void setAxisMaxSliderZ(QSlider *slider) { m_axisMaxSliderZ = slider; }
+
+ void adjustXMin(int min);
+ void adjustXMax(int max);
+ void adjustZMin(int min);
+ void adjustZMax(int max);
+
+public Q_SLOTS:
+ void enableSqrtSinModel(bool enable);
+ void enableHeightMapModel(bool enable);
+ void enableTopographyModel(bool enable);
+
+ void toggleItemOne(bool show);
+ void toggleItemTwo(bool show);
+ void toggleItemThree(bool show);
+ void toggleSeeThrough(bool seethrough);
+ void toggleOilHighlight(bool highlight);
+ void toggleShadows(bool shadows);
+ void toggleSurfaceTexture(bool enable);
+
+private:
+ void setAxisXRange(float min, float max);
+ void setAxisZRange(float min, float max);
+ void fillSqrtSinProxy();
+ void handleElementSelected(QAbstract3DGraph::ElementType type);
+ void resetSelection();
+
+private:
+ Q3DSurface *m_graph = nullptr;
+ QSurfaceDataProxy *m_sqrtSinProxy = nullptr;
+ QSurface3DSeries *m_sqrtSinSeries = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyOne = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyTwo = nullptr;
+ QHeightMapSurfaceDataProxy *m_heightMapProxyThree = nullptr;
+ QSurface3DSeries *m_heightMapSeriesOne = nullptr;
+ QSurface3DSeries *m_heightMapSeriesTwo = nullptr;
+ QSurface3DSeries *m_heightMapSeriesThree = nullptr;
+
+ QSlider *m_axisMinSliderX = nullptr;
+ QSlider *m_axisMaxSliderX = nullptr;
+ QSlider *m_axisMinSliderZ = nullptr;
+ QSlider *m_axisMaxSliderZ = nullptr;
+ float m_rangeMinX = 0.f;
+ float m_rangeMinZ = 0.f;
+ float m_stepX = 0.f;
+ float m_stepZ = 0.f;
+ int m_heightMapWidth = 0;
+ int m_heightMapHeight = 0;
+
+ QLabel *m_textField = nullptr;
+ QPropertyAnimation *m_selectionAnimation = nullptr;
+ QCustom3DLabel *m_titleLabel = nullptr;
+ QCustom3DItem *m_previouslyAnimatedItem = nullptr;
+ QVector3D m_previousScaling = {};
+
+ TopographicSeries *m_topography = nullptr;
+ HighlightSeries *m_highlight = nullptr;
+ int m_highlightWidth = 0;
+ int m_highlightHeight = 0;
+
+ CustomInputHandler *m_customInputHandler = nullptr;
+ Q3DInputHandler *m_defaultInputHandler = new Q3DInputHandler();
+};
+
+#endif // SURFACEGRAPHMODIFIER_H
diff --git a/examples/datavisualization/graphgallery/topographicseries.cpp b/examples/datavisualization/graphgallery/topographicseries.cpp
new file mode 100644
index 00000000..201a275e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/topographicseries.cpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "topographicseries.h"
+
+//! [0]
+// Value used to encode height data as RGB value on PNG file
+const float packingFactor = 11983.f;
+//! [0]
+
+TopographicSeries::TopographicSeries()
+{
+ setDrawMode(QSurface3DSeries::DrawSurface);
+ setFlatShadingEnabled(true);
+ setBaseColor(Qt::white);
+}
+
+TopographicSeries::~TopographicSeries() = default;
+
+void TopographicSeries::setTopographyFile(const QString file, float width, float height)
+{
+ //! [1]
+ QImage heightMapImage(file);
+ uchar *bits = heightMapImage.bits();
+ int imageHeight = heightMapImage.height();
+ int imageWidth = heightMapImage.width();
+ int widthBits = imageWidth * 4;
+ float stepX = width / float(imageWidth);
+ float stepZ = height / float(imageHeight);
+
+ auto *dataArray = new QSurfaceDataArray;
+ dataArray->reserve(imageHeight);
+ for (int i = 0; i < imageHeight; ++i) {
+ int p = i * widthBits;
+ float z = height - float(i) * stepZ;
+ auto *newRow = new QSurfaceDataRow;
+ newRow->reserve(imageWidth);
+ for (int j = 0; j < imageWidth; ++j) {
+ uchar aa = bits[p + 0];
+ uchar rr = bits[p + 1];
+ uchar gg = bits[p + 2];
+ uint color = uint((gg << 16) + (rr << 8) + aa);
+ float y = float(color) / packingFactor;
+ newRow->append(QSurfaceDataItem({float(j) * stepX, y, z}));
+ p += 4;
+ }
+ dataArray->append(newRow);
+ }
+
+ dataProxy()->resetArray(dataArray);
+ //! [1]
+
+ m_sampleCountX = float(imageWidth);
+ m_sampleCountZ = float(imageHeight);
+}
diff --git a/examples/datavisualization/graphgallery/topographicseries.h b/examples/datavisualization/graphgallery/topographicseries.h
new file mode 100644
index 00000000..41e03b1e
--- /dev/null
+++ b/examples/datavisualization/graphgallery/topographicseries.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TOPOGRAPHICSERIES_H
+#define TOPOGRAPHICSERIES_H
+
+#include <QtDataVisualization/qsurface3dseries.h>
+
+class TopographicSeries : public QSurface3DSeries
+{
+ Q_OBJECT
+public:
+ TopographicSeries();
+ ~TopographicSeries();
+
+ void setTopographyFile(const QString file, float width, float height);
+
+ float sampleCountX() { return m_sampleCountX; }
+ float sampleCountZ() { return m_sampleCountZ; }
+
+private:
+ float m_sampleCountX = 0.f;
+ float m_sampleCountZ = 0.f;
+};
+
+#endif // TOPOGRAPHICSERIES_H
diff --git a/examples/datavisualization/graphgallery/variantbardatamapping.cpp b/examples/datavisualization/graphgallery/variantbardatamapping.cpp
new file mode 100644
index 00000000..7a2a6cc7
--- /dev/null
+++ b/examples/datavisualization/graphgallery/variantbardatamapping.cpp
@@ -0,0 +1,85 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "variantbardatamapping.h"
+
+VariantBarDataMapping::VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
+ : QObject(nullptr)
+{
+ m_rowIndex = rowIndex;
+ m_columnIndex = columnIndex;
+ m_valueIndex = valueIndex;
+ m_rowCategories = rowCategories;
+ m_columnCategories = columnCategories;
+}
+
+VariantBarDataMapping::~VariantBarDataMapping() = default;
+
+void VariantBarDataMapping::setRowIndex(int index)
+{
+ m_rowIndex = index;
+ emit mappingChanged();
+}
+
+int VariantBarDataMapping::rowIndex() const
+{
+ return m_rowIndex;
+}
+
+void VariantBarDataMapping::setColumnIndex(int index)
+{
+ m_columnIndex = index;
+ emit mappingChanged();
+}
+
+int VariantBarDataMapping::columnIndex() const
+{
+ return m_columnIndex;
+}
+
+void VariantBarDataMapping::setValueIndex(int index)
+{
+ m_valueIndex = index;
+ emit mappingChanged();
+}
+
+int VariantBarDataMapping::valueIndex() const
+{
+ return m_valueIndex;
+}
+
+void VariantBarDataMapping::setRowCategories(const QStringList &categories)
+{
+ m_rowCategories = categories;
+ emit mappingChanged();
+}
+
+const QStringList &VariantBarDataMapping::rowCategories() const
+{
+ return m_rowCategories;
+}
+
+void VariantBarDataMapping::setColumnCategories(const QStringList &categories)
+{
+ m_columnCategories = categories;
+ emit mappingChanged();
+}
+
+const QStringList &VariantBarDataMapping::columnCategories() const
+{
+ return m_columnCategories;
+}
+
+void VariantBarDataMapping::remap(int rowIndex, int columnIndex, int valueIndex,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
+{
+ m_rowIndex = rowIndex;
+ m_columnIndex = columnIndex;
+ m_valueIndex = valueIndex;
+ m_rowCategories = rowCategories;
+ m_columnCategories = columnCategories;
+ emit mappingChanged();
+}
diff --git a/examples/datavisualization/graphgallery/variantbardatamapping.h b/examples/datavisualization/graphgallery/variantbardatamapping.h
new file mode 100644
index 00000000..25bacebd
--- /dev/null
+++ b/examples/datavisualization/graphgallery/variantbardatamapping.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VARIANTBARDATAMAPPING_H
+#define VARIANTBARDATAMAPPING_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qstringlist.h>
+
+class VariantBarDataMapping : public QObject
+{
+ Q_OBJECT
+ //! [0]
+ Q_PROPERTY(int rowIndex READ rowIndex WRITE setRowIndex NOTIFY rowIndexChanged)
+ Q_PROPERTY(int columnIndex READ columnIndex WRITE setColumnIndex NOTIFY columnIndexChanged)
+ Q_PROPERTY(int valueIndex READ valueIndex WRITE setValueIndex NOTIFY valueIndexChanged)
+ Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories NOTIFY rowCategoriesChanged)
+ Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories NOTIFY columnCategoriesChanged)
+ //! [0]
+public:
+ //! [1]
+ explicit VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories);
+ //! [1]
+ virtual ~VariantBarDataMapping();
+
+ void setRowIndex(int index);
+ int rowIndex() const;
+ void setColumnIndex(int index);
+ int columnIndex() const;
+ void setValueIndex(int index);
+ int valueIndex() const;
+
+ void setRowCategories(const QStringList &categories);
+ const QStringList &rowCategories() const;
+ void setColumnCategories(const QStringList &categories);
+ const QStringList &columnCategories() const;
+
+ //! [2]
+ void remap(int rowIndex, int columnIndex, int valueIndex,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories);
+ //! [2]
+Q_SIGNALS:
+ void rowIndexChanged();
+ void columnIndexChanged();
+ void valueIndexChanged();
+ void rowCategoriesChanged();
+ void columnCategoriesChanged();
+ //! [3]
+ void mappingChanged();
+ //! [3]
+
+private:
+ // Indexes of the mapped items in the VariantDataItem
+ int m_rowIndex = 0;
+ int m_columnIndex = 1;
+ int m_valueIndex = 2;
+
+ // For row/column items, sort items into these categories. Other categories are ignored.
+ QStringList m_rowCategories = {};
+ QStringList m_columnCategories = {};
+};
+
+#endif
diff --git a/examples/datavisualization/customproxy/variantbardataproxy.cpp b/examples/datavisualization/graphgallery/variantbardataproxy.cpp
index 587ef0c9..8fe73abc 100644
--- a/examples/datavisualization/customproxy/variantbardataproxy.cpp
+++ b/examples/datavisualization/graphgallery/variantbardataproxy.cpp
@@ -1,48 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "variantbardataproxy.h"
-using namespace QtDataVisualization;
-
-VariantBarDataProxy::VariantBarDataProxy() :
- QBarDataProxy()
-{
-}
-
-VariantBarDataProxy::VariantBarDataProxy(VariantDataSet *newSet,
- VariantBarDataMapping *mapping) :
- QBarDataProxy()
-{
- setDataSet(newSet);
- setMapping(mapping);
-}
+VariantBarDataProxy::VariantBarDataProxy() = default;
VariantBarDataProxy::~VariantBarDataProxy()
{
@@ -52,7 +13,7 @@ VariantBarDataProxy::~VariantBarDataProxy()
void VariantBarDataProxy::setDataSet(VariantDataSet *newSet)
{
if (!m_dataSet.isNull())
- QObject::disconnect(m_dataSet.data(), 0, this, 0);
+ QObject::disconnect(m_dataSet.data(), nullptr, this, nullptr);
m_dataSet = newSet;
@@ -72,15 +33,17 @@ VariantDataSet *VariantBarDataProxy::dataSet()
void VariantBarDataProxy::setMapping(VariantBarDataMapping *mapping)
{
- if (!m_mapping.isNull())
+ if (!m_mapping.isNull()) {
QObject::disconnect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
&VariantBarDataProxy::handleMappingChanged);
+ }
m_mapping = mapping;
- if (!m_mapping.isNull())
+ if (!m_mapping.isNull()) {
QObject::connect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
&VariantBarDataProxy::handleMappingChanged);
+ }
resolveDataSet();
}
@@ -102,7 +65,7 @@ void VariantBarDataProxy::handleItemsAdded(int index, int count)
void VariantBarDataProxy::handleDataCleared()
{
// Data cleared, reset array
- resetArray(0);
+ resetArray(nullptr);
}
void VariantBarDataProxy::handleMappingChanged()
@@ -117,7 +80,7 @@ void VariantBarDataProxy::resolveDataSet()
// If we have no data or mapping, or the categories are not defined, simply clear the array
if (m_dataSet.isNull() || m_mapping.isNull() || !m_mapping->rowCategories().size()
|| !m_mapping->columnCategories().size()) {
- resetArray(0);
+ resetArray(nullptr);
return;
}
const VariantDataItemList &itemList = m_dataSet->itemList();
@@ -129,18 +92,18 @@ void VariantBarDataProxy::resolveDataSet()
const QStringList &columnList = m_mapping->columnCategories();
// Sort values into rows and columns
- typedef QHash<QString, float> ColumnValueMap;
+ using ColumnValueMap = QHash<QString, float>;
QHash <QString, ColumnValueMap> itemValueMap;
- foreach (const VariantDataItem *item, itemList) {
+ for (const VariantDataItem *item : itemList) {
itemValueMap[item->at(rowIndex).toString()][item->at(columnIndex).toString()]
= item->at(valueIndex).toReal();
}
// Create a new data array in format the parent class understands
- QBarDataArray *newProxyArray = new QBarDataArray;
- foreach (QString rowKey, rowList) {
- QBarDataRow *newProxyRow = new QBarDataRow(columnList.size());
- for (int i = 0; i < columnList.size(); i++)
+ auto *newProxyArray = new QBarDataArray;
+ for (const QString &rowKey : rowList) {
+ auto *newProxyRow = new QBarDataRow(columnList.size());
+ for (qsizetype i = 0; i < columnList.size(); ++i)
(*newProxyRow)[i].setValue(itemValueMap[rowKey][columnList.at(i)]);
newProxyArray->append(newProxyRow);
}
diff --git a/examples/datavisualization/graphgallery/variantbardataproxy.h b/examples/datavisualization/graphgallery/variantbardataproxy.h
new file mode 100644
index 00000000..6a4d2f31
--- /dev/null
+++ b/examples/datavisualization/graphgallery/variantbardataproxy.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VARIANTBARDATAPROXY_H
+#define VARIANTBARDATAPROXY_H
+
+#include "variantdataset.h"
+#include "variantbardatamapping.h"
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtCore/qpointer.h>
+
+//! [0]
+class VariantBarDataProxy : public QBarDataProxy
+//! [0]
+{
+ Q_OBJECT
+
+public:
+ VariantBarDataProxy();
+ virtual ~VariantBarDataProxy();
+
+ //! [1]
+ // Doesn't gain ownership of the dataset, but does connect to it to listen for data changes.
+ void setDataSet(VariantDataSet *newSet);
+ VariantDataSet *dataSet();
+
+ // Map key (row, column, value) to value index in data item (VariantItem).
+ // Doesn't gain ownership of mapping, but does connect to it to listen for mapping changes.
+ // Modifying mapping that is set to proxy will trigger dataset re-resolving.
+ void setMapping(VariantBarDataMapping *mapping);
+ VariantBarDataMapping *mapping();
+ //! [1]
+
+public Q_SLOTS:
+ void handleItemsAdded(int index, int count);
+ void handleDataCleared();
+ void handleMappingChanged();
+
+private:
+ void resolveDataSet();
+
+ QPointer<VariantDataSet> m_dataSet;
+ QPointer<VariantBarDataMapping> m_mapping;
+
+ Q_DISABLE_COPY(VariantBarDataProxy)
+};
+
+#endif
diff --git a/examples/datavisualization/graphgallery/variantdataset.cpp b/examples/datavisualization/graphgallery/variantdataset.cpp
new file mode 100644
index 00000000..3892f02b
--- /dev/null
+++ b/examples/datavisualization/graphgallery/variantdataset.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "variantdataset.h"
+
+VariantDataSet::VariantDataSet() = default;
+
+VariantDataSet::~VariantDataSet()
+{
+ clear();
+}
+
+void VariantDataSet::clear()
+{
+ for (VariantDataItem *item : m_variantData) {
+ item->clear();
+ delete item;
+ }
+ m_variantData.clear();
+ emit dataCleared();
+}
+
+int VariantDataSet::addItem(VariantDataItem *item)
+{
+ m_variantData.append(item);
+ int addIndex = m_variantData.size();
+
+ emit itemsAdded(addIndex, 1);
+ return addIndex;
+}
+
+int VariantDataSet::addItems(VariantDataItemList *itemList)
+{
+ int newCount = itemList->size();
+ int addIndex = m_variantData.size();
+ m_variantData.append(*itemList);
+ delete itemList;
+ emit itemsAdded(addIndex, newCount);
+ return addIndex;
+}
+
+const VariantDataItemList &VariantDataSet::itemList() const
+{
+ return m_variantData;
+}
diff --git a/examples/datavisualization/graphgallery/variantdataset.h b/examples/datavisualization/graphgallery/variantdataset.h
new file mode 100644
index 00000000..ca0d7ffd
--- /dev/null
+++ b/examples/datavisualization/graphgallery/variantdataset.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VARIANTDATASET_H
+#define VARIANTDATASET_H
+
+#include <QtCore/qvariantlist.h>
+
+//! [0]
+using VariantDataItem = QVariantList;
+using VariantDataItemList = QList<VariantDataItem *>;
+//! [0]
+
+class VariantDataSet : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit VariantDataSet();
+ ~VariantDataSet();
+
+ //! [1]
+ void clear();
+
+ int addItem(VariantDataItem *item);
+ int addItems(VariantDataItemList *itemList);
+
+ const VariantDataItemList &itemList() const;
+
+Q_SIGNALS:
+ void itemsAdded(int index, int count);
+ void dataCleared();
+ //! [1]
+
+private:
+ VariantDataItemList m_variantData;
+
+ Q_DISABLE_COPY(VariantDataSet)
+};
+
+#endif
diff --git a/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png b/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png
deleted file mode 100644
index 677b7eec..00000000
--- a/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png b/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png
deleted file mode 100644
index c042f84d..00000000
--- a/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc b/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc
deleted file mode 100644
index 9a66c26a..00000000
--- a/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example itemmodel
- \title Item Model Example
- \ingroup qtdatavisualization_examples
- \brief Using an item model as data source for Q3DBars.
-
- The item model example shows how to make a simple 3D bar graph using Q3DBars and how to modify
- the data being drawn at run-time. The example shows how to:
-
- \list
- \li Create an application with Q3DBars and widgets
- \li Use QItemModelBarDataProxy to set data to the graph
- \li Use a table widget to modify the data in the graph
- \endlist
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image itemmodel-example-2.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container for it:
-
- \snippet itemmodel/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, and Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create a layout and add the graph and the table widget into it:
-
- \snippet itemmodel/main.cpp 1
-
- The table widget is going to be used to display the numerical data being inserted into the
- graph, and to modify it (See \l {Adding data to the graph} and \l {Interacting with the data}).
-
- We need to instantiate QItemModelBarDataProxy and a QBar3DSeries for it, and give the series
- to the graph:
-
- \snippet itemmodel/main.cpp 2
-
- Here we tell the proxy to directly map the model's rows and columns into the proxy's rows and
- columns instead of defining row and column roles to map for them. Then we give the model from
- the table widget to the proxy. We also create a series instance and set the proxy to it.
- We customize the series visuals a bit by changing the object mesh to pyramids, and finally
- add the series to the graph.
-
- Next, let's create another class to handle the data addition and other interaction with the
- graph. Let's call it \c GraphDataGenerator (See \l {Setting up the graph} and
- \l {Adding data to the graph} for details) and connect some signals between QBar3DSeries,
- \c GraphDataGenerator, and QTableWidget (See \l {Interacting with the data} for a closer look):
-
- \snippet itemmodel/main.cpp 3
-
- The application main is done and we can show the graph and start the event loop:
-
- \snippet itemmodel/main.cpp 4
-
- \section1 Setting up the Graph
-
- Let's set up the visual attributes for the graph in the constructor of \c GraphDataGenerator:
-
- \snippet itemmodel/main.cpp 5
- \snippet itemmodel/main.cpp 6
- \snippet itemmodel/main.cpp 7
-
- First we set bar thickness ratio to 1.0, which means bars will be as wide as they are deep. 1.0
- is also the default value, so the line is basically unnecessary. It's left there so you could
- easily try how changing it affects the graph. The second line sets bar spacings to 0.2, which
- means there will be a gap of 20% of the bar's thickness between the bars in both directions.
-
- We want to be able to select rows of data for a closer inspection, so we set the selection mode
- to slice item and row. This means that whenever we select a bar in the graph, the whole row will be
- displayed separately and the selected bar will be highlighted.
-
- We don't want to use the default colors, so we set one of the predefined themes as the active theme.
-
- Next line sets the font to \c Impact. If your system doesn't have it, it will be replaced by
- the system default.
-
- And finally, we set the camera position to one of the predefined camera positions.
- Now the initial graph settings are done.
-
- \note You do not need to set any of these in case you're happy with the defaults. You can
- easily try them by commenting out the contents of the constructor.
-
- \section1 Adding Data to the Graph
-
- We created the data generator in the application main and gave it the graph and the table
- widget as parameters:
-
- \code
- GraphDataGenerator generator(graph, tableWidget);
- \endcode
-
- We added a separate start method to the generator, so that it wouldn't start doing anything
- until everything else is set up. We then called the method when starting the application:
-
- \code
- generator.start();
- \endcode
-
- Let's have a look at the contents of the \c start() method:
-
- \snippet itemmodel/main.cpp 8
-
- The main thing \c start() does is set up the data model. It also activates a timer for getting
- the accurate dimensions of the table widget after it's been filled with data. The reason we
- do this is that the widget doesn't know its final visual domensions until all the data has been
- inserted to it and it has been shown. The data timer usage is not vital for the
- application, so we won't take a closer look at it. It's just there to make QTableWidget look better.
-
- In \c setupModel() we first introduce the row and column labels, and the actual data:
-
- \snippet itemmodel/main.cpp 9
-
- Then we set up the axes:
-
- \snippet itemmodel/main.cpp 10
-
- Next we will set up the table widget:
-
- \snippet itemmodel/main.cpp 11
-
- After that all that's left is adding the data to the table widget:
-
- \snippet itemmodel/main.cpp 12
-
- Now we have a bar graph and a table widget, both displaying the same data.
-
- You're probably wondering how the data can be displayed in the graph, as the only thing we did
- was add it to the table widget? That's because of what we did earlier, in the application main:
-
- \snippet itemmodel/main.cpp 2
-
- We created QItemModelBarDataProxy instance, and gave the proxy the model of the table widget
- we just created. The proxy maps the rows and the columns in the model of the table widget into
- rows and columns for itself directly, as we set the QItemModelBarDataProxy::useModelCategories
- property to true, and the graph gets the data to be displayed via the series that owns the proxy.
-
- \section1 Interacting with the Data
-
- We made a couple of signal connections in the application main earlier:
-
- \snippet itemmodel/main.cpp 3
-
- Now we'll find out what these were for.
-
- The first one connects a signal from Q3DBars to the \c GraphDataGenerator. Signal
- QBar3DSeries::selectedBarChanged() is emitted when a bar is selected from the series. We connect
- that to a method in the data generator that selects the same data item in the table widget:
-
- \snippet itemmodel/main.cpp 13
-
- The second connection does the opposite; it connects a signal from the table widget to a
- method in the data generator. The method then selects the corresponding bar in the series:
-
- \snippet itemmodel/main.cpp 14
-
- You can even select an item in the widget and change the value of it, and the new value is
- updated to the graph. This is handled again by the proxy with mapping between the data
- in the table widget and itself.
-
- \image itemmodel-example.png
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/itemmodel/itemmodel.pro b/examples/datavisualization/itemmodel/itemmodel.pro
deleted file mode 100644
index 60b36b98..00000000
--- a/examples/datavisualization/itemmodel/itemmodel.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp
-
-QT += widgets
-requires(qtConfig(tablewidget))
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/itemmodel/main.cpp b/examples/datavisualization/itemmodel/main.cpp
deleted file mode 100644
index 35bf7e0d..00000000
--- a/examples/datavisualization/itemmodel/main.cpp
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtDataVisualization/q3dbars.h>
-#include <QtDataVisualization/qcategory3daxis.h>
-#include <QtDataVisualization/qitemmodelbardataproxy.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qbar3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QTableWidget>
-#include <QtGui/QScreen>
-#include <QtCore/QRandomGenerator>
-#include <QtCore/QTimer>
-#include <QtGui/QFont>
-#include <QtCore/QDebug>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QMessageBox>
-
-#define USE_STATIC_DATA
-
-using namespace QtDataVisualization;
-
-class GraphDataGenerator : public QObject
-{
-public:
- explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
- ~GraphDataGenerator();
-
- void setupModel();
- void addRow();
- void changeStyle();
- void changePresetCamera();
- void changeTheme();
- void start();
- void selectFromTable(const QPoint &selection);
- void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
- void fixTableSize();
-
-private:
- Q3DBars *m_graph;
- QTimer *m_dataTimer;
- int m_columnCount;
- int m_rowCount;
- QTableWidget *m_tableWidget; // not owned
-};
-
-GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
- : m_graph(bargraph),
- m_dataTimer(0),
- m_columnCount(100),
- m_rowCount(50),
- m_tableWidget(tableWidget)
-{
- //! [5]
- // Set up bar specifications; make the bars as wide as they are deep,
- // and add a small space between them
- m_graph->setBarThickness(1.0f);
- m_graph->setBarSpacing(QSizeF(0.2, 0.2));
-
- //! [5]
-#ifndef USE_STATIC_DATA
- // Set up sample space; make it as deep as it's wide
- m_graph->rowAxis()->setRange(0, m_rowCount);
- m_graph->columnAxis()->setRange(0, m_columnCount);
- m_tableWidget->setColumnCount(m_columnCount);
-
- // Set selection mode to full
- m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn);
-
- // Hide axis labels by explicitly setting one empty string as label list
- m_graph->rowAxis()->setLabels(QStringList(QString()));
- m_graph->columnAxis()->setLabels(QStringList(QString()));
-
- m_graph->seriesList().at(0)->setItemLabelFormat(QStringLiteral("@valueLabel"));
-#else
- //! [6]
- // Set selection mode to slice row
- m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice);
-
- //! [6]
-#endif
-
- //! [7]
- // Set theme
- m_graph->activeTheme()->setType(Q3DTheme::ThemeDigia);
-
- // Set font
- m_graph->activeTheme()->setFont(QFont("Impact", 20));
-
- // Set preset camera position
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
- //! [7]
-}
-
-GraphDataGenerator::~GraphDataGenerator()
-{
- if (m_dataTimer) {
- m_dataTimer->stop();
- delete m_dataTimer;
- }
- delete m_graph;
-}
-
-void GraphDataGenerator::start()
-{
-#ifndef USE_STATIC_DATA
- m_dataTimer = new QTimer();
- m_dataTimer->setTimerType(Qt::CoarseTimer);
- QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
- m_dataTimer->start(0);
- m_tableWidget->setFixedWidth(m_graph->width());
-#else
- //! [8]
- setupModel();
-
- // Table needs to be shown before the size of its headers can be accurately obtained,
- // so we postpone it a bit
- m_dataTimer = new QTimer();
- m_dataTimer->setSingleShot(true);
- QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
- m_dataTimer->start(0);
- //! [8]
-#endif
-}
-
-void GraphDataGenerator::setupModel()
-{
- //! [9]
- // Set up row and column names
- QStringList days;
- days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
- QStringList weeks;
- weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
-
- // Set up data Mon Tue Wed Thu Fri Sat Sun
- float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f}, // week 1
- {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f}, // week 2
- {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f}, // week 3
- {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f}, // week 4
- {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}}; // week 5
- //! [9]
-
- // Add labels
- //! [10]
- m_graph->rowAxis()->setTitle("Week of year");
- m_graph->rowAxis()->setTitleVisible(true);
- m_graph->columnAxis()->setTitle("Day of week");
- m_graph->columnAxis()->setTitleVisible(true);
- m_graph->valueAxis()->setTitle("Hours spent on the Internet");
- m_graph->valueAxis()->setTitleVisible(true);
- m_graph->valueAxis()->setLabelFormat("%.1f h");
- //! [10]
-
- //! [11]
- m_tableWidget->setRowCount(5);
- m_tableWidget->setColumnCount(7);
- m_tableWidget->setHorizontalHeaderLabels(days);
- m_tableWidget->setVerticalHeaderLabels(weeks);
- m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- m_tableWidget->setCurrentCell(-1, -1);
- m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
- //! [11]
-
- //! [12]
- for (int week = 0; week < weeks.size(); week++) {
- for (int day = 0; day < days.size(); day++) {
- QModelIndex index = m_tableWidget->model()->index(week, day);
- m_tableWidget->model()->setData(index, hours[week][day]);
- }
- }
- //! [12]
-}
-
-void GraphDataGenerator::addRow()
-{
- m_tableWidget->model()->insertRow(0);
- if (m_tableWidget->model()->rowCount() > m_rowCount)
- m_tableWidget->model()->removeRow(m_rowCount);
- for (int i = 0; i < m_columnCount; i++) {
- QModelIndex index = m_tableWidget->model()->index(0, i);
- m_tableWidget->model()->setData(index,
- ((float)i / (float)m_columnCount) / 2.0f +
- (float)(QRandomGenerator::global()->bounded(30)) / 100.0f);
- }
- m_tableWidget->resizeColumnsToContents();
-}
-
-//! [13]
-void GraphDataGenerator::selectFromTable(const QPoint &selection)
-{
- m_tableWidget->setFocus();
- m_tableWidget->setCurrentCell(selection.x(), selection.y());
-}
-//! [13]
-
-//! [14]
-void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
- int previousRow, int previousColumn)
-{
- Q_UNUSED(previousRow);
- Q_UNUSED(previousColumn);
- m_graph->seriesList().at(0)->setSelectedBar(QPoint(currentRow, currentColumn));
-}
-//! [14]
-
-void GraphDataGenerator::fixTableSize()
-{
- int width = m_tableWidget->horizontalHeader()->length();
- width += m_tableWidget->verticalHeader()->width();
- m_tableWidget->setFixedWidth(width + 2);
- int height = m_tableWidget->verticalHeader()->length();
- height += m_tableWidget->horizontalHeader()->height();
- m_tableWidget->setFixedHeight(height + 2);
-}
-
-int main(int argc, char **argv)
-{
- //! [0]
- QApplication app(argc, argv);
- Q3DBars *graph = new Q3DBars();
- QWidget *container = QWidget::createWindowContainer(graph);
- //! [0]
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget widget;
- QVBoxLayout *layout = new QVBoxLayout(&widget);
- QTableWidget *tableWidget = new QTableWidget(&widget);
- layout->addWidget(container, 1);
- layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
- //! [1]
-
- tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- tableWidget->setAlternatingRowColors(true);
- widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
-
- //! [2]
- // Since we are dealing with QTableWidget, the model will already have data sorted properly
- // into rows and columns, so we simply set useModelCategories property to true to utilize this.
- QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
- proxy->setUseModelCategories(true);
- QBar3DSeries *series = new QBar3DSeries(proxy);
- series->setMesh(QAbstract3DSeries::MeshPyramid);
- graph->addSeries(series);
- //! [2]
-
- //! [3]
- GraphDataGenerator generator(graph, tableWidget);
- QObject::connect(series, &QBar3DSeries::selectedBarChanged, &generator,
- &GraphDataGenerator::selectFromTable);
- QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
- &GraphDataGenerator::selectedFromTable);
- //! [3]
-
- //! [4]
- widget.show();
- generator.start();
- return app.exec();
- //! [4]
-}
diff --git a/examples/datavisualization/qmlaxisdrag/doc/images/qmlaxisdrag-example.png b/examples/datavisualization/qmlaxisdrag/doc/images/qmlaxisdrag-example.png
deleted file mode 100644
index de33ba66..00000000
--- a/examples/datavisualization/qmlaxisdrag/doc/images/qmlaxisdrag-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlaxisdrag/doc/src/qmlaxisdrag.qdoc b/examples/datavisualization/qmlaxisdrag/doc/src/qmlaxisdrag.qdoc
deleted file mode 100644
index f0dea871..00000000
--- a/examples/datavisualization/qmlaxisdrag/doc/src/qmlaxisdrag.qdoc
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlaxisdrag
- \title Qt Quick 2 Axis Dragging Example
- \ingroup qtdatavisualization_examples
- \brief Implementing axis dragging in QML.
- \since QtDataVisualization 1.1
-
- The Qt Quick 2 axis dragging example concentrates on showing how to implement axis range
- changing by dragging axis labels in QML. It also gives a quick peek to two other new features
- in Qt Data Visualization 1.1: orthographic projection and dynamic custom item handling.
-
- \image qmlaxisdrag-example.png
-
- \include examples-run.qdocinc
-
- \section1 Overriding Default Input Handling
-
- First we deactivate the default input handling mechanism by setting the active input handler
- of Scatter3D graph to \c{null}:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 0
- \dots
-
- Then we add a MouseArea and set it to fill the parent, which is the same \c Item our
- \c scatterGraph is contained in. We also set it to accept only left mouse button presses,
- as in this example we are not interested in other buttons:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 1
- \dots
-
- Then we need to listen to mouse presses, and when caught, send a selection query to the graph:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 2
-
- Current mouse position, that will be needed for move distance calculation, is caught in
- \c{onPositionChanged}:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 3
- \dots
-
- At the end of \c{onPositionChanged}, we'll save the previous mouse position for move distance
- calculation that will be introduced later:
-
- \dots 0
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 4
-
- \section1 Translating Mouse Movement to Axis Range Change
-
- in \c scatterGraph we will need to listen to \c onSelectedElementChanged signal. The signal
- is emitted after the selection query has been made in the \c{onPressed} of \c{inputArea}. We
- set the element type into a property we defined (\c{property int selectedAxisLabel: -1}) in our
- main component, since it is of a type we are interested in:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 5
-
- Then, back in the \c onPositionChanged of \c{inputArea}, we check if a mouse button is pressed
- and if we have a current axis label selection. If the conditions are met, we'll call the
- function that does the conversion from mouse movement to axis range update:
-
- \dots 0
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 6
- \dots 0
-
- The conversion is easy in this case, as we have a fixed camera rotation. We can use some
- precalculated values, calculate mouse move distance, and apply the values to the
- selected axis range:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 7
-
- For a more sophisticated conversion from mouse movement to axis range update, see
- \l{Axis Range Dragging With Labels Example}{this example}.
-
- \section1 Other Features
-
- The example also demonstrates how to use orthographic projection and how to update properties
- of a custom item on the fly.
-
- Orthographic projection is very simple. You'll just need to change \c orthoProjection property
- of \c{scatterGraph}. In this example we have a button for toggling it on and off:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 8
-
- For custom items, first we'll add one in the \c customItemList of \c{scatterGraph}:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 9
-
- We have implemented a timer to add, remove, and rotate all the items in the graph,
- and we'll use the same timer for rotating the custom item:
-
- \snippet qmlaxisdrag/qml/qmlaxisdrag/main.qml 10
- \dots
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlaxisdrag/main.cpp b/examples/datavisualization/qmlaxisdrag/main.cpp
deleted file mode 100644
index 4e2fa483..00000000
--- a/examples/datavisualization/qmlaxisdrag/main.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("QML Draggable Axes"));
-
- viewer.setSource(QUrl("qrc:/qml/qmlaxisdrag/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/NewButton.qml b/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/NewButton.qml
deleted file mode 100644
index 3529f56f..00000000
--- a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/NewButton.qml
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- height: 80
-
- Button {
- opacity: 0.5
- width: parent.width
- height: parent.height
- Text {
- id: buttonText
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cubetexture.png b/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cubetexture.png
deleted file mode 100644
index 3cea6863..00000000
--- a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cubetexture.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/main.qml b/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/main.qml
deleted file mode 100644
index 764987b0..00000000
--- a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/main.qml
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtDataVisualization 1.1
-import "."
-
-Item {
- id: mainView
- width: 800
- height: 600
- visible: true
-
- property int selectedAxisLabel: -1
- property real dragSpeedModifier: 100.0
- property int currentMouseX: -1
- property int currentMouseY: -1
- property int previousMouseX: -1
- property int previousMouseY: -1
-
- ListModel {
- id: graphModel
- ListElement{ xPos: 0.0; yPos: 0.0; zPos: 0.0; rotation: "@0,0,0,0" }
- ListElement{ xPos: 1.0; yPos: 1.0; zPos: 1.0; rotation: "@45,1,1,1" }
- }
-
- Timer {
- id: dataTimer
- interval: 1
- running: true
- repeat: true
- property bool isIncreasing: true
- property real rotationAngle: 0
-
- function generateQuaternion() {
- return "@" + Math.random() * 360 + "," + Math.random() + ","
- + Math.random() + "," + Math.random()
- }
-
- function appendRow() {
- graphModel.append({"xPos": Math.random(),
- "yPos": Math.random(),
- "zPos": Math.random(),
- "rotation": generateQuaternion()
- });
- }
-
- //! [10]
- onTriggered: {
- rotationAngle = rotationAngle + 1
- qtCube.setRotationAxisAndAngle(Qt.vector3d(1,0,1), rotationAngle)
- //! [10]
- scatterSeries.setMeshAxisAndAngle(Qt.vector3d(1,1,1), rotationAngle)
- if (isIncreasing) {
- for (var i = 0; i < 10; i++)
- appendRow()
- if (graphModel.count > 2002) {
- scatterGraph.theme = isabelleTheme
- isIncreasing = false
- }
- } else {
- graphModel.remove(2, 10);
- if (graphModel.count == 2) {
- scatterGraph.theme = dynamicColorTheme
- isIncreasing = true
- }
- }
- }
- }
-
- ThemeColor {
- id: dynamicColor
- ColorAnimation on color {
- from: "red"
- to: "yellow"
- duration: 2000
- loops: Animation.Infinite
- }
- }
-
- Theme3D {
- id: dynamicColorTheme
- type: Theme3D.ThemeEbony
- baseColors: [dynamicColor]
- font.pointSize: 50
- labelBorderEnabled: true
- labelBackgroundColor: "gold"
- labelTextColor: "black"
- }
-
- Theme3D {
- id: isabelleTheme
- type: Theme3D.ThemeIsabelle
- font.pointSize: 50
- labelBorderEnabled: true
- labelBackgroundColor: "gold"
- labelTextColor: "black"
- }
-
- Item {
- id: dataView
- anchors.bottom: parent.bottom
- width: parent.width
- height: parent.height
-
- //! [0]
- Scatter3D {
- id: scatterGraph
- inputHandler: null
- //! [0]
- width: dataView.width
- height: dataView.height
- theme: dynamicColorTheme
- shadowQuality: AbstractGraph3D.ShadowQualityLow
- scene.activeCamera.yRotation: 45.0
- scene.activeCamera.xRotation: 45.0
- scene.activeCamera.zoomLevel: 75.0
-
- Scatter3DSeries {
- id: scatterSeries
- itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
- mesh: Abstract3DSeries.MeshCube
-
- ItemModelScatterDataProxy {
- itemModel: graphModel
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- rotationRole: "rotation"
- }
- }
- //! [9]
- customItemList: [
- Custom3DItem {
- id: qtCube
- meshFile: ":/mesh/cube"
- textureFile: ":/texture/texture"
- position: Qt.vector3d(0.65,0.35,0.65)
- scaling: Qt.vector3d(0.3,0.3,0.3)
- }
- ]
- //! [9]
- //! [5]
- onSelectedElementChanged: {
- if (selectedElement >= AbstractGraph3D.ElementAxisXLabel
- && selectedElement <= AbstractGraph3D.ElementAxisZLabel)
- selectedAxisLabel = selectedElement
- else
- selectedAxisLabel = -1
- }
- //! [5]
- }
-
- //! [1]
- MouseArea {
- anchors.fill: parent
- hoverEnabled: true
- acceptedButtons: Qt.LeftButton
- //! [1]
-
- //! [3]
- onPositionChanged: {
- currentMouseX = mouse.x;
- currentMouseY = mouse.y;
- //! [3]
- //! [6]
- if (pressed && selectedAxisLabel != -1)
- dragAxis();
- //! [6]
- //! [4]
- previousMouseX = currentMouseX;
- previousMouseY = currentMouseY;
- }
- //! [4]
-
- //! [2]
- onPressed: {
- scatterGraph.scene.selectionQueryPosition = Qt.point(mouse.x, mouse.y);
- }
- //! [2]
-
- onReleased: {
- // We need to clear mouse positions and selected axis, because touch devices cannot
- // track position all the time
- selectedAxisLabel = -1
- currentMouseX = -1
- currentMouseY = -1
- previousMouseX = -1
- previousMouseY = -1
- }
- }
- }
-
- //! [7]
- function dragAxis() {
- // Do nothing if previous mouse position is uninitialized
- if (previousMouseX === -1)
- return
-
- // Directional drag multipliers based on rotation. Camera is locked to 45 degrees, so we
- // can use one precalculated value instead of calculating xx, xy, zx and zy individually
- var cameraMultiplier = 0.70710678
-
- // Calculate the mouse move amount
- var moveX = currentMouseX - previousMouseX
- var moveY = currentMouseY - previousMouseY
-
- // Adjust axes
- switch (selectedAxisLabel) {
- case AbstractGraph3D.ElementAxisXLabel:
- var distance = ((moveX - moveY) * cameraMultiplier) / dragSpeedModifier
- // Check if we need to change min or max first to avoid invalid ranges
- if (distance > 0) {
- scatterGraph.axisX.min -= distance
- scatterGraph.axisX.max -= distance
- } else {
- scatterGraph.axisX.max -= distance
- scatterGraph.axisX.min -= distance
- }
- break
- case AbstractGraph3D.ElementAxisYLabel:
- distance = moveY / dragSpeedModifier
- // Check if we need to change min or max first to avoid invalid ranges
- if (distance > 0) {
- scatterGraph.axisY.max += distance
- scatterGraph.axisY.min += distance
- } else {
- scatterGraph.axisY.min += distance
- scatterGraph.axisY.max += distance
- }
- break
- case AbstractGraph3D.ElementAxisZLabel:
- distance = ((moveX + moveY) * cameraMultiplier) / dragSpeedModifier
- // Check if we need to change min or max first to avoid invalid ranges
- if (distance > 0) {
- scatterGraph.axisZ.max += distance
- scatterGraph.axisZ.min += distance
- } else {
- scatterGraph.axisZ.min += distance
- scatterGraph.axisZ.max += distance
- }
- break
- }
- }
- //! [7]
-
- NewButton {
- id: rangeToggle
- width: parent.width / 3 // We're adding 3 buttons and want to divide them equally
- text: "Use Preset Range"
- anchors.left: parent.left
- property bool autoRange: true
- onClicked: {
- if (autoRange) {
- text = "Use Automatic Range"
- scatterGraph.axisX.min = 0.3
- scatterGraph.axisX.max = 0.7
- scatterGraph.axisY.min = 0.3
- scatterGraph.axisY.max = 0.7
- scatterGraph.axisZ.min = 0.3
- scatterGraph.axisZ.max = 0.7
- autoRange = false
- dragSpeedModifier = 200.0
- } else {
- text = "Use Preset Range"
- autoRange = true
- dragSpeedModifier = 100.0
- }
- scatterGraph.axisX.autoAdjustRange = autoRange
- scatterGraph.axisY.autoAdjustRange = autoRange
- scatterGraph.axisZ.autoAdjustRange = autoRange
- }
- }
-
- //! [8]
- NewButton {
- id: orthoToggle
- width: parent.width / 3
- text: "Display Orthographic"
- anchors.left: rangeToggle.right
- onClicked: {
- if (scatterGraph.orthoProjection) {
- text = "Display Orthographic";
- scatterGraph.orthoProjection = false
- // Orthographic projection disables shadows, so we need to switch them back on
- scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityLow
- } else {
- text = "Display Perspective";
- scatterGraph.orthoProjection = true
- }
- }
- }
- //! [8]
-
- NewButton {
- id: exitButton
- width: parent.width / 3
- text: "Quit"
- anchors.left: orthoToggle.right
- onClicked: Qt.quit(0);
- }
-}
diff --git a/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.pro b/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.pro
deleted file mode 100644
index d45525ad..00000000
--- a/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp
-
-RESOURCES += qmlaxisdrag.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlaxisdrag/*
diff --git a/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.qrc b/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.qrc
deleted file mode 100644
index c6c45e26..00000000
--- a/examples/datavisualization/qmlaxisdrag/qmlaxisdrag.qrc
+++ /dev/null
@@ -1,12 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlaxisdrag/main.qml</file>
- <file>qml/qmlaxisdrag/NewButton.qml</file>
- </qresource>
- <qresource prefix="/mesh">
- <file alias="cube">qml/qmlaxisdrag/cube.obj</file>
- </qresource>
- <qresource prefix="/texture">
- <file alias="texture">qml/qmlaxisdrag/cubetexture.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlaxisformatter/customformatter.h b/examples/datavisualization/qmlaxisformatter/customformatter.h
deleted file mode 100644
index aa9db422..00000000
--- a/examples/datavisualization/qmlaxisformatter/customformatter.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOMFORMATTER_H
-#define CUSTOMFORMATTER_H
-
-#include <QtDataVisualization/QValue3DAxisFormatter>
-#include <QtCore/QDateTime>
-
-using namespace QtDataVisualization;
-
-//! [2]
-class CustomFormatter : public QValue3DAxisFormatter
-{
- //! [2]
- Q_OBJECT
-
- //! [1]
- Q_PROPERTY(QDate originDate READ originDate WRITE setOriginDate NOTIFY originDateChanged)
- //! [1]
- //! [3]
- Q_PROPERTY(QString selectionFormat READ selectionFormat WRITE setSelectionFormat NOTIFY selectionFormatChanged)
- //! [3]
-public:
- explicit CustomFormatter(QObject *parent = 0);
- virtual ~CustomFormatter();
-
- //! [0]
- virtual QValue3DAxisFormatter *createNewInstance() const;
- virtual void populateCopy(QValue3DAxisFormatter &copy) const;
- virtual void recalculate();
- virtual QString stringForValue(qreal value, const QString &format) const;
- //! [0]
-
- QDate originDate() const;
- QString selectionFormat() const;
-
-public Q_SLOTS:
- void setOriginDate(const QDate &date);
- void setSelectionFormat(const QString &format);
-
-Q_SIGNALS:
- void originDateChanged(const QDate &date);
- void selectionFormatChanged(const QString &format);
-
-private:
- Q_DISABLE_COPY(CustomFormatter)
-
- QDateTime valueToDateTime(qreal value) const;
-
- QDate m_originDate;
- QString m_selectionFormat;
-};
-
-#endif
diff --git a/examples/datavisualization/qmlaxisformatter/doc/images/qmlaxisformatter-example.png b/examples/datavisualization/qmlaxisformatter/doc/images/qmlaxisformatter-example.png
deleted file mode 100644
index fbfbd833..00000000
--- a/examples/datavisualization/qmlaxisformatter/doc/images/qmlaxisformatter-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlaxisformatter/doc/src/qmlaxisformatter.qdoc b/examples/datavisualization/qmlaxisformatter/doc/src/qmlaxisformatter.qdoc
deleted file mode 100644
index 3c9574d4..00000000
--- a/examples/datavisualization/qmlaxisformatter/doc/src/qmlaxisformatter.qdoc
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlaxisformatter
- \title Qt Quick 2 Axis Formatter Example
- \ingroup qtdatavisualization_examples
- \brief Example of a hybrid C++ and QML application demonstrating different axis formatters.
- \since QtDataVisualization 1.1
-
- The Qt Quick axis formatter example shows how to use predefined axis formatters and how to
- create a custom one.
-
- \image qmlaxisformatter-example.png
-
- The interesting thing about this example is axis formatters, so we'll concentrate on
- that and skip explaining the basic functionality - for
- more detailed QML example documentation, see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Custom Axis Formatter
-
- Customizing axis formatters requires subclassing the QValue3DAxisFormatter, which cannot be
- done in QML code alone. In this example we want an axis that interprets the float values as
- a timestamp and shows the date in the axis labels. To achieve this, we introduce a new class
- called \c CustomFormatter, which subclasses the QValue3DAxisFormatter:
-
- \snippet qmlaxisformatter/customformatter.h 2
- \dots 0
-
- Since float values of a QScatter3DSeries cannot be directly cast into QDateTime values due to
- difference in data width, we need some sort of mapping between the two. We chose to do the
- mapping by specifying an origin date for the formatter and interpreting the float values
- from the QScatter3DSeries as date offsets to that origin value. The origin date is given as
- a property:
-
- \snippet qmlaxisformatter/customformatter.h 1
-
- The mapping from value to QDateTime is done using \c valueToDateTime() method:
-
- \snippet qmlaxisformatter/customformatter.cpp 0
-
- To function as an axis formatter, our \c CustomFormatter needs to reimplement some virtual
- methods:
-
- \snippet qmlaxisformatter/customformatter.h 0
-
- The first two are simple, we just create a new instance of \c CustomFormatter and copy the
- necessary data over to it. These two methods are used to create and update a cache of formatter for
- rendering purposes. It is important to remember to call the superclass implementation
- of \c populateCopy():
-
- \snippet qmlaxisformatter/customformatter.cpp 1
-
- Bulk of the work done by \c CustomFormatter is done in the \c recalculate() method, where
- our formatter calculates the grid, subgrid, and label positions, as well as formats the label
- strings.
- In our custom formatter we ignore the segment count of the axis and draw a grid line always at
- midnight. Subsegment count and label positioning is handled normally:
-
- \snippet qmlaxisformatter/customformatter.cpp 2
-
- The axis labels are formatted to show only the date, but for selection label we want little more
- resolution for the timestamp, so we specify another property for our custom formatter to allow
- user to customize it:
-
- \snippet qmlaxisformatter/customformatter.h 3
-
- This selection format property is used in the reimplemented \c stringToValue method, where we
- ignore the submitted format and substitute the custom selection format for it:
-
- \snippet qmlaxisformatter/customformatter.cpp 3
-
- To expose our new custom formatter to the QML, we must declare and register it:
-
- \snippet qmlaxisformatter/main.cpp 0
- \dots 0
- \snippet qmlaxisformatter/main.cpp 1
-
- \section1 QML
-
- In the QML codes, we define a different axis for each dimension:
-
- \snippet qmlaxisformatter/qml/qmlaxisformatter/main.qml 3
-
- Z-axis is just a regular ValueAxis3D:
-
- \snippet qmlaxisformatter/qml/qmlaxisformatter/main.qml 0
-
- For the Y-axis we define a logarithmic axis. ValueAxis3D can be made to show logarithmic scale
- by specifying LogValueAxis3DFormatter for \c formatter property of the axis:
-
- \snippet qmlaxisformatter/qml/qmlaxisformatter/main.qml 2
-
- And finally, for the X-axis we use our new \c CustomFormatter:
-
- \snippet qmlaxisformatter/qml/qmlaxisformatter/main.qml 1
-
- Rest of the application consists of fairly self-explanatory logic for modifying the axes and
- showing the graph.
-*/
diff --git a/examples/datavisualization/qmlaxisformatter/main.cpp b/examples/datavisualization/qmlaxisformatter/main.cpp
deleted file mode 100644
index 71d0470a..00000000
--- a/examples/datavisualization/qmlaxisformatter/main.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "customformatter.h"
-
-#include <QtGui/QGuiApplication>
-#include <QtQuick/QQuickView>
-#include <QtQml>
-
-//! [0]
-Q_DECLARE_METATYPE(CustomFormatter *)
-//! [0]
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- //! [1]
- qmlRegisterType<CustomFormatter>("CustomFormatter", 1, 0, "CustomFormatter");
- //! [1]
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("Axis formatter example"));
-
- viewer.setSource(QUrl("qrc:/qml/qmlaxisformatter/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/NewButton.qml b/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/main.qml b/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/main.qml
deleted file mode 100644
index 203c6103..00000000
--- a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/main.qml
+++ /dev/null
@@ -1,194 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.1
-import CustomFormatter 1.0
-import "."
-
-Rectangle {
- id: mainView
- width: 1280
- height: 1024
-
- Data {
- id: seriesData
- }
-
- Theme3D {
- id: themeIsabelle
- type: Theme3D.ThemePrimaryColors
- font.family: "Lucida Handwriting"
- font.pointSize: 40
- }
-
- //! [1]
- ValueAxis3D {
- id: dateAxis
- formatter: CustomFormatter {
- originDate: "2014-01-01"
- selectionFormat: "yyyy-MM-dd HH:mm:ss"
- }
- subSegmentCount: 2
- labelFormat: "yyyy-MM-dd"
- min: 0
- max: 14
- }
- //! [1]
-
- //! [2]
- ValueAxis3D {
- id: logAxis
- formatter: LogValueAxis3DFormatter {
- id: logAxisFormatter
- base: 10
- autoSubGrid: true
- showEdgeLabels: true
- }
- labelFormat: "%.2f"
- }
- //! [2]
-
- ValueAxis3D {
- id: linearAxis
- labelFormat: "%.2f"
- min: 0
- max: 500
- }
-
- //! [0]
- ValueAxis3D {
- id: valueAxis
- segmentCount: 5
- subSegmentCount: 2
- labelFormat: "%.2f"
- min: 0
- max: 10
- }
- //! [0]
-
- Item {
- id: dataView
- anchors.bottom: parent.bottom
- width: parent.width
- height: parent.height - buttonLayout.height
-
- Scatter3D {
- id: scatterGraph
- width: dataView.width
- height: dataView.height
- theme: themeIsabelle
- shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricRight
- //! [3]
- axisZ: valueAxis
- axisY: logAxis
- axisX: dateAxis
- //! [3]
-
- Scatter3DSeries {
- id: scatterSeries
- itemLabelFormat: "@xLabel - (@yLabel, @zLabel)"
- meshSmooth: true
- ItemModelScatterDataProxy {
- itemModel: seriesData.model
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
- }
- }
- }
-
- RowLayout {
- id: buttonLayout
- Layout.minimumHeight: exitButton.height
- width: parent.width
- anchors.left: parent.left
- spacing: 0
-
- NewButton {
- id: yAxisBaseChange
- Layout.fillHeight: true
- Layout.fillWidth: true
- state: "enabled"
- onClicked: {
- if (logAxisFormatter.base === 10)
- logAxisFormatter.base = 0
- else if (logAxisFormatter.base === 2)
- logAxisFormatter.base = 10
- else
- logAxisFormatter.base = 2
- }
- states: [
- State {
- name: "enabled"
- PropertyChanges {
- target: yAxisBaseChange
- text: "Y-axis log base: " + logAxisFormatter.base
- enabled: true
- }
- },
- State {
- name: "disabled"
- PropertyChanges {
- target: yAxisBaseChange
- text: "Y-axis linear"
- enabled: false
- }
- }
- ]
- }
-
- NewButton {
- id: yAxisToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Toggle Y-axis"
- onClicked: {
- if (scatterGraph.axisY === linearAxis) {
- scatterGraph.axisY = logAxis
- yAxisBaseChange.state = "enabled"
- } else {
- scatterGraph.axisY = linearAxis
- yAxisBaseChange.state = "disabled"
- }
- }
- }
-
- NewButton {
- id: exitButton
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Quit"
- onClicked: Qt.quit(0);
- }
- }
-}
diff --git a/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.pro b/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.pro
deleted file mode 100644
index 0f3b2f80..00000000
--- a/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.pro
+++ /dev/null
@@ -1,16 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-QT += datavisualization
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp \
- customformatter.cpp
-HEADERS += customformatter.h
-
-RESOURCES += qmlaxisformatter.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlaxisformatter/*
diff --git a/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.qrc b/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.qrc
deleted file mode 100644
index 0cd9e927..00000000
--- a/examples/datavisualization/qmlaxisformatter/qmlaxisformatter.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlaxisformatter/main.qml</file>
- <file>qml/qmlaxisformatter/NewButton.qml</file>
- <file>qml/qmlaxisformatter/Data.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlaxishandling/CMakeLists.txt b/examples/datavisualization/qmlaxishandling/CMakeLists.txt
new file mode 100644
index 00000000..41ce410c
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/CMakeLists.txt
@@ -0,0 +1,60 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qmlaxishandling LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Qml)
+find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(qmlaxishandling
+ main.cpp
+)
+set_target_properties(qmlaxishandling PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(qmlaxishandling PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+)
+
+qt6_add_qml_module(qmlaxishandling
+ URI AxisHandling
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ SOURCES
+ customformatter.cpp customformatter.h
+ QML_FILES
+ qml/qmlaxishandling/main.qml
+ qml/qmlaxishandling/Data.qml
+ qml/qmlaxishandling/AxisDragging.qml
+ qml/qmlaxishandling/AxisFormatting.qml
+ RESOURCES
+ qml/qmlaxishandling/cube.obj
+ qml/qmlaxishandling/cubetexture.png
+)
+
+install(TARGETS qmlaxishandling
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/qmlaxisformatter/customformatter.cpp b/examples/datavisualization/qmlaxishandling/customformatter.cpp
index fb469065..b0473159 100644
--- a/examples/datavisualization/qmlaxisformatter/customformatter.cpp
+++ b/examples/datavisualization/qmlaxishandling/customformatter.cpp
@@ -1,40 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "customformatter.h"
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtQml/QQmlExtensionPlugin>
-#include <QtCore/QDebug>
-
-using namespace QtDataVisualization;
-
-Q_DECLARE_METATYPE(QValue3DAxisFormatter *)
+#include <QtDataVisualization/qvalue3daxis.h>
+#include <QtQml/qqmlextensionplugin.h>
static const qreal oneDayMs = 60.0 * 60.0 * 24.0 * 1000.0;
@@ -143,7 +112,7 @@ QString CustomFormatter::selectionFormat() const
return m_selectionFormat;
}
-void CustomFormatter::setOriginDate(const QDate &date)
+void CustomFormatter::setOriginDate(QDate date)
{
if (m_originDate != date) {
m_originDate = date;
diff --git a/examples/datavisualization/qmlaxishandling/customformatter.h b/examples/datavisualization/qmlaxishandling/customformatter.h
new file mode 100644
index 00000000..2c821b49
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/customformatter.h
@@ -0,0 +1,55 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CUSTOMFORMATTER_H
+#define CUSTOMFORMATTER_H
+
+#include <QtDataVisualization/qvalue3daxisformatter.h>
+#include <QtCore/qdatetime.h>
+#include <QtQml/qqmlregistration.h>
+
+//! [2]
+class CustomFormatter : public QValue3DAxisFormatter
+{
+ //! [2]
+ Q_OBJECT
+ QML_ELEMENT
+
+ //! [1]
+ Q_PROPERTY(QDate originDate READ originDate WRITE setOriginDate NOTIFY originDateChanged)
+ //! [1]
+ //! [3]
+ Q_PROPERTY(QString selectionFormat READ selectionFormat WRITE setSelectionFormat NOTIFY selectionFormatChanged)
+ //! [3]
+public:
+ explicit CustomFormatter(QObject *parent = 0);
+ virtual ~CustomFormatter();
+
+ //! [0]
+ virtual QValue3DAxisFormatter *createNewInstance() const;
+ virtual void populateCopy(QValue3DAxisFormatter &copy) const;
+ virtual void recalculate();
+ virtual QString stringForValue(qreal value, const QString &format) const;
+ //! [0]
+
+ QDate originDate() const;
+ QString selectionFormat() const;
+
+public Q_SLOTS:
+ void setOriginDate(QDate date);
+ void setSelectionFormat(const QString &format);
+
+Q_SIGNALS:
+ void originDateChanged(QDate date);
+ void selectionFormatChanged(const QString &format);
+
+private:
+ Q_DISABLE_COPY(CustomFormatter)
+
+ QDateTime valueToDateTime(qreal value) const;
+
+ QDate m_originDate;
+ QString m_selectionFormat;
+};
+
+#endif
diff --git a/examples/datavisualization/qmlaxishandling/doc/images/qmlaxishandling-example.png b/examples/datavisualization/qmlaxishandling/doc/images/qmlaxishandling-example.png
new file mode 100644
index 00000000..21e9551b
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/doc/images/qmlaxishandling-example.png
Binary files differ
diff --git a/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc b/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc
new file mode 100644
index 00000000..087630c6
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/doc/src/qmlaxishandling.qdoc
@@ -0,0 +1,188 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example qmlaxishandling
+ \meta tags {DataVisualization, Scatter3D, Custom Input Handler, Dynamic Data, Custom Axis Formatter, Scatter Graph}
+ \title Axis Handling
+ \ingroup qtdatavisualization_qmlexamples
+ \brief Implementing axis dragging with a custom input handler in QML, and creating a custom axis formatter.
+ \since QtDataVisualization 6.5
+
+ \e {Axis Handling} demonstrates two different custom features with axes. The features have their
+ own tabs in the application.
+
+ The following sections concentrate on those features only and skip explaining the basic
+ functionality - for more detailed QML example documentation, see \l{Simple Scatter Graph}.
+
+ \image qmlaxishandling-example.png
+
+ \include examples-run.qdocinc
+
+ \section1 Axis Dragging
+
+ In the \uicontrol {Axis Dragging} tab, implement a custom input handler in QML that enables you
+ to drag axis labels to change axis ranges. Further, use orthographic projection and dynamically
+ update the properties of a custom item.
+
+ \section2 Overriding Default Input Handling
+
+ To deactivate the default input handling mechanism, set the active input handler of Scatter3D
+ graph to \c{null}:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 0
+ \dots
+
+ Then, add a MouseArea and set it to fill the parent, which is the same \c Item our
+ \c scatterGraph is contained in. Also, set it to accept only left mouse button presses,
+ as in this example the other buttons are not needed:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 1
+ \dots
+
+ Then, listen to mouse presses, and when caught, send a selection query to the graph:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 2
+
+ The \c{onPositionChanged} signal handler catches the current mouse position that will be
+ needed for move distance calculation:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 3
+ \dots
+
+ At the end of \c{onPositionChanged}, save the previous mouse position for move distance
+ calculation that will be introduced later:
+
+ \dots 0
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 4
+
+ \section2 Translating Mouse Movement to Axis Range Change
+
+ In \c {scatterGraph}, listen to \c {onSelectedElementChanged}. The signal
+ is emitted after the selection query has been made in the \c{onPressed} of the \c{inputArea}.
+ Set the element type into a property you defined (\c{property int selectedAxisLabel: -1}) in the
+ main component, since it is of a type you are interested in:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 5
+
+ Then, back in the \c onPositionChanged of \c{inputArea}, check if a mouse button is pressed
+ and if you have a current axis label selection. If the conditions are met, call the
+ function that does the conversion from mouse movement to axis range update:
+
+ \dots 0
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 6
+ \dots 0
+
+ The conversion is easy in this case, as the camera rotation is fixed. You can use some
+ precalculated values, calculate mouse move distance, and apply the values to the
+ selected axis range:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 7
+
+ For a more sophisticated conversion from mouse movement to axis range update, see
+ \l{Graph Gallery}.
+
+ \section2 Other Features
+
+ The example also demonstrates how to use orthographic projection and how to update properties
+ of a custom item on the fly.
+
+ Orthographic projection is very simple. You'll just need to change the \c orthoProjection
+ property of \c{scatterGraph}. The example has a button for toggling it on and off:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 8
+
+ For custom items, add one to the \c customItemList of \c{scatterGraph}:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 9
+
+ You implement a timer to add, remove, and rotate all the items in the graph, and use the same
+ timer for rotating the custom item:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml 10
+ \dots
+
+ \section1 Axis Formatters
+
+ In the \uicontrol {Axis Formatter} tab, create a custom axis formatter. It also illustrates how
+ to use predefined axis formatters.
+
+ \section2 Custom Axis Formatter
+
+ Customizing axis formatters requires subclassing the QValue3DAxisFormatter, which cannot be
+ done in QML code alone. In this example, the axis interprets the float values as
+ a timestamp and shows the date in the axis labels. To achieve this, introduce a new class
+ called \c CustomFormatter, which subclasses the QValue3DAxisFormatter:
+
+ \snippet qmlaxishandling/customformatter.h 2
+ \dots 0
+
+ Since float values of a QScatter3DSeries cannot be directly cast into QDateTime values due to
+ difference in data width, some sort of mapping between the two is needed. To do the mapping,
+ specify an origin date for the formatter and interpret the float values from the
+ QScatter3DSeries as date offsets to that origin value. The origin date is given as
+ a property:
+
+ \snippet qmlaxishandling/customformatter.h 1
+
+ For the mapping from value to QDateTime, use the \c valueToDateTime() method:
+
+ \snippet qmlaxishandling/customformatter.cpp 0
+
+ To function as an axis formatter, \c CustomFormatter needs to reimplement some virtual
+ methods:
+
+ \snippet qmlaxishandling/customformatter.h 0
+
+ The first two are simple, just create a new instance of \c CustomFormatter and copy the
+ necessary data over to it. Use these two methods to create and update a cache of formatter for
+ rendering purposes. Remember to call the superclass implementation of \c populateCopy():
+
+ \snippet qmlaxishandling/customformatter.cpp 1
+
+ \c CustomFormatter does the bulk of its work in the \c recalculate() method, where
+ our formatter calculates the grid, subgrid, and label positions, as well as formats the label
+ strings.
+ In the custom formatter, ignore the segment count of the axis and draw a grid line always at
+ midnight. Subsegment count and label positioning is handled normally:
+
+ \snippet qmlaxishandling/customformatter.cpp 2
+
+ The axis labels are formatted to show only the date. However, to increase the resolution of the
+ timestamp of the selection label, specify another property for the custom formatter to allow
+ the user to customize it:
+
+ \snippet qmlaxishandling/customformatter.h 3
+
+ This selection format property is used in the reimplemented \c stringToValue method, where
+ the submitted format is ignored and the custom selection format substituted for it:
+
+ \snippet qmlaxishandling/customformatter.cpp 3
+
+ To expose our new custom formatter to the QML, declare it and make it a QML module.
+ For information about how to do this, see \l{Surface Graph Gallery}.
+
+ \section2 QML
+
+ In the QML code, define a different axis for each dimension:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml 3
+
+ The Z-axis is just a regular ValueAxis3D:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml 0
+
+ For the Y-axis, define a logarithmic axis. To make ValueAxis3D show a logarithmic scale,
+ specify LogValueAxis3DFormatter for \c formatter property of the axis:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml 2
+
+ And finally, for the X-axis use the new \c CustomFormatter:
+
+ \snippet qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml 1
+
+ The rest of the application consists of fairly self-explanatory logic for modifying the axes and
+ showing the graph.
+
+ \section1 Example Contents
+*/
diff --git a/examples/datavisualization/qmlaxishandling/main.cpp b/examples/datavisualization/qmlaxishandling/main.cpp
new file mode 100644
index 00000000..2a145633
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/main.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtGui/qguiapplication.h>
+#include <QtQuick/qquickview.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml>
+
+#ifdef QMAKE_BUILD
+#include "customformatter.h"
+Q_DECLARE_METATYPE(CustomFormatter *)
+#endif
+
+int main(int argc, char *argv[])
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+ QGuiApplication app(argc, argv);
+
+#ifdef QMAKE_BUILD
+ qmlRegisterType<CustomFormatter>("AxisHandling", 1, 0, "CustomFormatter");
+#endif
+
+ QQuickView viewer;
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#endif
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+ QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+
+ viewer.setTitle(QStringLiteral("Axis Handling"));
+
+ viewer.setSource(QUrl("qrc:/qml/qmlaxishandling/main.qml"));
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.show();
+
+ return app.exec();
+}
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml
new file mode 100644
index 00000000..81d2e0a1
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisDragging.qml
@@ -0,0 +1,298 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+
+Item {
+ id: axisDragView
+
+ property int selectedAxisLabel: -1
+ property real dragSpeedModifier: 100.0
+ property int currentMouseX: -1
+ property int currentMouseY: -1
+ property int previousMouseX: -1
+ property int previousMouseY: -1
+
+ required property bool portraitMode
+
+ ListModel {
+ id: graphModel
+ ListElement{ xPos: 0.0; yPos: 0.0; zPos: 0.0; rotation: "@0,0,0,0" }
+ ListElement{ xPos: 1.0; yPos: 1.0; zPos: 1.0; rotation: "@45,1,1,1" }
+ }
+
+ Timer {
+ id: dataTimer
+ interval: 1
+ running: true
+ repeat: true
+ property bool isIncreasing: true
+ property real rotationAngle: 0
+
+ function generateQuaternion() {
+ return "@" + Math.random() * 360 + "," + Math.random() + ","
+ + Math.random() + "," + Math.random();
+ }
+
+ function appendRow() {
+ graphModel.append({"xPos": Math.random(),
+ "yPos": Math.random(),
+ "zPos": Math.random(),
+ "rotation": generateQuaternion()
+ });
+ }
+
+ //! [10]
+ onTriggered: {
+ rotationAngle = rotationAngle + 1;
+ qtCube.setRotationAxisAndAngle(Qt.vector3d(1, 0, 1), rotationAngle);
+ //! [10]
+ scatterSeries.setMeshAxisAndAngle(Qt.vector3d(1, 1, 1), rotationAngle);
+ if (isIncreasing) {
+ for (var i = 0; i < 10; i++)
+ appendRow();
+ if (graphModel.count > 2002) {
+ scatterGraph.theme = isabelleTheme;
+ isIncreasing = false;
+ }
+ } else {
+ graphModel.remove(2, 10);
+ if (graphModel.count === 2) {
+ scatterGraph.theme = dynamicColorTheme;
+ isIncreasing = true;
+ }
+ }
+ }
+ }
+
+ ThemeColor {
+ id: dynamicColor
+ ColorAnimation on color {
+ from: "red"
+ to: "yellow"
+ duration: 2000
+ loops: Animation.Infinite
+ }
+ }
+
+ Theme3D {
+ id: dynamicColorTheme
+ type: Theme3D.ThemeEbony
+ baseColors: [dynamicColor]
+ font.pointSize: 50
+ labelBorderEnabled: true
+ labelBackgroundColor: "gold"
+ labelTextColor: "black"
+ }
+
+ Theme3D {
+ id: isabelleTheme
+ type: Theme3D.ThemeIsabelle
+ font.pointSize: 50
+ labelBorderEnabled: true
+ labelBackgroundColor: "gold"
+ labelTextColor: "black"
+ }
+
+ //! [0]
+ Scatter3D {
+ id: scatterGraph
+ inputHandler: null
+ //! [0]
+ anchors.fill: parent
+ theme: dynamicColorTheme
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ scene.activeCamera.yRotation: 45.0
+ scene.activeCamera.xRotation: 45.0
+ scene.activeCamera.zoomLevel: 75.0
+
+ Scatter3DSeries {
+ id: scatterSeries
+ itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
+ mesh: Abstract3DSeries.MeshCube
+
+ ItemModelScatterDataProxy {
+ itemModel: graphModel
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
+ rotationRole: "rotation"
+ }
+ }
+ //! [9]
+ customItemList: [
+ Custom3DItem {
+ id: qtCube
+ meshFile: ":/qml/qmlaxishandling/cube.obj"
+ textureFile: ":/qml/qmlaxishandling/cubetexture.png"
+ position: Qt.vector3d(0.65, 0.35, 0.65)
+ scaling: Qt.vector3d(0.3, 0.3, 0.3)
+ }
+ ]
+ //! [9]
+ //! [5]
+ onSelectedElementChanged: {
+ if (selectedElement >= AbstractGraph3D.ElementAxisXLabel
+ && selectedElement <= AbstractGraph3D.ElementAxisZLabel) {
+ selectedAxisLabel = selectedElement;
+ } else {
+ selectedAxisLabel = -1;
+ }
+ }
+ //! [5]
+ }
+
+ //! [1]
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ acceptedButtons: Qt.LeftButton
+ //! [1]
+
+ //! [3]
+ onPositionChanged: (mouse)=> {
+ currentMouseX = mouse.x;
+ currentMouseY = mouse.y;
+ //! [3]
+ //! [6]
+ if (pressed && selectedAxisLabel != -1)
+ axisDragView.dragAxis();
+ //! [6]
+ //! [4]
+ previousMouseX = currentMouseX;
+ previousMouseY = currentMouseY;
+ }
+ //! [4]
+
+ //! [2]
+ onPressed: (mouse)=> {
+ scatterGraph.scene.selectionQueryPosition = Qt.point(mouse.x, mouse.y);
+ }
+ //! [2]
+
+ onReleased: {
+ // We need to clear mouse positions and selected axis, because touch devices cannot
+ // track position all the time
+ selectedAxisLabel = -1;
+ currentMouseX = -1;
+ currentMouseY = -1;
+ previousMouseX = -1;
+ previousMouseY = -1;
+ }
+ }
+
+ //! [7]
+ function dragAxis() {
+ // Do nothing if previous mouse position is uninitialized
+ if (previousMouseX === -1)
+ return;
+
+ // Directional drag multipliers based on rotation. Camera is locked to 45 degrees, so we
+ // can use one precalculated value instead of calculating xx, xy, zx and zy individually
+ var cameraMultiplier = 0.70710678;
+
+ // Calculate the mouse move amount
+ var moveX = currentMouseX - previousMouseX;
+ var moveY = currentMouseY - previousMouseY;
+
+ // Adjust axes
+ switch (selectedAxisLabel) {
+ case AbstractGraph3D.ElementAxisXLabel:
+ var distance = ((moveX - moveY) * cameraMultiplier) / dragSpeedModifier;
+ // Check if we need to change min or max first to avoid invalid ranges
+ if (distance > 0) {
+ scatterGraph.axisX.min -= distance;
+ scatterGraph.axisX.max -= distance;
+ } else {
+ scatterGraph.axisX.max -= distance;
+ scatterGraph.axisX.min -= distance;
+ }
+ break;
+ case AbstractGraph3D.ElementAxisYLabel:
+ distance = moveY / dragSpeedModifier;
+ // Check if we need to change min or max first to avoid invalid ranges
+ if (distance > 0) {
+ scatterGraph.axisY.max += distance;
+ scatterGraph.axisY.min += distance;
+ } else {
+ scatterGraph.axisY.min += distance;
+ scatterGraph.axisY.max += distance;
+ }
+ break;
+ case AbstractGraph3D.ElementAxisZLabel:
+ distance = ((moveX + moveY) * cameraMultiplier) / dragSpeedModifier;
+ // Check if we need to change min or max first to avoid invalid ranges
+ if (distance > 0) {
+ scatterGraph.axisZ.max += distance;
+ scatterGraph.axisZ.min += distance;
+ } else {
+ scatterGraph.axisZ.min += distance;
+ scatterGraph.axisZ.max += distance;
+ }
+ break;
+ }
+ }
+ //! [7]
+
+ Button {
+ id: rangeToggle
+ // We're adding 3 buttons and want to divide them equally, if not in portrait mode
+ width: axisDragView.portraitMode ? parent.width : parent.width / 3
+ text: "Use Preset Range"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ property bool autoRange: true
+ onClicked: {
+ if (autoRange) {
+ text = "Use Automatic Range";
+ scatterGraph.axisX.min = 0.3;
+ scatterGraph.axisX.max = 0.7;
+ scatterGraph.axisY.min = 0.3;
+ scatterGraph.axisY.max = 0.7;
+ scatterGraph.axisZ.min = 0.3;
+ scatterGraph.axisZ.max = 0.7;
+ autoRange = false;
+ dragSpeedModifier = 200.0;
+ } else {
+ text = "Use Preset Range";
+ autoRange = true;
+ dragSpeedModifier = 100.0;
+ }
+ scatterGraph.axisX.autoAdjustRange = autoRange;
+ scatterGraph.axisY.autoAdjustRange = autoRange;
+ scatterGraph.axisZ.autoAdjustRange = autoRange;
+ }
+ }
+
+ //! [8]
+ Button {
+ id: orthoToggle
+ width: axisDragView.portraitMode ? parent.width : parent.width / 3
+ text: "Display Orthographic"
+ anchors.left: axisDragView.portraitMode ? parent.left : rangeToggle.right
+ anchors.top: axisDragView.portraitMode ? rangeToggle.bottom : parent.top
+ onClicked: {
+ if (scatterGraph.orthoProjection) {
+ text = "Display Orthographic";
+ scatterGraph.orthoProjection = false;
+ // Orthographic projection disables shadows, so we need to switch them back on
+ scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium
+ } else {
+ text = "Display Perspective";
+ scatterGraph.orthoProjection = true;
+ }
+ }
+ }
+ //! [8]
+
+ Button {
+ id: exitButton
+ width: axisDragView.portraitMode ? parent.width : parent.width / 3
+ text: "Quit"
+ anchors.left: axisDragView.portraitMode ? parent.left : orthoToggle.right
+ anchors.top: axisDragView.portraitMode ? orthoToggle.bottom : parent.top
+ onClicked: Qt.quit();
+ }
+}
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml
new file mode 100644
index 00000000..5ceae315
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/AxisFormatting.qml
@@ -0,0 +1,156 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+import AxisHandling
+
+Item {
+ id: axisFormattingView
+
+ required property bool portraitMode
+
+ Data {
+ id: seriesData
+ }
+
+ Theme3D {
+ id: themePrimaryColors
+ type: Theme3D.ThemePrimaryColors
+ font.family: "Lucida Handwriting"
+ font.pointSize: 40
+ }
+
+ //! [1]
+ ValueAxis3D {
+ id: dateAxis
+ formatter: CustomFormatter {
+ originDate: "2023-01-01"
+ selectionFormat: "yyyy-MM-dd HH:mm:ss"
+ }
+ subSegmentCount: 2
+ labelFormat: "yyyy-MM-dd"
+ min: 0
+ max: 14
+ }
+ //! [1]
+
+ //! [2]
+ ValueAxis3D {
+ id: logAxis
+ formatter: LogValueAxis3DFormatter {
+ id: logAxisFormatter
+ base: 10
+ autoSubGrid: true
+ showEdgeLabels: true
+ }
+ labelFormat: "%.2f"
+ }
+ //! [2]
+
+ ValueAxis3D {
+ id: linearAxis
+ labelFormat: "%.2f"
+ min: 0
+ max: 500
+ }
+
+ //! [0]
+ ValueAxis3D {
+ id: valueAxis
+ segmentCount: 5
+ subSegmentCount: 2
+ labelFormat: "%.2f"
+ min: 0
+ max: 10
+ }
+ //! [0]
+
+ Scatter3D {
+ id: scatterGraph
+ anchors.top: exitButton.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ theme: themePrimaryColors
+ shadowQuality: AbstractGraph3D.ShadowQualitySoftMedium
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricRight
+ //! [3]
+ axisZ: valueAxis
+ axisY: logAxis
+ axisX: dateAxis
+ //! [3]
+
+ Scatter3DSeries {
+ id: scatterSeries
+ itemLabelFormat: "@xLabel - (@yLabel, @zLabel)"
+ meshSmooth: true
+ ItemModelScatterDataProxy {
+ itemModel: seriesData.model
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
+ }
+ }
+ }
+
+ Button {
+ id: yAxisBaseChange
+ width: axisFormattingView.portraitMode ? parent.width : parent.width / 3
+ anchors.left: parent.left
+ anchors.top: parent.top
+ state: "enabled"
+ onClicked: {
+ if (logAxisFormatter.base === 10)
+ logAxisFormatter.base = 0;
+ else if (logAxisFormatter.base === 2)
+ logAxisFormatter.base = 10;
+ else
+ logAxisFormatter.base = 2;
+ }
+ states: [
+ State {
+ name: "enabled"
+ PropertyChanges {
+ target: yAxisBaseChange
+ text: "Y-axis log base: " + logAxisFormatter.base
+ enabled: true
+ }
+ },
+ State {
+ name: "disabled"
+ PropertyChanges {
+ target: yAxisBaseChange
+ text: "Y-axis linear"
+ enabled: false
+ }
+ }
+ ]
+ }
+
+ Button {
+ id: yAxisToggle
+ width: axisFormattingView.portraitMode ? parent.width : parent.width / 3
+ anchors.left: axisFormattingView.portraitMode ? parent.left : yAxisBaseChange.right
+ anchors.top: axisFormattingView.portraitMode ? yAxisBaseChange.bottom : parent.top
+ text: "Toggle Y-axis"
+ onClicked: {
+ if (scatterGraph.axisY == linearAxis) {
+ scatterGraph.axisY = logAxis;
+ yAxisBaseChange.state = "enabled";
+ } else {
+ scatterGraph.axisY = linearAxis;
+ yAxisBaseChange.state = "disabled";
+ }
+ }
+ }
+
+ Button {
+ id: exitButton
+ width: axisFormattingView.portraitMode ? parent.width : parent.width / 3
+ anchors.left: axisFormattingView.portraitMode ? parent.left : yAxisToggle.right
+ anchors.top: axisFormattingView.portraitMode ? yAxisToggle.bottom : parent.top
+ text: "Quit"
+ onClicked: Qt.quit();
+ }
+}
diff --git a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/Data.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml
index 7d907a57..b74337fd 100644
--- a/examples/datavisualization/qmlaxisformatter/qml/qmlaxisformatter/Data.qml
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/Data.qml
@@ -1,33 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
Item {
property alias model: dataModel
diff --git a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cube.obj b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cube.obj
index 0197618f..0197618f 100644
--- a/examples/datavisualization/qmlaxisdrag/qml/qmlaxisdrag/cube.obj
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cube.obj
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cubetexture.png b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cubetexture.png
new file mode 100644
index 00000000..6369363f
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/cubetexture.png
Binary files differ
diff --git a/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml
new file mode 100644
index 00000000..d4d830a4
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qml/qmlaxishandling/main.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Item {
+ id: mainView
+ width: 1280
+ height: 1024
+ visible: true
+
+ property bool portraitMode: width < height
+
+ TabBar {
+ id: tabBar
+ width: parent.width
+
+ TabButton {
+ text: "Axis Dragging"
+ }
+
+ TabButton {
+ text: "Axis Formatting"
+ }
+ }
+
+ StackLayout {
+ anchors.top: tabBar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ currentIndex: tabBar.currentIndex
+
+ AxisDragging {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+
+ AxisFormatting {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+ }
+}
diff --git a/examples/datavisualization/qmlaxishandling/qmlaxishandling.pro b/examples/datavisualization/qmlaxishandling/qmlaxishandling.pro
new file mode 100644
index 00000000..36b0deee
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qmlaxishandling.pro
@@ -0,0 +1,16 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+DEFINES += QMAKE_BUILD
+
+SOURCES += main.cpp \
+ customformatter.cpp
+
+HEADERS += customformatter.h
+
+RESOURCES += qmlaxishandling.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ qml/qmlaxishandling/*
diff --git a/examples/datavisualization/qmlaxishandling/qmlaxishandling.qrc b/examples/datavisualization/qmlaxishandling/qmlaxishandling.qrc
new file mode 100644
index 00000000..136734f5
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qmlaxishandling.qrc
@@ -0,0 +1,12 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlaxishandling/AxisDragging.qml</file>
+ <file>qml/qmlaxishandling/AxisFormatting.qml</file>
+ <file>qml/qmlaxishandling/cube.obj</file>
+ <file>qml/qmlaxishandling/cubetexture.png</file>
+ <file>qml/qmlaxishandling/Data.qml</file>
+ <file>qml/qmlaxishandling/main.qml</file>
+ </qresource>
+ <qresource prefix="/mesh"/>
+ <qresource prefix="/texture"/>
+</RCC>
diff --git a/examples/datavisualization/qmlaxishandling/qmldir b/examples/datavisualization/qmlaxishandling/qmldir
new file mode 100644
index 00000000..f6da01e7
--- /dev/null
+++ b/examples/datavisualization/qmlaxishandling/qmldir
@@ -0,0 +1,2 @@
+module AxisHandling
+plugin customformatterplugin
diff --git a/examples/datavisualization/qmlbars/CMakeLists.txt b/examples/datavisualization/qmlbars/CMakeLists.txt
new file mode 100644
index 00000000..2f627b49
--- /dev/null
+++ b/examples/datavisualization/qmlbars/CMakeLists.txt
@@ -0,0 +1,58 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qmlbars LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Qml)
+find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(qmlbars
+ main.cpp
+)
+set_target_properties(qmlbars PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_compile_definitions(qmlbars PUBLIC
+ QT_DISABLE_DEPRECATED_UP_TO=0x050F00
+)
+
+target_link_libraries(qmlbars PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+)
+
+qt6_add_qml_module(qmlbars
+ URI Bars
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ qml/qmlbars/Axes.qml
+ qml/qmlbars/Data.qml
+ qml/qmlbars/main.qml
+)
+
+install(TARGETS qmlbars
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png b/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png
index c2ab2459..803ff62e 100644
--- a/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png
+++ b/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png
Binary files differ
diff --git a/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
index 60815d48..2b0a1c4b 100644
--- a/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
+++ b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc
@@ -1,136 +1,110 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example qmlbars
- \title Qt Quick 2 Bars Example
- \ingroup qtdatavisualization_examples
+ \meta tags {DataVisualization, Barsr3D, Multiple Series}
+ \title Simple Bar Graph
+ \ingroup qtdatavisualization_qmlexamples
\brief Using Bars3D in a QML application.
- The Qt Quick 2 bars example shows how to make a simple 3D bar graph using Bars3D and Qt
- Quick 2.
+ \e {Simple Bar Graph} shows how to make a simple 3D bar graph using Bars3D and QML.
\image qmlbars-example.png
- The interesting thing about this example is switching series and displaying more than one series
- at once. We'll concentrate on those and skip explaining the basic Bars3D functionality - for
- more detailed QML example documentation, see \l{Qt Quick 2 Scatter Example}.
+ The following sections describe how to switch series and display more than one series
+ at a time. For more information about basic QML application functionality, see
+ \l{Simple Scatter Graph}.
\include examples-run.qdocinc
\section1 Data
- The example data is monthly income and expenses of a fictional company over several years.
+ The example data set is the monthly income and expenses of a fictional company over several years.
The data is defined in a list model in \c Data.qml like this:
\snippet qmlbars/qml/qmlbars/Data.qml 0
\dots
Each data item has three roles: timestamp, income, and expenses. The timestamp value is in
- format: \c{<four digit year>-<two digit month>}. Years and months are natural to map to rows and
- columns of a bar chart, but we can only show either income or expenses as the value.
+ format: \c{<four digit year>-<two digit month>}. Usually, you would map years and months to rows
+ and columns of a bar chart, but you can only show either income or expenses as the value.
- Now we need to add the data to the Bars3D graph. We will create two Bar3DSeries inside it,
- starting with a series for the income:
+ Now, add the data to the Bars3D graph. Create two Bar3DSeries inside it, starting with a series
+ for the income:
\snippet qmlbars/qml/qmlbars/main.qml 3
\dots
The data is attached to the \c itemModel property of the ItemModelBarDataProxy inside the
- series. For \c valueRole we simply specify the \c income field, as it contains the value we
- want, but getting the years and months is a bit more complicated, since they are both found
- in the same field. To extract those values, we specify the \c timestamp field for both
+ series. For \c{valueRole}, specify the \c income field, as it contains the value you
+ want. Getting the years and months is a bit more complicated, since they are both found
+ in the same field. To extract those values, specify the \c timestamp field for both
\c rowRole and \c columnRole, and additionally specify a search pattern and a replace rule
for those roles to extract the correct portion of the field contents for each role.
The search pattern is a normal JavaScript regular expression and the replace rule specifies
what the field content that matches the regular expression is replaced with.
- In this case we want to replace the entire field content with just the year or the month,
+ In this case, replace the entire field content with just the year or the month,
which is the first captured substring for both rows and columns.
- For more information how the replace using regular expressions works, see
+ For more information about the replace functionality with regular expression, see
QString::replace(const QRegExp &rx, const QString &after) function documentation.
The \c multiMatchBehavior property specifies what to do in case multiple item model items match
- the same row/column combination. In this case we want to add their values together.
- This property has no effect when we are showing values for each month, as there are no
- duplicate months in our item model, but it becomes relevant later when we want to show
+ the same row/column combination. In this case, add their values together.
+ This property has no effect when showing values for each month, as there are no
+ duplicate months in our item model, but it becomes relevant later when you want to show
the yearly totals.
- Then we add another series for the expenses:
+ Then, add another series for the expenses:
\snippet qmlbars/qml/qmlbars/main.qml 4
\dots
- The model contains expenses as negative values, but we want to show them as positive bars, so
- that we can easily compare them to income bars. We use \c valueRolePattern to remove the minus
+ The model contains expenses as negative values, but you want to show them as positive bars, so
+ that they can be easily compared to income bars. Use the \c valueRolePattern to remove the minus
sign to achieve this. No replacement string needs to be specified as the default replacement
is an empty string.
- We use the \c visible property of the series to hide the second series for now.
+ Use the \c visible property of the series to hide the second series for now.
\section1 Custom Axis Labels
- One interesting tidbit about axes is that we redefine the category labels for column axis in
- \c Axes.qml. This is done because the data contains numbers for months, which we don't want
- to use for our column labels:
+ \c Axes.qml redefines the category labels for the column axis because the data contains numbers
+ for months, which would clutter the labels:
\snippet qmlbars/qml/qmlbars/Axes.qml 0
- We also set automatic axis label rotation to make axis labels more readable at low camera
- angles.
+ To make axis labels more readable at low camera angles, set automatic axis label rotation.
\section1 Switching Series
- In the \c main.qml, we set up the graph and various UI elements. There are three interesting
- code blocks we want to highlight here. The first one shows how to change the
- visualized data between income, expenses, and both, by simply changing visibility of the two
- series:
+ In \c main.qml, set up the graph and various UI elements. There are three interesting
+ code blocks to highlight here. The first one shows how to change the visualized data between
+ income, expenses, and both, by simply changing the visibility of the two series:
\snippet qmlbars/qml/qmlbars/main.qml 0
The axis label format and item selection label formats are tweaked to get the negative sign
showing properly for expenses, which were actually resolved as positive values.
- The second interesting block is where we change the visualized data by adjusting the proxy
- propertes:
+ The second interesting block is where the visualized data is changed by adjusting the proxy
+ properties:
\snippet qmlbars/qml/qmlbars/main.qml 1
- To show yearly totals, we need to combine the twelve months of each year into a single bar.
- We achieve this by specifying a \c columnRolePattern that matches all model items. That way
- the data proxy will only have a single column. The cumulative \c multiMatchBehavior we
+ To show the yearly totals, combine the twelve months of each year into a single bar.
+ This is achieved by specifying a \c columnRolePattern that matches all model items. That way,
+ the data proxy will only have a single column. The cumulative \c multiMatchBehavior
specified earlier for the proxy becomes relevant now, causing the values of all twelve months
of each year to be added up into a single bar.
- To show just a subset of years, we set \c autoRowCategories to false on the
- ItemModelBarDataProxy item and define the row categories explicitly. This way, only the items
- in specified row categories are visualized.
+ To show just a subset of years, set \c autoRowCategories to false on the ItemModelBarDataProxy
+ item and define the row categories explicitly. This way, only the items in the specified row
+ categories are visualized.
- The third interesting block shows how to get the row and column index of an item if you know the
- row and column values by using ItemModelBarDataProxy methods \c rowCategoryIndex() and \c columnCategoryIndex():
+ The third interesting block shows how to get the row and column index of an item if you know
+ the row and column values by using ItemModelBarDataProxy methods \c rowCategoryIndex()
+ and \c columnCategoryIndex():
\snippet qmlbars/qml/qmlbars/main.qml 2
*/
diff --git a/examples/datavisualization/qmlbars/main.cpp b/examples/datavisualization/qmlbars/main.cpp
index 5cf2eef9..1c479ba2 100644
--- a/examples/datavisualization/qmlbars/main.cpp
+++ b/examples/datavisualization/qmlbars/main.cpp
@@ -1,39 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
+#include <QtGui/qguiapplication.h>
+#include <QtQuick/qquickview.h>
+#include <QtQml/qqmlengine.h>
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
@@ -46,12 +20,13 @@ int main(int argc, char *argv[])
QString extraImportPath(QStringLiteral("%1/../../../%2"));
#endif
viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
+ QString::fromLatin1("qml")));
- viewer.setTitle(QStringLiteral("Monthly income/expenses"));
+ viewer.setTitle(QStringLiteral("Monthly income / expenses"));
viewer.setSource(QUrl("qrc:/qml/qmlbars/main.qml"));
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.setColor("black");
viewer.show();
return app.exec();
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
index 15726c2a..042294ad 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
-import QtDataVisualization 1.1
+import QtQuick
+import QtDataVisualization
Item {
property alias column: columnAxis
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
index efd575a2..4121f26b 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml
@@ -1,130 +1,118 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
+import QtQml.Models
Item {
property alias model: dataModel
+ property var modelAsJsArray: {
+ var arr = [];
+ for (var i = 0; i < dataModel.count; i++) {
+ var row = dataModel.get(i);
+ arr.push({
+ timestamp: row.timestamp,
+ expenses: row.expenses,
+ income: row.income
+ });
+ }
+ return arr;
+ }
+
//! [0]
ListModel {
id: dataModel
- ListElement{ timestamp: "2006-01"; expenses: "-4"; income: "5" }
- ListElement{ timestamp: "2006-02"; expenses: "-5"; income: "6" }
- ListElement{ timestamp: "2006-03"; expenses: "-7"; income: "4" }
+ ListElement{ timestamp: "2016-01"; expenses: "-4"; income: "5" }
+ ListElement{ timestamp: "2016-02"; expenses: "-5"; income: "6" }
+ ListElement{ timestamp: "2016-03"; expenses: "-7"; income: "4" }
//! [0]
- ListElement{ timestamp: "2006-04"; expenses: "-3"; income: "2" }
- ListElement{ timestamp: "2006-05"; expenses: "-4"; income: "1" }
- ListElement{ timestamp: "2006-06"; expenses: "-2"; income: "2" }
- ListElement{ timestamp: "2006-07"; expenses: "-1"; income: "3" }
- ListElement{ timestamp: "2006-08"; expenses: "-5"; income: "1" }
- ListElement{ timestamp: "2006-09"; expenses: "-2"; income: "3" }
- ListElement{ timestamp: "2006-10"; expenses: "-5"; income: "2" }
- ListElement{ timestamp: "2006-11"; expenses: "-8"; income: "5" }
- ListElement{ timestamp: "2006-12"; expenses: "-3"; income: "3" }
+ ListElement{ timestamp: "2016-04"; expenses: "-3"; income: "2" }
+ ListElement{ timestamp: "2016-05"; expenses: "-4"; income: "1" }
+ ListElement{ timestamp: "2016-06"; expenses: "-2"; income: "2" }
+ ListElement{ timestamp: "2016-07"; expenses: "-1"; income: "3" }
+ ListElement{ timestamp: "2016-08"; expenses: "-5"; income: "1" }
+ ListElement{ timestamp: "2016-09"; expenses: "-2"; income: "3" }
+ ListElement{ timestamp: "2016-10"; expenses: "-5"; income: "2" }
+ ListElement{ timestamp: "2016-11"; expenses: "-8"; income: "5" }
+ ListElement{ timestamp: "2016-12"; expenses: "-3"; income: "3" }
- ListElement{ timestamp: "2007-01"; expenses: "-3"; income: "1" }
- ListElement{ timestamp: "2007-02"; expenses: "-4"; income: "2" }
- ListElement{ timestamp: "2007-03"; expenses: "-12"; income: "4" }
- ListElement{ timestamp: "2007-04"; expenses: "-13"; income: "6" }
- ListElement{ timestamp: "2007-05"; expenses: "-14"; income: "11" }
- ListElement{ timestamp: "2007-06"; expenses: "-7"; income: "7" }
- ListElement{ timestamp: "2007-07"; expenses: "-6"; income: "4" }
- ListElement{ timestamp: "2007-08"; expenses: "-4"; income: "15" }
- ListElement{ timestamp: "2007-09"; expenses: "-2"; income: "18" }
- ListElement{ timestamp: "2007-10"; expenses: "-29"; income: "25" }
- ListElement{ timestamp: "2007-11"; expenses: "-23"; income: "29" }
- ListElement{ timestamp: "2007-12"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2017-01"; expenses: "-3"; income: "1" }
+ ListElement{ timestamp: "2017-02"; expenses: "-4"; income: "2" }
+ ListElement{ timestamp: "2017-03"; expenses: "-12"; income: "4" }
+ ListElement{ timestamp: "2017-04"; expenses: "-13"; income: "6" }
+ ListElement{ timestamp: "2017-05"; expenses: "-14"; income: "11" }
+ ListElement{ timestamp: "2017-06"; expenses: "-7"; income: "7" }
+ ListElement{ timestamp: "2017-07"; expenses: "-6"; income: "4" }
+ ListElement{ timestamp: "2017-08"; expenses: "-4"; income: "15" }
+ ListElement{ timestamp: "2017-09"; expenses: "-2"; income: "18" }
+ ListElement{ timestamp: "2017-10"; expenses: "-29"; income: "25" }
+ ListElement{ timestamp: "2017-11"; expenses: "-23"; income: "29" }
+ ListElement{ timestamp: "2017-12"; expenses: "-5"; income: "9" }
- ListElement{ timestamp: "2008-01"; expenses: "-3"; income: "8" }
- ListElement{ timestamp: "2008-02"; expenses: "-8"; income: "14" }
- ListElement{ timestamp: "2008-03"; expenses: "-10"; income: "20" }
- ListElement{ timestamp: "2008-04"; expenses: "-12"; income: "24" }
- ListElement{ timestamp: "2008-05"; expenses: "-10"; income: "19" }
- ListElement{ timestamp: "2008-06"; expenses: "-5"; income: "8" }
- ListElement{ timestamp: "2008-07"; expenses: "-1"; income: "4" }
- ListElement{ timestamp: "2008-08"; expenses: "-7"; income: "12" }
- ListElement{ timestamp: "2008-09"; expenses: "-4"; income: "16" }
- ListElement{ timestamp: "2008-10"; expenses: "-22"; income: "33" }
- ListElement{ timestamp: "2008-11"; expenses: "-16"; income: "25" }
- ListElement{ timestamp: "2008-12"; expenses: "-2"; income: "7" }
+ ListElement{ timestamp: "2018-01"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2018-02"; expenses: "-8"; income: "14" }
+ ListElement{ timestamp: "2018-03"; expenses: "-10"; income: "20" }
+ ListElement{ timestamp: "2018-04"; expenses: "-12"; income: "24" }
+ ListElement{ timestamp: "2018-05"; expenses: "-10"; income: "19" }
+ ListElement{ timestamp: "2018-06"; expenses: "-5"; income: "8" }
+ ListElement{ timestamp: "2018-07"; expenses: "-1"; income: "4" }
+ ListElement{ timestamp: "2018-08"; expenses: "-7"; income: "12" }
+ ListElement{ timestamp: "2018-09"; expenses: "-4"; income: "16" }
+ ListElement{ timestamp: "2018-10"; expenses: "-22"; income: "33" }
+ ListElement{ timestamp: "2018-11"; expenses: "-16"; income: "25" }
+ ListElement{ timestamp: "2018-12"; expenses: "-2"; income: "7" }
- ListElement{ timestamp: "2009-01"; expenses: "-4"; income: "5" }
- ListElement{ timestamp: "2009-02"; expenses: "-4"; income: "7" }
- ListElement{ timestamp: "2009-03"; expenses: "-11"; income: "14" }
- ListElement{ timestamp: "2009-04"; expenses: "-16"; income: "22" }
- ListElement{ timestamp: "2009-05"; expenses: "-3"; income: "5" }
- ListElement{ timestamp: "2009-06"; expenses: "-4"; income: "8" }
- ListElement{ timestamp: "2009-07"; expenses: "-7"; income: "9" }
- ListElement{ timestamp: "2009-08"; expenses: "-9"; income: "13" }
- ListElement{ timestamp: "2009-09"; expenses: "-1"; income: "6" }
- ListElement{ timestamp: "2009-10"; expenses: "-14"; income: "25" }
- ListElement{ timestamp: "2009-11"; expenses: "-19"; income: "29" }
- ListElement{ timestamp: "2009-12"; expenses: "-5"; income: "7" }
+ ListElement{ timestamp: "2019-01"; expenses: "-4"; income: "5" }
+ ListElement{ timestamp: "2019-02"; expenses: "-4"; income: "7" }
+ ListElement{ timestamp: "2019-03"; expenses: "-11"; income: "14" }
+ ListElement{ timestamp: "2019-04"; expenses: "-16"; income: "22" }
+ ListElement{ timestamp: "2019-05"; expenses: "-3"; income: "5" }
+ ListElement{ timestamp: "2019-06"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2019-07"; expenses: "-7"; income: "9" }
+ ListElement{ timestamp: "2019-08"; expenses: "-9"; income: "13" }
+ ListElement{ timestamp: "2019-09"; expenses: "-1"; income: "6" }
+ ListElement{ timestamp: "2019-10"; expenses: "-14"; income: "25" }
+ ListElement{ timestamp: "2019-11"; expenses: "-19"; income: "29" }
+ ListElement{ timestamp: "2019-12"; expenses: "-5"; income: "7" }
- ListElement{ timestamp: "2010-01"; expenses: "-14"; income: "22" }
- ListElement{ timestamp: "2010-02"; expenses: "-5"; income: "7" }
- ListElement{ timestamp: "2010-03"; expenses: "-1"; income: "9" }
- ListElement{ timestamp: "2010-04"; expenses: "-1"; income: "12" }
- ListElement{ timestamp: "2010-05"; expenses: "-5"; income: "9" }
- ListElement{ timestamp: "2010-06"; expenses: "-5"; income: "8" }
- ListElement{ timestamp: "2010-07"; expenses: "-3"; income: "7" }
- ListElement{ timestamp: "2010-08"; expenses: "-1"; income: "5" }
- ListElement{ timestamp: "2010-09"; expenses: "-2"; income: "4" }
- ListElement{ timestamp: "2010-10"; expenses: "-10"; income: "13" }
- ListElement{ timestamp: "2010-11"; expenses: "-12"; income: "17" }
- ListElement{ timestamp: "2010-12"; expenses: "-6"; income: "9" }
+ ListElement{ timestamp: "2020-01"; expenses: "-14"; income: "22" }
+ ListElement{ timestamp: "2020-02"; expenses: "-5"; income: "7" }
+ ListElement{ timestamp: "2020-03"; expenses: "-1"; income: "9" }
+ ListElement{ timestamp: "2020-04"; expenses: "-1"; income: "12" }
+ ListElement{ timestamp: "2020-05"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2020-06"; expenses: "-5"; income: "8" }
+ ListElement{ timestamp: "2020-07"; expenses: "-3"; income: "7" }
+ ListElement{ timestamp: "2020-08"; expenses: "-1"; income: "5" }
+ ListElement{ timestamp: "2020-09"; expenses: "-2"; income: "4" }
+ ListElement{ timestamp: "2020-10"; expenses: "-10"; income: "13" }
+ ListElement{ timestamp: "2020-11"; expenses: "-12"; income: "17" }
+ ListElement{ timestamp: "2020-12"; expenses: "-6"; income: "9" }
- ListElement{ timestamp: "2011-01"; expenses: "-2"; income: "6" }
- ListElement{ timestamp: "2011-02"; expenses: "-4"; income: "8" }
- ListElement{ timestamp: "2011-03"; expenses: "-7"; income: "12" }
- ListElement{ timestamp: "2011-04"; expenses: "-9"; income: "15" }
- ListElement{ timestamp: "2011-05"; expenses: "-7"; income: "19" }
- ListElement{ timestamp: "2011-06"; expenses: "-9"; income: "18" }
- ListElement{ timestamp: "2011-07"; expenses: "-13"; income: "17" }
- ListElement{ timestamp: "2011-08"; expenses: "-5"; income: "9" }
- ListElement{ timestamp: "2011-09"; expenses: "-3"; income: "8" }
- ListElement{ timestamp: "2011-10"; expenses: "-13"; income: "15" }
- ListElement{ timestamp: "2011-11"; expenses: "-8"; income: "17" }
- ListElement{ timestamp: "2011-12"; expenses: "-7"; income: "10" }
+ ListElement{ timestamp: "2021-01"; expenses: "-2"; income: "6" }
+ ListElement{ timestamp: "2021-02"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2021-03"; expenses: "-7"; income: "12" }
+ ListElement{ timestamp: "2021-04"; expenses: "-9"; income: "15" }
+ ListElement{ timestamp: "2021-05"; expenses: "-7"; income: "19" }
+ ListElement{ timestamp: "2021-06"; expenses: "-9"; income: "18" }
+ ListElement{ timestamp: "2021-07"; expenses: "-13"; income: "17" }
+ ListElement{ timestamp: "2021-08"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2021-09"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2021-10"; expenses: "-13"; income: "15" }
+ ListElement{ timestamp: "2021-11"; expenses: "-8"; income: "17" }
+ ListElement{ timestamp: "2021-12"; expenses: "-7"; income: "10" }
- ListElement{ timestamp: "2012-01"; expenses: "-12"; income: "16" }
- ListElement{ timestamp: "2012-02"; expenses: "-24"; income: "28" }
- ListElement{ timestamp: "2012-03"; expenses: "-27"; income: "22" }
- ListElement{ timestamp: "2012-04"; expenses: "-29"; income: "25" }
- ListElement{ timestamp: "2012-05"; expenses: "-27"; income: "29" }
- ListElement{ timestamp: "2012-06"; expenses: "-19"; income: "18" }
- ListElement{ timestamp: "2012-07"; expenses: "-13"; income: "17" }
- ListElement{ timestamp: "2012-08"; expenses: "-15"; income: "19" }
- ListElement{ timestamp: "2012-09"; expenses: "-3"; income: "8" }
- ListElement{ timestamp: "2012-10"; expenses: "-3"; income: "6" }
- ListElement{ timestamp: "2012-11"; expenses: "-4"; income: "8" }
- ListElement{ timestamp: "2012-12"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2022-01"; expenses: "-12"; income: "16" }
+ ListElement{ timestamp: "2022-02"; expenses: "-24"; income: "28" }
+ ListElement{ timestamp: "2022-03"; expenses: "-27"; income: "22" }
+ ListElement{ timestamp: "2022-04"; expenses: "-29"; income: "25" }
+ ListElement{ timestamp: "2022-05"; expenses: "-27"; income: "29" }
+ ListElement{ timestamp: "2022-06"; expenses: "-19"; income: "18" }
+ ListElement{ timestamp: "2022-07"; expenses: "-13"; income: "17" }
+ ListElement{ timestamp: "2022-08"; expenses: "-15"; income: "19" }
+ ListElement{ timestamp: "2022-09"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2022-10"; expenses: "-3"; income: "6" }
+ ListElement{ timestamp: "2022-11"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2022-12"; expenses: "-5"; income: "9" }
}
}
diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
index 203de239..0b40e957 100644
--- a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
+++ b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml
@@ -1,45 +1,21 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.1
-import QtQuick.Window 2.0
-import "."
-
-Rectangle {
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtDataVisualization
+import Qt.labs.qmlmodels
+
+pragma ComponentBehavior: Bound
+
+Item {
id: mainview
width: 1280
height: 1024
- property int buttonLayoutHeight: 180;
+ property int buttonLayoutHeight: 180
+ property int currentRow
state: Screen.width < Screen.height ? "portrait" : "landscape"
Data {
@@ -54,31 +30,25 @@ Rectangle {
selectedSeries: barSeries
function handleSelectionChange(series, position) {
- if (position != series.invalidSelectionPosition) {
- selectedSeries = series
- }
+ if (position !== series.invalidSelectionPosition)
+ selectedSeries = series;
// Set tableView current row to selected bar
var rowRole = series.dataProxy.rowLabels[position.x];
- var colRole
- if (barGraph.columnAxis === graphAxes.total)
+ var colRole;
+ if (barGraph.columnAxis == graphAxes.total)
colRole = "01";
else
colRole = series.dataProxy.columnLabels[position.y];
- var checkTimestamp = rowRole + "-" + colRole
- var currentRow = tableView.currentRow
+ var checkTimestamp = rowRole + "-" + colRole;
+
if (currentRow === -1 || checkTimestamp !== graphData.model.get(currentRow).timestamp) {
- var totalRows = tableView.rowCount;
+ var totalRows = tableView.rows;
for (var i = 0; i < totalRows; i++) {
- var modelTimestamp = graphData.model.get(i).timestamp
+ var modelTimestamp = graphData.model.get(i).timestamp;
if (modelTimestamp === checkTimestamp) {
- tableView.currentRow = i
- // Workaround to 5.2 row selection issue
- if (typeof tableView.selection != "undefined") {
- tableView.selection.clear()
- tableView.selection.select(i)
- }
- break
+ currentRow = i;
+ break;
}
}
}
@@ -86,17 +56,16 @@ Rectangle {
Item {
id: dataView
- anchors.right: mainview.right;
+ anchors.right: mainview.right
anchors.bottom: mainview.bottom
Bars3D {
id: barGraph
- width: dataView.width
- height: dataView.height
- shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ anchors.fill: parent
+ shadowQuality: AbstractGraph3D.ShadowQualitySoftHigh
selectionMode: AbstractGraph3D.SelectionItem
theme: Theme3D {
- type: Theme3D.ThemeRetro
+ type: Theme3D.ThemeEbony
labelBorderEnabled: true
font.pointSize: 35
labelBackgroundEnabled: true
@@ -145,7 +114,8 @@ Rectangle {
ColorGradientStop { position: 0.0; color: "#600000" }
}
- onSelectedBarChanged: handleSelectionChange(secondarySeries, position)
+ onSelectedBarChanged: (position) => mainview.handleSelectionChange(secondarySeries,
+ position);
}
//! [3]
@@ -174,71 +144,117 @@ Rectangle {
ColorGradientStop { position: 0.0; color: "#006000" }
}
- onSelectedBarChanged: handleSelectionChange(barSeries, position)
+ onSelectedBarChanged: (position) => mainview.handleSelectionChange(barSeries,
+ position);
}
}
}
- TableView {
- id: tableView
+ ColumnLayout {
+ id: tableViewLayout
+
anchors.top: parent.top
anchors.left: parent.left
- TableViewColumn{ role: "timestamp" ; title: "Month" ; width: tableView.width / 2 }
- TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: tableView.width / 4 }
- TableViewColumn{ role: "income" ; title: "Income" ; width: tableView.width / 4 }
- itemDelegate: Item {
- Text {
- id: delegateText
- anchors.verticalCenter: parent.verticalCenter
- width: parent.width
- anchors.leftMargin: 4
- anchors.left: parent.left
- anchors.right: parent.right
- color: styleData.textColor
- elide: styleData.elideMode
- text: customText
- horizontalAlignment: styleData.textAlignment
-
- property string originalText: styleData.value
- property string customText
-
- onOriginalTextChanged: {
- if (styleData.column === 0) {
- if (delegateText.originalText !== "") {
- var pattern = /(\d\d\d\d)-(\d\d)/
- var matches = pattern.exec(delegateText.originalText)
- var colIndex = parseInt(matches[2], 10) - 1
- delegateText.customText = matches[1] + " - " + graphAxes.column.labels[colIndex]
+
+ HorizontalHeaderView {
+ id: headerView
+ readonly property var columnNames: ["Month", "Expenses", "Income"]
+
+ syncView: tableView
+ Layout.fillWidth: true
+ delegate: Text {
+ required property int index
+ padding: 3
+ text: headerView.columnNames[index]
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+ }
+
+ TableView {
+ id: tableView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ reuseItems: false
+ clip: true
+
+ model: TableModel {
+ id: tableModel
+ TableModelColumn { display: "timestamp" }
+ TableModelColumn { display: "expenses" }
+ TableModelColumn { display: "income" }
+
+ rows: graphData.modelAsJsArray
+ }
+
+ delegate: Rectangle {
+ id: delegateRoot
+ required property int row
+ required property int column
+ required property string display
+ implicitHeight: 30
+ implicitWidth: column === 0 ? tableView.width / 2 : tableView.width / 4
+ color: row === mainview.currentRow ? barGraph.theme.gridLineColor
+ : barGraph.theme.windowColor
+ border.color: row === mainview.currentRow ? barGraph.theme.labelTextColor
+ : barGraph.theme.gridLineColor
+ border.width: 1
+ MouseArea {
+ anchors.fill: parent
+ onClicked: mainview.currentRow = delegateRoot.row;
+ }
+
+ Text {
+ id: delegateText
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ anchors.leftMargin: 4
+ anchors.left: parent.left
+ anchors.right: parent.right
+ text: formattedText
+ property string formattedText: {
+ if (delegateRoot.column === 0) {
+ if (delegateRoot.display !== "") {
+ var pattern = /(\d\d\d\d)-(\d\d)/;
+ var matches = pattern.exec(delegateRoot.display);
+ var colIndex = parseInt(matches[2], 10) - 1;
+ return matches[1] + " - " + graphAxes.column.labels[colIndex];
+ }
+ } else {
+ return delegateRoot.display;
}
- } else {
- delegateText.customText = originalText
}
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: delegateRoot.column === 0 ? Text.AlignLeft
+ : Text.AlignHCenter
+ elide: Text.ElideRight
}
}
}
+ }
- model: graphData.model
-
- //! [2]
- onCurrentRowChanged: {
- var timestamp = graphData.model.get(currentRow).timestamp
- var pattern = /(\d\d\d\d)-(\d\d)/
- var matches = pattern.exec(timestamp)
- var rowIndex = modelProxy.rowCategoryIndex(matches[1])
- var colIndex
- if (barGraph.columnAxis === graphAxes.total)
- colIndex = 0 // Just one column when showing yearly totals
- else
- colIndex = modelProxy.columnCategoryIndex(matches[2])
- if (selectedSeries.visible)
- mainview.selectedSeries.selectedBar = Qt.point(rowIndex, colIndex)
- else if (barSeries.visible)
- barSeries.selectedBar = Qt.point(rowIndex, colIndex)
- else
- secondarySeries.selectedBar = Qt.point(rowIndex, colIndex)
- }
- //! [2]
+ //! [2]
+ onCurrentRowChanged: {
+ var timestamp = graphData.model.get(mainview.currentRow).timestamp;
+ var pattern = /(\d\d\d\d)-(\d\d)/;
+ var matches = pattern.exec(timestamp);
+ var rowIndex = modelProxy.rowCategoryIndex(matches[1]);
+ var colIndex;
+ if (barGraph.columnAxis == graphAxes.total)
+ colIndex = 0 ;// Just one column when showing yearly totals
+ else
+ colIndex = modelProxy.columnCategoryIndex(matches[2]);
+ if (selectedSeries.visible)
+ mainview.selectedSeries.selectedBar = Qt.point(rowIndex, colIndex);
+ else if (barSeries.visible)
+ barSeries.selectedBar = Qt.point(rowIndex, colIndex);
+ else
+ secondarySeries.selectedBar = Qt.point(rowIndex, colIndex);
}
+ //! [2]
ColumnLayout {
id: controlLayout
@@ -248,38 +264,55 @@ Rectangle {
id: changeDataButton
Layout.fillWidth: true
Layout.fillHeight: true
- text: "Show 2010 - 2012"
+ text: "Show 2020 - 2022"
clip: true
//! [1]
onClicked: {
if (text === "Show yearly totals") {
- modelProxy.autoRowCategories = true
- secondaryProxy.autoRowCategories = true
- modelProxy.columnRolePattern = /^.*$/
- secondaryProxy.columnRolePattern = /^.*$/
- graphAxes.value.autoAdjustRange = true
- barGraph.columnAxis = graphAxes.total
- text = "Show all years"
+ modelProxy.autoRowCategories = true;
+ secondaryProxy.autoRowCategories = true;
+ modelProxy.columnRolePattern = /^.*$/;
+ secondaryProxy.columnRolePattern = /^.*$/;
+ graphAxes.value.autoAdjustRange = true;
+ barGraph.columnAxis = graphAxes.total;
+ text = "Show all years";
} else if (text === "Show all years") {
- modelProxy.autoRowCategories = true
- secondaryProxy.autoRowCategories = true
- modelProxy.columnRolePattern = /^.*-(\d\d)$/
- secondaryProxy.columnRolePattern = /^.*-(\d\d)$/
- graphAxes.value.min = 0
- graphAxes.value.max = 35
- barGraph.columnAxis = graphAxes.column
- text = "Show 2010 - 2012"
- } else { // text === "Show 2010 - 2012"
+ modelProxy.autoRowCategories = true;
+ secondaryProxy.autoRowCategories = true;
+ modelProxy.columnRolePattern = /^.*-(\d\d)$/;
+ secondaryProxy.columnRolePattern = /^.*-(\d\d)$/;
+ graphAxes.value.min = 0;
+ graphAxes.value.max = 35;
+ barGraph.columnAxis = graphAxes.column;
+ text = "Show 2020 - 2022";
+ } else { // text === "Show 2020 - 2022"
// Explicitly defining row categories, since we do not want to show data for
// all years in the model, just for the selected ones.
- modelProxy.autoRowCategories = false
- secondaryProxy.autoRowCategories = false
- modelProxy.rowCategories = ["2010", "2011", "2012"]
- secondaryProxy.rowCategories = ["2010", "2011", "2012"]
- text = "Show yearly totals"
+ modelProxy.autoRowCategories = false;
+ secondaryProxy.autoRowCategories = false;
+ modelProxy.rowCategories = ["2020", "2021", "2022"];
+ secondaryProxy.rowCategories = ["2020", "2021", "2022"];
+ text = "Show yearly totals";
}
}
//! [1]
+
+ contentItem: Text {
+ text: changeDataButton.text
+ opacity: changeDataButton.enabled ? 1.0 : 0.3
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: changeDataButton.enabled ? 1 : 0.3
+ color: changeDataButton.down ? barGraph.theme.gridLineColor : barGraph.theme.windowColor
+ border.color: changeDataButton.down ? barGraph.theme.labelTextColor : barGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
}
Button {
@@ -291,13 +324,29 @@ Rectangle {
enabled: barGraph.shadowsSupported
onClicked: {
if (barGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) {
- barGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium;
- text = "Hide Shadows"
+ barGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh;
+ text = "Hide Shadows";
} else {
barGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
- text = "Show Shadows"
+ text = "Show Shadows";
}
}
+ contentItem: Text {
+ text: shadowToggle.text
+ opacity: shadowToggle.enabled ? 1.0 : 0.3
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: shadowToggle.enabled ? 1 : 0.3
+ color: shadowToggle.down ? barGraph.theme.gridLineColor : barGraph.theme.windowColor
+ border.color: shadowToggle.down ? barGraph.theme.labelTextColor : barGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
}
Button {
@@ -309,22 +358,74 @@ Rectangle {
//! [0]
onClicked: {
if (text === "Show Expenses") {
- barSeries.visible = false
- secondarySeries.visible = true
- barGraph.valueAxis.labelFormat = "-%.2f M\u20AC"
- secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: @valueLabel"
- text = "Show Both"
+ barSeries.visible = false;
+ secondarySeries.visible = true;
+ barGraph.valueAxis.labelFormat = "-%.2f M\u20AC";
+ secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: @valueLabel";
+ text = "Show Both";
} else if (text === "Show Both") {
- barSeries.visible = true
- barGraph.valueAxis.labelFormat = "%.2f M\u20AC"
- secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: -@valueLabel"
- text = "Show Income"
+ barSeries.visible = true;
+ barGraph.valueAxis.labelFormat = "%.2f M\u20AC";
+ secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: -@valueLabel";
+ text = "Show Income";
} else { // text === "Show Income"
- secondarySeries.visible = false
- text = "Show Expenses"
+ secondarySeries.visible = false;
+ text = "Show Expenses";
}
}
//! [0]
+ contentItem: Text {
+ text: seriesToggle.text
+ opacity: seriesToggle.enabled ? 1.0 : 0.3
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: seriesToggle.enabled ? 1 : 0.3
+ color: seriesToggle.down ? barGraph.theme.gridLineColor : barGraph.theme.windowColor
+ border.color: seriesToggle.down ? barGraph.theme.labelTextColor : barGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+
+ Button {
+ id: marginToggle
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ text: "Use Margin"
+ clip: true
+
+ onClicked: {
+ if (text === "Use Margin") {
+ barGraph.barSeriesMargin = Qt.size(0.2, 0.2);
+ barGraph.barSpacing = Qt.size(0.0, 0.0);
+ text = "Use Spacing"
+ } else if (text === "Use Spacing") {
+ barGraph.barSeriesMargin = Qt.size(0.0, 0.0);
+ barGraph.barSpacing = Qt.size(0.5, 0.5);
+ text = "Use Margin";
+ }
+ }
+ contentItem: Text {
+ text: marginToggle.text
+ opacity: marginToggle.enabled ? 1.0 : 0.3
+ color: barGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: marginToggle.enabled ? 1 : 0.3
+ color: marginToggle.down ? barGraph.theme.gridLineColor : barGraph.theme.windowColor
+ border.color: marginToggle.down ? barGraph.theme.labelTextColor : barGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
}
}
@@ -337,7 +438,7 @@ Rectangle {
height: mainview.height
}
PropertyChanges {
- target: tableView
+ target: tableViewLayout
height: mainview.height - buttonLayoutHeight
anchors.right: dataView.left
anchors.left: mainview.left
@@ -347,7 +448,7 @@ Rectangle {
target: controlLayout
width: mainview.width / 4
height: buttonLayoutHeight
- anchors.top: tableView.bottom
+ anchors.top: tableViewLayout.bottom
anchors.bottom: mainview.bottom
anchors.left: mainview.left
anchors.right: dataView.left
@@ -357,11 +458,11 @@ Rectangle {
name: "portrait"
PropertyChanges {
target: dataView
- width: mainview.height / 4 * 3
+ width: mainview.width
height: mainview.width
}
PropertyChanges {
- target: tableView
+ target: tableViewLayout
height: mainview.width
anchors.right: controlLayout.left
anchors.left: mainview.left
diff --git a/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png b/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png
deleted file mode 100644
index 33d00708..00000000
--- a/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc b/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc
deleted file mode 100644
index ed405ca2..00000000
--- a/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlcustominput
- \title Qt Quick 2 Custom Input Example
- \ingroup qtdatavisualization_examples
- \brief Customizing input in a QML application.
-
- The Qt Quick 2 Custom Input example shows how to customize the 3D graph controls from Qt Quick 2 using the MouseArea to capture and process mouse events in QML.
- Custom input handling code in this example shows how the camera is now controlled by using NumberAnimation to animate the camera and item selection
- is done on mouseover rather than clicking any mouse buttons. Also the code shows how to implement similar zoom with mouse wheel functionality as the default
- input handler implements.
-
- \image qmlcustominput-example.png
-
- \include examples-run.qdocinc
-
- \section1 Removing Default Input Handling
-
- The default input handling mechanism is disabled by setting the inputHandler property to null.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 0
- \dots 0
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 1
- \dots 0
-
- \section1 Implementing Custom Selection Handling
-
- The on mouseover selection handling is implemented using standard MouseArea to capture the mouse events.
- The mouse area is configured to capture hover events and has two custom properties for \c mouseX and \c mouseY
- to store the last known mouse coordinates.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 2
-
- Whenever a pointer movement related signal is received the code updates the \c mouseX and \c mouseY properties.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 3
-
- As the selection is one shot, and is cleared each time a 3D frame is rendered, a timer is setup to retrigger selection so that the selection moves to the item
- currently under the mouse cursor as the camera animates around the graph even when the mouse cursor is not moving.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 4
-
- \section1 Implementing Custom Zoom Handling
-
- The camera has a zoom factor that represents amount of zoom in percentages. In this example the zoom range is limited
- between 10% and 500%. This range is then divided to four subranges where angleDelta is scaled to different amount of zoom change
- based on the current subrange.
-
- \dots
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 5
- \dots
-
- \section1 Implementing Custom Camera Handling
-
- The camera is animated to constantly rotate around the graph with two animations. The rotation around the graph is done with
- a simple NumberAnimation that just increments during 20 seconds from 0 degrees to 360 degrees and sets the \l Q3DCamera::xRotation property.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 6
-
- The camera movement up and down is implemented with a SequentialAnimation that varies the \l Q3DCamera::yRotation property of the camera
- from 5 degrees to 45 degrees and back with in and out easing.
-
- \snippet qmlcustominput/qml/qmlcustominput/main.qml 7
-*/
diff --git a/examples/datavisualization/qmlcustominput/main.cpp b/examples/datavisualization/qmlcustominput/main.cpp
deleted file mode 100644
index 92ab7c5b..00000000
--- a/examples/datavisualization/qmlcustominput/main.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("QML Custom Input"));
-
- viewer.setSource(QUrl("qrc:/qml/qmlcustominput/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml
deleted file mode 100644
index b86f96c5..00000000
--- a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml
+++ /dev/null
@@ -1,1106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- property alias modelOne: dataModelOne
- property alias modelTwo: dataModelTwo
- property alias modelThree: dataModelThree
-
- ListModel {
- id: dataModelOne
- ListElement{ xPos: -10.0000; yPos: 5.00000; zPos: -5.00000 }
- ListElement{ xPos: -9.06229; yPos: 3.07132; zPos: -4.54268 }
- ListElement{ xPos: -8.55132; yPos: 4.19424; zPos: -4.03318 }
- ListElement{ xPos: -8.03806; yPos: 4.75162; zPos: -3.99583 }
- ListElement{ xPos: -9.50337; yPos: 4.90684; zPos: -4.21947 }
- ListElement{ xPos: -9.93819; yPos: 3.42724; zPos: -3.58955 }
- ListElement{ xPos: -7.84971; yPos: 3.15272; zPos: -4.90367 }
- ListElement{ xPos: -7.30477; yPos: 2.91062; zPos: -4.11078 }
- ListElement{ xPos: -7.11201; yPos: 3.68863; zPos: -4.52683 }
- ListElement{ xPos: -8.83267; yPos: 2.96504; zPos: -3.61108 }
- ListElement{ xPos: -6.94874; yPos: 2.49808; zPos: -2.92883 }
- ListElement{ xPos: -9.02606; yPos: 4.7496; zPos: -4.18193 }
- ListElement{ xPos: -9.5434; yPos: 3.15534; zPos: -3.83789 }
- ListElement{ xPos: -6.8679; yPos: 3.66922; zPos: -3.58288 }
- ListElement{ xPos: -8.16487; yPos: 1.82227; zPos: -4.64523 }
- ListElement{ xPos: -7.42165; yPos: 3.18192; zPos: -4.22791 }
- ListElement{ xPos: -7.99257; yPos: 3.06559; zPos: -4.33262 }
- ListElement{ xPos: -8.98851; yPos: 2.64924; zPos: -4.44595 }
- ListElement{ xPos: -6.36774; yPos: 3.96697; zPos: -4.38998 }
- ListElement{ xPos: -7.18413; yPos: 3.32417; zPos: -4.04636 }
- ListElement{ xPos: -7.91649; yPos: 3.46826; zPos: -2.78126 }
- ListElement{ xPos: -7.49495; yPos: 3.12306; zPos: -3.14539 }
- ListElement{ xPos: -7.5445; yPos: 2.85744; zPos: -3.68421 }
- }
-
- ListModel {
- id: dataModelTwo
- ListElement{ xPos: 2.25354; yPos: 1.36828; zPos: -1.32025 }
- ListElement{ xPos: -2.35524; yPos: -0.081203; zPos: 1.23267 }
- ListElement{ xPos: 2.6517; yPos: -1.20549; zPos: 2.73606 }
- ListElement{ xPos: -2.55382; yPos: 3.48814; zPos: -0.454971 }
- ListElement{ xPos: -3.85468; yPos: 0.263955; zPos: 0.578276 }
- ListElement{ xPos: 2.85275; yPos: 1.32315; zPos: 1.0565 }
- ListElement{ xPos: -0.404099; yPos: -2.36811; zPos: -1.60324 }
- ListElement{ xPos: 1.58908; yPos: 0.363782; zPos: -0.554303 }
- ListElement{ xPos: 0.251507; yPos: 0.124637; zPos: -0.752568 }
- ListElement{ xPos: -2.45626; yPos: -0.722719; zPos: -1.11764 }
- ListElement{ xPos: 4.15342; yPos: 1.92247; zPos: -0.954975 }
- ListElement{ xPos: 2.05845; yPos: 0.643191; zPos: -0.121564 }
- ListElement{ xPos: 0.253468; yPos: 0.814651; zPos: 3.05732 }
- ListElement{ xPos: 1.51724; yPos: 0.244303; zPos: 2.25864 }
- ListElement{ xPos: 1.15; yPos: -0.487518; zPos: 0.815931 }
- ListElement{ xPos: -0.0538979; yPos: 0.124927; zPos: 0.251571 }
- ListElement{ xPos: 0.941523; yPos: -0.483498; zPos: -3.2731 }
- ListElement{ xPos: 3.55074; yPos: -1.04714; zPos: -0.954301 }
- ListElement{ xPos: -2.43125; yPos: -0.964099; zPos: -0.658537 }
- ListElement{ xPos: 4.25459; yPos: 0.163296; zPos: 2.05563 }
- ListElement{ xPos: -0.612031; yPos: 1.03234; zPos: -0.227175 }
- ListElement{ xPos: 0.78338; yPos: -0.847922; zPos: -0.959189 }
- ListElement{ xPos: -4.20076; yPos: 1.44907; zPos: 0.853836 }
- ListElement{ xPos: -1.59466; yPos: -1.27511; zPos: -1.5686 }
- ListElement{ xPos: -3.3567; yPos: -1.96864; zPos: 1.83224 }
- ListElement{ xPos: -2.75169; yPos: -0.964221; zPos: -1.26465 }
- ListElement{ xPos: -2.45624; yPos: 0.287046; zPos: -4.55032 }
- ListElement{ xPos: 2.73649; yPos: -1.48789; zPos: -0.653082 }
- ListElement{ xPos: 2.73284; yPos: 2.2912; zPos: -2.4933 }
- ListElement{ xPos: -0.854321; yPos: -2.04288; zPos: 3.7516 }
- ListElement{ xPos: -1.35708; yPos: -1.84915; zPos: 2.35985 }
- ListElement{ xPos: -3.25001; yPos: -1.64456; zPos: -4.45419 }
- ListElement{ xPos: -0.356834; yPos: -0.569139; zPos: -1.75308 }
- ListElement{ xPos: -0.813569; yPos: -0.287899; zPos: -0.0535036 }
- ListElement{ xPos: 4.75975; yPos: -1.48817; zPos: -2.45957 }
- ListElement{ xPos: 4.35294; yPos: 1.46154; zPos: 0.814214 }
- ListElement{ xPos: -3.22467; yPos: 2.76903; zPos: 0.510435 }
- ListElement{ xPos: 2.49494; yPos: 1.9286; zPos: 0.552287 }
- ListElement{ xPos: -0.456521; yPos: 0.688277; zPos: -0.82788 }
- ListElement{ xPos: -2.72568; yPos: 2.80278; zPos: -2.45782 }
- ListElement{ xPos: -1.65023; yPos: 1.32005; zPos: -2.05754 }
- ListElement{ xPos: -1.63551; yPos: 1.88519; zPos: -3.65544 }
- ListElement{ xPos: -1.20008; yPos: -0.723785; zPos: 0.853563 }
- ListElement{ xPos: 1.45448; yPos: 1.08701; zPos: 2.17385 }
- ListElement{ xPos: -3.9042; yPos: -1.16916; zPos: -0.85395 }
- ListElement{ xPos: 3.15645; yPos: 0.123932; zPos: -0.950988 }
- ListElement{ xPos: -1.35924; yPos: -2.64015; zPos: -0.54254 }
- ListElement{ xPos: -4.15753; yPos: 1.28294; zPos: -4.47502 }
- ListElement{ xPos: -2.7885; yPos: 2.48535; zPos: -0.159651 }
- ListElement{ xPos: -3.44364; yPos: 0.627232; zPos: 0.611881 }
- ListElement{ xPos: -1.55639; yPos: -0.967484; zPos: 2.35497 }
- ListElement{ xPos: -0.752853; yPos: 1.16736; zPos: -0.757871 }
- ListElement{ xPos: -0.859974; yPos: 0.640213; zPos: -1.75453 }
- ListElement{ xPos: 0.85744; yPos: 0.480175; zPos: 2.97204 }
- ListElement{ xPos: 4.0571; yPos: 3.24083; zPos: -0.183622 }
- ListElement{ xPos: 0.658087; yPos: 0.841418; zPos: 0.357839 }
- ListElement{ xPos: -2.13027; yPos: 0.920836; zPos: -2.758 }
- ListElement{ xPos: -0.65825; yPos: 0.164257; zPos: 1.69478 }
- ListElement{ xPos: -1.88335; yPos: -1.4811; zPos: -2.15408 }
- ListElement{ xPos: -1.67331; yPos: 2.96982; zPos: 1.85521 }
- ListElement{ xPos: -0.750937; yPos: 0.282914; zPos: -0.758707 }
- ListElement{ xPos: 2.29891; yPos: 1.16949; zPos: 2.65927 }
- ListElement{ xPos: 2.69132; yPos: 2.92632; zPos: -0.206126 }
- ListElement{ xPos: -1.65771; yPos: 3.28846; zPos: 2.50201 }
- ListElement{ xPos: -0.568799; yPos: 2.5289; zPos: -1.15875 }
- ListElement{ xPos: -1.85383; yPos: 0.528953; zPos: -2.32418 }
- ListElement{ xPos: 0.159422; yPos: -2.36165; zPos: -0.569393 }
- ListElement{ xPos: -3.96506; yPos: 0.282374; zPos: -0.254519 }
- ListElement{ xPos: 0.150933; yPos: -3.88058; zPos: -0.759422 }
- ListElement{ xPos: -1.17917; yPos: -1.96176; zPos: 0.95589 }
- ListElement{ xPos: -0.340817; yPos: -3.52333; zPos: -1.45715 }
- ListElement{ xPos: 3.21784; yPos: -2.56593; zPos: 2.55468 }
- ListElement{ xPos: 0.060965; yPos: -2.44153; zPos: 1.35813 }
- ListElement{ xPos: 1.4594; yPos: -1.96511; zPos: 0.170228 }
- ListElement{ xPos: 3.55017; yPos: -2.16882; zPos: 1.75539 }
- ListElement{ xPos: 2.89487; yPos: -0.727481; zPos: -0.39588 }
- ListElement{ xPos: -1.65151; yPos: -0.603877; zPos: 0.250508 }
- ListElement{ xPos: -4.35232; yPos: -1.32155; zPos: -2.31877 }
- ListElement{ xPos: 2.75852; yPos: -1.88931; zPos: 1.77874 }
- ListElement{ xPos: 2.75452; yPos: -0.64123; zPos: 2.45546 }
- ListElement{ xPos: 0.151914; yPos: -0.888395; zPos: -0.260935 }
- ListElement{ xPos: 0.150593; yPos: 0.0461652; zPos: -0.158206 }
- ListElement{ xPos: -1.22087; yPos: -2.92034; zPos: -3.78604 }
- ListElement{ xPos: -0.761622; yPos: 0.161856; zPos: 3.5586 }
- ListElement{ xPos: -1.88456; yPos: -2.48094; zPos: 0.287091 }
- ListElement{ xPos: 1.25293; yPos: 2.64374; zPos: 1.6532 }
- ListElement{ xPos: -0.657609; yPos: 1.32547; zPos: -0.557301 }
- ListElement{ xPos: 3.85995; yPos: 2.32568; zPos: -1.38265 }
- ListElement{ xPos: 1.65572; yPos: -2.28977; zPos: 0.957488 }
- ListElement{ xPos: -2.45312; yPos: -2.96071; zPos: 3.45147 }
- ListElement{ xPos: -1.75259; yPos: 0.365259; zPos: 1.60113 }
- ListElement{ xPos: 1.14045; yPos: -0.844805; zPos: 0.359343 }
- ListElement{ xPos: -1.55951; yPos: 1.65687; zPos: -3.10398 }
- ListElement{ xPos: 0.441652; yPos: -1.36623; zPos: -1.55494 }
- ListElement{ xPos: -3.95762; yPos: 0.288753; zPos: 3.7791 }
- ListElement{ xPos: -1.80101; yPos: -0.241499; zPos: 2.29693 }
- ListElement{ xPos: -0.456931; yPos: 1.64399; zPos: 1.35559 }
- ListElement{ xPos: -0.691421; yPos: -0.723378; zPos: 2.51839 }
- ListElement{ xPos: -1.20658; yPos: -3.04063; zPos: -1.552 }
- ListElement{ xPos: -0.958574; yPos: 1.48688; zPos: 0.950152 }
- ListElement{ xPos: 1.76319; yPos: -1.36072; zPos: 2.15866 }
- ListElement{ xPos: -3.91301; yPos: -0.328932; zPos: -2.45524 }
- ListElement{ xPos: 2.9553; yPos: 3.12703; zPos: -2.43321 }
- ListElement{ xPos: 3.55939; yPos: -1.48028; zPos: 0.152252 }
- ListElement{ xPos: -1.41545; yPos: 3.247; zPos: 0.779314 }
- ListElement{ xPos: -3.34482; yPos: -0.894538; zPos: 0.209302 }
- ListElement{ xPos: 1.15338; yPos: 0.362332; zPos: -2.7924 }
- ListElement{ xPos: 0.468852; yPos: 0.120872; zPos: 1.35593 }
- ListElement{ xPos: 1.98778; yPos: -3.32292; zPos: -0.758591 }
- ListElement{ xPos: 0.420718; yPos: -0.225014; zPos: -2.44806 }
- ListElement{ xPos: 0.550207; yPos: 1.56432; zPos: 2.25317 }
- ListElement{ xPos: 4.35156; yPos: -0.966178; zPos: -0.791032 }
- ListElement{ xPos: 3.35179; yPos: -1.04981; zPos: -0.854089 }
- ListElement{ xPos: 1.70857; yPos: -0.281369; zPos: -0.254686 }
- ListElement{ xPos: -3.05855; yPos: -0.443693; zPos: 1.30251 }
- ListElement{ xPos: -3.9509; yPos: -2.72179; zPos: -3.83489 }
- ListElement{ xPos: 2.19632; yPos: 1.32915; zPos: 1.15345 }
- ListElement{ xPos: 1.42782; yPos: -0.449435; zPos: -2.85005 }
- ListElement{ xPos: -2.19053; yPos: 0.049866; zPos: 2.87493 }
- ListElement{ xPos: 2.45196; yPos: -2.44705; zPos: -2.85302 }
- ListElement{ xPos: 4.35263; yPos: 0.245956; zPos: 1.12886 }
- ListElement{ xPos: 1.8167; yPos: 1.85407; zPos: -0.714159 }
- ListElement{ xPos: 1.88577; yPos: 2.04227; zPos: -0.959396 }
- ListElement{ xPos: 1.6522; yPos: -2.48289; zPos: 0.355373 }
- ListElement{ xPos: -3.39965; yPos: 0.286834; zPos: -1.68171 }
- ListElement{ xPos: 1.85639; yPos: 1.47419; zPos: 2.25749 }
- ListElement{ xPos: -2.5216; yPos: -0.88573; zPos: -2.69594 }
- ListElement{ xPos: -0.143043; yPos: 0.28453; zPos: -1.75898 }
- ListElement{ xPos: -2.52745; yPos: -2.76741; zPos: -0.257011 }
- ListElement{ xPos: 0.381448; yPos: -1.64793; zPos: -0.756889 }
- ListElement{ xPos: 2.30469; yPos: -1.28844; zPos: -2.79271 }
- ListElement{ xPos: -1.72491; yPos: -1.48634; zPos: -2.61686 }
- ListElement{ xPos: 0.503342; yPos: 0.248352; zPos: -2.27162 }
- ListElement{ xPos: 0.457491; yPos: -1.88183; zPos: -0.951124 }
- ListElement{ xPos: -1.23123; yPos: 0.963519; zPos: 2.3569 }
- ListElement{ xPos: -0.55709; yPos: -0.364372; zPos: -1.82528 }
- ListElement{ xPos: 2.73963; yPos: -0.567024; zPos: -0.496936 }
- ListElement{ xPos: 1.17979; yPos: 2.76252; zPos: -2.35641 }
- ListElement{ xPos: -1.20723; yPos: -2.1692; zPos: 3.14368 }
- ListElement{ xPos: -0.0504301; yPos: 1.76714; zPos: 1.64265 }
- ListElement{ xPos: 1.45714; yPos: -0.725448; zPos: 0.739217 }
- ListElement{ xPos: 0.246123; yPos: -3.27811; zPos: -0.251218 }
- ListElement{ xPos: -0.894632; yPos: 1.08758; zPos: -0.17184 }
- ListElement{ xPos: -2.45217; yPos: 0.565077; zPos: -0.557015 }
- ListElement{ xPos: 2.51301; yPos: 1.1271; zPos: 2.25057 }
- ListElement{ xPos: -1.05099; yPos: -2.1688; zPos: -1.88996 }
- ListElement{ xPos: 1.26945; yPos: -2.1225; zPos: -1.55031 }
- ListElement{ xPos: -4.30129; yPos: -0.760298; zPos: 0.259868 }
- ListElement{ xPos: -0.157336; yPos: -0.237532; zPos: -2.69483 }
- ListElement{ xPos: -2.95778; yPos: 1.36212; zPos: -3.65524 }
- ListElement{ xPos: 2.74003; yPos: 1.16234; zPos: 2.05928 }
- ListElement{ xPos: 0.955294; yPos: -1.52182; zPos: -1.05684 }
- ListElement{ xPos: -1.87004; yPos: 2.72729; zPos: -0.550608 }
- ListElement{ xPos: 0.459439; yPos: 2.88101; zPos: -4.4135 }
- ListElement{ xPos: 1.35069; yPos: 1.08445; zPos: -0.808625 }
- ListElement{ xPos: -2.70034; yPos: -1.36291; zPos: -2.65126 }
- ListElement{ xPos: 0.353099; yPos: 2.32354; zPos: -1.61885 }
- ListElement{ xPos: -0.453359; yPos: 1.67524; zPos: 0.122888 }
- ListElement{ xPos: 3.7506; yPos: 1.12855; zPos: -3.86338 }
- ListElement{ xPos: 0.548626; yPos: 2.63101; zPos: 0.552261 }
- ListElement{ xPos: -0.753935; yPos: -3.52241; zPos: -3.21122 }
- ListElement{ xPos: 0.258935; yPos: -1.32453; zPos: 2.25745 }
- ListElement{ xPos: -2.8797; yPos: -1.60832; zPos: -2.45626 }
- ListElement{ xPos: 0.151838; yPos: -0.565264; zPos: 3.98539 }
- ListElement{ xPos: 2.1508; yPos: -1.68734; zPos: -1.75076 }
- ListElement{ xPos: -4.23947; yPos: -1.92531; zPos: 2.35438 }
- ListElement{ xPos: 1.95273; yPos: -1.32736; zPos: 0.313398 }
- ListElement{ xPos: 0.533647; yPos: 0.646686; zPos: 0.75712 }
- ListElement{ xPos: 0.856619; yPos: -0.843249; zPos: -0.577773 }
- ListElement{ xPos: -2.15649; yPos: -1.64285; zPos: -2.31055 }
- ListElement{ xPos: -0.851309; yPos: -2.84717; zPos: -0.324933 }
- ListElement{ xPos: -3.17772; yPos: -0.324817; zPos: -0.858394 }
- ListElement{ xPos: 3.45303; yPos: 0.529449; zPos: 0.818094 }
- ListElement{ xPos: 1.42912; yPos: 0.238088; zPos: 0.385617 }
- ListElement{ xPos: 0.459586; yPos: 1.7661; zPos: -0.153761 }
- ListElement{ xPos: 0.855577; yPos: 3.16845; zPos: -2.19548 }
- ListElement{ xPos: 2.15181; yPos: 0.729021; zPos: -0.955922 }
- ListElement{ xPos: -2.40113; yPos: 0.665756; zPos: -0.521366 }
- ListElement{ xPos: 1.45469; yPos: -0.462177; zPos: -1.95869 }
- ListElement{ xPos: 0.629115; yPos: -1.84769; zPos: 1.86755 }
- ListElement{ xPos: 3.47576; yPos: -0.209875; zPos: -0.555502 }
- ListElement{ xPos: 0.295075; yPos: -0.840772; zPos: 4.68895 }
- ListElement{ xPos: -0.253301; yPos: -2.49078; zPos: 2.11749 }
- ListElement{ xPos: -1.15923; yPos: -3.163; zPos: -3.05671 }
- ListElement{ xPos: 1.45484; yPos: 0.963654; zPos: -0.734942 }
- ListElement{ xPos: 0.354307; yPos: 0.520772; zPos: -1.32278 }
- ListElement{ xPos: 2.65725; yPos: 0.284589; zPos: -0.856856 }
- ListElement{ xPos: -1.2596; yPos: 0.765493; zPos: -1.66469 }
- ListElement{ xPos: -0.656057; yPos: -2.16906; zPos: 3.72144 }
- ListElement{ xPos: -0.251559; yPos: -2.36406; zPos: -1.89709 }
- ListElement{ xPos: 0.35608; yPos: -0.80463; zPos: 1.85674 }
- ListElement{ xPos: 0.0508692; yPos: 0.615674; zPos: 0.856785 }
- ListElement{ xPos: -2.50726; yPos: 2.28743; zPos: -2.05697 }
- ListElement{ xPos: 1.65272; yPos: 1.29604; zPos: 2.11481 }
- ListElement{ xPos: -3.2878; yPos: -0.244516; zPos: 0.799732 }
- ListElement{ xPos: -2.18989; yPos: -0.847222; zPos: -0.264559 }
- ListElement{ xPos: 0.452832; yPos: 0.960993; zPos: 2.53691 }
- ListElement{ xPos: -2.43913; yPos: 1.28957; zPos: 2.75427 }
- ListElement{ xPos: -1.72889; yPos: -3.29414; zPos: -2.31426 }
- ListElement{ xPos: 0.952615; yPos: -0.0844651; zPos: 0.346607 }
- ListElement{ xPos: 1.41175; yPos: 0.889643; zPos: 0.450356 }
- ListElement{ xPos: 2.13145; yPos: 1.08697; zPos: 0.223055 }
- ListElement{ xPos: -2.16002; yPos: -0.225505; zPos: -0.602641 }
- ListElement{ xPos: 0.54028; yPos: 1.24765; zPos: -0.456129 }
- ListElement{ xPos: 2.55086; yPos: -0.56734; zPos: -2.65051 }
- ListElement{ xPos: -4.53921; yPos: -0.483588; zPos: -1.25013 }
- ListElement{ xPos: 3.45413; yPos: -0.44258; zPos: 2.29687 }
- ListElement{ xPos: -0.257456; yPos: 0.64624; zPos: 1.65041 }
- ListElement{ xPos: 1.25559; yPos: -0.65493; zPos: -0.358872 }
- ListElement{ xPos: 1.9599; yPos: -1.56965; zPos: -4.17044 }
- ListElement{ xPos: 2.75996; yPos: -1.98665; zPos: 3.31794 }
- ListElement{ xPos: 3.05837; yPos: 1.04847; zPos: -0.975536 }
- ListElement{ xPos: -2.95407; yPos: 1.40294; zPos: -2.25825 }
- ListElement{ xPos: 1.38718; yPos: 0.360709; zPos: -2.98211 }
- ListElement{ xPos: 0.481728; yPos: -2.48564; zPos: 3.25864 }
- ListElement{ xPos: -1.15089; yPos: 0.363522; zPos: 0.458662 }
- ListElement{ xPos: -2.25551; yPos: 0.0421839; zPos: 0.650008 }
- ListElement{ xPos: -1.85862; yPos: -0.969237; zPos: 4.25313 }
- ListElement{ xPos: 1.55797; yPos: 0.0465051; zPos: -3.85709 }
- ListElement{ xPos: 0.0555338; yPos: 0.682957; zPos: -2.45556 }
- ListElement{ xPos: -0.186868; yPos: -0.482811; zPos: 1.96957 }
- ListElement{ xPos: 2.197; yPos: -1.5248; zPos: -4.20912 }
- ListElement{ xPos: 3.40636; yPos: 0.626269; zPos: -2.05757 }
- ListElement{ xPos: 0.780426; yPos: 2.68048; zPos: -0.852693 }
- ListElement{ xPos: 1.65184; yPos: 1.68951; zPos: -0.892089 }
- ListElement{ xPos: 2.11929; yPos: -2.44406; zPos: 1.21168 }
- ListElement{ xPos: -0.153348; yPos: -1.88112; zPos: -0.357374 }
- ListElement{ xPos: -0.359393; yPos: 1.76654; zPos: 1.63063 }
- ListElement{ xPos: -2.15954; yPos: 0.0819277; zPos: 0.757621 }
- ListElement{ xPos: -0.159898; yPos: -3.36316; zPos: 0.359582 }
- ListElement{ xPos: 2.74125; yPos: -2.84148; zPos: 0.355785 }
- ListElement{ xPos: -1.3558; yPos: 0.0027827; zPos: -0.588162 }
- ListElement{ xPos: -0.354346; yPos: -2.56747; zPos: -0.984403 }
- ListElement{ xPos: -2.75082; yPos: -3.56807; zPos: 1.5599 }
- ListElement{ xPos: -2.54708; yPos: -0.686147; zPos: 2.75649 }
- ListElement{ xPos: 1.35138; yPos: 0.692978; zPos: -2.24969 }
- ListElement{ xPos: -1.39826; yPos: -0.246682; zPos: -1.65876 }
- ListElement{ xPos: -1.46629; yPos: -1.44446; zPos: 4.45293 }
- ListElement{ xPos: -1.89442; yPos: 3.64549; zPos: 2.05732 }
- ListElement{ xPos: -0.658093; yPos: 0.0815129; zPos: 3.95269 }
- ListElement{ xPos: 2.25603; yPos: 2.96329; zPos: -2.35993 }
- ListElement{ xPos: 1.36323; yPos: 1.64488; zPos: -0.0538547 }
- ListElement{ xPos: 1.75659; yPos: 2.24227; zPos: -2.8522 }
- ListElement{ xPos: -0.0566584; yPos: -1.56465; zPos: -0.0503143 }
- ListElement{ xPos: -3.8532; yPos: -0.822258; zPos: -0.345406 }
- ListElement{ xPos: 0.951328; yPos: 0.329296; zPos: -2.52211 }
- ListElement{ xPos: -2.48659; yPos: 0.410856; zPos: -3.55401 }
- ListElement{ xPos: 3.72676; yPos: 2.36324; zPos: 3.65589 }
- ListElement{ xPos: 0.559972; yPos: 0.884984; zPos: 3.15283 }
- ListElement{ xPos: -1.37624; yPos: -1.36007; zPos: -2.16578 }
- ListElement{ xPos: 2.05543; yPos: 0.4472; zPos: -0.82911 }
- ListElement{ xPos: -4.75258; yPos: 1.8779; zPos: -1.75376 }
- ListElement{ xPos: 0.15648; yPos: 2.64039; zPos: -2.21467 }
- ListElement{ xPos: -2.0593; yPos: -2.56775; zPos: 1.15037 }
- ListElement{ xPos: -3.70217; yPos: 2.12375; zPos: 1.3652 }
- ListElement{ xPos: 1.05566; yPos: 0.98299; zPos: 4.02985 }
- ListElement{ xPos: -0.766882; yPos: -0.88359; zPos: 1.35525 }
- ListElement{ xPos: 0.951335; yPos: -1.84689; zPos: 0.178337 }
- ListElement{ xPos: 0.751608; yPos: 1.1691; zPos: 4.25273 }
- ListElement{ xPos: -1.36367; yPos: 0.728904; zPos: 0.655858 }
- ListElement{ xPos: 3.17581; yPos: -0.0844758; zPos: -1.75811 }
- ListElement{ xPos: 2.85546; yPos: -0.683618; zPos: 0.653701 }
- ListElement{ xPos: -0.471118; yPos: 3.04176; zPos: -2.35393 }
- ListElement{ xPos: 3.0574; yPos: -0.601996; zPos: -0.611932 }
- ListElement{ xPos: -0.854024; yPos: -0.44532; zPos: 0.355575 }
- ListElement{ xPos: 0.05047; yPos: -1.92888; zPos: 0.64818 }
- ListElement{ xPos: -1.25515; yPos: -1.44466; zPos: 1.90429 }
- ListElement{ xPos: -1.67201; yPos: 0.0461708; zPos: -0.796655 }
- ListElement{ xPos: 1.45345; yPos: -1.66159; zPos: -3.48143 }
- ListElement{ xPos: -2.84514; yPos: -1.24586; zPos: -3.47945 }
- ListElement{ xPos: 0.287402; yPos: -0.688276; zPos: -3.75664 }
- ListElement{ xPos: 3.35908; yPos: 0.687828; zPos: -1.94406 }
- ListElement{ xPos: -2.39167; yPos: 1.08322; zPos: -1.73508 }
- ListElement{ xPos: 1.52152; yPos: 1.86032; zPos: -1.25351 }
- ListElement{ xPos: 1.55931; yPos: 3.64414; zPos: 1.35944 }
- ListElement{ xPos: 1.15954; yPos: -1.36058; zPos: 0.758814 }
- ListElement{ xPos: -1.95325; yPos: 0.0851092; zPos: -0.854106 }
- ListElement{ xPos: -2.25254; yPos: -0.523024; zPos: 1.05486 }
- ListElement{ xPos: -2.68036; yPos: -1.32901; zPos: 1.05877 }
- ListElement{ xPos: -0.485956; yPos: -1.52164; zPos: 2.45303 }
- ListElement{ xPos: -0.0546215; yPos: 0.640683; zPos: -2.85953 }
- ListElement{ xPos: 4.45295; yPos: -0.246051; zPos: -0.159626 }
- ListElement{ xPos: 3.4523; yPos: 1.7215; zPos: -1.10587 }
- ListElement{ xPos: 3.35142; yPos: -1.72053; zPos: -0.252105 }
- ListElement{ xPos: 1.74251; yPos: 2.76108; zPos: 2.51524 }
- ListElement{ xPos: 2.15054; yPos: -2.88101; zPos: -1.7527 }
- ListElement{ xPos: -3.70517; yPos: -0.0470951; zPos: 0.258921 }
- ListElement{ xPos: -0.45593; yPos: -3.47184; zPos: -2.95345 }
- ListElement{ xPos: 3.15988; yPos: -2.32107; zPos: 0.105299 }
- ListElement{ xPos: 0.751449; yPos: -2.88762; zPos: -3.45245 }
- ListElement{ xPos: 2.9794; yPos: 0.493172; zPos: -0.654683 }
- ListElement{ xPos: -1.87713; yPos: -2.48632; zPos: -3.534 }
- ListElement{ xPos: 1.65266; yPos: 3.16008; zPos: 2.1579 }
- ListElement{ xPos: -1.25239; yPos: -0.763119; zPos: 2.15776 }
- ListElement{ xPos: 3.5572; yPos: 0.282681; zPos: 2.44174 }
- ListElement{ xPos: 0.251145; yPos: 0.520256; zPos: 2.3184 }
- ListElement{ xPos: -1.78596; yPos: -1.36913; zPos: -2.50818 }
- ListElement{ xPos: 3.82122; yPos: 1.04473; zPos: 0.456159 }
- ListElement{ xPos: 2.45979; yPos: -0.722759; zPos: -4.05123 }
- ListElement{ xPos: -0.855594; yPos: 0.163792; zPos: -0.553702 }
- ListElement{ xPos: 0.656895; yPos: 0.529982; zPos: 3.35129 }
- ListElement{ xPos: 0.857952; yPos: -0.0885677; zPos: 0.695128 }
- ListElement{ xPos: -0.143269; yPos: 1.12972; zPos: -3.155 }
- ListElement{ xPos: -2.95923; yPos: 0.241767; zPos: 0.832165 }
- ListElement{ xPos: 0.253329; yPos: -0.622952; zPos: -0.459799 }
- ListElement{ xPos: 0.151499; yPos: 2.5297; zPos: 1.53059 }
- ListElement{ xPos: 0.655464; yPos: -1.49902; zPos: -1.51071 }
- ListElement{ xPos: 4.7585; yPos: 1.76425; zPos: 1.15164 }
- ListElement{ xPos: -1.75063; yPos: -1.44645; zPos: -3.65525 }
- ListElement{ xPos: 0.850392; yPos: 0.0417223; zPos: -0.340588 }
- ListElement{ xPos: -0.557015; yPos: -0.282305; zPos: -1.85291 }
- ListElement{ xPos: -4.05639; yPos: 0.522959; zPos: -2.3507 }
- ListElement{ xPos: -0.358137; yPos: -0.967852; zPos: 0.807832 }
- ListElement{ xPos: -1.82056; yPos: -0.0483894; zPos: 0.0541359 }
- ListElement{ xPos: -2.16623; yPos: 0.129809; zPos: -2.52513 }
- ListElement{ xPos: -1.85591; yPos: -1.04417; zPos: -1.28501 }
- ListElement{ xPos: -1.79647; yPos: -3.44045; zPos: -1.73399 }
- ListElement{ xPos: 2.25342; yPos: 0.161308; zPos: -0.0517495 }
- ListElement{ xPos: -1.37877; yPos: 0.243596; zPos: -1.52931 }
- ListElement{ xPos: -0.059299; yPos: -0.480825; zPos: 1.7137 }
- ListElement{ xPos: -2.54357; yPos: 0.286685; zPos: -2.11495 }
- ListElement{ xPos: 3.92334; yPos: -0.442936; zPos: -0.852895 }
- ListElement{ xPos: -0.390023; yPos: -1.96437; zPos: 1.38718 }
- ListElement{ xPos: 1.35263; yPos: 2.92968; zPos: -1.1545 }
- ListElement{ xPos: -2.25892; yPos: -2.27429; zPos: -0.451533 }
- ListElement{ xPos: -0.2215; yPos: -0.126727; zPos: 0.155541 }
- ListElement{ xPos: 0.715932; yPos: 1.47509; zPos: -3.52895 }
- ListElement{ xPos: -0.382939; yPos: 3.16461; zPos: 2.65165 }
- ListElement{ xPos: -1.14437; yPos: -1.44682; zPos: 0.456601 }
- ListElement{ xPos: 0.251892; yPos: -1.0431; zPos: 4.31548 }
- ListElement{ xPos: -2.23281; yPos: -2.48698; zPos: 0.46995 }
- ListElement{ xPos: 0.954231; yPos: -3.4323; zPos: -1.20233 }
- ListElement{ xPos: 2.75569; yPos: -1.66383; zPos: -1.95486 }
- ListElement{ xPos: 0.750644; yPos: -1.84163; zPos: -0.159206 }
- ListElement{ xPos: -0.757387; yPos: -1.84192; zPos: 0.354209 }
- ListElement{ xPos: -2.85509; yPos: -2.12151; zPos: -0.954754 }
- ListElement{ xPos: -0.888427; yPos: -2.8403; zPos: -0.157387 }
- ListElement{ xPos: -1.95265; yPos: -0.445753; zPos: 2.17956 }
- ListElement{ xPos: -1.05845; yPos: -2.48694; zPos: -1.25315 }
- ListElement{ xPos: -2.66497; yPos: -1.48251; zPos: 0.873192 }
- ListElement{ xPos: 2.50491; yPos: -1.0833; zPos: 1.99667 }
- ListElement{ xPos: 0.453931; yPos: 2.52158; zPos: 0.456875 }
- ListElement{ xPos: 1.55859; yPos: -0.161924; zPos: 0.256619 }
- ListElement{ xPos: -2.92585; yPos: 0.368018; zPos: 0.35908 }
- ListElement{ xPos: 2.95509; yPos: -1.56248; zPos: -2.74469 }
- ListElement{ xPos: 3.46082; yPos: -1.76026; zPos: 3.05835 }
- ListElement{ xPos: 1.75644; yPos: -2.84241; zPos: 0.507631 }
- ListElement{ xPos: -0.959006; yPos: 0.649579; zPos: 1.10824 }
- ListElement{ xPos: 2.63856; yPos: 2.0417; zPos: 0.187281 }
- ListElement{ xPos: -0.150004; yPos: -0.0838836; zPos: -0.949314 }
- ListElement{ xPos: 2.26402; yPos: -1.28916; zPos: 2.85284 }
- ListElement{ xPos: -0.821239; yPos: 2.68795; zPos: -0.317185 }
- ListElement{ xPos: 3.47124; yPos: 0.840813; zPos: -2.65322 }
- ListElement{ xPos: -0.253209; yPos: -0.244177; zPos: 0.457348 }
- ListElement{ xPos: 2.76181; yPos: 1.64033; zPos: -1.95329 }
- ListElement{ xPos: 1.35105; yPos: -2.96027; zPos: 0.659952 }
- ListElement{ xPos: -1.45423; yPos: -0.24358; zPos: 0.832696 }
- ListElement{ xPos: 1.45109; yPos: 1.64958; zPos: -3.45448 }
- ListElement{ xPos: -1.15659; yPos: 3.08225; zPos: 1.11445 }
- ListElement{ xPos: 0.806359; yPos: 1.88298; zPos: -2.13001 }
- ListElement{ xPos: 1.15538; yPos: 3.04545; zPos: -0.759437 }
- ListElement{ xPos: -0.450074; yPos: 1.36121; zPos: -0.155042 }
- ListElement{ xPos: -2.80924; yPos: -1.24207; zPos: 2.55513 }
- ListElement{ xPos: 4.48859; yPos: 2.04394; zPos: 1.25324 }
- ListElement{ xPos: -0.958741; yPos: 1.24575; zPos: 3.65169 }
- ListElement{ xPos: 3.45143; yPos: 1.3276; zPos: 2.5144 }
- ListElement{ xPos: -3.25232; yPos: 1.12514; zPos: -1.21425 }
- ListElement{ xPos: -2.45327; yPos: 0.681109; zPos: 4.35764 }
- ListElement{ xPos: 0.55395; yPos: -0.128353; zPos: -3.95705 }
- ListElement{ xPos: -0.352458; yPos: 3.08882; zPos: -0.340631 }
- ListElement{ xPos: 1.35213; yPos: -2.92251; zPos: -3.31166 }
- ListElement{ xPos: 0.52621; yPos: -0.279201; zPos: 0.959619 }
- ListElement{ xPos: 1.2243; yPos: -0.240093; zPos: -0.75247 }
- ListElement{ xPos: -1.29854; yPos: 2.16477; zPos: 3.3507 }
- ListElement{ xPos: -3.35677; yPos: 2.36713; zPos: 3.4585 }
- ListElement{ xPos: 0.957717; yPos: -0.885793; zPos: 1.25827 }
- ListElement{ xPos: 0.150983; yPos: 1.24269; zPos: 0.539106 }
- ListElement{ xPos: 1.84986; yPos: 1.56932; zPos: -1.05811 }
- ListElement{ xPos: -1.35563; yPos: 3.82103; zPos: -1.45287 }
- ListElement{ xPos: 1.4544; yPos: -2.6453; zPos: 0.58082 }
- ListElement{ xPos: 2.05908; yPos: 1.16496; zPos: 1.44075 }
- ListElement{ xPos: 2.9507; yPos: -2.4957; zPos: 0.153512 }
- ListElement{ xPos: -1.10289; yPos: 0.763085; zPos: -1.65351 }
- ListElement{ xPos: -2.50708; yPos: -2.467; zPos: 1.05892 }
- ListElement{ xPos: 3.55284; yPos: -1.8509; zPos: -2.55732 }
- ListElement{ xPos: -0.848034; yPos: 1.24305; zPos: -3.7516 }
- ListElement{ xPos: -1.35051; yPos: -2.48178; zPos: 2.85326 }
- ListElement{ xPos: -2.18554; yPos: 1.48771; zPos: -0.155205 }
- ListElement{ xPos: -0.459278; yPos: 2.68404; zPos: 2.85727 }
- ListElement{ xPos: 0.854722; yPos: 1.47322; zPos: -3.35951 }
- ListElement{ xPos: -2.23505; yPos: -2.24254; zPos: 0.353203 }
- ListElement{ xPos: 1.42395; yPos: -2.32169; zPos: 0.558188 }
- ListElement{ xPos: 3.65106; yPos: 1.12201; zPos: -4.58409 }
- ListElement{ xPos: 0.11; yPos: -0.68782; zPos: 1.85804 }
- ListElement{ xPos: -1.9551; yPos: -0.560204; zPos: -2.0577 }
- ListElement{ xPos: 1.85964; yPos: 1.32737; zPos: -4.40673 }
- ListElement{ xPos: -0.616311; yPos: 0.649737; zPos: -0.30189 }
- ListElement{ xPos: -1.55375; yPos: 1.52043; zPos: -3.75629 }
- ListElement{ xPos: 1.85417; yPos: 0.486964; zPos: 0.654806 }
- ListElement{ xPos: 3.35638; yPos: 2.52599; zPos: 1.94343 }
- ListElement{ xPos: 0.491389; yPos: 1.40427; zPos: -1.31935 }
- ListElement{ xPos: -2.72939; yPos: 0.844341; zPos: 1.62621 }
- ListElement{ xPos: -0.525985; yPos: 1.31415; zPos: 0.484015 }
- ListElement{ xPos: 2.25998; yPos: -1.719; zPos: 1.25143 }
- ListElement{ xPos: 1.79268; yPos: 2.46378; zPos: -0.951188 }
- ListElement{ xPos: -3.55105; yPos: 1.04122; zPos: 3.9501 }
- ListElement{ xPos: 0.954251; yPos: 1.28296; zPos: 2.05486 }
- ListElement{ xPos: -3.15267; yPos: 1.96498; zPos: -0.361707 }
- ListElement{ xPos: 1.35358; yPos: -0.921098; zPos: -1.71743 }
- ListElement{ xPos: -3.16896; yPos: -3.08548; zPos: 0.903411 }
- ListElement{ xPos: 1.25127; yPos: -2.44903; zPos: 2.25616 }
- ListElement{ xPos: -3.88899; yPos: 0.761334; zPos: -1.05751 }
- ListElement{ xPos: -1.05163; yPos: -3.89783; zPos: -0.883668 }
- ListElement{ xPos: -4.189; yPos: 1.24176; zPos: -2.63816 }
- ListElement{ xPos: 2.45671; yPos: -1.84859; zPos: 0.352808 }
- ListElement{ xPos: -1.59618; yPos: 2.16255; zPos: 4.33699 }
- ListElement{ xPos: 2.10913; yPos: -1.88673; zPos: -0.952497 }
- ListElement{ xPos: -1.85571; yPos: -0.287392; zPos: 0.277176 }
- ListElement{ xPos: 0.751967; yPos: 1.04568; zPos: -1.35427 }
- ListElement{ xPos: 2.85792; yPos: 1.60982; zPos: -2.05454 }
- ListElement{ xPos: -2.13152; yPos: -0.260207; zPos: -2.15124 }
- ListElement{ xPos: 1.75432; yPos: 2.28936; zPos: 0.756254 }
- ListElement{ xPos: 1.95711; yPos: -0.681098; zPos: -2.38037 }
- ListElement{ xPos: -0.826273; yPos: 1.08361; zPos: 1.6515 }
- ListElement{ xPos: -1.85118; yPos: 1.89481; zPos: -0.756754 }
- ListElement{ xPos: -3.0571; yPos: 2.44795; zPos: 0.355341 }
- ListElement{ xPos: -0.455122; yPos: -3.58071; zPos: -2.85209 }
- ListElement{ xPos: -0.95805; yPos: 0.641282; zPos: 2.15189 }
- ListElement{ xPos: -1.35515; yPos: -0.234803; zPos: -0.825819 }
- ListElement{ xPos: 2.12472; yPos: -0.0444431; zPos: 0.651227 }
- ListElement{ xPos: 2.67573; yPos: 0.223987; zPos: 2.75712 }
- ListElement{ xPos: 1.65871; yPos: -0.163059; zPos: 1.6513 }
- ListElement{ xPos: -1.85429; yPos: 0.68862; zPos: 1.9576 }
- ListElement{ xPos: -3.05186; yPos: -2.2804; zPos: 0.100919 }
- ListElement{ xPos: 3.41813; yPos: -1.88775; zPos: 3.67075 }
- ListElement{ xPos: -0.753778; yPos: 0.36467; zPos: 1.55333 }
- ListElement{ xPos: 2.97628; yPos: -1.36503; zPos: -1.85135 }
- ListElement{ xPos: 0.477128; yPos: 1.08862; zPos: 0.858931 }
- ListElement{ xPos: -1.0531; yPos: 1.0488; zPos: 2.15218 }
- ListElement{ xPos: 2.66911; yPos: -2.08876; zPos: -0.182397 }
- ListElement{ xPos: 0.5117; yPos: -2.84097; zPos: -0.953684 }
- ListElement{ xPos: 0.468302; yPos: 1.88616; zPos: 2.05369 }
- ListElement{ xPos: -3.16099; yPos: -2.76085; zPos: -2.75679 }
- ListElement{ xPos: -2.6593; yPos: 3.52373; zPos: -1.24072 }
- ListElement{ xPos: -4.37957; yPos: -0.286903; zPos: 3.63863 }
- ListElement{ xPos: -2.85958; yPos: -2.56921; zPos: -2.85723 }
- ListElement{ xPos: -0.159735; yPos: 2.72758; zPos: -2.80575 }
- ListElement{ xPos: -0.951849; yPos: -0.607465; zPos: 1.05633 }
- ListElement{ xPos: 1.93077; yPos: 2.56422; zPos: 1.25446 }
- ListElement{ xPos: -0.859754; yPos: 0.248106; zPos: 0.0584456 }
- ListElement{ xPos: 2.4023; yPos: 2.56659; zPos: -1.2588 }
- ListElement{ xPos: 2.35295; yPos: -1.08729; zPos: 2.7851 }
- ListElement{ xPos: -2.1537; yPos: -0.765032; zPos: 2.83652 }
- ListElement{ xPos: 1.40185; yPos: 1.29804; zPos: 2.3588 }
- ListElement{ xPos: -0.991566; yPos: 1.72049; zPos: 4.17146 }
- ListElement{ xPos: 3.76736; yPos: -1.48837; zPos: 2.05329 }
- ListElement{ xPos: -0.251896; yPos: 0.765367; zPos: -1.4087 }
- ListElement{ xPos: -1.6228; yPos: 0.328693; zPos: 0.0528287 }
- ListElement{ xPos: 2.56735; yPos: -3.08103; zPos: 0.853144 }
- ListElement{ xPos: 0.0531812; yPos: -1.96216; zPos: 1.55734 }
- ListElement{ xPos: -3.77052; yPos: 0.8421; zPos: -0.258953 }
- ListElement{ xPos: 2.35523; yPos: 0.676643; zPos: -1.55789 }
- ListElement{ xPos: 1.16702; yPos: 2.64474; zPos: -1.45533 }
- ListElement{ xPos: 2.55709; yPos: -1.56013; zPos: 2.05351 }
- ListElement{ xPos: -2.15518; yPos: 3.56253; zPos: 3.257 }
- ListElement{ xPos: -0.553936; yPos: -1.24935; zPos: 2.65224 }
- ListElement{ xPos: -0.355931; yPos: 1.32374; zPos: 0.859863 }
- ListElement{ xPos: -1.92974; yPos: 1.2482; zPos: 1.15936 }
- ListElement{ xPos: 0.350652; yPos: -2.44371; zPos: -1.35611 }
- ListElement{ xPos: 2.98996; yPos: -1.08527; zPos: -4.30641 }
- ListElement{ xPos: 1.82765; yPos: -0.440236; zPos: 1.25528 }
- ListElement{ xPos: -0.689231; yPos: -1.08813; zPos: -0.668663 }
- ListElement{ xPos: -0.326426; yPos: -0.881857; zPos: -1.45371 }
- ListElement{ xPos: -1.0655; yPos: 2.12466; zPos: 2.34146 }
- ListElement{ xPos: 3.1563; yPos: 0.523166; zPos: -2.8572 }
- ListElement{ xPos: 0.455505; yPos: 2.48775; zPos: -1.33482 }
- ListElement{ xPos: 0.53939; yPos: -0.847333; zPos: 0.732877 }
- ListElement{ xPos: -0.683025; yPos: -0.448889; zPos: -1.35747 }
- ListElement{ xPos: -1.7711; yPos: -0.125587; zPos: -2.55083 }
- ListElement{ xPos: -0.512871; yPos: 0.520964; zPos: 1.40731 }
- ListElement{ xPos: 4.93857; yPos: -1.6805; zPos: -0.127298 }
- ListElement{ xPos: 1.46098; yPos: -1.64073; zPos: 1.35833 }
- ListElement{ xPos: 0.0518058; yPos: 0.285151; zPos: -2.2437 }
- ListElement{ xPos: 1.5587; yPos: -1.23067; zPos: 0.458753 }
- ListElement{ xPos: 3.13089; yPos: 3.64132; zPos: 1.45181 }
- ListElement{ xPos: -1.55648; yPos: 2.167; zPos: 0.153491 }
- ListElement{ xPos: 3.94451; yPos: -2.56372; zPos: -1.25276 }
- ListElement{ xPos: 4.15866; yPos: 0.646921; zPos: 2.65542 }
- ListElement{ xPos: -2.88189; yPos: 0.562407; zPos: -1.35379 }
- ListElement{ xPos: 1.31686; yPos: 1.2808; zPos: 0.804375 }
- ListElement{ xPos: -2.36912; yPos: -3.08775; zPos: 1.28335 }
- ListElement{ xPos: 0.575203; yPos: -0.36483; zPos: -2.43958 }
- ListElement{ xPos: 0.613108; yPos: 0.526892; zPos: 2.75368 }
- ListElement{ xPos: 3.96027; yPos: -0.525425; zPos: -4.25746 }
- ListElement{ xPos: -0.510821; yPos: 1.28578; zPos: -0.058488 }
- ListElement{ xPos: -0.254704; yPos: -3.847; zPos: 3.15258 }
- ListElement{ xPos: -0.925874; yPos: -1.72014; zPos: -3.15341 }
- ListElement{ xPos: 0.85704; yPos: 0.84788; zPos: -1.75947 }
- ListElement{ xPos: -3.35712; yPos: 0.722104; zPos: 2.15645 }
- ListElement{ xPos: -1.67305; yPos: 0.681216; zPos: 1.65726 }
- ListElement{ xPos: -3.64682; yPos: 0.867926; zPos: 2.63525 }
- ListElement{ xPos: -0.715921; yPos: 1.96081; zPos: -0.939934 }
- ListElement{ xPos: -2.45646; yPos: 1.3249; zPos: -2.75733 }
- ListElement{ xPos: -1.75798; yPos: 0.725382; zPos: -0.851921 }
- ListElement{ xPos: -2.78528; yPos: 0.679275; zPos: -2.59212 }
- ListElement{ xPos: -2.24551; yPos: -3.4597; zPos: -1.85735 }
- ListElement{ xPos: 0.85142; yPos: 2.28058; zPos: -3.75328 }
- ListElement{ xPos: -3.85054; yPos: 2.44519; zPos: 4.35081 }
- ListElement{ xPos: -3.6553; yPos: 0.521917; zPos: 0.293354 }
- ListElement{ xPos: -4.35959; yPos: -0.528198; zPos: 1.55557 }
- ListElement{ xPos: 1.45186; yPos: -0.0891161; zPos: -0.468118 }
- ListElement{ xPos: 1.85594; yPos: -0.761461; zPos: -4.68083 }
- ListElement{ xPos: 0.950642; yPos: 0.526239; zPos: -1.30614 }
- ListElement{ xPos: -2.50526; yPos: -0.885606; zPos: -0.362569 }
- ListElement{ xPos: -2.96569; yPos: 1.68519; zPos: -1.15965 }
- ListElement{ xPos: -3.212; yPos: 0.260715; zPos: 1.18472 }
- ListElement{ xPos: 0.950556; yPos: -0.282806; zPos: 0.776252 }
- ListElement{ xPos: 3.66678; yPos: 1.08585; zPos: -2.15646 }
- ListElement{ xPos: -0.806289; yPos: 1.72784; zPos: 2.85906 }
- ListElement{ xPos: 0.363827; yPos: 1.76644; zPos: 0.931866 }
- ListElement{ xPos: -1.34204; yPos: -0.563686; zPos: -2.34091 }
- ListElement{ xPos: -2.81333; yPos: 0.415358; zPos: 4.28363 }
- ListElement{ xPos: 1.52053; yPos: -0.327359; zPos: 0.35052 }
- ListElement{ xPos: -0.633441; yPos: -0.240518; zPos: 4.05745 }
- ListElement{ xPos: -2.38947; yPos: -1.84662; zPos: -2.29572 }
- ListElement{ xPos: -1.95744; yPos: -0.863705; zPos: 1.85889 }
- ListElement{ xPos: -0.0509082; yPos: -0.164164; zPos: 3.8571 }
- ListElement{ xPos: 0.156438; yPos: -2.64188; zPos: 1.75836 }
- ListElement{ xPos: -3.85642; yPos: 1.48025; zPos: 0.171659 }
- ListElement{ xPos: 0.253545; yPos: 1.0852; zPos: -2.45243 }
- ListElement{ xPos: -4.11318; yPos: 0.41655; zPos: -0.120976 }
- ListElement{ xPos: -1.44928; yPos: -0.328222; zPos: -0.871279 }
- ListElement{ xPos: -1.90972; yPos: -1.8495; zPos: -3.16966 }
- ListElement{ xPos: 0.359433; yPos: 1.3236; zPos: -3.95045 }
- ListElement{ xPos: -2.60974; yPos: -1.04138; zPos: 4.25836 }
- ListElement{ xPos: -3.16336; yPos: -0.961581; zPos: -1.65161 }
- ListElement{ xPos: -0.552909; yPos: -1.16942; zPos: 4.05164 }
- ListElement{ xPos: -3.10918; yPos: -1.2402; zPos: -0.555073 }
- ListElement{ xPos: 2.25494; yPos: 1.24432; zPos: 3.44063 }
- ListElement{ xPos: -1.24998; yPos: -1.24928; zPos: -4.05493 }
- ListElement{ xPos: 3.05441; yPos: 1.92762; zPos: 1.43329 }
- ListElement{ xPos: 0.557032; yPos: -2.7688; zPos: -3.25463 }
- ListElement{ xPos: -2.05665; yPos: 1.6357; zPos: 0.656665 }
- ListElement{ xPos: -0.459042; yPos: 0.122664; zPos: -0.152961 }
- ListElement{ xPos: 2.17715; yPos: 2.96833; zPos: 1.1332 }
- ListElement{ xPos: 0.0536573; yPos: -2.08635; zPos: -0.736471 }
- ListElement{ xPos: -3.15658; yPos: 1.0818; zPos: -0.172166 }
- ListElement{ xPos: -1.95784; yPos: 0.44402; zPos: 0.612685 }
- ListElement{ xPos: 0.15168; yPos: -0.323951; zPos: 2.85563 }
- ListElement{ xPos: 0.559356; yPos: 1.63101; zPos: 0.558005 }
- ListElement{ xPos: -2.05643; yPos: 1.84615; zPos: -1.87964 }
- ListElement{ xPos: -0.254098; yPos: 0.368208; zPos: 1.23061 }
- ListElement{ xPos: 4.6438; yPos: -0.209283; zPos: 0.695869 }
- ListElement{ xPos: -1.95087; yPos: -0.859788; zPos: 0.0539467 }
- ListElement{ xPos: -0.351737; yPos: -1.04291; zPos: 0.869198 }
- ListElement{ xPos: 0.776319; yPos: 3.04922; zPos: -3.55278 }
- ListElement{ xPos: -0.158751; yPos: 1.12538; zPos: -2.59681 }
- ListElement{ xPos: -0.560997; yPos: -1.68381; zPos: 1.56935 }
- ListElement{ xPos: 1.71385; yPos: -0.446223; zPos: -1.56843 }
- ListElement{ xPos: 4.05142; yPos: -1.3243; zPos: 2.85052 }
- ListElement{ xPos: 1.68685; yPos: -1.56305; zPos: 2.159 }
- ListElement{ xPos: 0.359977; yPos: -1.16029; zPos: 1.25037 }
- ListElement{ xPos: -2.65045; yPos: -1.28532; zPos: 0.459338 }
- ListElement{ xPos: 0.542068; yPos: 1.52601; zPos: -1.35562 }
- ListElement{ xPos: 1.34386; yPos: 1.68231; zPos: -2.75114 }
- ListElement{ xPos: 1.25123; yPos: 0.43108; zPos: 0.383897 }
- ListElement{ xPos: -0.952936; yPos: 3.6889; zPos: 1.75759 }
- ListElement{ xPos: -3.55855; yPos: 0.484241; zPos: 1.15503 }
- ListElement{ xPos: -1.71394; yPos: -2.64568; zPos: -3.30684 }
- ListElement{ xPos: -2.23513; yPos: -2.46812; zPos: 1.05321 }
- ListElement{ xPos: 0.160986; yPos: 0.442362; zPos: -1.05077 }
- ListElement{ xPos: 2.05433; yPos: 0.473204; zPos: 0.823968 }
- ListElement{ xPos: 0.482077; yPos: 0.0477338; zPos: 4.21712 }
- ListElement{ xPos: -1.25348; yPos: 0.767612; zPos: 0.455813 }
- ListElement{ xPos: 1.61308; yPos: 2.04125; zPos: -2.95433 }
- ListElement{ xPos: -2.05862; yPos: -0.444052; zPos: 1.35177 }
- ListElement{ xPos: -3.2582; yPos: 0.44354; zPos: 2.15898 }
- ListElement{ xPos: -1.75935; yPos: 0.0459283; zPos: 2.35061 }
- ListElement{ xPos: -4.15501; yPos: 0.68674; zPos: 0.802439 }
- ListElement{ xPos: -1.66005; yPos: 1.12067; zPos: 0.552901 }
- ListElement{ xPos: -0.150828; yPos: 3.4151; zPos: 3.05446 }
- ListElement{ xPos: -0.274381; yPos: 0.0405946; zPos: -1.45463 }
- ListElement{ xPos: 2.94543; yPos: -0.360918; zPos: 1.45895 }
- ListElement{ xPos: -1.42494; yPos: 1.56503; zPos: 1.31012 }
- ListElement{ xPos: 3.45402; yPos: -1.27808; zPos: -4.29049 }
- ListElement{ xPos: -1.14819; yPos: 0.674339; zPos: 1.55807 }
- ListElement{ xPos: -0.356159; yPos: 1.52295; zPos: -0.351445 }
- ListElement{ xPos: 0.387809; yPos: 0.965119; zPos: 1.84271 }
- ListElement{ xPos: 2.56165; yPos: -1.84639; zPos: 1.65056 }
- ListElement{ xPos: -0.619108; yPos: 2.24004; zPos: -2.92134 }
- ListElement{ xPos: -0.254288; yPos: -2.32744; zPos: -0.720931 }
- ListElement{ xPos: 3.3508; yPos: -2.24501; zPos: 1.58268 }
- ListElement{ xPos: 1.69434; yPos: 1.96814; zPos: 3.97439 }
- ListElement{ xPos: 1.80785; yPos: 0.685502; zPos: -1.55595 }
- ListElement{ xPos: 2.71587; yPos: 1.76415; zPos: -2.98124 }
- ListElement{ xPos: -2.35151; yPos: -0.697338; zPos: -3.96269 }
- ListElement{ xPos: -1.85759; yPos: 1.96899; zPos: -1.25212 }
- ListElement{ xPos: -4.05922; yPos: 1.12838; zPos: -2.7597 }
- ListElement{ xPos: -2.85434; yPos: -1.36487; zPos: 0.659987 }
- ListElement{ xPos: -1.75616; yPos: 2.12969; zPos: -1.35032 }
- ListElement{ xPos: -2.95985; yPos: -0.0854955; zPos: 3.65545 }
- ListElement{ xPos: -2.46049; yPos: 2.45378; zPos: 4.51969 }
- ListElement{ xPos: -0.0577358; yPos: 0.0427911; zPos: 0.359068 }
- ListElement{ xPos: -3.25346; yPos: 0.161829; zPos: 1.12956 }
- ListElement{ xPos: 3.55498; yPos: 2.32482; zPos: 1.33302 }
- ListElement{ xPos: 4.99905; yPos: -1.88748; zPos: 0.450165 }
- ListElement{ xPos: -2.35406; yPos: -1.44715; zPos: -0.745307 }
- ListElement{ xPos: 2.44217; yPos: -0.642981; zPos: 0.126924 }
- ListElement{ xPos: 1.73283; yPos: 1.67362; zPos: 1.91136 }
- ListElement{ xPos: 1.34239; yPos: -0.434386; zPos: -0.449795 }
- ListElement{ xPos: -0.9813; yPos: -2.72962; zPos: -3.6889 }
- ListElement{ xPos: 1.29807; yPos: -0.448566; zPos: 2.13911 }
- ListElement{ xPos: 0.654017; yPos: 3.54591; zPos: -1.55982 }
- ListElement{ xPos: -1.55508; yPos: -2.64564; zPos: 0.555 }
- ListElement{ xPos: 1.92722; yPos: -0.322513; zPos: -2.13691 }
- ListElement{ xPos: 1.35913; yPos: -2.84853; zPos: -0.470788 }
- ListElement{ xPos: 0.257868; yPos: -2.68874; zPos: -0.268328 }
- ListElement{ xPos: -2.05043; yPos: -1.68405; zPos: -3.05075 }
- ListElement{ xPos: 1.65173; yPos: -0.446801; zPos: -0.75339 }
- ListElement{ xPos: -1.25655; yPos: 0.965275; zPos: -4.15374 }
- ListElement{ xPos: -4.27942; yPos: -0.564403; zPos: 1.45826 }
- ListElement{ xPos: 0.950669; yPos: -2.4416; zPos: -1.68235 }
- ListElement{ xPos: -0.0541107; yPos: 0.882274; zPos: 3.15308 }
- ListElement{ xPos: -1.65016; yPos: -0.886156; zPos: -3.85588 }
- ListElement{ xPos: 0.355613; yPos: 0.217671; zPos: 4.25412 }
- ListElement{ xPos: 0.800472; yPos: 0.847259; zPos: 3.11114 }
- ListElement{ xPos: 1.8599; yPos: -2.16981; zPos: -2.22314 }
- ListElement{ xPos: -2.05061; yPos: 0.164561; zPos: -0.452181 }
- ListElement{ xPos: 0.854144; yPos: 1.84334; zPos: -1.45981 }
- ListElement{ xPos: 1.68547; yPos: 1.56536; zPos: -1.45874 }
- ListElement{ xPos: 1.25244; yPos: -0.844991; zPos: -2.95475 }
- ListElement{ xPos: -1.92348; yPos: 2.32119; zPos: -1.80444 }
- ListElement{ xPos: -0.645646; yPos: 2.45193; zPos: -3.65332 }
- ListElement{ xPos: 4.45803; yPos: 0.527732; zPos: 3.02031 }
- ListElement{ xPos: 2.74572; yPos: 0.287964; zPos: -1.80485 }
- ListElement{ xPos: 0.35961; yPos: -2.56437; zPos: 3.97194 }
- ListElement{ xPos: -0.956828; yPos: -1.28915; zPos: 1.64424 }
- ListElement{ xPos: 0.414971; yPos: -0.235061; zPos: -2.15757 }
- ListElement{ xPos: -0.0530542; yPos: -1.08464; zPos: -4.11853 }
- ListElement{ xPos: 3.17203; yPos: -1.21013; zPos: -3.85806 }
- ListElement{ xPos: 0.758948; yPos: 0.124698; zPos: -3.10188 }
- ListElement{ xPos: -1.65404; yPos: -1.16204; zPos: -1.65357 }
- ListElement{ xPos: -1.65985; yPos: 3.84433; zPos: 4.65101 }
- ListElement{ xPos: 2.83444; yPos: -2.69529; zPos: -1.65021 }
- ListElement{ xPos: 1.29814; yPos: -2.76926; zPos: -2.27139 }
- ListElement{ xPos: 0.462382; yPos: 3.04217; zPos: 3.45153 }
- ListElement{ xPos: -3.61944; yPos: 1.04723; zPos: -0.638308 }
- ListElement{ xPos: 2.25235; yPos: 1.64048; zPos: 2.95175 }
- ListElement{ xPos: -3.05826; yPos: -0.76526; zPos: -2.38243 }
- ListElement{ xPos: -2.8506; yPos: 2.12102; zPos: -0.659444 }
- ListElement{ xPos: -0.10046; yPos: 0.0887098; zPos: -1.63621 }
- ListElement{ xPos: -1.55585; yPos: -1.36073; zPos: 2.2076 }
- ListElement{ xPos: -0.474968; yPos: 1.56568; zPos: -0.302349 }
- ListElement{ xPos: 0.36584; yPos: -2.36102; zPos: 1.35289 }
- ListElement{ xPos: 0.224784; yPos: -0.637694; zPos: 1.62444 }
- ListElement{ xPos: -0.658172; yPos: 1.9689; zPos: -3.13712 }
- ListElement{ xPos: 0.646334; yPos: -1.04672; zPos: 2.59285 }
- ListElement{ xPos: -2.63054; yPos: -1.08263; zPos: -0.851087 }
- ListElement{ xPos: 1.45804; yPos: -2.56159; zPos: -2.66388 }
- ListElement{ xPos: -2.45748; yPos: 0.0409116; zPos: -2.85428 }
- ListElement{ xPos: -0.0561462; yPos: -1.24229; zPos: -1.25145 }
- ListElement{ xPos: -2.95391; yPos: -1.80896; zPos: -2.05036 }
- ListElement{ xPos: 4.36778; yPos: -0.969951; zPos: 3.53686 }
- ListElement{ xPos: 2.15582; yPos: -1.67173; zPos: -0.831609 }
- ListElement{ xPos: -1.27059; yPos: -1.14919; zPos: 1.7569 }
- ListElement{ xPos: -1.57398; yPos: -1.28091; zPos: -0.251735 }
- ListElement{ xPos: 2.59506; yPos: -2.6408; zPos: -0.345589 }
- ListElement{ xPos: -1.64147; yPos: -0.360324; zPos: 3.1562 }
- ListElement{ xPos: -0.125427; yPos: -0.641484; zPos: -3.66095 }
- ListElement{ xPos: -1.9148; yPos: 1.8885; zPos: 2.12972 }
- ListElement{ xPos: -2.85768; yPos: -2.28782; zPos: -1.55719 }
- ListElement{ xPos: -1.37239; yPos: -0.485964; zPos: -2.22291 }
- ListElement{ xPos: 0.516294; yPos: 0.281078; zPos: 0.652612 }
- ListElement{ xPos: -1.13028; yPos: 0.246659; zPos: -2.25636 }
- ListElement{ xPos: 1.7555; yPos: -1.41602; zPos: 0.348449 }
- ListElement{ xPos: 1.5355; yPos: -1.32646; zPos: -2.82417 }
- ListElement{ xPos: -0.95426; yPos: 2.0824; zPos: -0.383507 }
- ListElement{ xPos: 2.75739; yPos: 0.241779; zPos: 0.755701 }
- ListElement{ xPos: 0.752655; yPos: 0.56204; zPos: -1.55738 }
- ListElement{ xPos: 1.1271; yPos: -3.76145; zPos: 0.43701 }
- ListElement{ xPos: 0.326656; yPos: -1.24467; zPos: 2.62222 }
- ListElement{ xPos: -0.259702; yPos: 2.68152; zPos: -3.18542 }
- ListElement{ xPos: 1.88504; yPos: -0.760623; zPos: 4.42592 }
- ListElement{ xPos: 0.251673; yPos: 0.472252; zPos: -1.99239 }
- ListElement{ xPos: -1.66934; yPos: -0.129677; zPos: -2.49048 }
- ListElement{ xPos: -1.25499; yPos: 2.36151; zPos: -2.98447 }
- ListElement{ xPos: 2.65331; yPos: 0.0443886; zPos: 0.108819 }
- ListElement{ xPos: -3.35439; yPos: 0.0872109; zPos: -1.33429 }
- ListElement{ xPos: 3.35597; yPos: 0.0403626; zPos: 2.8203 }
- ListElement{ xPos: 4.45191; yPos: 1.24824; zPos: -0.95821 }
- ListElement{ xPos: -0.171441; yPos: -1.52622; zPos: -4.68253 }
- ListElement{ xPos: 1.19986; yPos: 1.72992; zPos: -3.29566 }
- ListElement{ xPos: -0.451339; yPos: 1.92976; zPos: 1.21534 }
- ListElement{ xPos: -0.743119; yPos: -0.160688; zPos: 0.805688 }
- ListElement{ xPos: 2.38678; yPos: 0.272829; zPos: 2.75457 }
- ListElement{ xPos: 1.72464; yPos: 2.08232; zPos: -0.950389 }
- ListElement{ xPos: 2.11167; yPos: 1.56576; zPos: 1.21969 }
- ListElement{ xPos: 3.05157; yPos: -1.56838; zPos: -0.450535 }
- ListElement{ xPos: 0.132417; yPos: -3.08279; zPos: -1.34127 }
- ListElement{ xPos: 1.65441; yPos: -0.325204; zPos: -0.825145 }
- ListElement{ xPos: 2.05515; yPos: -1.8417; zPos: 1.8561 }
- ListElement{ xPos: -0.555858; yPos: 1.52007; zPos: -0.80122 }
- ListElement{ xPos: -2.05026; yPos: 1.52773; zPos: 2.33529 }
- ListElement{ xPos: -2.35231; yPos: -3.28716; zPos: 3.53598 }
- ListElement{ xPos: -2.25771; yPos: 2.5667; zPos: -1.92243 }
- ListElement{ xPos: 0.386884; yPos: -3.28674; zPos: 3.49336 }
- ListElement{ xPos: 0.957272; yPos: -1.68124; zPos: -1.89095 }
- ListElement{ xPos: 2.99881; yPos: 2.24992; zPos: -0.0535837 }
- ListElement{ xPos: 3.19604; yPos: 2.92893; zPos: -2.16276 }
- ListElement{ xPos: 2.55903; yPos: 3.12413; zPos: 2.95022 }
- ListElement{ xPos: -0.570758; yPos: -2.85326; zPos: -0.339255 }
- ListElement{ xPos: 0.356627; yPos: 0.641074; zPos: 0.355538 }
- ListElement{ xPos: -1.15777; yPos: -0.162227; zPos: -0.455885 }
- ListElement{ xPos: -2.4871; yPos: -0.885492; zPos: -0.374875 }
- ListElement{ xPos: 1.55464; yPos: -1.48929; zPos: -0.593706 }
- ListElement{ xPos: -0.852655; yPos: -2.08736; zPos: -1.18281 }
- ListElement{ xPos: 0.504087; yPos: -0.879247; zPos: 1.35148 }
- ListElement{ xPos: -2.15261; yPos: 1.04511; zPos: -3.25543 }
- ListElement{ xPos: -0.653745; yPos: -1.32873; zPos: -3.18964 }
- ListElement{ xPos: 0.35973; yPos: -0.844255; zPos: -1.72034 }
- ListElement{ xPos: -2.11112; yPos: 0.962572; zPos: 2.59386 }
- ListElement{ xPos: 1.47531; yPos: -0.693626; zPos: -3.15249 }
- ListElement{ xPos: -1.35814; yPos: 0.767202; zPos: 3.45094 }
- ListElement{ xPos: -3.05812; yPos: -1.26298; zPos: 1.45287 }
- ListElement{ xPos: -1.63927; yPos: 0.893568; zPos: -1.94978 }
- ListElement{ xPos: 0.751992; yPos: 1.68559; zPos: 2.3618 }
- ListElement{ xPos: 0.58205; yPos: -0.769076; zPos: -0.958994 }
- ListElement{ xPos: -2.38512; yPos: -0.166005; zPos: -1.25855 }
- ListElement{ xPos: -0.556071; yPos: -2.28164; zPos: 1.57032 }
- ListElement{ xPos: 0.589172; yPos: -0.244834; zPos: 0.553728 }
- ListElement{ xPos: -0.468648; yPos: -0.927756; zPos: -0.737048 }
- ListElement{ xPos: -2.66659; yPos: -1.64374; zPos: -0.995568 }
- ListElement{ xPos: 0.251499; yPos: -1.24569; zPos: 0.95028 }
- ListElement{ xPos: 0.737721; yPos: 2.88575; zPos: 0.448918 }
- ListElement{ xPos: -0.634421; yPos: -1.84377; zPos: -2.47094 }
- ListElement{ xPos: 0.556349; yPos: 2.86774; zPos: 1.62621 }
- ListElement{ xPos: -3.29644; yPos: 3.28642; zPos: -3.45459 }
- ListElement{ xPos: -1.45045; yPos: 2.52138; zPos: 2.75329 }
- ListElement{ xPos: 1.87449; yPos: -2.68651; zPos: 3.60371 }
- ListElement{ xPos: -0.656424; yPos: -2.56828; zPos: 1.35509 }
- ListElement{ xPos: 1.95771; yPos: -1.48325; zPos: -3.85265 }
- ListElement{ xPos: 3.85074; yPos: 0.0825779; zPos: -1.65283 }
- ListElement{ xPos: -1.17278; yPos: -1.69258; zPos: -1.05875 }
- ListElement{ xPos: 1.25754; yPos: -0.0439433; zPos: 1.3571 }
- ListElement{ xPos: 2.91459; yPos: 2.08715; zPos: 0.259842 }
- ListElement{ xPos: 0.748196; yPos: 2.52132; zPos: 0.659051 }
- ListElement{ xPos: -1.85745; yPos: -1.88355; zPos: 1.05259 }
- ListElement{ xPos: 1.69311; yPos: 1.12299; zPos: -3.05453 }
- ListElement{ xPos: -2.86301; yPos: 0.123274; zPos: 0.559289 }
- ListElement{ xPos: -1.43146; yPos: 1.64425; zPos: -1.95053 }
- ListElement{ xPos: 2.35287; yPos: 0.414621; zPos: -0.950807 }
- ListElement{ xPos: 0.952585; yPos: -0.280452; zPos: -0.844588 }
- ListElement{ xPos: -1.53836; yPos: -1.76396; zPos: 2.51742 }
- ListElement{ xPos: -3.05431; yPos: 2.45; zPos: -0.26571 }
- ListElement{ xPos: -0.637412; yPos: 1.12028; zPos: -0.587387 }
- ListElement{ xPos: -1.71017; yPos: -0.728497; zPos: -1.05087 }
- ListElement{ xPos: 0.454027; yPos: 0.849208; zPos: -0.151716 }
- ListElement{ xPos: -3.54846; yPos: 0.367137; zPos: 1.1484 }
- ListElement{ xPos: 0.200816; yPos: -2.08832; zPos: 0.255433 }
- ListElement{ xPos: -2.15817; yPos: 0.725338; zPos: 0.852676 }
- ListElement{ xPos: -2.45708; yPos: -0.725538; zPos: -0.859435 }
- ListElement{ xPos: 4.25339; yPos: 1.84177; zPos: -0.555145 }
- ListElement{ xPos: 0.119319; yPos: -1.32041; zPos: -1.45864 }
- ListElement{ xPos: -3.65177; yPos: 0.361323; zPos: 0.351554 }
- ListElement{ xPos: 0.928598; yPos: 0.321024; zPos: -3.64759 }
- ListElement{ xPos: -0.250062; yPos: 1.84912; zPos: 0.949887 }
- ListElement{ xPos: 3.59593; yPos: 0.929451; zPos: -2.15224 }
- ListElement{ xPos: 0.658599; yPos: 2.36796; zPos: 4.11632 }
- ListElement{ xPos: 0.55841; yPos: -1.08657; zPos: 0.258326 }
- ListElement{ xPos: 1.9419; yPos: 0.0488641; zPos: -3.75375 }
- ListElement{ xPos: 0.0589998; yPos: 0.521351; zPos: -3.85723 }
- ListElement{ xPos: 3.45108; yPos: 0.562199; zPos: 4.20946 }
- ListElement{ xPos: -0.255073; yPos: 2.36504; zPos: -3.556 }
- ListElement{ xPos: 1.95848; yPos: 1.28698; zPos: 4.25014 }
- ListElement{ xPos: 1.85411; yPos: 3.12131; zPos: 0.652769 }
- ListElement{ xPos: -3.3589; yPos: 0.801817; zPos: -1.5591 }
- ListElement{ xPos: 2.48128; yPos: -0.163406; zPos: 1.25243 }
- ListElement{ xPos: 2.52135; yPos: 0.960467; zPos: 1.45432 }
- ListElement{ xPos: 0.827496; yPos: -0.163021; zPos: -0.558886 }
- ListElement{ xPos: -3.45032; yPos: -0.0831453; zPos: 0.851212 }
- ListElement{ xPos: -3.45334; yPos: 0.855944; zPos: 1.35596 }
- ListElement{ xPos: -0.834644; yPos: 0.245598; zPos: -1.23878 }
- ListElement{ xPos: 3.64558; yPos: 1.16831; zPos: -0.18559 }
- ListElement{ xPos: -1.45919; yPos: -3.08196; zPos: -0.329805 }
- ListElement{ xPos: -3.65715; yPos: -1.04485; zPos: 0.159208 }
- ListElement{ xPos: 1.35463; yPos: -0.766382; zPos: 0.558632 }
- ListElement{ xPos: -2.75899; yPos: -1.67431; zPos: -1.55069 }
- ListElement{ xPos: 1.67539; yPos: 2.04337; zPos: 0.912884 }
- ListElement{ xPos: 3.51677; yPos: -3.24285; zPos: 0.170272 }
- ListElement{ xPos: -4.25189; yPos: 0.56589; zPos: -4.35936 }
- ListElement{ xPos: -2.68545; yPos: -0.448243; zPos: 0.540342 }
- ListElement{ xPos: 0.279844; yPos: -0.641466; zPos: -0.353986 }
- ListElement{ xPos: -3.27626; yPos: -3.52006; zPos: 1.77644 }
- ListElement{ xPos: -0.724096; yPos: -1.84647; zPos: -2.45271 }
- ListElement{ xPos: -4.18603; yPos: 0.123376; zPos: 3.85066 }
- ListElement{ xPos: -4.05156; yPos: 0.0499386; zPos: -0.332945 }
- ListElement{ xPos: 2.69508; yPos: 2.32777; zPos: 1.26256 }
- ListElement{ xPos: -0.353726; yPos: 1.07252; zPos: -0.738837 }
- ListElement{ xPos: -0.947178; yPos: 0.36459; zPos: 1.55593 }
- ListElement{ xPos: -0.058346; yPos: 2.44781; zPos: -4.35023 }
- ListElement{ xPos: 1.51586; yPos: -0.961109; zPos: -3.43483 }
- ListElement{ xPos: -2.8852; yPos: 2.08863; zPos: -1.75468 }
- ListElement{ xPos: -0.297867; yPos: 0.722757; zPos: 0.91355 }
- ListElement{ xPos: -1.12917; yPos: -1.68328; zPos: 0.175315 }
- ListElement{ xPos: -1.24248; yPos: -0.323519; zPos: -0.854841 }
- ListElement{ xPos: 0.751943; yPos: 0.564075; zPos: 3.95073 }
- ListElement{ xPos: 1.15436; yPos: 2.81813; zPos: 0.653114 }
- ListElement{ xPos: -2.55058; yPos: -2.56486; zPos: 0.756618 }
- ListElement{ xPos: 0.959794; yPos: 0.845224; zPos: -0.854001 }
- ListElement{ xPos: -2.15033; yPos: 0.248556; zPos: -3.16151 }
- ListElement{ xPos: 0.353224; yPos: -1.68637; zPos: 0.457949 }
- ListElement{ xPos: -0.753237; yPos: -2.48313; zPos: -0.355373 }
- ListElement{ xPos: 0.296585; yPos: 2.04822; zPos: 0.198473 }
- ListElement{ xPos: -2.4737; yPos: 0.682952; zPos: 1.85349 }
- ListElement{ xPos: 1.9027; yPos: 0.882796; zPos: 1.45908 }
- ListElement{ xPos: 0.254799; yPos: 1.92572; zPos: -1.70848 }
- ListElement{ xPos: -0.951602; yPos: -0.698987; zPos: -2.22682 }
- ListElement{ xPos: 0.262582; yPos: -2.44093; zPos: 1.05636 }
- ListElement{ xPos: 0.385415; yPos: -0.685667; zPos: -3.35928 }
- ListElement{ xPos: 0.055981; yPos: 0.523585; zPos: -3.36093 }
- ListElement{ xPos: -0.0518635; yPos: -0.889068; zPos: -0.840648 }
- ListElement{ xPos: 0.455171; yPos: 2.84624; zPos: -1.98276 }
- ListElement{ xPos: 2.85475; yPos: -0.685697; zPos: -2.45695 }
- ListElement{ xPos: -1.05047; yPos: -1.92121; zPos: 0.931666 }
- ListElement{ xPos: -2.75962; yPos: -0.164458; zPos: -1.55261 }
- ListElement{ xPos: 1.91811; yPos: 1.65767; zPos: 3.15004 }
- ListElement{ xPos: -2.25653; yPos: 0.856735; zPos: -4.351 }
- ListElement{ xPos: 1.89178; yPos: -0.728669; zPos: -3.8803 }
- ListElement{ xPos: -3.25958; yPos: -1.16223; zPos: -1.85148 }
- ListElement{ xPos: -1.6291; yPos: -2.32967; zPos: -0.874786 }
- ListElement{ xPos: 3.17524; yPos: 0.327351; zPos: 2.15337 }
- ListElement{ xPos: -1.05094; yPos: -0.560694; zPos: -3.4581 }
- ListElement{ xPos: 0.759785; yPos: -1.0801; zPos: -0.257876 }
- ListElement{ xPos: -0.4597; yPos: -2.2404; zPos: 2.54341 }
- ListElement{ xPos: 0.242266; yPos: 0.121832; zPos: 0.780878 }
- ListElement{ xPos: -1.6573; yPos: 1.56049; zPos: -1.61749 }
- ListElement{ xPos: 1.39912; yPos: -2.84395; zPos: -0.25965 }
- ListElement{ xPos: 0.552342; yPos: 1.36924; zPos: 2.95278 }
- ListElement{ xPos: -1.92932; yPos: -0.883981; zPos: 0.0589583 }
- ListElement{ xPos: -1.9026; yPos: 0.56297; zPos: -0.723523 }
- ListElement{ xPos: -1.25867; yPos: -0.529617; zPos: 2.3503 }
- ListElement{ xPos: 2.16527; yPos: -0.723364; zPos: -1.45609 }
- ListElement{ xPos: -0.984608; yPos: -0.720375; zPos: -2.05144 }
- ListElement{ xPos: 0.946803; yPos: -0.969188; zPos: -3.14625 }
- ListElement{ xPos: 2.7986; yPos: -2.36069; zPos: 1.25827 }
- ListElement{ xPos: 3.37979; yPos: -1.11699; zPos: -3.55116 }
- ListElement{ xPos: -0.753992; yPos: -1.9649; zPos: 2.98548 }
- ListElement{ xPos: -0.456321; yPos: 0.525303; zPos: -0.109174 }
- ListElement{ xPos: 0.8642; yPos: 0.153147; zPos: -3.34749 }
- ListElement{ xPos: -0.450507; yPos: -0.443265; zPos: -2.8325 }
- ListElement{ xPos: -3.24876; yPos: 3.12791; zPos: 0.576143 }
- ListElement{ xPos: -3.14755; yPos: 2.84502; zPos: -0.45749 }
- ListElement{ xPos: 0.226819; yPos: -1.28172; zPos: 0.939501 }
- ListElement{ xPos: -0.650725; yPos: -1.40317; zPos: -1.35211 }
- ListElement{ xPos: -0.451625; yPos: 1.84271; zPos: -0.950536 }
- ListElement{ xPos: -1.36693; yPos: 0.850218; zPos: -1.09799 }
- ListElement{ xPos: 2.35374; yPos: -0.28759; zPos: 1.55815 }
- ListElement{ xPos: 2.60577; yPos: -2.46765; zPos: 1.2633 }
- ListElement{ xPos: 1.21562; yPos: -1.72153; zPos: -0.4034 }
- ListElement{ xPos: -2.43216; yPos: 3.04268; zPos: 1.90109 }
- ListElement{ xPos: -1.85365; yPos: -0.16523; zPos: -2.98947 }
- ListElement{ xPos: -0.953475; yPos: -2.76164; zPos: 2.53396 }
- ListElement{ xPos: 2.55264; yPos: -0.645611; zPos: 3.25479 }
- ListElement{ xPos: -0.675476; yPos: -0.724382; zPos: -1.4566 }
- ListElement{ xPos: 0.801062; yPos: 0.16778; zPos: 2.21815 }
- ListElement{ xPos: 0.680443; yPos: 0.0407888; zPos: 3.27279 }
- ListElement{ xPos: -3.75426; yPos: -0.247624; zPos: 0.26307 }
- ListElement{ xPos: 0.427609; yPos: -0.322312; zPos: 0.652005 }
- ListElement{ xPos: -2.17428; yPos: -3.68643; zPos: 0.256619 }
- ListElement{ xPos: 0.456732; yPos: -2.44858; zPos: 3.13051 }
- ListElement{ xPos: 0.524175; yPos: -1.88231; zPos: -1.93171 }
- ListElement{ xPos: 0.92311; yPos: 1.8354; zPos: -1.2502 }
- ListElement{ xPos: 2.69502; yPos: 2.25543; zPos: -4.25127 }
- ListElement{ xPos: 0.259357; yPos: 2.28099; zPos: -0.476734 }
- ListElement{ xPos: -0.327316; yPos: -1.24908; zPos: 0.78628 }
- ListElement{ xPos: 0.190362; yPos: -3.26019; zPos: 0.0545844 }
- ListElement{ xPos: -1.25409; yPos: -0.761609; zPos: 2.65361 }
- ListElement{ xPos: 2.86816; yPos: 0.443709; zPos: 0.556137 }
- ListElement{ xPos: 2.60289; yPos: -0.680561; zPos: 0.248414 }
- ListElement{ xPos: 1.75631; yPos: -0.162859; zPos: -3.62488 }
- ListElement{ xPos: -0.559754; yPos: -0.16222; zPos: 2.35858 }
- ListElement{ xPos: 0.157552; yPos: -1.72639; zPos: -0.48056 }
- ListElement{ xPos: 3.69492; yPos: -0.848265; zPos: -0.256413 }
- ListElement{ xPos: -1.4264; yPos: -1.48589; zPos: -2.724 }
- ListElement{ xPos: 1.15372; yPos: -0.27228; zPos: -2.75499 }
- ListElement{ xPos: -1.85159; yPos: 1.76577; zPos: -0.858854 }
- ListElement{ xPos: 0.0580466; yPos: -0.41133; zPos: 1.05649 }
- ListElement{ xPos: -1.25289; yPos: 0.528142; zPos: -0.386138 }
- ListElement{ xPos: -0.858101; yPos: -0.245127; zPos: 1.95078 }
- ListElement{ xPos: -1.95302; yPos: -0.0862415; zPos: -1.95806 }
- ListElement{ xPos: -2.79133; yPos: -0.527094; zPos: -0.356931 }
- ListElement{ xPos: 0.110597; yPos: 0.167534; zPos: 4.12784 }
- ListElement{ xPos: -0.637771; yPos: -0.526587; zPos: -1.25734 }
- ListElement{ xPos: -2.311; yPos: -0.489068; zPos: -2.8594 }
- ListElement{ xPos: -0.352617; yPos: -1.23939; zPos: -1.85435 }
- ListElement{ xPos: 1.78814; yPos: -0.265883; zPos: 3.35913 }
- ListElement{ xPos: 2.75557; yPos: -2.32271; zPos: 3.15559 }
- ListElement{ xPos: 2.85426; yPos: 0.443661; zPos: 0.921828 }
- ListElement{ xPos: -2.14262; yPos: 0.400863; zPos: 1.11614 }
- ListElement{ xPos: 4.45496; yPos: -0.488668; zPos: -3.7533 }
- ListElement{ xPos: 0.754719; yPos: -1.44165; zPos: 0.853323 }
- ListElement{ xPos: -0.856506; yPos: 1.76559; zPos: 1.05702 }
- ListElement{ xPos: -0.418565; yPos: -0.921031; zPos: -2.43699 }
- ListElement{ xPos: -1.29292; yPos: -0.282271; zPos: -1.62927 }
- ListElement{ xPos: -0.759531; yPos: 0.566692; zPos: -0.750991 }
- ListElement{ xPos: 0.559787; yPos: 1.72479; zPos: -0.26667 }
- ListElement{ xPos: 2.75533; yPos: -0.245187; zPos: -0.543844 }
- ListElement{ xPos: -2.27924; yPos: -1.04154; zPos: -4.05156 }
- ListElement{ xPos: 3.35852; yPos: -0.561129; zPos: -2.98986 }
- ListElement{ xPos: 2.41843; yPos: -0.321119; zPos: -1.55651 }
- ListElement{ xPos: 0.85431; yPos: -0.883719; zPos: -2.17826 }
- ListElement{ xPos: 0.417867; yPos: 0.242995; zPos: -0.456326 }
- ListElement{ xPos: -4.17449; yPos: -0.720086; zPos: 0.355145 }
- ListElement{ xPos: -0.577386; yPos: 0.0440364; zPos: -0.950268 }
- ListElement{ xPos: -2.8156; yPos: 2.92346; zPos: 0.958713 }
- ListElement{ xPos: -1.65138; yPos: 0.963561; zPos: 1.25265 }
- ListElement{ xPos: 1.45117; yPos: 0.845424; zPos: 0.252789 }
- ListElement{ xPos: 2.27848; yPos: -1.76777; zPos: 0.0117707 }
- ListElement{ xPos: -0.754248; yPos: 1.08381; zPos: -2.15345 }
- ListElement{ xPos: -3.15415; yPos: -0.162292; zPos: -1.15347 }
- ListElement{ xPos: 2.55396; yPos: -1.68912; zPos: 1.15698 }
- ListElement{ xPos: 0.159561; yPos: 1.84202; zPos: 0.428428 }
- ListElement{ xPos: -1.58079; yPos: 2.04207; zPos: 3.29578 }
- ListElement{ xPos: -1.05711; yPos: -0.843112; zPos: -1.98122 }
- ListElement{ xPos: 0.138866; yPos: -2.96642; zPos: -0.212247 }
- ListElement{ xPos: 2.6778; yPos: 0.686972; zPos: -2.6553 }
- ListElement{ xPos: -0.498291; yPos: -0.362846; zPos: -1.0538 }
- ListElement{ xPos: 1.19872; yPos: 0.0476518; zPos: -2.42077 }
- ListElement{ xPos: -2.3972; yPos: 1.40393; zPos: -0.1943 }
- ListElement{ xPos: 0.85034; yPos: -1.24222; zPos: 1.5646 }
- ListElement{ xPos: 0.142174; yPos: 0.249903; zPos: -2.75252 }
- ListElement{ xPos: 1.15197; yPos: 1.32746; zPos: -1.70104 }
- ListElement{ xPos: 0.359387; yPos: -1.65115; zPos: -2.75243 }
- ListElement{ xPos: 0.357917; yPos: -1.36406; zPos: 2.55102 }
- ListElement{ xPos: -1.65268; yPos: -0.28339; zPos: 2.75665 }
- ListElement{ xPos: -3.82681; yPos: -3.28984; zPos: 2.55128 }
- ListElement{ xPos: -2.61371; yPos: 1.08247; zPos: -0.457068 }
- ListElement{ xPos: 1.67152; yPos: -2.25527; zPos: 2.45819 }
- ListElement{ xPos: -0.753832; yPos: 1.1682; zPos: -1.95913 }
- ListElement{ xPos: -2.05131; yPos: 3.04537; zPos: 1.91954 }
- ListElement{ xPos: -0.695378; yPos: 2.88924; zPos: 1.41965 }
- ListElement{ xPos: 3.25767; yPos: -2.76934; zPos: -0.354127 }
- ListElement{ xPos: -0.746795; yPos: 1.36034; zPos: 1.85953 }
- ListElement{ xPos: 0.859135; yPos: 1.08222; zPos: 0.959116 }
- ListElement{ xPos: 1.15898; yPos: 1.32443; zPos: 3.41981 }
- ListElement{ xPos: 3.67954; yPos: 0.447177; zPos: -0.414029 }
- ListElement{ xPos: 0.907323; yPos: 2.12852; zPos: 1.95837 }
- ListElement{ xPos: -0.683456; yPos: -0.247536; zPos: 1.05621 }
- ListElement{ xPos: -1.67809; yPos: 0.641544; zPos: -1.31143 }
- ListElement{ xPos: -1.30192; yPos: -0.677394; zPos: -1.95159 }
- ListElement{ xPos: -0.105665; yPos: 0.365205; zPos: -1.2567 }
- ListElement{ xPos: 1.12189; yPos: -1.48969; zPos: 0.957166 }
- ListElement{ xPos: 1.25554; yPos: -1.92186; zPos: -0.904086 }
- ListElement{ xPos: 0.117786; yPos: 2.23836; zPos: -0.498009 }
- ListElement{ xPos: -2.85788; yPos: 0.643364; zPos: 0.55867 }
- ListElement{ xPos: -1.66115; yPos: 2.56146; zPos: -2.28632 }
- ListElement{ xPos: -3.29334; yPos: -0.0894367; zPos: -0.656519 }
- ListElement{ xPos: 3.15561; yPos: -0.769732; zPos: 1.15695 }
- ListElement{ xPos: 1.25684; yPos: 0.64652; zPos: -2.6002 }
- ListElement{ xPos: 2.65231; yPos: -3.52625; zPos: 1.55617 }
- ListElement{ xPos: -1.8573; yPos: -1.76276; zPos: -1.74075 }
- ListElement{ xPos: -1.55648; yPos: 1.2592; zPos: 2.1585 }
- ListElement{ xPos: -0.555522; yPos: 2.88068; zPos: -2.85423 }
- ListElement{ xPos: -3.14249; yPos: -0.288592; zPos: -3.35534 }
- ListElement{ xPos: 2.45413; yPos: 0.0854903; zPos: -2.20507 }
- ListElement{ xPos: -2.05464; yPos: 0.887836; zPos: -0.658349 }
- ListElement{ xPos: 1.12708; yPos: -0.568106; zPos: -3.65865 }
- ListElement{ xPos: -0.59147; yPos: -0.685439; zPos: 0.301612 }
- ListElement{ xPos: 0.473679; yPos: 0.886411; zPos: -1.65386 }
- ListElement{ xPos: 1.65166; yPos: 0.166741; zPos: 0.751119 }
- ListElement{ xPos: -0.299287; yPos: 1.72233; zPos: 0.618559 }
- ListElement{ xPos: 1.15181; yPos: -0.488026; zPos: 0.124448 }
- ListElement{ xPos: 0.0561315; yPos: 1.04877; zPos: 2.15922 }
- ListElement{ xPos: 0.154258; yPos: -0.64401; zPos: -1.31179 }
- ListElement{ xPos: 1.75863; yPos: -1.88571; zPos: -2.8537 }
- ListElement{ xPos: 3.35024; yPos: 1.28154; zPos: -1.05461 }
- ListElement{ xPos: -3.71738; yPos: -2.88631; zPos: -1.05314 }
- ListElement{ xPos: -1.78258; yPos: 3.08967; zPos: 0.150476 }
- ListElement{ xPos: 3.47828; yPos: -2.524; zPos: -2.45502 }
- ListElement{ xPos: -0.159138; yPos: 0.160633; zPos: -0.338796 }
- ListElement{ xPos: -2.15885; yPos: -0.82959; zPos: 1.25022 }
- ListElement{ xPos: -1.95268; yPos: -0.841195; zPos: -3.19487 }
- ListElement{ xPos: -0.281381; yPos: -0.887435; zPos: -3.55807 }
- ListElement{ xPos: 0.415164; yPos: 0.326482; zPos: -1.55411 }
- ListElement{ xPos: 1.92868; yPos: -2.84771; zPos: -0.556196 }
- ListElement{ xPos: 1.05804; yPos: 1.32866; zPos: 0.66596 }
- ListElement{ xPos: 2.46545; yPos: 1.00747; zPos: 2.35957 }
- ListElement{ xPos: -0.77358; yPos: 0.284677; zPos: -1.38805 }
- ListElement{ xPos: 0.851046; yPos: 0.960742; zPos: -2.70934 }
- ListElement{ xPos: -0.858208; yPos: -0.884015; zPos: 1.16663 }
- ListElement{ xPos: 1.55291; yPos: 0.282705; zPos: -3.18254 }
- ListElement{ xPos: 1.99034; yPos: 0.286298; zPos: -1.75821 }
- ListElement{ xPos: 0.259097; yPos: -2.04379; zPos: -0.858936 }
- ListElement{ xPos: -1.5956; yPos: 2.04693; zPos: -1.35234 }
- ListElement{ xPos: -0.775432; yPos: 1.24465; zPos: 1.95935 }
- ListElement{ xPos: 1.65595; yPos: -1.04954; zPos: -0.954437 }
- ListElement{ xPos: -2.35417; yPos: -1.76095; zPos: -0.248306 }
- ListElement{ xPos: 0.855717; yPos: -2.92161; zPos: 3.4496 }
- ListElement{ xPos: -0.717941; yPos: 2.52993; zPos: 1.25007 }
- ListElement{ xPos: -3.42927; yPos: 0.673305; zPos: 0.995742 }
- }
-
- ListModel {
- id: dataModelThree
- ListElement{ xPos: 8.00000; yPos: -2.05136; zPos: 4.02113 }
- ListElement{ xPos: 7.88929; yPos: -2.2029; zPos: 5.0000 }
- ListElement{ xPos: 7.61596; yPos: -2.44569; zPos: 4.54892 }
- ListElement{ xPos: 7.41949; yPos: -2.64169; zPos: 3.82339 }
- ListElement{ xPos: 7.21192; yPos: -2.87947; zPos: 4.89423 }
- ListElement{ xPos: 7.08346; yPos: -2.38649; zPos: 4.19212 }
- ListElement{ xPos: 6.90279; yPos: -3.33038; zPos: 4.9273 }
- ListElement{ xPos: 6.78959; yPos: -3.55575; zPos: 3.55127 }
- ListElement{ xPos: 6.57074; yPos: -3.75902; zPos: 3.32517 }
- ListElement{ xPos: 6.30756; yPos: -3.40499; zPos: 3.78366 }
- ListElement{ xPos: 7.90893; yPos: -3.3237; zPos: 2.48012 }
- ListElement{ xPos: 6.24078; yPos: -4.04978; zPos: 3.47459 }
- ListElement{ xPos: 7.93452; yPos: -4.6865; zPos: 4.08057 }
- ListElement{ xPos: 5.98731; yPos: -2.26113; zPos: 2.82166 }
- ListElement{ xPos: 5.46898; yPos: -3.99581; zPos: 3.25024 }
- ListElement{ xPos: 7.92353; yPos: -3.34471; zPos: 3.42168 }
- ListElement{ xPos: 6.8456; yPos: -5.00000; zPos: 2.36145 }
- ListElement{ xPos: 7.62888; yPos: -3.82465; zPos: 2.7879 }
- ListElement{ xPos: 7.18034; yPos: -3.94376; zPos: 2.74348 }
- ListElement{ xPos: 6.02527; yPos: -4.36523; zPos: 2.56247 }
- ListElement{ xPos: 7.82353; yPos: -3.04345; zPos: 2.62974 }
- ListElement{ xPos: 7.82539; yPos: -3.6881; zPos: 2.96164 }
- ListElement{ xPos: 7.10508; yPos: -3.6174; zPos: 4.22416 }
- ListElement{ xPos: 7.64684; yPos: -3.88431; zPos: 3.9336 }
- ListElement{ xPos: 7.46411; yPos: -4.21516; zPos: 3.32001 }
- ListElement{ xPos: 6.98777; yPos: -3.94024; zPos: 3.14694 }
- ListElement{ xPos: 7.36355; yPos: -4.24875; zPos: 1.72061 }
- ListElement{ xPos: 7.92773; yPos: -4.52065; zPos: 2.62078 }
- ListElement{ xPos: 6.04598; yPos: -4.48682; zPos: 2.74494 }
- ListElement{ xPos: 7.83353; yPos: -3.9271; zPos: 3.82815 }
- ListElement{ xPos: 6.76279; yPos: -3.58031; zPos: 2.92525 }
- ListElement{ xPos: 7.14794; yPos: -4.42742; zPos: 2.62365 }
- ListElement{ xPos: 5.32696; yPos: -3.28733; zPos: 3.34916 }
- ListElement{ xPos: 6.43655; yPos: -4.60784; zPos: 2.41548 }
- ListElement{ xPos: 5.66033; yPos: -4.98497; zPos: 3.72282 }
- }
-}
diff --git a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml
deleted file mode 100644
index bafdaac4..00000000
--- a/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml
+++ /dev/null
@@ -1,243 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
-
-Rectangle {
- id: mainView
- width: 1280
- height: 720
-
- Data {
- id: graphData
- }
-
- Item {
- id: dataView
- anchors.bottom: parent.bottom
- width: parent.width
- height: parent.height - buttonLayout.height
-
- //! [0]
- Scatter3D {
- //! [0]
- id: scatterGraph
- width: dataView.width
- height: dataView.height
- theme: Theme3D { type: Theme3D.ThemeDigia }
- shadowQuality: AbstractGraph3D.ShadowQualityMedium
- scene.activeCamera.yRotation: 30.0
- //! [1]
- inputHandler: null
- //! [1]
-
- Scatter3DSeries {
- id: scatterSeriesOne
- itemLabelFormat: "One - X:@xLabel Y:@yLabel Z:@zLabel"
- mesh: Abstract3DSeries.MeshCube
-
- ItemModelScatterDataProxy {
- itemModel: graphData.modelOne
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
- }
-
- Scatter3DSeries {
- id: scatterSeriesTwo
- itemLabelFormat: "Two - X:@xLabel Y:@yLabel Z:@zLabel"
- mesh: Abstract3DSeries.MeshCube
-
- ItemModelScatterDataProxy {
- itemModel: graphData.modelTwo
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
- }
-
- Scatter3DSeries {
- id: scatterSeriesThree
- itemLabelFormat: "Three - X:@xLabel Y:@yLabel Z:@zLabel"
- mesh: Abstract3DSeries.MeshCube
-
- ItemModelScatterDataProxy {
- itemModel: graphData.modelThree
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
- }
- }
-
- //! [2]
- MouseArea {
- id: inputArea
- anchors.fill: parent
- hoverEnabled: true
- acceptedButtons: Qt.LeftButton | Qt.RightButton
- property int mouseX: -1
- property int mouseY: -1
- //! [2]
-
- //! [3]
- onPositionChanged: {
- mouseX = mouse.x;
- mouseY = mouse.y;
- }
- //! [3]
-
- //! [5]
- onWheel: {
- // Adjust zoom level based on what zoom range we're in.
- var zoomLevel = scatterGraph.scene.activeCamera.zoomLevel;
- if (zoomLevel > 100)
- zoomLevel += wheel.angleDelta.y / 12.0;
- else if (zoomLevel > 50)
- zoomLevel += wheel.angleDelta.y / 60.0;
- else
- zoomLevel += wheel.angleDelta.y / 120.0;
- if (zoomLevel > 500)
- zoomLevel = 500;
- else if (zoomLevel < 10)
- zoomLevel = 10;
-
- scatterGraph.scene.activeCamera.zoomLevel = zoomLevel;
- }
- //! [5]
- }
-
- //! [4]
- Timer {
- id: reselectTimer
- interval: 10
- running: true
- repeat: true
- onTriggered: {
- scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseX, inputArea.mouseY);
- }
- }
- //! [4]
- }
-
- //! [6]
- NumberAnimation {
- id: cameraAnimationX
- loops: Animation.Infinite
- running: true
- target: scatterGraph.scene.activeCamera
- property:"xRotation"
- from: 0.0
- to: 360.0
- duration: 20000
- }
- //! [6]
-
-
- //! [7]
- SequentialAnimation {
- id: cameraAnimationY
- loops: Animation.Infinite
- running: true
-
- NumberAnimation {
- target: scatterGraph.scene.activeCamera
- property:"yRotation"
- from: 5.0
- to: 45.0
- duration: 9000
- easing.type: Easing.InOutSine
- }
-
- NumberAnimation {
- target: scatterGraph.scene.activeCamera
- property:"yRotation"
- from: 45.0
- to: 5.0
- duration: 9000
- easing.type: Easing.InOutSine
- }
- }
- //! [7]
-
- RowLayout {
- id: buttonLayout
- Layout.minimumHeight: shadowToggle.height
- width: parent.width
- anchors.left: parent.left
- spacing: 0
-
- NewButton {
- id: shadowToggle
- Layout.fillHeight: true
- Layout.minimumWidth: parent.width / 3 // 3 buttons divided equally in the layout
- text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported"
- enabled: scatterGraph.shadowsSupported
-
- onClicked: {
- if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
- scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium;
- text = "Hide Shadows";
- } else {
- scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
- text = "Show Shadows";
- }
- }
- }
-
- NewButton {
- id: cameraToggle
- Layout.fillHeight: true
- Layout.minimumWidth: parent.width / 3
- text: "Pause Camera"
-
- onClicked: {
- cameraAnimationX.paused = !cameraAnimationX.paused;
- cameraAnimationY.paused = cameraAnimationX.paused;
- if (cameraAnimationX.paused) {
- text = "Animate Camera";
- } else {
- text = "Pause Camera";
- }
- }
- }
-
- NewButton {
- id: exitButton
- Layout.fillHeight: true
- Layout.minimumWidth: parent.width / 3
- text: "Quit"
- onClicked: Qt.quit(0);
- }
- }
-}
diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput.pro b/examples/datavisualization/qmlcustominput/qmlcustominput.pro
deleted file mode 100644
index 356bb26f..00000000
--- a/examples/datavisualization/qmlcustominput/qmlcustominput.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlcustominput.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlcustominput/*
diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput.qrc b/examples/datavisualization/qmlcustominput/qmlcustominput.qrc
deleted file mode 100644
index 5800150a..00000000
--- a/examples/datavisualization/qmlcustominput/qmlcustominput.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlcustominput/Data.qml</file>
- <file>qml/qmlcustominput/main.qml</file>
- <file>qml/qmlcustominput/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png b/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png
deleted file mode 100644
index ee546077..00000000
--- a/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc b/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc
deleted file mode 100644
index f7aa1458..00000000
--- a/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmllegend
- \title Qt Quick 2 Legend Example
- \ingroup qtdatavisualization_examples
- \brief Showing graph legend in a QML application.
-
- The Qt Quick 2 legend example shows how to make an interactive legend for a graph.
-
- \image qmllegend-example.png
-
- The interesting thing about this example is displaying the legend. We'll concentrate on
- that and skip explaining the basic functionality - for
- more detailed QML example documentation, see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Legend
-
- The legend is simply a column of custom \c LegendItem items inside a transparent rectangle.
- Each item is supplied with a series and the graph theme:
-
- \snippet qmllegend/qml/qmllegend/main.qml 0
-
- The legend items consist of a marker rectangle, which indicates the color of the series,
- and a text field, which shows the name of the series. The colors we get from the series and
- the theme supplied at legend item initialization:
-
- \snippet qmllegend/qml/qmllegend/LegendItem.qml 0
- \dots 4
- \snippet qmllegend/qml/qmllegend/LegendItem.qml 1
-
- We want the legend to be interactive, so we add additional logic to enable selection of a
- series by clicking on a legend item, as well as highlighting the legend item corresponding
- to the selected series.
-
- The highlight depends on the selection state of the series, so we define two states, which
- follow the Bar3DSeries::selectedBar property and adjust the \c legendItem color appropriately:
-
- \snippet qmllegend/qml/qmllegend/LegendItem.qml 3
-
- To make the legend item interactive, we define a MouseArea to detect clicks on it and adjust
- the series selection accordingly:
-
- \snippet qmllegend/qml/qmllegend/LegendItem.qml 2
-
- The \c previousSelection used above is another custom property of \c LegendItem, which we update
- whenever selection changes on the series. This way we remember the last selected bar of
- each series:
-
- \snippet qmllegend/qml/qmllegend/LegendItem.qml 4
-*/
diff --git a/examples/datavisualization/qmllegend/main.cpp b/examples/datavisualization/qmllegend/main.cpp
deleted file mode 100644
index c7876ca0..00000000
--- a/examples/datavisualization/qmllegend/main.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("Legend example"));
-
- viewer.setSource(QUrl("qrc:/qml/qmllegend/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/Data.qml b/examples/datavisualization/qmllegend/qml/qmllegend/Data.qml
deleted file mode 100644
index b70fb196..00000000
--- a/examples/datavisualization/qmllegend/qml/qmllegend/Data.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- property alias model: dataModel
-
- ListModel {
- id: dataModel
- ListElement{ year: "2010"; month: "Jan"; s1: "-14"; s2: "-15"; s3: "-15" }
- ListElement{ year: "2010"; month: "Feb"; s1: "-15"; s2: "-16"; s3: "-9" }
- ListElement{ year: "2010"; month: "Mar"; s1: "-7"; s2: "-4"; s3: "-2" }
- ListElement{ year: "2010"; month: "Apr"; s1: "3"; s2: "2"; s3: "2" }
- ListElement{ year: "2010"; month: "May"; s1: "7"; s2: "9"; s3: "10" }
- ListElement{ year: "2010"; month: "Jun"; s1: "12"; s2: "13"; s3: "22" }
- ListElement{ year: "2010"; month: "Jul"; s1: "18"; s2: "19"; s3: "24" }
- ListElement{ year: "2010"; month: "Aug"; s1: "15"; s2: "13"; s3: "16" }
- ListElement{ year: "2010"; month: "Sep"; s1: "6"; s2: "3"; s3: "4" }
- ListElement{ year: "2010"; month: "Oct"; s1: "1"; s2: "2"; s3: "-2" }
- ListElement{ year: "2010"; month: "Nov"; s1: "-2"; s2: "-5"; s3: "-6" }
- ListElement{ year: "2010"; month: "Dec"; s1: "-3"; s2: "-3"; s3: "-9" }
-
- ListElement{ year: "2011"; month: "Jan"; s1: "-12"; s2: "-11"; s3: "-14" }
- ListElement{ year: "2011"; month: "Feb"; s1: "-13"; s2: "-12"; s3: "-10" }
- ListElement{ year: "2011"; month: "Mar"; s1: "-6"; s2: "-4"; s3: "-3" }
- ListElement{ year: "2011"; month: "Apr"; s1: "0"; s2: "1"; s3: "3" }
- ListElement{ year: "2011"; month: "May"; s1: "4"; s2: "12"; s3: "11" }
- ListElement{ year: "2011"; month: "Jun"; s1: "9"; s2: "17"; s3: "23" }
- ListElement{ year: "2011"; month: "Jul"; s1: "15"; s2: "22"; s3: "25" }
- ListElement{ year: "2011"; month: "Aug"; s1: "12"; s2: "15"; s3: "12" }
- ListElement{ year: "2011"; month: "Sep"; s1: "2"; s2: "4"; s3: "7" }
- ListElement{ year: "2011"; month: "Oct"; s1: "-2"; s2: "4"; s3: "-4" }
- ListElement{ year: "2011"; month: "Nov"; s1: "-4"; s2: "-8"; s3: "-5" }
- ListElement{ year: "2011"; month: "Dec"; s1: "-6"; s2: "-6"; s3: "-7" }
-
- ListElement{ year: "2012"; month: "Jan"; s1: "-10"; s2: "-19"; s3: "-11" }
- ListElement{ year: "2012"; month: "Feb"; s1: "-11"; s2: "-17"; s3: "-4" }
- ListElement{ year: "2012"; month: "Mar"; s1: "-6"; s2: "-3"; s3: "-1" }
- ListElement{ year: "2012"; month: "Apr"; s1: "5"; s2: "1"; s3: "2" }
- ListElement{ year: "2012"; month: "May"; s1: "9"; s2: "12"; s3: "13" }
- ListElement{ year: "2012"; month: "Jun"; s1: "11"; s2: "16"; s3: "26" }
- ListElement{ year: "2012"; month: "Jul"; s1: "18"; s2: "20"; s3: "23" }
- ListElement{ year: "2012"; month: "Aug"; s1: "19"; s2: "12"; s3: "12" }
- ListElement{ year: "2012"; month: "Sep"; s1: "9"; s2: "1"; s3: "3" }
- ListElement{ year: "2012"; month: "Oct"; s1: "-3"; s2: "2"; s3: "-1" }
- ListElement{ year: "2012"; month: "Nov"; s1: "-5"; s2: "-4"; s3: "-3" }
- ListElement{ year: "2012"; month: "Dec"; s1: "-7"; s2: "-2"; s3: "-4" }
-
- ListElement{ year: "2013"; month: "Jan"; s1: "-18"; s2: "-19"; s3: "-19" }
- ListElement{ year: "2013"; month: "Feb"; s1: "-17"; s2: "-19"; s3: "-12" }
- ListElement{ year: "2013"; month: "Mar"; s1: "-9"; s2: "-6"; s3: "-5" }
- ListElement{ year: "2013"; month: "Apr"; s1: "0"; s2: "0"; s3: "0" }
- ListElement{ year: "2013"; month: "May"; s1: "4"; s2: "7"; s3: "9" }
- ListElement{ year: "2013"; month: "Jun"; s1: "9"; s2: "11"; s3: "18" }
- ListElement{ year: "2013"; month: "Jul"; s1: "13"; s2: "15"; s3: "20" }
- ListElement{ year: "2013"; month: "Aug"; s1: "10"; s2: "11"; s3: "13" }
- ListElement{ year: "2013"; month: "Sep"; s1: "3"; s2: "1"; s3: "2" }
- ListElement{ year: "2013"; month: "Oct"; s1: "0"; s2: "1"; s3: "-4" }
- ListElement{ year: "2013"; month: "Nov"; s1: "-5"; s2: "-6"; s3: "-5" }
- ListElement{ year: "2013"; month: "Dec"; s1: "-6"; s2: "-7"; s3: "-10" }
- }
-}
diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml b/examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml
deleted file mode 100644
index 7f1dcda4..00000000
--- a/examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Window 2.1
-import QtDataVisualization 1.0
-
-Rectangle {
- //! [0]
- property Theme3D theme
- property Bar3DSeries series
- //! [0]
- property point previousSelection
-
- id: legendItem
- state: "unselected"
-
- // Workaround for a layout bug that in some situations causes changing from fully opaque color
- // to a transparent one to use black background instead of what is actually under the items.
- // Having the control always slighthly transparent forces the background to be refreshed
- // properly.
- opacity: 0.999
-
- //! [1]
- RowLayout {
- anchors.fill: parent
- spacing: 0
- clip: true
- Item {
- id: markerSpace
- Layout.minimumWidth: 20
- Layout.minimumHeight: 20
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.alignment: Qt.AlignVCenter
- Rectangle {
- x: parent.x + parent.width / 4
- y: parent.y + parent.height / 4
- width: parent.width / 2
- height: width
- border.color: "black"
- color: series.baseColor
- }
- }
- Item {
- height: markerSpace.height
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.alignment: Qt.AlignVCenter
- Layout.minimumWidth: 100
- Text {
- anchors.fill: parent
- text: series.name
- verticalAlignment: Text.AlignVCenter
- clip: true
- color: theme.labelTextColor
- font: theme.font
- }
- }
- }
- //! [1]
-
- //! [2]
- MouseArea {
- id: mouseArea
- anchors.fill: legendItem
- onClicked: {
- if (legendItem.state === "selected") {
- series.selectedBar = series.invalidSelectionPosition
- } else {
- series.selectedBar = previousSelection
- }
- }
- }
- //! [2]
-
- //! [4]
- Connections {
- target: series
- onSelectedBarChanged: {
- if (position != series.invalidSelectionPosition) {
- previousSelection = position
- }
- }
- }
- //! [4]
-
- //! [3]
- states: [
- State {
- name: "selected"
- when: series.selectedBar != series.invalidSelectionPosition
- PropertyChanges {
- target: legendItem
- color: series.singleHighlightColor
- }
- },
- State {
- name: "unselected"
- when: series.selectedBar == series.invalidSelectionPosition
- PropertyChanges {
- target: legendItem
- color: theme.labelBackgroundColor
- }
- }
- ]
- //! [3]
-}
diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml b/examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml
deleted file mode 100644
index a380303e..00000000
--- a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml
+++ /dev/null
@@ -1,241 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
-
-Rectangle {
- id: mainView
- width: 800
- height: 600
-
- property int buttonLayoutHeight: 180;
-
- Data {
- id: graphData
- }
-
- Theme3D {
- id: firstTheme
- type: Theme3D.ThemeQt
- }
-
- Theme3D {
- id: secondTheme
- type: Theme3D.ThemeEbony
- }
-
- Item {
- id: dataView
- anchors.fill: parent
-
- Bars3D {
- id: barGraph
- anchors.fill: parent
- selectionMode: AbstractGraph3D.SelectionItemAndRow
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
- theme: firstTheme
- valueAxis.labelFormat: "%d\u00B0C"
-
- Bar3DSeries {
- id: station1
- name: "Station 1"
- itemLabelFormat: "Temperature at @seriesName for @colLabel, @rowLabel: @valueLabel"
-
- ItemModelBarDataProxy {
- itemModel: graphData.model
- rowRole: "year"
- columnRole: "month"
- valueRole: "s1"
- }
- }
- Bar3DSeries {
- id: station2
- name: "Station 2"
- itemLabelFormat: "Temperature at @seriesName for @colLabel, @rowLabel: @valueLabel"
-
- ItemModelBarDataProxy {
- itemModel: graphData.model
- rowRole: "year"
- columnRole: "month"
- valueRole: "s2"
- }
- }
- Bar3DSeries {
- id: station3
- name: "Station 3"
- itemLabelFormat: "Temperature at @seriesName for @colLabel, @rowLabel: @valueLabel"
-
- ItemModelBarDataProxy {
- itemModel: graphData.model
- rowRole: "year"
- columnRole: "month"
- valueRole: "s2"
- }
- }
- }
- }
-
- Rectangle {
- property int legendLocation: 3
- // Make the height and width fractional of main view height and width.
- // Reverse the relation if screen is in portrait - this makes legend look the same
- // if the orientation is rotated.
- property int fractionalHeight: mainView.width > mainView.height ? mainView.height / 5 : mainView.width / 5
- property int fractionalWidth: mainView.width > mainView.height ? mainView.width / 5 : mainView.height / 5
-
- id: legendPanel
- width: fractionalWidth > 150 ? fractionalWidth : 150
- // Adjust legendpanel height to avoid gaps between layouted items.
- height: fractionalHeight > 99 ? fractionalHeight - fractionalHeight % 3 : 99
- border.color: barGraph.theme.labelTextColor
- border.width: 3
- color: "#00000000" // Transparent
-
- //! [0]
- ColumnLayout {
- anchors.fill: parent
- anchors.margins: parent.border.width
- spacing: 0
- clip: true
- LegendItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- series: station1
- theme: barGraph.theme
- }
- LegendItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- series: station2
- theme: barGraph.theme
- }
- LegendItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- series: station3
- theme: barGraph.theme
- }
- }
- //! [0]
-
- states: [
- State {
- name: "topleft"
- when: legendPanel.legendLocation === 1
- AnchorChanges {
- target: legendPanel
- anchors.top: buttonLayout.bottom
- anchors.bottom: undefined
- anchors.left: dataView.left
- anchors.right: undefined
- }
- },
- State {
- name: "topright"
- when: legendPanel.legendLocation === 2
- AnchorChanges {
- target: legendPanel
- anchors.top: buttonLayout.bottom
- anchors.bottom: undefined
- anchors.left: undefined
- anchors.right: dataView.right
- }
- },
- State {
- name: "bottomleft"
- when: legendPanel.legendLocation === 3
- AnchorChanges {
- target: legendPanel
- anchors.top: undefined
- anchors.bottom: dataView.bottom
- anchors.left: dataView.left
- anchors.right: undefined
- }
- },
- State {
- name: "bottomright"
- when: legendPanel.legendLocation === 4
- AnchorChanges {
- target: legendPanel
- anchors.top: undefined
- anchors.bottom: dataView.bottom
- anchors.left: undefined
- anchors.right: dataView.right
- }
- }
- ]
- }
-
- RowLayout {
- id: buttonLayout
- Layout.minimumHeight: themeToggle.height
- width: parent.width
- anchors.left: parent.left
- spacing: 0
-
- NewButton {
- id: themeToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Change Theme"
- onClicked: {
- if (barGraph.theme === firstTheme) {
- barGraph.theme = secondTheme
- } else {
- barGraph.theme = firstTheme
- }
- }
- }
- NewButton {
- id: repositionLegend
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Reposition Legend"
- onClicked: {
- if (legendPanel.legendLocation === 4) {
- legendPanel.legendLocation = 1
- } else {
- legendPanel.legendLocation++
- }
- }
- }
- NewButton {
- id: exitButton
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Quit"
- onClicked: Qt.quit(0);
- }
- }
-
-}
diff --git a/examples/datavisualization/qmllegend/qmllegend.pro b/examples/datavisualization/qmllegend/qmllegend.pro
deleted file mode 100644
index af449d8d..00000000
--- a/examples/datavisualization/qmllegend/qmllegend.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmllegend.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmllegend/*
-
diff --git a/examples/datavisualization/qmllegend/qmllegend.qrc b/examples/datavisualization/qmllegend/qmllegend.qrc
deleted file mode 100644
index b9777b37..00000000
--- a/examples/datavisualization/qmllegend/qmllegend.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmllegend/Data.qml</file>
- <file>qml/qmllegend/LegendItem.qml</file>
- <file>qml/qmllegend/main.qml</file>
- <file>qml/qmllegend/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png b/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png
deleted file mode 100644
index 79073f5f..00000000
--- a/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc b/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc
deleted file mode 100644
index 64985c21..00000000
--- a/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlmultigraph
- \title Qt Quick 2 Multiple Graphs Example
- \ingroup qtdatavisualization_examples
- \brief Showing multiple graphs simultaneously in a QML application.
-
- The Qt Quick 2 multiple graphs example demonstrates using multiple graphs in single window.
-
- \image qmlmultigraph-example.png
-
- The interesting thing about this example is demonstrating that multiple graphs can be used
- simultaneously, so most functionality is not explained in detail.
- For more detailed QML example documentation, see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Multiple Graphs
-
- Using multiple graphs in a single application doesn't require anything special, simply define
- and position the graphs as normal. In this example the graphs are shown in a 2 x 2 grid with
- \c{GridLayout}:
-
- \snippet qmlmultigraph/qml/qmlmultigraph/main.qml 0
-
- Each graph has a parent \c Rectangle item to provide it with a border.
-
- Note that one of the grid cells is used for buttons in an another \c{GridLayout}.
-*/
diff --git a/examples/datavisualization/qmlmultigraph/main.cpp b/examples/datavisualization/qmlmultigraph/main.cpp
deleted file mode 100644
index b7ca9b99..00000000
--- a/examples/datavisualization/qmlmultigraph/main.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("QML multigraph example"));
- viewer.setSource(QUrl("qrc:/qml/qmlmultigraph/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml
deleted file mode 100644
index 183c69ee..00000000
--- a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- property alias sharedData: dataModel
-
- ListModel {
- id: dataModel
- ListElement{ row: "0"; col: "0"; longitude: "20.0"; latitude: "10.0"; pop_density: "4.75"; }
- ListElement{ row: "1"; col: "0"; longitude: "21.1"; latitude: "10.3"; pop_density: "3.00"; }
- ListElement{ row: "2"; col: "0"; longitude: "22.5"; latitude: "10.7"; pop_density: "1.24"; }
- ListElement{ row: "3"; col: "0"; longitude: "24.0"; latitude: "10.5"; pop_density: "2.53"; }
- ListElement{ row: "0"; col: "1"; longitude: "20.2"; latitude: "11.2"; pop_density: "3.55"; }
- ListElement{ row: "1"; col: "1"; longitude: "21.3"; latitude: "11.5"; pop_density: "3.03"; }
- ListElement{ row: "2"; col: "1"; longitude: "22.6"; latitude: "11.7"; pop_density: "3.46"; }
- ListElement{ row: "3"; col: "1"; longitude: "23.4"; latitude: "11.5"; pop_density: "4.12"; }
- ListElement{ row: "0"; col: "2"; longitude: "20.2"; latitude: "12.3"; pop_density: "3.37"; }
- ListElement{ row: "1"; col: "2"; longitude: "21.1"; latitude: "12.4"; pop_density: "2.98"; }
- ListElement{ row: "2"; col: "2"; longitude: "22.5"; latitude: "12.1"; pop_density: "3.33"; }
- ListElement{ row: "3"; col: "2"; longitude: "23.3"; latitude: "12.7"; pop_density: "3.23"; }
- ListElement{ row: "0"; col: "3"; longitude: "20.7"; latitude: "13.3"; pop_density: "5.34"; }
- ListElement{ row: "1"; col: "3"; longitude: "21.5"; latitude: "13.2"; pop_density: "4.54"; }
- ListElement{ row: "2"; col: "3"; longitude: "22.4"; latitude: "13.6"; pop_density: "4.65"; }
- ListElement{ row: "3"; col: "3"; longitude: "23.2"; latitude: "13.4"; pop_density: "6.67"; }
- ListElement{ row: "0"; col: "4"; longitude: "20.6"; latitude: "15.0"; pop_density: "6.01"; }
- ListElement{ row: "1"; col: "4"; longitude: "21.3"; latitude: "14.6"; pop_density: "5.83"; }
- ListElement{ row: "2"; col: "4"; longitude: "22.5"; latitude: "14.8"; pop_density: "7.32"; }
- ListElement{ row: "3"; col: "4"; longitude: "23.7"; latitude: "14.3"; pop_density: "6.90"; }
- }
-}
-
diff --git a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml
deleted file mode 100644
index 269859c7..00000000
--- a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml
+++ /dev/null
@@ -1,221 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
-
-Rectangle {
- id: mainView
- width: 800
- height: 600
-
- Data {
- id: data
- }
-
- //! [0]
- GridLayout {
- id: gridLayout
- columns: 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- anchors.top: mainView.top
- anchors.bottom: mainView.bottom
- anchors.left: mainView.left
- anchors.right: mainView.right
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.color: surfaceGraph.theme.gridLineColor
- border.width: 2
-
- Surface3D {
- id: surfaceGraph
- anchors.fill: parent
- anchors.margins: parent.border.width
- theme: Theme3D {
- type: Theme3D.ThemePrimaryColors
- font.pointSize: 60
- }
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
-
- Surface3DSeries {
- itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
- ItemModelSurfaceDataProxy {
- itemModel: data.sharedData
- // The surface data points are not neatly lined up in rows and columns,
- // so we define explicit row and column roles.
- rowRole: "row"
- columnRole: "col"
- xPosRole: "latitude"
- zPosRole: "longitude"
- yPosRole: "pop_density"
- }
- }
- }
- }
-
- // We'll use one grid cell for buttons
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- GridLayout {
- anchors.right: parent.right
- anchors.left: parent.left
- anchors.top: parent.top
- anchors.bottom: parent.bottom
- columns: 2
-
- NewButton {
- Layout.minimumWidth: parent.width / 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Clear Selections"
- onClicked: clearSelections() // call a helper function to keep button itself simpler
- }
-
- NewButton {
- Layout.minimumWidth: parent.width / 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Quit"
- onClicked: Qt.quit(0);
- }
-
- NewButton {
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Reset Cameras"
- onClicked: resetCameras() // call a helper function to keep button itself simpler
- }
-
- NewButton {
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Toggle Mesh Styles"
- onClicked: toggleMeshStyle() // call a helper function to keep button itself simpler
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.color: scatterGraph.theme.gridLineColor
- border.width: 2
-
- Scatter3D {
- id: scatterGraph
- anchors.fill: parent
- anchors.margins: parent.border.width
- theme: Theme3D {
- type: Theme3D.ThemeDigia
- font.pointSize: 60
- }
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
-
- Scatter3DSeries {
- itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
- ItemModelScatterDataProxy {
- itemModel: data.sharedData
- // Mapping model roles to scatter series item coordinates.
- xPosRole: "latitude"
- zPosRole: "longitude"
- yPosRole: "pop_density"
- }
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.color: barGraph.theme.gridLineColor
- border.width: 2
-
- Bars3D {
- id: barGraph
- anchors.fill: parent
- anchors.margins: parent.border.width
- theme: Theme3D {
- type: Theme3D.ThemeQt
- font.pointSize: 60
- }
- selectionMode: AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
-
- Bar3DSeries {
- itemLabelFormat: "@seriesName: @valueLabel"
- name: "Population density"
-
- ItemModelBarDataProxy {
- itemModel: data.sharedData
- // Mapping model roles to bar series rows, columns, and values.
- rowRole: "row"
- columnRole: "col"
- valueRole: "pop_density"
- }
- }
- }
- }
- }
- //! [0]
-
- function clearSelections() {
- barGraph.clearSelection()
- scatterGraph.clearSelection()
- surfaceGraph.clearSelection()
- }
-
- function resetCameras() {
- surfaceGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
- scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
- barGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
- surfaceGraph.scene.activeCamera.zoomLevel = 100.0
- scatterGraph.scene.activeCamera.zoomLevel = 100.0
- barGraph.scene.activeCamera.zoomLevel = 100.0
- }
-
- function toggleMeshStyle() {
- if (barGraph.seriesList[0].meshSmooth === true) {
- barGraph.seriesList[0].meshSmooth = false
- if (surfaceGraph.seriesList[0].flatShadingSupported)
- surfaceGraph.seriesList[0].flatShadingEnabled = true
- scatterGraph.seriesList[0].meshSmooth = false
- } else {
- barGraph.seriesList[0].meshSmooth = true
- surfaceGraph.seriesList[0].flatShadingEnabled = false
- scatterGraph.seriesList[0].meshSmooth = true
- }
- }
-}
diff --git a/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro b/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro
deleted file mode 100644
index 8cc4c60c..00000000
--- a/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlmultigraph.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlmultigraph/*
diff --git a/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc b/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc
deleted file mode 100644
index c5e63a1c..00000000
--- a/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlmultigraph/Data.qml</file>
- <file>qml/qmlmultigraph/main.qml</file>
- <file>qml/qmlmultigraph/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmloscilloscope/datasource.h b/examples/datavisualization/qmloscilloscope/datasource.h
deleted file mode 100644
index 39a7f830..00000000
--- a/examples/datavisualization/qmloscilloscope/datasource.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef DATASOURCE_H
-#define DATASOURCE_H
-
-#include <QtDataVisualization/QSurface3DSeries>
-
-using namespace QtDataVisualization;
-
-class DataSource : public QObject
-{
- Q_OBJECT
-public:
- explicit DataSource(QObject *parent = 0);
- virtual ~DataSource();
-
- //! [0]
-public Q_SLOTS:
- void generateData(int cacheCount, int rowCount, int columnCount,
- float xMin, float xMax, float yMin, float yMax, float zMin, float zMax);
-
- void update(QSurface3DSeries *series);
- //! [0]
-private:
- void clearData();
-
- QList<QSurfaceDataArray> m_data;
- int m_index;
- QSurfaceDataArray *m_resetArray;
-};
-
-#endif
diff --git a/examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.png b/examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.png
deleted file mode 100644
index d8a79a36..00000000
--- a/examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc b/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc
deleted file mode 100644
index 748bbc6c..00000000
--- a/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmloscilloscope
- \title Qt Quick 2 Oscilloscope Example
- \ingroup qtdatavisualization_examples
- \brief Example of a hybrid C++ and QML application.
-
- The Qt Quick 2 oscilloscope example shows how to combine C++ and QML in an application,
- as well as showing data that changes realtime.
-
- \image qmloscilloscope-example.png
-
- The interesting thing about this example is combining C++ and QML, so we'll concentrate on
- that and skip explaining the basic functionality - for
- more detailed QML example documentation, see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Data Source in C++
-
- The item model based proxies are good for simple and/or static graphs, but to achieve
- best performance when displaying data changing in realtime, the basic proxies should be used.
- Those are not supported in QML, as the data items they store are not \l{QObject}s and
- cannot therefore be directly manipulated from QML code.
- To overcome this limitation, we implement a simple \c DataSource class in C++ to populate the
- data proxy of the series.
-
- The \c DataSource class provides three methods that can be called from QML:
-
- \snippet qmloscilloscope/datasource.h 0
-
- The first method, \c generateData(), creates a cache of simulated oscilloscope data for us
- to display. The data is cached in a format accepted by QSurfaceDataProxy:
-
- \snippet qmloscilloscope/datasource.cpp 0
-
- The second method, \c update(), copies one set of the cached data into another array, which we
- set to the data proxy of the series by calling QSurfaceDataProxy::resetArray().
- We reuse the same array if the array dimensions have not changed to minimize overhead:
-
- \snippet qmloscilloscope/datasource.cpp 1
-
- \note Even though we are operating on the array pointer we have previously set to the proxy
- we still need to call QSurfaceDataProxy::resetArray() after changing the data in it to prompt
- the graph to render the data.
-
- To be able to access the \c DataSource methods from QML, we need to expose it. We do this by
- defining a context property in application main:
-
- \snippet qmloscilloscope/main.cpp 0
-
- To make it possible to use QSurface3DSeries pointers as parameters on the
- \c DataSource class methods on all environments and builds, we need to make sure the meta
- type is registered:
-
- \snippet qmloscilloscope/datasource.cpp 3
- \dots 0
- \snippet qmloscilloscope/datasource.cpp 4
-
- \section1 QML
-
- In the QML codes, we define a Surface3D graph normally and give it a Surface3DSeries:
-
- \snippet qmloscilloscope/qml/qmloscilloscope/main.qml 0
-
- One interesting detail is that we don't specify a proxy for the Surface3DSeries we attach
- to the graph. This makes the series to utilize the default QSurfaceDataProxy.
-
- We also hide the item label with \l{Abstract3DSeries::itemLabelVisible}{itemLabelVisible}, since
- we want to display the selected item information in a \c Text element instead of a floating
- label above the selection pointer.
- This is done because the selection pointer moves around a lot as the data changes, which makes
- the regular selection label difficult to read.
-
- We initialize the \c DataSource cache when the graph is complete by calling a helper function
- \c generateData(), which calls the method with the same name on the \c DataSource:
-
- \snippet qmloscilloscope/qml/qmloscilloscope/main.qml 2
- \dots 4
- \snippet qmloscilloscope/qml/qmloscilloscope/main.qml 4
-
- To trigger the updates in data, we define a \c Timer item which calls the \c update() method on the \c
- DataSource at requested intervals. The label update is also triggered on each cycle:
-
- \snippet qmloscilloscope/qml/qmloscilloscope/main.qml 3
-
- \section1 Enabling Direct Rendering
-
- Since this application potentially deals with a lot of rapidly changing data, we use direct
- rendering mode for performance. To enable antialiasing in this mode the surface format of the application
- window needs to be changed, as the default format used by QQuickView doesn't support antialiasing.
- We use the utility function provided by Qt Data Visualization to change the surface format
- in \c main.cpp:
-
- \snippet qmloscilloscope/main.cpp 1
- \dots 0
- \snippet qmloscilloscope/main.cpp 2
-
- On the QML side, direct rendering mode is enabled via \l{AbstractGraph3D::renderingMode}{renderingMode} property:
-
- \snippet qmloscilloscope/qml/qmloscilloscope/main.qml 5
-*/
diff --git a/examples/datavisualization/qmloscilloscope/main.cpp b/examples/datavisualization/qmloscilloscope/main.cpp
deleted file mode 100644
index 685f2cd8..00000000
--- a/examples/datavisualization/qmloscilloscope/main.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "datasource.h"
-
-//! [2]
-#include <QtDataVisualization/qutils.h>
-//! [2]
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQml/QQmlContext>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // Enable antialiasing in direct rendering mode
- //! [1]
- viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat());
- //! [1]
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("Oscilloscope example"));
-
- //! [0]
- DataSource dataSource;
- viewer.rootContext()->setContextProperty("dataSource", &dataSource);
- //! [0]
-
- viewer.setSource(QUrl("qrc:/qml/qmloscilloscope/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml
deleted file mode 100644
index c6a64cc2..00000000
--- a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml
+++ /dev/null
@@ -1,338 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Controls 1.0
-import QtDataVisualization 1.1
-import "."
-
-Item {
- id: mainView
- width: 1280
- height: 1024
-
- property int sampleColumns: sampleSlider.value
- property int sampleRows: sampleColumns / 2
- property int sampleCache: 24
-
- onSampleRowsChanged: {
- surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
- generateData()
- }
-
- Item {
- id: dataView
- anchors.bottom: parent.bottom
- width: parent.width
- height: parent.height - buttonLayout.height
-
- Surface3D {
- id: surfaceGraph
-
- width: dataView.width
- height: dataView.height
- shadowQuality: AbstractGraph3D.ShadowQualityNone
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
- //! [5]
- renderingMode: AbstractGraph3D.RenderDirectToBackground
- //! [5]
-
- axisX.labelFormat: "%d ms"
- axisY.labelFormat: "%d W"
- axisZ.labelFormat: "%d mV"
- axisX.min: 0
- axisY.min: 0
- axisZ.min: 0
- axisX.max: 1000
- axisY.max: 100
- axisZ.max: 800
- axisX.segmentCount: 4
- axisY.segmentCount: 4
- axisZ.segmentCount: 4
- measureFps: true
-
- onCurrentFpsChanged: {
- if (fps > 10)
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps)
- else
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0
- }
-
- //! [0]
- Surface3DSeries {
- id: surfaceSeries
- drawMode: Surface3DSeries.DrawSurface;
- flatShadingEnabled: false;
- meshSmooth: true
- itemLabelFormat: "@xLabel, @zLabel: @yLabel"
- itemLabelVisible: false
-
- onItemLabelChanged: {
- if (surfaceSeries.selectedPoint === surfaceSeries.invalidSelectionPosition)
- selectionText.text = "No selection"
- else
- selectionText.text = surfaceSeries.itemLabel
- }
- }
- //! [0]
-
- //! [2]
- Component.onCompleted: mainView.generateData()
- //! [2]
- }
- }
-
- //! [3]
- Timer {
- id: refreshTimer
- interval: 1000 / frequencySlider.value
- running: true
- repeat: true
- onTriggered: dataSource.update(surfaceSeries)
- }
- //! [3]
-
- Rectangle {
- width: parent.width
- height: flatShadingToggle.height * 2
- anchors.left: parent.left
- anchors.top: parent.top
- color: surfaceGraph.theme.backgroundColor
-
- ColumnLayout {
- anchors.fill: parent
- RowLayout {
- id: sliderLayout
- anchors.top: parent.top
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumHeight: flatShadingToggle.height
- spacing: 0
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: samplesText.implicitWidth + 120
- Layout.maximumWidth: samplesText.implicitWidth + 120
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- RowLayout {
- anchors.fill: parent
- anchors.margins: parent.border.width + 1
-
- Slider {
- id: sampleSlider
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
- Layout.minimumWidth: 80
- minimumValue: mainView.sampleCache * 2
- maximumValue: minimumValue * 10
- stepSize: mainView.sampleCache
- updateValueWhileDragging: false
- Component.onCompleted: value = minimumValue * 2
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: samplesText.implicitWidth + 10
- Layout.maximumWidth: samplesText.implicitWidth + 10
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- Text {
- id: samplesText
- text: "Samples: " + (mainView.sampleRows * mainView.sampleColumns)
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: frequencyText.implicitWidth + 120
- Layout.maximumWidth: frequencyText.implicitWidth + 120
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- RowLayout {
- anchors.fill: parent
- anchors.margins: parent.border.width + 1
-
- Slider {
- id: frequencySlider
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
- Layout.minimumWidth: 80
- minimumValue: 2
- maximumValue: 60
- stepSize: 2
- updateValueWhileDragging: true
- value: 30
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: frequencyText.implicitWidth + 10
- Layout.maximumWidth: frequencyText.implicitWidth + 10
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- Text {
- id: frequencyText
- text: "Freq: " + frequencySlider.value + " Hz"
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: fpsText.implicitWidth + 10
- Layout.maximumWidth: fpsText.implicitWidth + 10
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Text {
- id: fpsText
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumWidth: selectionText.implicitWidth + 10
- Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
-
- border.color: "gray"
- border.width: 1
- radius: 4
-
- Text {
- id: selectionText
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- text: "No selection"
- }
- }
- }
-
- RowLayout {
- id: buttonLayout
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumHeight: flatShadingToggle.height
- anchors.bottom: parent.bottom
- spacing: 0
-
- NewButton {
- id: flatShadingToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported"
- enabled: surfaceSeries.flatShadingSupported
-
- onClicked: {
- if (surfaceSeries.flatShadingEnabled === true) {
- surfaceSeries.flatShadingEnabled = false;
- text = "Show Flat"
- } else {
- surfaceSeries.flatShadingEnabled = true;
- text = "Show Smooth"
- }
- }
- }
-
- NewButton {
- id: surfaceGridToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- text: "Show Surface Grid"
-
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- text = "Show Surface Grid"
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
- text = "Hide Surface Grid"
- }
- }
- }
-
- NewButton {
- id: exitButton
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- text: "Quit"
-
- onClicked: Qt.quit(0);
- }
- }
- }
-
- }
-
- //! [4]
- function generateData() {
- dataSource.generateData(mainView.sampleCache, mainView.sampleRows,
- mainView.sampleColumns, surfaceGraph.axisX.min,
- surfaceGraph.axisX.max, surfaceGraph.axisY.min,
- surfaceGraph.axisY.max, surfaceGraph.axisZ.min,
- surfaceGraph.axisZ.max)
- }
- //! [4]
-}
diff --git a/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc b/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc
deleted file mode 100644
index a2358789..00000000
--- a/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmloscilloscope/main.qml</file>
- <file>qml/qmloscilloscope/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlscatter/CMakeLists.txt b/examples/datavisualization/qmlscatter/CMakeLists.txt
new file mode 100644
index 00000000..381ffd79
--- /dev/null
+++ b/examples/datavisualization/qmlscatter/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qmlscatter LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Qml)
+find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(qmlscatter
+ main.cpp
+)
+set_target_properties(qmlscatter PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(qmlscatter PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+)
+
+qt6_add_qml_module(qmlscatter
+ URI Scatter
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ qml/qmlscatter/Data.qml
+ qml/qmlscatter/main.qml
+)
+
+install(TARGETS qmlscatter
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png
index 65ec4816..5d5de700 100644
--- a/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png
+++ b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png
Binary files differ
diff --git a/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
index 9d13f0bb..980fc60d 100644
--- a/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
+++ b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc
@@ -1,42 +1,20 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example qmlscatter
- \title Qt Quick 2 Scatter Example
- \ingroup qtdatavisualization_examples
+ \meta tags {DataVisualization, Scatter3D, Multiple Series}
+ \title Simple Scatter Graph
+ \ingroup qtdatavisualization_qmlexamples
\brief Using Scatter3D in a QML application.
- The Qt Quick 2 scatter example shows how to make a simple scatter graph visualization using
- Scatter3D and Qt Quick 2.
+ \e {Simple Scatter Graph} shows how to make a simple scatter graph visualization using
+ Scatter3D and QML.
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
+ For instructions about how to interact with the graph, see
+ \l{Qt Data Visualization Interacting with Data}{this page}.
- For instructions how to create a new Qt Quick 2 application of your own, see Qt Creator help.
+ For instructions on how to create a new Qt Quick application of your own, see Qt Creator help.
\image qmlscatter-example.png
@@ -44,132 +22,142 @@
\section1 Application Basics
- Before diving into the QML code, let's take a look at the application \c main.cpp.
+ Before diving into the QML code, take a look at the application \c main.cpp.
- This application implements a 'Quit' button in the UI, so we want to connect the QQmlEngine::quit()
- signal to our application's QWindow::close() slot:
+ This application implements a 'Quit' button in the UI, so you want to connect the QQmlEngine::quit()
+ signal to the application's QWindow::close() slot:
\snippet qmlscatter/main.cpp 4
- To make deployment little simpler, we gather all of the application's \c .qml files to a resource
+ To make deployment a little simpler, gather all of the application's \c .qml files to a resource
file (\c qmlscatter.qrc):
- \code
+ \badcode
<RCC>
<qresource prefix="/">
<file>qml/qmlscatter/Data.qml</file>
<file>qml/qmlscatter/main.qml</file>
- <file>qml/qmlscatter/NewButton.qml</file>
</qresource>
</RCC>
\endcode
- This also requires us to set the \c main.qml to be read from the resource (\c{qrc:}):
+ This also requires setting the \c main.qml to be read from the resource (\c{qrc:}):
\snippet qmlscatter/main.cpp 3
- Lastly, we want the application to run in a maximized window:
+ When using cmake instead of qmake, the \c .qml files are added into a QML module in the
+ \c {CMakeLists.txt} instead:
+
+ \badcode
+ qt6_add_qml_module(qmlscatter
+ URI Scatter
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ qml/qmlscatter/Data.qml
+ qml/qmlscatter/main.qml
+ )
+ \endcode
+
+ Finally, make the application run in a maximized window:
\snippet qmlscatter/main.cpp 2
\section1 Setting up the Graph
- First we'll import all the QML modules we need:
+ First, import all the needed QML modules:
\snippet qmlscatter/qml/qmlscatter/main.qml 0
- The last \c import just imports all the qml files in the same directory as our \c {main.qml},
- because that's where \c NewButton.qml and \c Data.qml are.
-
- Then we create our main \c Rectangle and call it \c mainView:
+ Then, create the main \c Item and call it \c mainView:
\snippet qmlscatter/qml/qmlscatter/main.qml 1
- Then we'll add another \c Item inside the main \c Rectangle, and call it \c dataView.
- This will be the item to hold the Scatter3D graph. We'll anchor it to the parent bottom:
+ Then, add another \c Item inside the main \c Item, and call it \c {dataView}.
+ This will be the item to hold the Scatter3D graph. Anchor it to the parent bottom:
\snippet qmlscatter/qml/qmlscatter/main.qml 9
- Next we're ready to add the Scatter3D graph itself. We'll add it inside the \c dataView and
- name it \c {scatterGraph}. Let's make it fill the \c {dataView}:
+ Next, add the Scatter3D graph itself. Add it inside the \c dataView and
+ name it \c {scatterGraph}. Make it fill the \c {dataView}:
\snippet qmlscatter/qml/qmlscatter/main.qml 2
Now the graph is ready for use, but has no data. It also has the default axes and visual
properties.
- Let's modify some visual properties first by adding the following inside \c {scatterGraph}:
+ Next, modify some visual properties first by adding the following inside \c {scatterGraph}:
\snippet qmlscatter/qml/qmlscatter/main.qml 3
- We added a customized theme and changed the shadow quality.
- We're happy with the other visual properties, so we won't change them.
+ A customized theme was added, the shadow quality changed, and the camera position adjusted.
+ The other visual properties are fine, so there is no need to change them.
- The custom theme is based on a predefined theme, but we change the font in it:
+ The custom theme is based on a predefined theme, \c {Theme3D.ThemeQt}, but the font in it
+ is changed:
\snippet qmlscatter/qml/qmlscatter/main.qml 13
- Then it's time to start feeding the graph some data.
+ Then, start feeding the graph some data.
\section1 Adding Data to the Graph
- Let's create a \c Data item inside the \c mainView and name it \c seriesData:
+ Create a \c Data item inside the \c mainView and name it \c seriesData:
\snippet qmlscatter/qml/qmlscatter/main.qml 4
- The \c seriesData item contains the data models for all three series we use in this example.
+ The \c seriesData item contains the data models for all three series used in this example.
- This is the component that holds our data in \c {Data.qml}. It has an \c Item as the main
+ This is the component that holds the data in \c {Data.qml}. It has an \c Item as the main
component.
- In the main component we'll add the data itself in a \c ListModel and name it
- \c {dataModel}:
+ In the main component, add the data itself to a \c ListModel and name it \c {dataModel}:
\snippet qmlscatter/qml/qmlscatter/Data.qml 0
\dots
- We'll add two more of these for the other two series, and name them \c dataModelTwo and
+ Add two more of these to the other two series, and name them \c dataModelTwo and
\c {dataModelThree}.
- Then we need to expose the data models to be usable from \c {main.qml}. We do this by defining
+ Then, expose the data models to be usable from \c {main.qml}. Do this by defining
them as aliases in the main data component:
\snippet qmlscatter/qml/qmlscatter/Data.qml 1
- Now we can use the data from \c Data.qml with \c scatterGraph in \c {main.qml}. First we'll add
+ Now you can use the data from \c Data.qml with \c scatterGraph in \c {main.qml}. First, add
a Scatter3DSeries and call it \c {scatterSeries}:
\snippet qmlscatter/qml/qmlscatter/main.qml 5
- Then we'll set up selection label format for the series:
+ Then, set up selection label format for the series:
\snippet qmlscatter/qml/qmlscatter/main.qml 10
- And finally the data for series one in a ItemModelScatterDataProxy. We set the data itself as
- \c itemModel for the proxy:
+ And finally, add the data for series one in a ItemModelScatterDataProxy. Set the data itself as
+ the \c itemModel for the proxy:
\snippet qmlscatter/qml/qmlscatter/main.qml 11
- We'll add the other two series in the same way, but modify some series-specific details a bit:
+ Add the other two series in the same way, but modify some series-specific details a bit:
\snippet qmlscatter/qml/qmlscatter/main.qml 12
\dots
- Then we'll modify the properties of the default axes in \c scatterGraph a bit:
+ Then, modify the properties of the default axes in \c scatterGraph a bit:
\snippet qmlscatter/qml/qmlscatter/main.qml 6
- After that we'll just add a few buttons to the \c mainView to control the graph. We'll only
- show one as an example:
+ After that, add a few buttons to the \c mainView to control the graph, one of which is shown as
+ an example:
\snippet qmlscatter/qml/qmlscatter/main.qml 7
- Then we'll modify \c dataView to make room for the buttons at the top:
+ Then, modify \c dataView to make some room for the buttons at the top:
\snippet qmlscatter/qml/qmlscatter/main.qml 8
\dots
- And we're done!
+ And you're done!
\section1 Example Contents
*/
diff --git a/examples/datavisualization/qmlscatter/main.cpp b/examples/datavisualization/qmlscatter/main.cpp
index 03a45c7e..e9332869 100644
--- a/examples/datavisualization/qmlscatter/main.cpp
+++ b/examples/datavisualization/qmlscatter/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui/QGuiApplication>
#include <QtCore/QDir>
@@ -34,6 +8,7 @@
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
@@ -51,7 +26,7 @@ int main(int argc, char *argv[])
QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
//! [4]
- viewer.setTitle(QStringLiteral("QML scatter example"));
+ viewer.setTitle(QStringLiteral("Simple Scatter Graph"));
//! [3]
viewer.setSource(QUrl("qrc:/qml/qmlscatter/main.qml"));
diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
index e077669f..e38bba91 100644
--- a/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
+++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml
@@ -1,33 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
Item {
//! [1]
diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
index 002f9d93..f1ccabde 100644
--- a/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
+++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml
@@ -1,45 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
//! [0]
//! [1]
-Rectangle {
+Item {
id: mainView
//! [1]
- width: 500
- height: 500
+ width: 1600
+ height: 1200
+
+ property bool portraitMode: width < height
+ // Adjust the button width based on screen orientation:
+ // If we're in portrait mode, just fit two buttons side-by-side, otherwise
+ // fit all of the buttons side-by-side.
+ property real buttonWidth: mainView.portraitMode ? (mainView.width / 2 - 8)
+ : (mainView.width / 6 - 6)
//! [4]
Data {
@@ -49,16 +29,15 @@ Rectangle {
//! [13]
Theme3D {
- id: themeIsabelle
- type: Theme3D.ThemeIsabelle
- font.family: "Lucida Handwriting"
+ id: themeQt
+ type: Theme3D.ThemeQt
font.pointSize: 40
}
//! [13]
Theme3D {
- id: themeArmyBlue
- type: Theme3D.ThemeArmyBlue
+ id: themeRetro
+ type: Theme3D.ThemeRetro
}
//! [8]
@@ -68,18 +47,21 @@ Rectangle {
anchors.bottom: parent.bottom
//! [9]
width: parent.width
- height: parent.height - buttonLayout.height
+ // Adjust the space based on screen orientation:
+ // If we're in portrait mode, we have 3 rows of buttons, otherwise they are all in one row.
+ height: parent.height - (mainView.portraitMode ? shadowToggle.implicitHeight * 3 + 25
+ : shadowToggle.implicitHeight + 10)
//! [8]
//! [2]
Scatter3D {
id: scatterGraph
- width: dataView.width
- height: dataView.height
+ anchors.fill: parent
//! [2]
//! [3]
- theme: themeIsabelle
- shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
+ theme: themeQt
+ shadowQuality: AbstractGraph3D.ShadowQualityHigh
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetFront
//! [3]
//! [6]
axisX.segmentCount: 3
@@ -114,7 +96,7 @@ Rectangle {
Scatter3DSeries {
id: scatterSeriesTwo
itemLabelFormat: "Series 2: X:@xLabel Y:@yLabel Z:@zLabel"
- itemSize: 0.1
+ itemSize: 0.05
mesh: Abstract3DSeries.MeshCube
//! [12]
@@ -128,7 +110,7 @@ Rectangle {
Scatter3DSeries {
id: scatterSeriesThree
itemLabelFormat: "Series 3: X:@xLabel Y:@yLabel Z:@zLabel"
- itemSize: 0.2
+ itemSize: 0.1
mesh: Abstract3DSeries.MeshMinimal
ItemModelScatterDataProxy {
@@ -141,103 +123,106 @@ Rectangle {
}
}
- RowLayout {
- id: buttonLayout
- Layout.minimumHeight: cameraToggle.height
- width: parent.width
+ //! [7]
+ Button {
+ id: shadowToggle
+ width: mainView.buttonWidth // Calculated elsewhere based on screen orientation
anchors.left: parent.left
- spacing: 0
- //! [7]
- NewButton {
- id: shadowToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported"
- enabled: scatterGraph.shadowsSupported
- onClicked: {
- if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
- scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftLow;
- text = "Hide Shadows";
- } else {
- scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
- text = "Show Shadows";
- }
+ anchors.top: parent.top
+ anchors.margins: 5
+ text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported"
+ enabled: scatterGraph.shadowsSupported
+ onClicked: {
+ if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
+ scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityHigh;
+ text = "Hide Shadows";
+ } else {
+ scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
+ text = "Show Shadows";
}
}
- //! [7]
-
- NewButton {
- id: smoothToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Use Smooth for Series One"
- onClicked: {
- if (scatterSeries.meshSmooth === false) {
- text = "Use Flat for Series One";
- scatterSeries.meshSmooth = true;
- } else {
- text = "Use Smooth for Series One"
- scatterSeries.meshSmooth = false;
- }
+ }
+ //! [7]
+
+ Button {
+ id: smoothToggle
+ width: mainView.buttonWidth
+ anchors.left: shadowToggle.right
+ anchors.top: parent.top
+ anchors.margins: 5
+ text: "Use Smooth for Series One"
+ onClicked: {
+ if (!scatterSeries.meshSmooth) {
+ text = "Use Flat for Series One";
+ scatterSeries.meshSmooth = true;
+ } else {
+ text = "Use Smooth for Series One";
+ scatterSeries.meshSmooth = false;
}
}
+ }
- NewButton {
- id: cameraToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Change Camera Placement"
- onClicked: {
- if (scatterGraph.scene.activeCamera.cameraPreset === Camera3D.CameraPresetFront) {
- scatterGraph.scene.activeCamera.cameraPreset =
- Camera3D.CameraPresetIsometricRightHigh;
- } else {
- scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetFront;
- }
+ Button {
+ id: cameraToggle
+ width: mainView.buttonWidth
+ anchors.left: mainView.portraitMode ? parent.left : smoothToggle.right
+ anchors.top: mainView.portraitMode ? smoothToggle.bottom : parent.top
+ anchors.margins: 5
+ text: "Change Camera Placement"
+ onClicked: {
+ if (scatterGraph.scene.activeCamera.cameraPreset === Camera3D.CameraPresetFront) {
+ scatterGraph.scene.activeCamera.cameraPreset =
+ Camera3D.CameraPresetIsometricRightHigh;
+ } else {
+ scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetFront;
}
}
+ }
- NewButton {
- id: themeToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Change Theme"
- onClicked: {
- if (scatterGraph.theme.type === Theme3D.ThemeArmyBlue) {
- scatterGraph.theme = themeIsabelle
- } else {
- scatterGraph.theme = themeArmyBlue
- }
- if (scatterGraph.theme.backgroundEnabled === true) {
- backgroundToggle.text = "Hide Background";
- } else {
- backgroundToggle.text = "Show Background";
- }
- }
+ Button {
+ id: themeToggle
+ width: mainView.buttonWidth
+ anchors.left: cameraToggle.right
+ anchors.top: mainView.portraitMode ? smoothToggle.bottom : parent.top
+ anchors.margins: 5
+ text: "Change Theme"
+ onClicked: {
+ if (scatterGraph.theme.type === Theme3D.ThemeRetro)
+ scatterGraph.theme = themeQt;
+ else
+ scatterGraph.theme = themeRetro;
+ if (scatterGraph.theme.backgroundEnabled)
+ backgroundToggle.text = "Hide Background";
+ else
+ backgroundToggle.text = "Show Background";
}
+ }
- NewButton {
- id: backgroundToggle
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Hide Background"
- onClicked: {
- if (scatterGraph.theme.backgroundEnabled === true) {
- scatterGraph.theme.backgroundEnabled = false;
- text = "Show Background";
- } else {
- scatterGraph.theme.backgroundEnabled = true;
- text = "Hide Background";
- }
+ Button {
+ id: backgroundToggle
+ width: mainView.buttonWidth
+ anchors.left: mainView.portraitMode ? parent.left : themeToggle.right
+ anchors.top: mainView.portraitMode ? themeToggle.bottom : parent.top
+ anchors.margins: 5
+ text: "Hide Background"
+ onClicked: {
+ if (scatterGraph.theme.backgroundEnabled) {
+ scatterGraph.theme.backgroundEnabled = false;
+ text = "Show Background";
+ } else {
+ scatterGraph.theme.backgroundEnabled = true;
+ text = "Hide Background";
}
}
+ }
- NewButton {
- id: exitButton
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Quit"
- onClicked: Qt.quit(0);
- }
+ Button {
+ id: exitButton
+ width: mainView.buttonWidth
+ anchors.left: backgroundToggle.right
+ anchors.top: mainView.portraitMode ? themeToggle.bottom : parent.top
+ anchors.margins: 5
+ text: "Quit"
+ onClicked: Qt.quit();
}
}
diff --git a/examples/datavisualization/qmlscatter/qmlscatter.pro b/examples/datavisualization/qmlscatter/qmlscatter.pro
index b97ca7be..2ca00874 100644
--- a/examples/datavisualization/qmlscatter/qmlscatter.pro
+++ b/examples/datavisualization/qmlscatter/qmlscatter.pro
@@ -2,7 +2,6 @@
error( "Couldn't find the examples.pri file!" )
}
-# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
RESOURCES += qmlscatter.qrc
diff --git a/examples/datavisualization/qmlscatter/qmlscatter.qrc b/examples/datavisualization/qmlscatter/qmlscatter.qrc
index 225d78b0..f36c81c5 100644
--- a/examples/datavisualization/qmlscatter/qmlscatter.qrc
+++ b/examples/datavisualization/qmlscatter/qmlscatter.qrc
@@ -2,6 +2,5 @@
<qresource prefix="/">
<file>qml/qmlscatter/Data.qml</file>
<file>qml/qmlscatter/main.qml</file>
- <file>qml/qmlscatter/NewButton.qml</file>
</qresource>
</RCC>
diff --git a/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png b/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png
deleted file mode 100644
index de376cd9..00000000
--- a/examples/datavisualization/qmlspectrogram/doc/images/qmlspectrogram-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc b/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc
deleted file mode 100644
index a0c2ef62..00000000
--- a/examples/datavisualization/qmlspectrogram/doc/src/qmlspectrogram.qdoc
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlspectrogram
- \title Qt Quick 2 Spectrogram Example
- \ingroup qtdatavisualization_examples
- \brief Showing spectrogram graph in a QML application.
-
- The Qt Quick 2 Spectrogram example demonstrates how to show a polar and cartesian spectrograms
- and how to utilize orthographic projection to show them in 2D.
-
- \image qmlspectrogram-example.png
-
- Spectrogram is simply a surface graph with a range gradient used to emphasize the different
- values. Typically spectrograms are shown with two dimensional surfaces, which we simulate
- with a top down orthographic view of the graph. To enforce the 2D effect, we disable the
- graph rotation via mouse or touch when in the orthographic mode.
-
- The focus in this example is on showing how to display spectrograms, so the basic
- functionality is not explained. For more detailed QML example documentation,
- see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Creating a Spectrogram
-
- To create a 2D spectrogram, we define a Surface3D item:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 0
-
- The key properties for enabling the 2D effect are
- \l{AbstractGraph3D::orthoProjection}{orthoProjection} and
- \l{Camera3D::cameraPreset}{scene.activeCamera.cameraPreset}. We remove the perspective by
- enabling orthographic projection for the graph, and then we eliminate the Y-dimension by
- viewing the graph directly from above:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 1
-
- Since this viewpoint causes the horizontal axis grid to be mostly obscured by the surface,
- we also specify that the horizontal grid should be drawn on top of the graph:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 2
-
- \section1 Polar Spectrogram
-
- Depending on the data, it is sometimes more natural to use a polar graph instead of a cartesian
- one. Qt Data Visualization supports this via \l{AbstractGraph3D::polar}{polar} property.
- In this example we provide a button to switch between polar and cartesian modes:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 3
-
- In the polar mode, the X-axis is converted into the angular polar axis, and the Z-axis is
- converted into the radial polar axis. The surface points are recalculated according to new axes.
-
- The radial axis labels are drawn outside the graph by default, but in this example we want to
- draw them right next to the 0 degree angular axis inside the graph, so we define only a tiny
- offset for them:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 4
-
- To enforce the 2D effect, graph rotation via user input is disabled when in orthographic mode.
- We do this by specifying a new input handler:
-
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 5
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 7
- \dots 0
- \snippet qmlspectrogram/qml/qmlspectrogram/main.qml 6
- \dots 0
-
- When the projection mode changes, we adjust the value of the
- \l{InputHandler3D::rotationEnabled}{rotationEnabled} property of the \c{customInputHandler}
- to control the rotation.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlspectrogram/main.cpp b/examples/datavisualization/qmlspectrogram/main.cpp
deleted file mode 100644
index 6f93c1e2..00000000
--- a/examples/datavisualization/qmlspectrogram/main.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlApplicationEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- engine.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- engine.load(QUrl(QStringLiteral("qrc:/qml/qml/qmlspectrogram/main.qml")));
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/NewButton.qml b/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml b/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml
deleted file mode 100644
index 23eb8312..00000000
--- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/main.qml
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Window 2.1
-import QtDataVisualization 1.2
-import "."
-
-Window {
- id: mainview
- title: "Qt Quick 2 Spectrogram Example"
- visible: true
- width: 1024
- height: 768
- color: surfaceGraph.theme.windowColor
-
- Data {
- id: surfaceData
- }
-
- Item {
- id: surfaceView
- width: mainview.width
- height: mainview.height
- anchors.top: mainview.top
- anchors.left: mainview.left
-
- ColorGradient {
- id: surfaceGradient
- ColorGradientStop { position: 0.0; color: "black" }
- ColorGradientStop { position: 0.2; color: "red" }
- ColorGradientStop { position: 0.5; color: "blue" }
- ColorGradientStop { position: 0.8; color: "yellow" }
- ColorGradientStop { position: 1.0; color: "white" }
- }
-
- ValueAxis3D {
- id: xAxis
- segmentCount: 8
- labelFormat: "%i\u00B0"
- title: "Angle"
- titleVisible: true
- titleFixed: false
- }
-
- ValueAxis3D {
- id: yAxis
- segmentCount: 8
- labelFormat: "%i \%"
- title: "Value"
- titleVisible: true
- labelAutoRotation: 0
- titleFixed: false
- }
-
- ValueAxis3D {
- id: zAxis
- segmentCount: 5
- labelFormat: "%i nm"
- title: "Radius"
- titleVisible: true
- titleFixed: false
- }
-
- Theme3D {
- id: customTheme
- type: Theme3D.ThemeQt
- // Don't show specular spotlight as we don't want it to distort the colors
- lightStrength: 0.0
- ambientLightStrength: 1.0
- backgroundEnabled: false
- gridLineColor: "#AAAAAA"
- windowColor: "#EEEEEE"
- }
-
-
- //! [5]
- TouchInputHandler3D {
- id: customInputHandler
- rotationEnabled: false
- }
- //! [5]
-
- //! [0]
- //! [7]
- Surface3D {
- //! [7]
- id: surfaceGraph
- width: surfaceView.width
- height: surfaceView.height
-
- shadowQuality: AbstractGraph3D.ShadowQualityNone
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
- axisX: xAxis
- axisY: yAxis
- axisZ: zAxis
-
- theme: customTheme
- //! [6]
- inputHandler: customInputHandler
- //! [6]
-
- // Remove the perspective and view the graph from top down to achieve 2D effect
- //! [1]
- orthoProjection: true
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetDirectlyAbove
- //! [1]
-
- //! [2]
- flipHorizontalGrid: true
- //! [2]
-
- //! [4]
- radialLabelOffset: 0.01
- //! [4]
-
- horizontalAspectRatio: 1
- scene.activeCamera.zoomLevel: 85
-
- Surface3DSeries {
- id: surfaceSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- baseGradient: surfaceGradient
- colorStyle: Theme3D.ColorStyleRangeGradient
- itemLabelFormat: "(@xLabel, @zLabel): @yLabel"
-
- ItemModelSurfaceDataProxy {
- itemModel: surfaceData.model
- rowRole: "radius"
- columnRole: "angle"
- yPosRole: "value"
- }
- }
- }
- //! [0]
- }
-
- RowLayout {
- id: buttonLayout
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- opacity: 0.5
-
- //! [3]
- NewButton {
- id: polarToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Switch to polar"
- onClicked: {
- if (surfaceGraph.polar === false) {
- surfaceGraph.polar = true
- text = "Switch to cartesian"
- } else {
- surfaceGraph.polar = false
- text = "Switch to polar"
- }
- }
- }
- //! [3]
-
- NewButton {
- id: orthoToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Switch to perspective"
- onClicked: {
- if (surfaceGraph.orthoProjection === true) {
- surfaceGraph.orthoProjection = false;
- xAxis.labelAutoRotation = 30
- yAxis.labelAutoRotation = 30
- zAxis.labelAutoRotation = 30
- customInputHandler.rotationEnabled = true
- text = "Switch to orthographic"
- } else {
- surfaceGraph.orthoProjection = true;
- surfaceGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetDirectlyAbove
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- xAxis.labelAutoRotation = 0
- yAxis.labelAutoRotation = 0
- zAxis.labelAutoRotation = 0
- customInputHandler.rotationEnabled = false
- text = "Switch to perspective"
- }
- }
- }
-
- NewButton {
- id: flipGridToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Toggle axis grid on top"
- onClicked: {
- onClicked: {
- if (surfaceGraph.flipHorizontalGrid === true) {
- surfaceGraph.flipHorizontalGrid = false;
- } else {
- surfaceGraph.flipHorizontalGrid = true;
- }
- }
- }
- }
-
- NewButton {
- id: labelOffsetToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Toggle radial label position"
- visible: surfaceGraph.polar
- onClicked: {
- if (surfaceGraph.radialLabelOffset >= 1.0) {
- surfaceGraph.radialLabelOffset = 0.01
- } else {
- surfaceGraph.radialLabelOffset = 1.0
- }
- }
- }
-
- NewButton {
- id: surfaceGridToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Toggle surface grid"
- visible: !surfaceGraph.orthoProjection
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
- }
- }
- }
-
- }
-
- Rectangle {
- id: legend
- anchors.margins: 20
- anchors.bottom: parent.bottom
- anchors.top: buttonLayout.bottom
- anchors.right: parent.right
- border.color: "black"
- border.width: 1
- width: 50
- rotation: 180
- gradient: Gradient {
- GradientStop { position: 0.0; color: "black" }
- GradientStop { position: 0.2; color: "red" }
- GradientStop { position: 0.5; color: "blue" }
- GradientStop { position: 0.8; color: "yellow" }
- GradientStop { position: 1.0; color: "white" }
- }
- }
-
- Text {
- anchors.verticalCenter: legend.bottom
- anchors.right: legend.left
- anchors.margins: 2
- text: surfaceGraph.axisY.min + "%"
- }
-
- Text {
- anchors.verticalCenter: legend.verticalCenter
- anchors.right: legend.left
- anchors.margins: 2
- text: (surfaceGraph.axisY.max + surfaceGraph.axisY.min) / 2 + "%"
- }
-
- Text {
- anchors.verticalCenter: legend.top
- anchors.right: legend.left
- anchors.margins: 2
- text: surfaceGraph.axisY.max + "%"
- }
-}
diff --git a/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro b/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro
deleted file mode 100644
index 655fb0b8..00000000
--- a/examples/datavisualization/qmlspectrogram/qmlspectrogram.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlspectrogram.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlspectrogram/*
diff --git a/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc b/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc
deleted file mode 100644
index 9f024404..00000000
--- a/examples/datavisualization/qmlspectrogram/qmlspectrogram.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/qml">
- <file>qml/qmlspectrogram/Data.qml</file>
- <file>qml/qmlspectrogram/main.qml</file>
- <file>qml/qmlspectrogram/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png b/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png
deleted file mode 100644
index 5e37b42c..00000000
--- a/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc b/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc
deleted file mode 100644
index e8073cff..00000000
--- a/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlsurface
- \title Qt Quick 2 Surface Example
- \ingroup qtdatavisualization_examples
- \brief Using Surface3D in a QML application.
-
- The Qt Quick 2 surface example shows how to make a simple 3D surface plot using Surface3D with
- Qt Quick 2.
-
- \image qmlsurface-example.png
-
- The focus in this example is on generating a surface graph from height data, so in this section
- we skip explaining the application creation. For more detailed QML example documentation,
- see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Adding Data to the Graph
-
- This example shows two methods to set data to surface graph, using the HeightMapSurfaceDataProxy
- and ItemModelSurfaceDataProxy. First we go through setting the data using the height map specific
- data proxy. It is done with the code snippet below. The proxy itself is contained in a
- Surface3DSeries. Inside the HeightMapSurfaceDataProxy the \c heightMapFile specifies the
- image file containing the height data. The value properties in the proxy define the minimum
- and maximum values for surface area width and depth. This example shows the terrain around Tycho
- crater at imaginary position from 67 to 97 and from 30 to 60. Note that on the graph the scale
- on the Y dimension exaggerates the height.
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 4
-
- The other method to set surface data used in this example is with model mapping. We do that by
- first defining a \c ListModel containing the data for the surface:
-
- \snippet qmlsurface/qml/qmlsurface/Data.qml 0
- \dots 4
-
- Then we set up a Surface3DSeries with a ItemModelSurfaceDataProxy:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 5
- \dots
-
- We add the actual data to the \c itemModel of the ItemModelSurfaceDataProxy. We also define the
- roles for columns, rows and values. In this example the row holds values for longitude, column
- for latitude and the value is for height.
-
- \dots 0
- \snippet qmlsurface/qml/qmlsurface/main.qml 6
-
- \section1 Showing Data
-
- In the \c main.qml, we set up the Surface3D element to show the data and various UI elements
- to illustrate few interesting features.
-
- First is the gradient to be used for the surface, which can be defined as seen in the following
- snippet. With the ColorGradient we set example colors from position 0.0 to 1.0.
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 0
-
- This element is set into the \c baseGradients property in the \c theme used in Surface3D:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 7
-
- Other interesting features can be controlled with buttons.
-
- The first button is to toggle on and off the surface grid, for which we use the following code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 1
-
- Second button is for surface shading mode, which is controlled with this code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 2
-
- Third button is for series visibility, which is controlled with this code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 8
-
- Notice that the \c drawMode and \c flatShadingEnable properties are set for both series.
-
- Fourth and fifth buttons are for controlling background features.
-
- The last button is for switching between the two series, one of which uses
- HeightMapSurfaceDataProxy and the other one ItemModelSurfaceDataProxy. For this we use the
- following code:
-
- \snippet qmlsurface/qml/qmlsurface/main.qml 3
-
- We also set the maximum value to 500 in model proxy to make the surface flatter and
- 250 on height map proxy to show exaggerated height. At the same time the middle color position
- on the gradient is modified to match the value range change.
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlsurface/heightmap.png b/examples/datavisualization/qmlsurface/heightmap.png
deleted file mode 100644
index 051a0125..00000000
--- a/examples/datavisualization/qmlsurface/heightmap.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurface/main.cpp b/examples/datavisualization/qmlsurface/main.cpp
deleted file mode 100644
index 40df60f0..00000000
--- a/examples/datavisualization/qmlsurface/main.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
-
- viewer.setSource(QUrl("qrc:/qml/qml/qmlsurface/main.qml"));
-
- viewer.setTitle(QStringLiteral("Tycho crater on the Moon (height exaggerated)"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml
deleted file mode 100644
index 062db602..00000000
--- a/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml
+++ /dev/null
@@ -1,10040 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- property alias model: dataModel
-
- //! [0]
- ListModel {
- id: dataModel
- ListElement{ longitude: "0"; latitude: "0"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "2"; height: "124"; }
- //! [0]
- ListElement{ longitude: "0"; latitude: "3"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "5"; height: "111"; }
- ListElement{ longitude: "0"; latitude: "6"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "7"; height: "102"; }
- ListElement{ longitude: "0"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "0"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "0"; latitude: "14"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "16"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "18"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "19"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "20"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "21"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "29"; height: "109"; }
- ListElement{ longitude: "0"; latitude: "30"; height: "108"; }
- ListElement{ longitude: "0"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "0"; latitude: "34"; height: "105"; }
- ListElement{ longitude: "0"; latitude: "35"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "36"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "0"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "45"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "46"; height: "114"; }
- ListElement{ longitude: "0"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "48"; height: "131"; }
- ListElement{ longitude: "0"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "0"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "55"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "56"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "57"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "0"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "0"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "0"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "0"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "0"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "0"; latitude: "66"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "0"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "0"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "0"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "73"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "74"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "0"; latitude: "77"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "0"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "0"; latitude: "81"; height: "138"; }
- ListElement{ longitude: "0"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "0"; latitude: "83"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "0"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "0"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "0"; latitude: "87"; height: "118"; }
- ListElement{ longitude: "0"; latitude: "88"; height: "122"; }
- ListElement{ longitude: "0"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "0"; latitude: "90"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "92"; height: "130"; }
- ListElement{ longitude: "0"; latitude: "93"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "0"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "0"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "0"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "0"; latitude: "98"; height: "139"; }
- ListElement{ longitude: "0"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "3"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "4"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "5"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "7"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "8"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "1"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "16"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "20"; height: "107"; }
- ListElement{ longitude: "1"; latitude: "21"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "28"; height: "115"; }
- ListElement{ longitude: "1"; latitude: "29"; height: "112"; }
- ListElement{ longitude: "1"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "1"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "1"; latitude: "32"; height: "104"; }
- ListElement{ longitude: "1"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "1"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "1"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "1"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "39"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "42"; height: "121"; }
- ListElement{ longitude: "1"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "1"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "53"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "1"; latitude: "55"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "56"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "58"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "1"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "1"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "1"; latitude: "62"; height: "103"; }
- ListElement{ longitude: "1"; latitude: "63"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "64"; height: "105"; }
- ListElement{ longitude: "1"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "1"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "1"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "1"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "1"; latitude: "69"; height: "119"; }
- ListElement{ longitude: "1"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "73"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "74"; height: "124"; }
- ListElement{ longitude: "1"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "1"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "78"; height: "122"; }
- ListElement{ longitude: "1"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "1"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "1"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "1"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "1"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "1"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "1"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "1"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "1"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "1"; latitude: "88"; height: "125"; }
- ListElement{ longitude: "1"; latitude: "89"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "90"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "91"; height: "136"; }
- ListElement{ longitude: "1"; latitude: "92"; height: "134"; }
- ListElement{ longitude: "1"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "1"; latitude: "94"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "1"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "1"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "1"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "1"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "2"; latitude: "0"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "1"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "2"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "3"; height: "105"; }
- ListElement{ longitude: "2"; latitude: "4"; height: "108"; }
- ListElement{ longitude: "2"; latitude: "5"; height: "110"; }
- ListElement{ longitude: "2"; latitude: "6"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "2"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "12"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "13"; height: "128"; }
- ListElement{ longitude: "2"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "16"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "17"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "18"; height: "105"; }
- ListElement{ longitude: "2"; latitude: "19"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "2"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "22"; height: "106"; }
- ListElement{ longitude: "2"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "2"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "29"; height: "115"; }
- ListElement{ longitude: "2"; latitude: "30"; height: "111"; }
- ListElement{ longitude: "2"; latitude: "31"; height: "79"; }
- ListElement{ longitude: "2"; latitude: "32"; height: "94"; }
- ListElement{ longitude: "2"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "2"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "2"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "2"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "2"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "40"; height: "117"; }
- ListElement{ longitude: "2"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "42"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "2"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "2"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "2"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "56"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "2"; latitude: "62"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "63"; height: "103"; }
- ListElement{ longitude: "2"; latitude: "64"; height: "106"; }
- ListElement{ longitude: "2"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "2"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "2"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "2"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "2"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "70"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "73"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "2"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "2"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "2"; latitude: "78"; height: "119"; }
- ListElement{ longitude: "2"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "2"; latitude: "81"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "2"; latitude: "84"; height: "125"; }
- ListElement{ longitude: "2"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "2"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "2"; latitude: "87"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "2"; latitude: "89"; height: "135"; }
- ListElement{ longitude: "2"; latitude: "90"; height: "138"; }
- ListElement{ longitude: "2"; latitude: "91"; height: "137"; }
- ListElement{ longitude: "2"; latitude: "92"; height: "137"; }
- ListElement{ longitude: "2"; latitude: "93"; height: "134"; }
- ListElement{ longitude: "2"; latitude: "94"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "2"; latitude: "97"; height: "140"; }
- ListElement{ longitude: "2"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "2"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "3"; height: "107"; }
- ListElement{ longitude: "3"; latitude: "4"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "5"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "6"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "3"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "12"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "3"; latitude: "14"; height: "129"; }
- ListElement{ longitude: "3"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "3"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "17"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "19"; height: "101"; }
- ListElement{ longitude: "3"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "3"; latitude: "21"; height: "98"; }
- ListElement{ longitude: "3"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "3"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "3"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "3"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "3"; latitude: "31"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "3"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "3"; latitude: "34"; height: "99"; }
- ListElement{ longitude: "3"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "3"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "3"; latitude: "38"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "3"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "43"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "3"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "3"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "3"; latitude: "49"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "50"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "3"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "57"; height: "128"; }
- ListElement{ longitude: "3"; latitude: "58"; height: "98"; }
- ListElement{ longitude: "3"; latitude: "59"; height: "78"; }
- ListElement{ longitude: "3"; latitude: "60"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "3"; latitude: "62"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "3"; latitude: "64"; height: "105"; }
- ListElement{ longitude: "3"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "3"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "3"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "3"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "3"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "3"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "72"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "3"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "3"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "3"; latitude: "77"; height: "117"; }
- ListElement{ longitude: "3"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "3"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "3"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "81"; height: "130"; }
- ListElement{ longitude: "3"; latitude: "82"; height: "133"; }
- ListElement{ longitude: "3"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "3"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "3"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "3"; latitude: "86"; height: "66"; }
- ListElement{ longitude: "3"; latitude: "87"; height: "109"; }
- ListElement{ longitude: "3"; latitude: "88"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "89"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "90"; height: "144"; }
- ListElement{ longitude: "3"; latitude: "91"; height: "144"; }
- ListElement{ longitude: "3"; latitude: "92"; height: "141"; }
- ListElement{ longitude: "3"; latitude: "93"; height: "137"; }
- ListElement{ longitude: "3"; latitude: "94"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "3"; latitude: "96"; height: "139"; }
- ListElement{ longitude: "3"; latitude: "97"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "98"; height: "142"; }
- ListElement{ longitude: "3"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "1"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "2"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "3"; height: "106"; }
- ListElement{ longitude: "4"; latitude: "4"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "5"; height: "113"; }
- ListElement{ longitude: "4"; latitude: "6"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "4"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "10"; height: "134"; }
- ListElement{ longitude: "4"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "12"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "13"; height: "135"; }
- ListElement{ longitude: "4"; latitude: "14"; height: "133"; }
- ListElement{ longitude: "4"; latitude: "15"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "4"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "4"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "4"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "4"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "4"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "4"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "4"; latitude: "28"; height: "108"; }
- ListElement{ longitude: "4"; latitude: "29"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "31"; height: "114"; }
- ListElement{ longitude: "4"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "4"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "4"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "4"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "4"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "4"; latitude: "37"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "4"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "41"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "4"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "4"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "4"; latitude: "49"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "50"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "51"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "4"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "57"; height: "132"; }
- ListElement{ longitude: "4"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "4"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "61"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "4"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "4"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "4"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "4"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "4"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "4"; latitude: "68"; height: "123"; }
- ListElement{ longitude: "4"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "70"; height: "127"; }
- ListElement{ longitude: "4"; latitude: "71"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "4"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "4"; latitude: "78"; height: "112"; }
- ListElement{ longitude: "4"; latitude: "79"; height: "115"; }
- ListElement{ longitude: "4"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "4"; latitude: "81"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "82"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "83"; height: "126"; }
- ListElement{ longitude: "4"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "4"; latitude: "85"; height: "128"; }
- ListElement{ longitude: "4"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "4"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "4"; latitude: "88"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "89"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "90"; height: "148"; }
- ListElement{ longitude: "4"; latitude: "91"; height: "147"; }
- ListElement{ longitude: "4"; latitude: "92"; height: "144"; }
- ListElement{ longitude: "4"; latitude: "93"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "4"; latitude: "95"; height: "138"; }
- ListElement{ longitude: "4"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "4"; latitude: "97"; height: "145"; }
- ListElement{ longitude: "4"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "4"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "1"; height: "109"; }
- ListElement{ longitude: "5"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "5"; latitude: "3"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "6"; height: "122"; }
- ListElement{ longitude: "5"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "8"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "9"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "10"; height: "135"; }
- ListElement{ longitude: "5"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "5"; latitude: "12"; height: "137"; }
- ListElement{ longitude: "5"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "15"; height: "134"; }
- ListElement{ longitude: "5"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "17"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "5"; latitude: "20"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "22"; height: "105"; }
- ListElement{ longitude: "5"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "26"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "27"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "28"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "30"; height: "66"; }
- ListElement{ longitude: "5"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "5"; latitude: "32"; height: "106"; }
- ListElement{ longitude: "5"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "5"; latitude: "34"; height: "100"; }
- ListElement{ longitude: "5"; latitude: "35"; height: "104"; }
- ListElement{ longitude: "5"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "37"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "38"; height: "112"; }
- ListElement{ longitude: "5"; latitude: "39"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "40"; height: "114"; }
- ListElement{ longitude: "5"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "5"; latitude: "49"; height: "139"; }
- ListElement{ longitude: "5"; latitude: "50"; height: "77"; }
- ListElement{ longitude: "5"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "5"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "5"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "5"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "5"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "5"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "68"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "5"; latitude: "71"; height: "131"; }
- ListElement{ longitude: "5"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "5"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "5"; latitude: "74"; height: "107"; }
- ListElement{ longitude: "5"; latitude: "75"; height: "74"; }
- ListElement{ longitude: "5"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "5"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "5"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "5"; latitude: "79"; height: "110"; }
- ListElement{ longitude: "5"; latitude: "80"; height: "113"; }
- ListElement{ longitude: "5"; latitude: "81"; height: "118"; }
- ListElement{ longitude: "5"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "5"; latitude: "83"; height: "124"; }
- ListElement{ longitude: "5"; latitude: "84"; height: "123"; }
- ListElement{ longitude: "5"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "5"; latitude: "86"; height: "127"; }
- ListElement{ longitude: "5"; latitude: "87"; height: "135"; }
- ListElement{ longitude: "5"; latitude: "88"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "89"; height: "146"; }
- ListElement{ longitude: "5"; latitude: "90"; height: "150"; }
- ListElement{ longitude: "5"; latitude: "91"; height: "148"; }
- ListElement{ longitude: "5"; latitude: "92"; height: "146"; }
- ListElement{ longitude: "5"; latitude: "93"; height: "142"; }
- ListElement{ longitude: "5"; latitude: "94"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "95"; height: "140"; }
- ListElement{ longitude: "5"; latitude: "96"; height: "142"; }
- ListElement{ longitude: "5"; latitude: "97"; height: "144"; }
- ListElement{ longitude: "5"; latitude: "98"; height: "145"; }
- ListElement{ longitude: "5"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "6"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "6"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "4"; height: "116"; }
- ListElement{ longitude: "6"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "8"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "9"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "10"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "11"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "12"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "14"; height: "137"; }
- ListElement{ longitude: "6"; latitude: "15"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "16"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "17"; height: "128"; }
- ListElement{ longitude: "6"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "20"; height: "105"; }
- ListElement{ longitude: "6"; latitude: "21"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "22"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "23"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "6"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "6"; latitude: "26"; height: "78"; }
- ListElement{ longitude: "6"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "28"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "30"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "6"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "6"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "34"; height: "103"; }
- ListElement{ longitude: "6"; latitude: "35"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "6"; latitude: "37"; height: "113"; }
- ListElement{ longitude: "6"; latitude: "38"; height: "112"; }
- ListElement{ longitude: "6"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "6"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "6"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "6"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "6"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "6"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "6"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "6"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "6"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "6"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "6"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "6"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "6"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "6"; latitude: "66"; height: "119"; }
- ListElement{ longitude: "6"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "6"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "70"; height: "132"; }
- ListElement{ longitude: "6"; latitude: "71"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "72"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "73"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "74"; height: "131"; }
- ListElement{ longitude: "6"; latitude: "75"; height: "135"; }
- ListElement{ longitude: "6"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "6"; latitude: "77"; height: "112"; }
- ListElement{ longitude: "6"; latitude: "78"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "6"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "6"; latitude: "81"; height: "110"; }
- ListElement{ longitude: "6"; latitude: "82"; height: "114"; }
- ListElement{ longitude: "6"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "6"; latitude: "84"; height: "92"; }
- ListElement{ longitude: "6"; latitude: "85"; height: "105"; }
- ListElement{ longitude: "6"; latitude: "86"; height: "124"; }
- ListElement{ longitude: "6"; latitude: "87"; height: "130"; }
- ListElement{ longitude: "6"; latitude: "88"; height: "138"; }
- ListElement{ longitude: "6"; latitude: "89"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "90"; height: "147"; }
- ListElement{ longitude: "6"; latitude: "91"; height: "147"; }
- ListElement{ longitude: "6"; latitude: "92"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "93"; height: "139"; }
- ListElement{ longitude: "6"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "6"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "6"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "6"; latitude: "97"; height: "142"; }
- ListElement{ longitude: "6"; latitude: "98"; height: "146"; }
- ListElement{ longitude: "6"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "0"; height: "117"; }
- ListElement{ longitude: "7"; latitude: "1"; height: "111"; }
- ListElement{ longitude: "7"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "7"; latitude: "3"; height: "112"; }
- ListElement{ longitude: "7"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "7"; latitude: "8"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "9"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "7"; latitude: "12"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "13"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "14"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "15"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "16"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "17"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "7"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "20"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "21"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "7"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "26"; height: "105"; }
- ListElement{ longitude: "7"; latitude: "27"; height: "131"; }
- ListElement{ longitude: "7"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "7"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "32"; height: "110"; }
- ListElement{ longitude: "7"; latitude: "33"; height: "108"; }
- ListElement{ longitude: "7"; latitude: "34"; height: "107"; }
- ListElement{ longitude: "7"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "7"; latitude: "36"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "7"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "7"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "7"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "7"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "7"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "7"; latitude: "51"; height: "133"; }
- ListElement{ longitude: "7"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "7"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "7"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "7"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "7"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "69"; height: "129"; }
- ListElement{ longitude: "7"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "7"; latitude: "71"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "72"; height: "135"; }
- ListElement{ longitude: "7"; latitude: "73"; height: "136"; }
- ListElement{ longitude: "7"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "7"; latitude: "76"; height: "118"; }
- ListElement{ longitude: "7"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "7"; latitude: "78"; height: "103"; }
- ListElement{ longitude: "7"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "7"; latitude: "80"; height: "103"; }
- ListElement{ longitude: "7"; latitude: "81"; height: "105"; }
- ListElement{ longitude: "7"; latitude: "82"; height: "107"; }
- ListElement{ longitude: "7"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "7"; latitude: "84"; height: "104"; }
- ListElement{ longitude: "7"; latitude: "85"; height: "109"; }
- ListElement{ longitude: "7"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "7"; latitude: "87"; height: "125"; }
- ListElement{ longitude: "7"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "7"; latitude: "89"; height: "139"; }
- ListElement{ longitude: "7"; latitude: "90"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "91"; height: "146"; }
- ListElement{ longitude: "7"; latitude: "92"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "93"; height: "139"; }
- ListElement{ longitude: "7"; latitude: "94"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "95"; height: "138"; }
- ListElement{ longitude: "7"; latitude: "96"; height: "141"; }
- ListElement{ longitude: "7"; latitude: "97"; height: "143"; }
- ListElement{ longitude: "7"; latitude: "98"; height: "147"; }
- ListElement{ longitude: "7"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "1"; height: "113"; }
- ListElement{ longitude: "8"; latitude: "2"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "3"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "7"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "8"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "9"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "12"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "13"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "14"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "15"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "16"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "17"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "22"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "8"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "8"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "26"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "8"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "33"; height: "113"; }
- ListElement{ longitude: "8"; latitude: "34"; height: "114"; }
- ListElement{ longitude: "8"; latitude: "35"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "38"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "8"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "8"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "8"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "8"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "8"; latitude: "52"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "8"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "8"; latitude: "63"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "8"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "8"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "8"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "8"; latitude: "68"; height: "124"; }
- ListElement{ longitude: "8"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "8"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "8"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "72"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "73"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "8"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "8"; latitude: "76"; height: "115"; }
- ListElement{ longitude: "8"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "8"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "8"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "8"; latitude: "80"; height: "99"; }
- ListElement{ longitude: "8"; latitude: "81"; height: "102"; }
- ListElement{ longitude: "8"; latitude: "82"; height: "101"; }
- ListElement{ longitude: "8"; latitude: "83"; height: "105"; }
- ListElement{ longitude: "8"; latitude: "84"; height: "107"; }
- ListElement{ longitude: "8"; latitude: "85"; height: "103"; }
- ListElement{ longitude: "8"; latitude: "86"; height: "110"; }
- ListElement{ longitude: "8"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "8"; latitude: "88"; height: "126"; }
- ListElement{ longitude: "8"; latitude: "89"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "90"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "91"; height: "138"; }
- ListElement{ longitude: "8"; latitude: "92"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "93"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "94"; height: "136"; }
- ListElement{ longitude: "8"; latitude: "95"; height: "134"; }
- ListElement{ longitude: "8"; latitude: "96"; height: "135"; }
- ListElement{ longitude: "8"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "8"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "8"; latitude: "99"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "5"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "7"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "8"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "9"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "10"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "11"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "14"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "15"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "16"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "9"; latitude: "23"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "32"; height: "116"; }
- ListElement{ longitude: "9"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "9"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "9"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "9"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "9"; latitude: "43"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "45"; height: "135"; }
- ListElement{ longitude: "9"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "9"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "9"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "9"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "9"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "9"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "9"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "9"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "9"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "9"; latitude: "66"; height: "107"; }
- ListElement{ longitude: "9"; latitude: "67"; height: "103"; }
- ListElement{ longitude: "9"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "9"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "9"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "9"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "72"; height: "140"; }
- ListElement{ longitude: "9"; latitude: "73"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "74"; height: "129"; }
- ListElement{ longitude: "9"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "9"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "9"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "9"; latitude: "78"; height: "102"; }
- ListElement{ longitude: "9"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "9"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "81"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "82"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "83"; height: "101"; }
- ListElement{ longitude: "9"; latitude: "84"; height: "96"; }
- ListElement{ longitude: "9"; latitude: "85"; height: "98"; }
- ListElement{ longitude: "9"; latitude: "86"; height: "106"; }
- ListElement{ longitude: "9"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "9"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "9"; latitude: "89"; height: "126"; }
- ListElement{ longitude: "9"; latitude: "90"; height: "128"; }
- ListElement{ longitude: "9"; latitude: "91"; height: "132"; }
- ListElement{ longitude: "9"; latitude: "92"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "93"; height: "134"; }
- ListElement{ longitude: "9"; latitude: "94"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "9"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "9"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "9"; latitude: "99"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "4"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "8"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "10"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "11"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "14"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "15"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "21"; height: "101"; }
- ListElement{ longitude: "10"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "10"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "10"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "10"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "10"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "10"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "10"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "10"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "43"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "44"; height: "135"; }
- ListElement{ longitude: "10"; latitude: "45"; height: "138"; }
- ListElement{ longitude: "10"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "47"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "10"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "10"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "59"; height: "126"; }
- ListElement{ longitude: "10"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "10"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "10"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "10"; latitude: "66"; height: "115"; }
- ListElement{ longitude: "10"; latitude: "67"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "68"; height: "98"; }
- ListElement{ longitude: "10"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "10"; latitude: "70"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "10"; latitude: "72"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "73"; height: "137"; }
- ListElement{ longitude: "10"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "10"; latitude: "76"; height: "116"; }
- ListElement{ longitude: "10"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "10"; latitude: "78"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "79"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "80"; height: "104"; }
- ListElement{ longitude: "10"; latitude: "81"; height: "105"; }
- ListElement{ longitude: "10"; latitude: "82"; height: "102"; }
- ListElement{ longitude: "10"; latitude: "83"; height: "100"; }
- ListElement{ longitude: "10"; latitude: "84"; height: "99"; }
- ListElement{ longitude: "10"; latitude: "85"; height: "102"; }
- ListElement{ longitude: "10"; latitude: "86"; height: "101"; }
- ListElement{ longitude: "10"; latitude: "87"; height: "110"; }
- ListElement{ longitude: "10"; latitude: "88"; height: "114"; }
- ListElement{ longitude: "10"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "10"; latitude: "90"; height: "125"; }
- ListElement{ longitude: "10"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "10"; latitude: "93"; height: "130"; }
- ListElement{ longitude: "10"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "10"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "10"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "10"; latitude: "98"; height: "139"; }
- ListElement{ longitude: "10"; latitude: "99"; height: "140"; }
- ListElement{ longitude: "11"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "3"; height: "129"; }
- ListElement{ longitude: "11"; latitude: "4"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "5"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "11"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "13"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "14"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "15"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "16"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "17"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "11"; latitude: "21"; height: "86"; }
- ListElement{ longitude: "11"; latitude: "22"; height: "90"; }
- ListElement{ longitude: "11"; latitude: "23"; height: "104"; }
- ListElement{ longitude: "11"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "26"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "11"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "11"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "11"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "11"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "43"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "44"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "45"; height: "138"; }
- ListElement{ longitude: "11"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "11"; latitude: "47"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "11"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "11"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "11"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "11"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "11"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "11"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "11"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "11"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "66"; height: "103"; }
- ListElement{ longitude: "11"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "68"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "11"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "71"; height: "134"; }
- ListElement{ longitude: "11"; latitude: "72"; height: "137"; }
- ListElement{ longitude: "11"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "11"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "11"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "11"; latitude: "79"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "80"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "81"; height: "111"; }
- ListElement{ longitude: "11"; latitude: "82"; height: "103"; }
- ListElement{ longitude: "11"; latitude: "83"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "84"; height: "98"; }
- ListElement{ longitude: "11"; latitude: "85"; height: "100"; }
- ListElement{ longitude: "11"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "11"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "11"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "11"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "11"; latitude: "90"; height: "119"; }
- ListElement{ longitude: "11"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "11"; latitude: "92"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "11"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "11"; latitude: "95"; height: "128"; }
- ListElement{ longitude: "11"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "11"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "11"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "11"; latitude: "99"; height: "142"; }
- ListElement{ longitude: "12"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "12"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "12"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "3"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "4"; height: "136"; }
- ListElement{ longitude: "12"; latitude: "5"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "6"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "12"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "13"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "12"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "12"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "12"; latitude: "21"; height: "84"; }
- ListElement{ longitude: "12"; latitude: "22"; height: "87"; }
- ListElement{ longitude: "12"; latitude: "23"; height: "103"; }
- ListElement{ longitude: "12"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "12"; latitude: "28"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "29"; height: "114"; }
- ListElement{ longitude: "12"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "12"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "12"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "43"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "12"; latitude: "45"; height: "137"; }
- ListElement{ longitude: "12"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "12"; latitude: "47"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "12"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "12"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "54"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "12"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "12"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "12"; latitude: "66"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "67"; height: "118"; }
- ListElement{ longitude: "12"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "12"; latitude: "70"; height: "128"; }
- ListElement{ longitude: "12"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "12"; latitude: "72"; height: "132"; }
- ListElement{ longitude: "12"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "12"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "12"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "76"; height: "113"; }
- ListElement{ longitude: "12"; latitude: "77"; height: "112"; }
- ListElement{ longitude: "12"; latitude: "78"; height: "114"; }
- ListElement{ longitude: "12"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "80"; height: "117"; }
- ListElement{ longitude: "12"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "12"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "12"; latitude: "83"; height: "105"; }
- ListElement{ longitude: "12"; latitude: "84"; height: "102"; }
- ListElement{ longitude: "12"; latitude: "85"; height: "101"; }
- ListElement{ longitude: "12"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "12"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "12"; latitude: "88"; height: "108"; }
- ListElement{ longitude: "12"; latitude: "89"; height: "111"; }
- ListElement{ longitude: "12"; latitude: "90"; height: "116"; }
- ListElement{ longitude: "12"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "12"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "12"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "12"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "12"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "12"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "12"; latitude: "99"; height: "142"; }
- ListElement{ longitude: "13"; latitude: "0"; height: "108"; }
- ListElement{ longitude: "13"; latitude: "1"; height: "113"; }
- ListElement{ longitude: "13"; latitude: "2"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "3"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "4"; height: "137"; }
- ListElement{ longitude: "13"; latitude: "5"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "7"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "12"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "20"; height: "106"; }
- ListElement{ longitude: "13"; latitude: "21"; height: "95"; }
- ListElement{ longitude: "13"; latitude: "22"; height: "98"; }
- ListElement{ longitude: "13"; latitude: "23"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "13"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "13"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "13"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "38"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "13"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "13"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "13"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "13"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "13"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "13"; latitude: "54"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "13"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "13"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "63"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "66"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "13"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "13"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "13"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "71"; height: "128"; }
- ListElement{ longitude: "13"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "13"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "13"; latitude: "74"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "77"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "13"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "80"; height: "118"; }
- ListElement{ longitude: "13"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "82"; height: "114"; }
- ListElement{ longitude: "13"; latitude: "83"; height: "110"; }
- ListElement{ longitude: "13"; latitude: "84"; height: "103"; }
- ListElement{ longitude: "13"; latitude: "85"; height: "103"; }
- ListElement{ longitude: "13"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "13"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "13"; latitude: "88"; height: "106"; }
- ListElement{ longitude: "13"; latitude: "89"; height: "109"; }
- ListElement{ longitude: "13"; latitude: "90"; height: "116"; }
- ListElement{ longitude: "13"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "13"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "13"; latitude: "93"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "13"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "13"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "13"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "13"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "13"; latitude: "99"; height: "140"; }
- ListElement{ longitude: "14"; latitude: "0"; height: "103"; }
- ListElement{ longitude: "14"; latitude: "1"; height: "99"; }
- ListElement{ longitude: "14"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "3"; height: "137"; }
- ListElement{ longitude: "14"; latitude: "4"; height: "134"; }
- ListElement{ longitude: "14"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "6"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "13"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "14"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "21"; height: "115"; }
- ListElement{ longitude: "14"; latitude: "22"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "26"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "29"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "30"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "14"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "33"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "34"; height: "116"; }
- ListElement{ longitude: "14"; latitude: "35"; height: "119"; }
- ListElement{ longitude: "14"; latitude: "36"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "14"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "14"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "14"; latitude: "53"; height: "132"; }
- ListElement{ longitude: "14"; latitude: "54"; height: "130"; }
- ListElement{ longitude: "14"; latitude: "55"; height: "127"; }
- ListElement{ longitude: "14"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "59"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "60"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "65"; height: "123"; }
- ListElement{ longitude: "14"; latitude: "66"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "69"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "70"; height: "118"; }
- ListElement{ longitude: "14"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "14"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "14"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "14"; latitude: "76"; height: "113"; }
- ListElement{ longitude: "14"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "14"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "14"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "14"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "14"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "14"; latitude: "84"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "14"; latitude: "86"; height: "104"; }
- ListElement{ longitude: "14"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "14"; latitude: "88"; height: "105"; }
- ListElement{ longitude: "14"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "90"; height: "114"; }
- ListElement{ longitude: "14"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "14"; latitude: "92"; height: "108"; }
- ListElement{ longitude: "14"; latitude: "93"; height: "125"; }
- ListElement{ longitude: "14"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "14"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "14"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "14"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "14"; latitude: "99"; height: "136"; }
- ListElement{ longitude: "15"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "15"; latitude: "1"; height: "98"; }
- ListElement{ longitude: "15"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "3"; height: "138"; }
- ListElement{ longitude: "15"; latitude: "4"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "6"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "15"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "13"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "14"; height: "133"; }
- ListElement{ longitude: "15"; latitude: "15"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "16"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "15"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "34"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "15"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "15"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "15"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "15"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "15"; latitude: "53"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "55"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "15"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "15"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "60"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "64"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "15"; latitude: "70"; height: "116"; }
- ListElement{ longitude: "15"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "15"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "73"; height: "115"; }
- ListElement{ longitude: "15"; latitude: "74"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "15"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "15"; latitude: "78"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "79"; height: "113"; }
- ListElement{ longitude: "15"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "83"; height: "121"; }
- ListElement{ longitude: "15"; latitude: "84"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "15"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "15"; latitude: "87"; height: "104"; }
- ListElement{ longitude: "15"; latitude: "88"; height: "101"; }
- ListElement{ longitude: "15"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "15"; latitude: "90"; height: "112"; }
- ListElement{ longitude: "15"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "15"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "15"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "15"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "15"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "15"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "15"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "15"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "15"; latitude: "99"; height: "132"; }
- ListElement{ longitude: "16"; latitude: "0"; height: "99"; }
- ListElement{ longitude: "16"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "3"; height: "135"; }
- ListElement{ longitude: "16"; latitude: "4"; height: "139"; }
- ListElement{ longitude: "16"; latitude: "5"; height: "138"; }
- ListElement{ longitude: "16"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "16"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "13"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "14"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "15"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "16"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "32"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "34"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "35"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "16"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "16"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "16"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "16"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "16"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "16"; latitude: "55"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "56"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "16"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "16"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "16"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "16"; latitude: "64"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "16"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "16"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "16"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "72"; height: "114"; }
- ListElement{ longitude: "16"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "16"; latitude: "78"; height: "98"; }
- ListElement{ longitude: "16"; latitude: "79"; height: "91"; }
- ListElement{ longitude: "16"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "16"; latitude: "82"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "16"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "85"; height: "109"; }
- ListElement{ longitude: "16"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "16"; latitude: "88"; height: "90"; }
- ListElement{ longitude: "16"; latitude: "89"; height: "106"; }
- ListElement{ longitude: "16"; latitude: "90"; height: "110"; }
- ListElement{ longitude: "16"; latitude: "91"; height: "113"; }
- ListElement{ longitude: "16"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "16"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "16"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "16"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "16"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "16"; latitude: "97"; height: "130"; }
- ListElement{ longitude: "16"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "16"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "1"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "3"; height: "136"; }
- ListElement{ longitude: "17"; latitude: "4"; height: "138"; }
- ListElement{ longitude: "17"; latitude: "5"; height: "132"; }
- ListElement{ longitude: "17"; latitude: "6"; height: "134"; }
- ListElement{ longitude: "17"; latitude: "7"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "17"; latitude: "17"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "17"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "25"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "26"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "34"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "17"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "17"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "17"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "17"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "17"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "17"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "17"; latitude: "56"; height: "129"; }
- ListElement{ longitude: "17"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "17"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "17"; latitude: "60"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "61"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "17"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "17"; latitude: "64"; height: "113"; }
- ListElement{ longitude: "17"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "17"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "17"; latitude: "67"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "68"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "74"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "17"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "78"; height: "106"; }
- ListElement{ longitude: "17"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "17"; latitude: "80"; height: "115"; }
- ListElement{ longitude: "17"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "82"; height: "108"; }
- ListElement{ longitude: "17"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "84"; height: "119"; }
- ListElement{ longitude: "17"; latitude: "85"; height: "112"; }
- ListElement{ longitude: "17"; latitude: "86"; height: "108"; }
- ListElement{ longitude: "17"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "17"; latitude: "88"; height: "104"; }
- ListElement{ longitude: "17"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "17"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "17"; latitude: "91"; height: "110"; }
- ListElement{ longitude: "17"; latitude: "92"; height: "111"; }
- ListElement{ longitude: "17"; latitude: "93"; height: "113"; }
- ListElement{ longitude: "17"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "17"; latitude: "95"; height: "121"; }
- ListElement{ longitude: "17"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "17"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "17"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "17"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "0"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "2"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "3"; height: "133"; }
- ListElement{ longitude: "18"; latitude: "4"; height: "135"; }
- ListElement{ longitude: "18"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "6"; height: "133"; }
- ListElement{ longitude: "18"; latitude: "7"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "16"; height: "112"; }
- ListElement{ longitude: "18"; latitude: "17"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "21"; height: "117"; }
- ListElement{ longitude: "18"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "18"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "18"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "18"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "18"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "40"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "18"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "18"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "51"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "18"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "18"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "18"; latitude: "56"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "18"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "18"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "18"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "18"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "18"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "70"; height: "108"; }
- ListElement{ longitude: "18"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "72"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "18"; latitude: "75"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "78"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "79"; height: "91"; }
- ListElement{ longitude: "18"; latitude: "80"; height: "106"; }
- ListElement{ longitude: "18"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "18"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "18"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "18"; latitude: "85"; height: "110"; }
- ListElement{ longitude: "18"; latitude: "86"; height: "104"; }
- ListElement{ longitude: "18"; latitude: "87"; height: "101"; }
- ListElement{ longitude: "18"; latitude: "88"; height: "102"; }
- ListElement{ longitude: "18"; latitude: "89"; height: "103"; }
- ListElement{ longitude: "18"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "18"; latitude: "91"; height: "107"; }
- ListElement{ longitude: "18"; latitude: "92"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "93"; height: "109"; }
- ListElement{ longitude: "18"; latitude: "94"; height: "113"; }
- ListElement{ longitude: "18"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "18"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "18"; latitude: "97"; height: "123"; }
- ListElement{ longitude: "18"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "18"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "0"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "4"; height: "134"; }
- ListElement{ longitude: "19"; latitude: "5"; height: "134"; }
- ListElement{ longitude: "19"; latitude: "6"; height: "131"; }
- ListElement{ longitude: "19"; latitude: "7"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "13"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "14"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "15"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "16"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "17"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "18"; height: "115"; }
- ListElement{ longitude: "19"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "19"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "19"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "19"; latitude: "39"; height: "130"; }
- ListElement{ longitude: "19"; latitude: "40"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "19"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "19"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "19"; latitude: "56"; height: "128"; }
- ListElement{ longitude: "19"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "58"; height: "118"; }
- ListElement{ longitude: "19"; latitude: "59"; height: "121"; }
- ListElement{ longitude: "19"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "19"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "62"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "19"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "19"; latitude: "65"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "19"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "19"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "19"; latitude: "70"; height: "107"; }
- ListElement{ longitude: "19"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "74"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "78"; height: "111"; }
- ListElement{ longitude: "19"; latitude: "79"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "80"; height: "109"; }
- ListElement{ longitude: "19"; latitude: "81"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "19"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "84"; height: "116"; }
- ListElement{ longitude: "19"; latitude: "85"; height: "112"; }
- ListElement{ longitude: "19"; latitude: "86"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "87"; height: "102"; }
- ListElement{ longitude: "19"; latitude: "88"; height: "101"; }
- ListElement{ longitude: "19"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "19"; latitude: "90"; height: "105"; }
- ListElement{ longitude: "19"; latitude: "91"; height: "99"; }
- ListElement{ longitude: "19"; latitude: "92"; height: "103"; }
- ListElement{ longitude: "19"; latitude: "93"; height: "104"; }
- ListElement{ longitude: "19"; latitude: "94"; height: "110"; }
- ListElement{ longitude: "19"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "19"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "19"; latitude: "97"; height: "123"; }
- ListElement{ longitude: "19"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "19"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "20"; latitude: "0"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "15"; height: "114"; }
- ListElement{ longitude: "20"; latitude: "16"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "17"; height: "113"; }
- ListElement{ longitude: "20"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "20"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "20"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "20"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "20"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "20"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "20"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "20"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "20"; latitude: "54"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "55"; height: "129"; }
- ListElement{ longitude: "20"; latitude: "56"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "57"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "58"; height: "108"; }
- ListElement{ longitude: "20"; latitude: "59"; height: "118"; }
- ListElement{ longitude: "20"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "20"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "20"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "20"; latitude: "68"; height: "105"; }
- ListElement{ longitude: "20"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "70"; height: "106"; }
- ListElement{ longitude: "20"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "20"; latitude: "75"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "78"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "79"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "81"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "20"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "20"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "20"; latitude: "85"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "86"; height: "107"; }
- ListElement{ longitude: "20"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "20"; latitude: "88"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "20"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "20"; latitude: "91"; height: "101"; }
- ListElement{ longitude: "20"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "93"; height: "110"; }
- ListElement{ longitude: "20"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "95"; height: "111"; }
- ListElement{ longitude: "20"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "20"; latitude: "97"; height: "121"; }
- ListElement{ longitude: "20"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "20"; latitude: "99"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "0"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "17"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "21"; latitude: "24"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "21"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "21"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "21"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "21"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "21"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "21"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "53"; height: "121"; }
- ListElement{ longitude: "21"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "55"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "57"; height: "114"; }
- ListElement{ longitude: "21"; latitude: "58"; height: "111"; }
- ListElement{ longitude: "21"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "21"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "21"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "21"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "21"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "21"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "73"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "21"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "21"; latitude: "77"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "78"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "21"; latitude: "80"; height: "106"; }
- ListElement{ longitude: "21"; latitude: "81"; height: "107"; }
- ListElement{ longitude: "21"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "21"; latitude: "83"; height: "118"; }
- ListElement{ longitude: "21"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "21"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "21"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "21"; latitude: "88"; height: "103"; }
- ListElement{ longitude: "21"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "21"; latitude: "90"; height: "104"; }
- ListElement{ longitude: "21"; latitude: "91"; height: "102"; }
- ListElement{ longitude: "21"; latitude: "92"; height: "102"; }
- ListElement{ longitude: "21"; latitude: "93"; height: "104"; }
- ListElement{ longitude: "21"; latitude: "94"; height: "105"; }
- ListElement{ longitude: "21"; latitude: "95"; height: "113"; }
- ListElement{ longitude: "21"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "21"; latitude: "97"; height: "122"; }
- ListElement{ longitude: "21"; latitude: "98"; height: "123"; }
- ListElement{ longitude: "21"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "7"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "22"; latitude: "50"; height: "121"; }
- ListElement{ longitude: "22"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "22"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "22"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "22"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "22"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "22"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "22"; latitude: "64"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "22"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "22"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "22"; latitude: "72"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "22"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "22"; latitude: "75"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "76"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "78"; height: "105"; }
- ListElement{ longitude: "22"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "22"; latitude: "80"; height: "104"; }
- ListElement{ longitude: "22"; latitude: "81"; height: "108"; }
- ListElement{ longitude: "22"; latitude: "82"; height: "110"; }
- ListElement{ longitude: "22"; latitude: "83"; height: "114"; }
- ListElement{ longitude: "22"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "22"; latitude: "85"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "22"; latitude: "87"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "88"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "89"; height: "107"; }
- ListElement{ longitude: "22"; latitude: "90"; height: "103"; }
- ListElement{ longitude: "22"; latitude: "91"; height: "102"; }
- ListElement{ longitude: "22"; latitude: "92"; height: "101"; }
- ListElement{ longitude: "22"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "22"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "22"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "22"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "22"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "22"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "22"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "25"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "23"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "23"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "23"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "23"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "23"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "23"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "23"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "23"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "23"; latitude: "61"; height: "133"; }
- ListElement{ longitude: "23"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "23"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "23"; latitude: "65"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "66"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "23"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "23"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "71"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "72"; height: "114"; }
- ListElement{ longitude: "23"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "23"; latitude: "74"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "75"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "76"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "77"; height: "107"; }
- ListElement{ longitude: "23"; latitude: "78"; height: "103"; }
- ListElement{ longitude: "23"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "23"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "23"; latitude: "81"; height: "106"; }
- ListElement{ longitude: "23"; latitude: "82"; height: "113"; }
- ListElement{ longitude: "23"; latitude: "83"; height: "112"; }
- ListElement{ longitude: "23"; latitude: "84"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "85"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "23"; latitude: "87"; height: "109"; }
- ListElement{ longitude: "23"; latitude: "88"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "23"; latitude: "91"; height: "103"; }
- ListElement{ longitude: "23"; latitude: "92"; height: "102"; }
- ListElement{ longitude: "23"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "23"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "23"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "23"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "23"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "23"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "23"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "4"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "16"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "18"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "24"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "25"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "24"; latitude: "31"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "24"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "24"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "24"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "24"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "24"; latitude: "60"; height: "133"; }
- ListElement{ longitude: "24"; latitude: "61"; height: "134"; }
- ListElement{ longitude: "24"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "24"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "64"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "65"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "66"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "24"; latitude: "68"; height: "128"; }
- ListElement{ longitude: "24"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "24"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "24"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "24"; latitude: "72"; height: "117"; }
- ListElement{ longitude: "24"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "24"; latitude: "74"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "76"; height: "106"; }
- ListElement{ longitude: "24"; latitude: "77"; height: "105"; }
- ListElement{ longitude: "24"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "24"; latitude: "79"; height: "99"; }
- ListElement{ longitude: "24"; latitude: "80"; height: "101"; }
- ListElement{ longitude: "24"; latitude: "81"; height: "104"; }
- ListElement{ longitude: "24"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "24"; latitude: "83"; height: "114"; }
- ListElement{ longitude: "24"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "24"; latitude: "85"; height: "114"; }
- ListElement{ longitude: "24"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "24"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "24"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "24"; latitude: "89"; height: "108"; }
- ListElement{ longitude: "24"; latitude: "90"; height: "107"; }
- ListElement{ longitude: "24"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "24"; latitude: "92"; height: "106"; }
- ListElement{ longitude: "24"; latitude: "93"; height: "110"; }
- ListElement{ longitude: "24"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "24"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "24"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "24"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "24"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "24"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "4"; height: "115"; }
- ListElement{ longitude: "25"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "15"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "23"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "27"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "25"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "34"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "25"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "25"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "25"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "25"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "25"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "25"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "25"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "61"; height: "132"; }
- ListElement{ longitude: "25"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "25"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "25"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "25"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "25"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "25"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "25"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "25"; latitude: "71"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "25"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "75"; height: "114"; }
- ListElement{ longitude: "25"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "25"; latitude: "77"; height: "106"; }
- ListElement{ longitude: "25"; latitude: "78"; height: "102"; }
- ListElement{ longitude: "25"; latitude: "79"; height: "101"; }
- ListElement{ longitude: "25"; latitude: "80"; height: "102"; }
- ListElement{ longitude: "25"; latitude: "81"; height: "107"; }
- ListElement{ longitude: "25"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "25"; latitude: "83"; height: "113"; }
- ListElement{ longitude: "25"; latitude: "84"; height: "115"; }
- ListElement{ longitude: "25"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "25"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "25"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "25"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "25"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "25"; latitude: "90"; height: "103"; }
- ListElement{ longitude: "25"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "25"; latitude: "92"; height: "106"; }
- ListElement{ longitude: "25"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "25"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "25"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "25"; latitude: "96"; height: "134"; }
- ListElement{ longitude: "25"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "25"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "25"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "17"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "18"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "28"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "34"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "35"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "26"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "26"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "26"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "26"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "26"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "26"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "26"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "26"; latitude: "66"; height: "131"; }
- ListElement{ longitude: "26"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "68"; height: "136"; }
- ListElement{ longitude: "26"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "26"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "71"; height: "132"; }
- ListElement{ longitude: "26"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "26"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "26"; latitude: "75"; height: "116"; }
- ListElement{ longitude: "26"; latitude: "76"; height: "112"; }
- ListElement{ longitude: "26"; latitude: "77"; height: "109"; }
- ListElement{ longitude: "26"; latitude: "78"; height: "105"; }
- ListElement{ longitude: "26"; latitude: "79"; height: "106"; }
- ListElement{ longitude: "26"; latitude: "80"; height: "107"; }
- ListElement{ longitude: "26"; latitude: "81"; height: "114"; }
- ListElement{ longitude: "26"; latitude: "82"; height: "117"; }
- ListElement{ longitude: "26"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "26"; latitude: "84"; height: "118"; }
- ListElement{ longitude: "26"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "86"; height: "120"; }
- ListElement{ longitude: "26"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "26"; latitude: "90"; height: "100"; }
- ListElement{ longitude: "26"; latitude: "91"; height: "103"; }
- ListElement{ longitude: "26"; latitude: "92"; height: "105"; }
- ListElement{ longitude: "26"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "26"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "26"; latitude: "95"; height: "134"; }
- ListElement{ longitude: "26"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "26"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "26"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "26"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "27"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "2"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "3"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "21"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "22"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "24"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "29"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "34"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "44"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "50"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "51"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "27"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "27"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "27"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "27"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "27"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "27"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "67"; height: "130"; }
- ListElement{ longitude: "27"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "27"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "27"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "71"; height: "137"; }
- ListElement{ longitude: "27"; latitude: "72"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "27"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "27"; latitude: "78"; height: "111"; }
- ListElement{ longitude: "27"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "27"; latitude: "80"; height: "110"; }
- ListElement{ longitude: "27"; latitude: "81"; height: "113"; }
- ListElement{ longitude: "27"; latitude: "82"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "83"; height: "115"; }
- ListElement{ longitude: "27"; latitude: "84"; height: "120"; }
- ListElement{ longitude: "27"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "27"; latitude: "87"; height: "118"; }
- ListElement{ longitude: "27"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "27"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "27"; latitude: "90"; height: "107"; }
- ListElement{ longitude: "27"; latitude: "91"; height: "106"; }
- ListElement{ longitude: "27"; latitude: "92"; height: "109"; }
- ListElement{ longitude: "27"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "27"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "27"; latitude: "95"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "27"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "27"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "27"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "2"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "3"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "4"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "10"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "17"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "18"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "19"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "30"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "28"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "35"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "28"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "28"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "28"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "28"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "28"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "28"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "28"; latitude: "70"; height: "137"; }
- ListElement{ longitude: "28"; latitude: "71"; height: "141"; }
- ListElement{ longitude: "28"; latitude: "72"; height: "143"; }
- ListElement{ longitude: "28"; latitude: "73"; height: "139"; }
- ListElement{ longitude: "28"; latitude: "74"; height: "136"; }
- ListElement{ longitude: "28"; latitude: "75"; height: "129"; }
- ListElement{ longitude: "28"; latitude: "76"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "28"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "79"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "80"; height: "114"; }
- ListElement{ longitude: "28"; latitude: "81"; height: "117"; }
- ListElement{ longitude: "28"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "28"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "28"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "28"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "28"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "28"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "28"; latitude: "92"; height: "113"; }
- ListElement{ longitude: "28"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "28"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "28"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "28"; latitude: "96"; height: "134"; }
- ListElement{ longitude: "28"; latitude: "97"; height: "132"; }
- ListElement{ longitude: "28"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "28"; latitude: "99"; height: "109"; }
- ListElement{ longitude: "29"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "4"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "34"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "29"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "29"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "44"; height: "116"; }
- ListElement{ longitude: "29"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "64"; height: "125"; }
- ListElement{ longitude: "29"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "29"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "29"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "29"; latitude: "70"; height: "140"; }
- ListElement{ longitude: "29"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "29"; latitude: "72"; height: "147"; }
- ListElement{ longitude: "29"; latitude: "73"; height: "144"; }
- ListElement{ longitude: "29"; latitude: "74"; height: "140"; }
- ListElement{ longitude: "29"; latitude: "75"; height: "134"; }
- ListElement{ longitude: "29"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "29"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "29"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "79"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "29"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "84"; height: "116"; }
- ListElement{ longitude: "29"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "86"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "29"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "29"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "29"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "29"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "29"; latitude: "92"; height: "112"; }
- ListElement{ longitude: "29"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "29"; latitude: "94"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "29"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "29"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "29"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "29"; latitude: "99"; height: "109"; }
- ListElement{ longitude: "30"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "2"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "30"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "30"; latitude: "44"; height: "105"; }
- ListElement{ longitude: "30"; latitude: "45"; height: "114"; }
- ListElement{ longitude: "30"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "30"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "30"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "66"; height: "125"; }
- ListElement{ longitude: "30"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "30"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "30"; latitude: "70"; height: "142"; }
- ListElement{ longitude: "30"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "30"; latitude: "72"; height: "150"; }
- ListElement{ longitude: "30"; latitude: "73"; height: "149"; }
- ListElement{ longitude: "30"; latitude: "74"; height: "147"; }
- ListElement{ longitude: "30"; latitude: "75"; height: "137"; }
- ListElement{ longitude: "30"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "30"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "78"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "79"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "81"; height: "117"; }
- ListElement{ longitude: "30"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "83"; height: "115"; }
- ListElement{ longitude: "30"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "30"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "30"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "30"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "30"; latitude: "90"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "91"; height: "118"; }
- ListElement{ longitude: "30"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "30"; latitude: "93"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "30"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "30"; latitude: "96"; height: "123"; }
- ListElement{ longitude: "30"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "30"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "30"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "31"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "3"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "31"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "31"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "31"; latitude: "44"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "31"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "31"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "31"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "31"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "31"; latitude: "69"; height: "137"; }
- ListElement{ longitude: "31"; latitude: "70"; height: "143"; }
- ListElement{ longitude: "31"; latitude: "71"; height: "147"; }
- ListElement{ longitude: "31"; latitude: "72"; height: "149"; }
- ListElement{ longitude: "31"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "31"; latitude: "74"; height: "146"; }
- ListElement{ longitude: "31"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "31"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "31"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "78"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "31"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "83"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "31"; latitude: "85"; height: "116"; }
- ListElement{ longitude: "31"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "88"; height: "119"; }
- ListElement{ longitude: "31"; latitude: "89"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "31"; latitude: "91"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "31"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "31"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "31"; latitude: "96"; height: "114"; }
- ListElement{ longitude: "31"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "31"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "31"; latitude: "99"; height: "115"; }
- ListElement{ longitude: "32"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "19"; height: "128"; }
- ListElement{ longitude: "32"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "32"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "49"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "32"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "60"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "61"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "66"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "32"; latitude: "68"; height: "137"; }
- ListElement{ longitude: "32"; latitude: "69"; height: "141"; }
- ListElement{ longitude: "32"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "32"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "32"; latitude: "72"; height: "151"; }
- ListElement{ longitude: "32"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "32"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "32"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "32"; latitude: "76"; height: "130"; }
- ListElement{ longitude: "32"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "32"; latitude: "80"; height: "120"; }
- ListElement{ longitude: "32"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "32"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "32"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "86"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "32"; latitude: "88"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "89"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "91"; height: "129"; }
- ListElement{ longitude: "32"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "32"; latitude: "93"; height: "125"; }
- ListElement{ longitude: "32"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "32"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "32"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "32"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "32"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "3"; height: "116"; }
- ListElement{ longitude: "33"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "8"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "33"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "19"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "33"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "33"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "25"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "34"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "53"; height: "119"; }
- ListElement{ longitude: "33"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "59"; height: "126"; }
- ListElement{ longitude: "33"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "65"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "33"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "33"; latitude: "68"; height: "141"; }
- ListElement{ longitude: "33"; latitude: "69"; height: "144"; }
- ListElement{ longitude: "33"; latitude: "70"; height: "147"; }
- ListElement{ longitude: "33"; latitude: "71"; height: "149"; }
- ListElement{ longitude: "33"; latitude: "72"; height: "149"; }
- ListElement{ longitude: "33"; latitude: "73"; height: "147"; }
- ListElement{ longitude: "33"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "33"; latitude: "75"; height: "137"; }
- ListElement{ longitude: "33"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "77"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "33"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "83"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "84"; height: "113"; }
- ListElement{ longitude: "33"; latitude: "85"; height: "117"; }
- ListElement{ longitude: "33"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "33"; latitude: "87"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "33"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "33"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "33"; latitude: "92"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "33"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "33"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "33"; latitude: "97"; height: "124"; }
- ListElement{ longitude: "33"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "33"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "10"; height: "131"; }
- ListElement{ longitude: "34"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "13"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "18"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "19"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "20"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "33"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "34"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "34"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "34"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "62"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "34"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "34"; latitude: "68"; height: "142"; }
- ListElement{ longitude: "34"; latitude: "69"; height: "145"; }
- ListElement{ longitude: "34"; latitude: "70"; height: "149"; }
- ListElement{ longitude: "34"; latitude: "71"; height: "149"; }
- ListElement{ longitude: "34"; latitude: "72"; height: "150"; }
- ListElement{ longitude: "34"; latitude: "73"; height: "145"; }
- ListElement{ longitude: "34"; latitude: "74"; height: "144"; }
- ListElement{ longitude: "34"; latitude: "75"; height: "144"; }
- ListElement{ longitude: "34"; latitude: "76"; height: "138"; }
- ListElement{ longitude: "34"; latitude: "77"; height: "141"; }
- ListElement{ longitude: "34"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "34"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "34"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "34"; latitude: "81"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "34"; latitude: "84"; height: "117"; }
- ListElement{ longitude: "34"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "87"; height: "119"; }
- ListElement{ longitude: "34"; latitude: "88"; height: "115"; }
- ListElement{ longitude: "34"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "34"; latitude: "90"; height: "121"; }
- ListElement{ longitude: "34"; latitude: "91"; height: "124"; }
- ListElement{ longitude: "34"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "34"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "34"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "34"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "34"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "34"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "3"; height: "118"; }
- ListElement{ longitude: "35"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "35"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "15"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "18"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "19"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "20"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "21"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "23"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "26"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "31"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "35"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "58"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "35"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "61"; height: "120"; }
- ListElement{ longitude: "35"; latitude: "62"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "35"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "35"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "68"; height: "140"; }
- ListElement{ longitude: "35"; latitude: "69"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "70"; height: "147"; }
- ListElement{ longitude: "35"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "35"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "35"; latitude: "73"; height: "144"; }
- ListElement{ longitude: "35"; latitude: "74"; height: "143"; }
- ListElement{ longitude: "35"; latitude: "75"; height: "145"; }
- ListElement{ longitude: "35"; latitude: "76"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "77"; height: "151"; }
- ListElement{ longitude: "35"; latitude: "78"; height: "146"; }
- ListElement{ longitude: "35"; latitude: "79"; height: "136"; }
- ListElement{ longitude: "35"; latitude: "80"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "35"; latitude: "82"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "83"; height: "116"; }
- ListElement{ longitude: "35"; latitude: "84"; height: "101"; }
- ListElement{ longitude: "35"; latitude: "85"; height: "111"; }
- ListElement{ longitude: "35"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "35"; latitude: "87"; height: "126"; }
- ListElement{ longitude: "35"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "89"; height: "125"; }
- ListElement{ longitude: "35"; latitude: "90"; height: "128"; }
- ListElement{ longitude: "35"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "35"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "35"; latitude: "93"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "35"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "35"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "35"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "35"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "36"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "36"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "21"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "23"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "24"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "27"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "45"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "36"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "51"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "36"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "36"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "36"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "57"; height: "126"; }
- ListElement{ longitude: "36"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "36"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "36"; latitude: "65"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "68"; height: "137"; }
- ListElement{ longitude: "36"; latitude: "69"; height: "142"; }
- ListElement{ longitude: "36"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "73"; height: "145"; }
- ListElement{ longitude: "36"; latitude: "74"; height: "141"; }
- ListElement{ longitude: "36"; latitude: "75"; height: "148"; }
- ListElement{ longitude: "36"; latitude: "76"; height: "152"; }
- ListElement{ longitude: "36"; latitude: "77"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "78"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "79"; height: "154"; }
- ListElement{ longitude: "36"; latitude: "80"; height: "146"; }
- ListElement{ longitude: "36"; latitude: "81"; height: "131"; }
- ListElement{ longitude: "36"; latitude: "82"; height: "103"; }
- ListElement{ longitude: "36"; latitude: "83"; height: "94"; }
- ListElement{ longitude: "36"; latitude: "84"; height: "78"; }
- ListElement{ longitude: "36"; latitude: "85"; height: "73"; }
- ListElement{ longitude: "36"; latitude: "86"; height: "87"; }
- ListElement{ longitude: "36"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "36"; latitude: "88"; height: "98"; }
- ListElement{ longitude: "36"; latitude: "89"; height: "110"; }
- ListElement{ longitude: "36"; latitude: "90"; height: "113"; }
- ListElement{ longitude: "36"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "36"; latitude: "92"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "93"; height: "127"; }
- ListElement{ longitude: "36"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "36"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "36"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "36"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "36"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "37"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "9"; height: "132"; }
- ListElement{ longitude: "37"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "17"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "20"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "37"; latitude: "24"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "37"; latitude: "26"; height: "98"; }
- ListElement{ longitude: "37"; latitude: "27"; height: "97"; }
- ListElement{ longitude: "37"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "33"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "37"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "37"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "37"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "37"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "37"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "37"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "37"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "37"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "58"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "59"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "37"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "64"; height: "124"; }
- ListElement{ longitude: "37"; latitude: "65"; height: "123"; }
- ListElement{ longitude: "37"; latitude: "66"; height: "126"; }
- ListElement{ longitude: "37"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "37"; latitude: "69"; height: "138"; }
- ListElement{ longitude: "37"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "37"; latitude: "71"; height: "146"; }
- ListElement{ longitude: "37"; latitude: "72"; height: "146"; }
- ListElement{ longitude: "37"; latitude: "73"; height: "149"; }
- ListElement{ longitude: "37"; latitude: "74"; height: "145"; }
- ListElement{ longitude: "37"; latitude: "75"; height: "154"; }
- ListElement{ longitude: "37"; latitude: "76"; height: "153"; }
- ListElement{ longitude: "37"; latitude: "77"; height: "152"; }
- ListElement{ longitude: "37"; latitude: "78"; height: "149"; }
- ListElement{ longitude: "37"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "80"; height: "97"; }
- ListElement{ longitude: "37"; latitude: "81"; height: "70"; }
- ListElement{ longitude: "37"; latitude: "82"; height: "66"; }
- ListElement{ longitude: "37"; latitude: "83"; height: "71"; }
- ListElement{ longitude: "37"; latitude: "84"; height: "59"; }
- ListElement{ longitude: "37"; latitude: "85"; height: "48"; }
- ListElement{ longitude: "37"; latitude: "86"; height: "66"; }
- ListElement{ longitude: "37"; latitude: "87"; height: "74"; }
- ListElement{ longitude: "37"; latitude: "88"; height: "78"; }
- ListElement{ longitude: "37"; latitude: "89"; height: "86"; }
- ListElement{ longitude: "37"; latitude: "90"; height: "94"; }
- ListElement{ longitude: "37"; latitude: "91"; height: "107"; }
- ListElement{ longitude: "37"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "37"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "37"; latitude: "94"; height: "129"; }
- ListElement{ longitude: "37"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "37"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "37"; latitude: "97"; height: "135"; }
- ListElement{ longitude: "37"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "37"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "38"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "38"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "5"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "11"; height: "131"; }
- ListElement{ longitude: "38"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "20"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "25"; height: "103"; }
- ListElement{ longitude: "38"; latitude: "26"; height: "86"; }
- ListElement{ longitude: "38"; latitude: "27"; height: "90"; }
- ListElement{ longitude: "38"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "38"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "38"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "38"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "38"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "38"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "50"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "38"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "38"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "38"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "38"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "38"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "66"; height: "124"; }
- ListElement{ longitude: "38"; latitude: "67"; height: "126"; }
- ListElement{ longitude: "38"; latitude: "68"; height: "132"; }
- ListElement{ longitude: "38"; latitude: "69"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "38"; latitude: "71"; height: "148"; }
- ListElement{ longitude: "38"; latitude: "72"; height: "155"; }
- ListElement{ longitude: "38"; latitude: "73"; height: "161"; }
- ListElement{ longitude: "38"; latitude: "74"; height: "147"; }
- ListElement{ longitude: "38"; latitude: "75"; height: "146"; }
- ListElement{ longitude: "38"; latitude: "76"; height: "139"; }
- ListElement{ longitude: "38"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "38"; latitude: "78"; height: "108"; }
- ListElement{ longitude: "38"; latitude: "79"; height: "93"; }
- ListElement{ longitude: "38"; latitude: "80"; height: "76"; }
- ListElement{ longitude: "38"; latitude: "81"; height: "59"; }
- ListElement{ longitude: "38"; latitude: "82"; height: "54"; }
- ListElement{ longitude: "38"; latitude: "83"; height: "61"; }
- ListElement{ longitude: "38"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "38"; latitude: "85"; height: "13"; }
- ListElement{ longitude: "38"; latitude: "86"; height: "42"; }
- ListElement{ longitude: "38"; latitude: "87"; height: "58"; }
- ListElement{ longitude: "38"; latitude: "88"; height: "73"; }
- ListElement{ longitude: "38"; latitude: "89"; height: "75"; }
- ListElement{ longitude: "38"; latitude: "90"; height: "74"; }
- ListElement{ longitude: "38"; latitude: "91"; height: "77"; }
- ListElement{ longitude: "38"; latitude: "92"; height: "96"; }
- ListElement{ longitude: "38"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "38"; latitude: "94"; height: "133"; }
- ListElement{ longitude: "38"; latitude: "95"; height: "131"; }
- ListElement{ longitude: "38"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "38"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "38"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "10"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "11"; height: "132"; }
- ListElement{ longitude: "39"; latitude: "12"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "14"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "19"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "20"; height: "123"; }
- ListElement{ longitude: "39"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "39"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "25"; height: "108"; }
- ListElement{ longitude: "39"; latitude: "26"; height: "88"; }
- ListElement{ longitude: "39"; latitude: "27"; height: "80"; }
- ListElement{ longitude: "39"; latitude: "28"; height: "108"; }
- ListElement{ longitude: "39"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "37"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "39"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "39"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "39"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "39"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "39"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "39"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "39"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "39"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "39"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "39"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "65"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "39"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "39"; latitude: "68"; height: "132"; }
- ListElement{ longitude: "39"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "39"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "39"; latitude: "71"; height: "153"; }
- ListElement{ longitude: "39"; latitude: "72"; height: "161"; }
- ListElement{ longitude: "39"; latitude: "73"; height: "157"; }
- ListElement{ longitude: "39"; latitude: "74"; height: "152"; }
- ListElement{ longitude: "39"; latitude: "75"; height: "139"; }
- ListElement{ longitude: "39"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "39"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "39"; latitude: "78"; height: "97"; }
- ListElement{ longitude: "39"; latitude: "79"; height: "49"; }
- ListElement{ longitude: "39"; latitude: "80"; height: "16"; }
- ListElement{ longitude: "39"; latitude: "81"; height: "11"; }
- ListElement{ longitude: "39"; latitude: "82"; height: "24"; }
- ListElement{ longitude: "39"; latitude: "83"; height: "58"; }
- ListElement{ longitude: "39"; latitude: "84"; height: "13"; }
- ListElement{ longitude: "39"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "39"; latitude: "86"; height: "31"; }
- ListElement{ longitude: "39"; latitude: "87"; height: "58"; }
- ListElement{ longitude: "39"; latitude: "88"; height: "43"; }
- ListElement{ longitude: "39"; latitude: "89"; height: "48"; }
- ListElement{ longitude: "39"; latitude: "90"; height: "67"; }
- ListElement{ longitude: "39"; latitude: "91"; height: "71"; }
- ListElement{ longitude: "39"; latitude: "92"; height: "81"; }
- ListElement{ longitude: "39"; latitude: "93"; height: "92"; }
- ListElement{ longitude: "39"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "39"; latitude: "95"; height: "143"; }
- ListElement{ longitude: "39"; latitude: "96"; height: "135"; }
- ListElement{ longitude: "39"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "39"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "39"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "40"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "40"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "40"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "13"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "20"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "24"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "26"; height: "103"; }
- ListElement{ longitude: "40"; latitude: "27"; height: "110"; }
- ListElement{ longitude: "40"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "29"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "31"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "32"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "40"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "40"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "40"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "40"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "40"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "40"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "40"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "40"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "40"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "40"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "40"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "40"; latitude: "69"; height: "139"; }
- ListElement{ longitude: "40"; latitude: "70"; height: "146"; }
- ListElement{ longitude: "40"; latitude: "71"; height: "157"; }
- ListElement{ longitude: "40"; latitude: "72"; height: "166"; }
- ListElement{ longitude: "40"; latitude: "73"; height: "159"; }
- ListElement{ longitude: "40"; latitude: "74"; height: "151"; }
- ListElement{ longitude: "40"; latitude: "75"; height: "130"; }
- ListElement{ longitude: "40"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "40"; latitude: "77"; height: "98"; }
- ListElement{ longitude: "40"; latitude: "78"; height: "82"; }
- ListElement{ longitude: "40"; latitude: "79"; height: "73"; }
- ListElement{ longitude: "40"; latitude: "80"; height: "49"; }
- ListElement{ longitude: "40"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "40"; latitude: "84"; height: "27"; }
- ListElement{ longitude: "40"; latitude: "85"; height: "10"; }
- ListElement{ longitude: "40"; latitude: "86"; height: "17"; }
- ListElement{ longitude: "40"; latitude: "87"; height: "24"; }
- ListElement{ longitude: "40"; latitude: "88"; height: "16"; }
- ListElement{ longitude: "40"; latitude: "89"; height: "35"; }
- ListElement{ longitude: "40"; latitude: "90"; height: "58"; }
- ListElement{ longitude: "40"; latitude: "91"; height: "66"; }
- ListElement{ longitude: "40"; latitude: "92"; height: "78"; }
- ListElement{ longitude: "40"; latitude: "93"; height: "88"; }
- ListElement{ longitude: "40"; latitude: "94"; height: "107"; }
- ListElement{ longitude: "40"; latitude: "95"; height: "139"; }
- ListElement{ longitude: "40"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "40"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "40"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "14"; height: "112"; }
- ListElement{ longitude: "41"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "25"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "26"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "27"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "28"; height: "129"; }
- ListElement{ longitude: "41"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "30"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "41"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "41"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "41"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "41"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "41"; latitude: "49"; height: "116"; }
- ListElement{ longitude: "41"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "41"; latitude: "51"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "41"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "41"; latitude: "56"; height: "120"; }
- ListElement{ longitude: "41"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "41"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "41"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "41"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "41"; latitude: "64"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "65"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "66"; height: "137"; }
- ListElement{ longitude: "41"; latitude: "67"; height: "136"; }
- ListElement{ longitude: "41"; latitude: "68"; height: "135"; }
- ListElement{ longitude: "41"; latitude: "69"; height: "141"; }
- ListElement{ longitude: "41"; latitude: "70"; height: "148"; }
- ListElement{ longitude: "41"; latitude: "71"; height: "159"; }
- ListElement{ longitude: "41"; latitude: "72"; height: "160"; }
- ListElement{ longitude: "41"; latitude: "73"; height: "160"; }
- ListElement{ longitude: "41"; latitude: "74"; height: "148"; }
- ListElement{ longitude: "41"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "41"; latitude: "76"; height: "75"; }
- ListElement{ longitude: "41"; latitude: "77"; height: "4"; }
- ListElement{ longitude: "41"; latitude: "78"; height: "50"; }
- ListElement{ longitude: "41"; latitude: "79"; height: "50"; }
- ListElement{ longitude: "41"; latitude: "80"; height: "46"; }
- ListElement{ longitude: "41"; latitude: "81"; height: "3"; }
- ListElement{ longitude: "41"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "84"; height: "19"; }
- ListElement{ longitude: "41"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "41"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "41"; latitude: "87"; height: "4"; }
- ListElement{ longitude: "41"; latitude: "88"; height: "30"; }
- ListElement{ longitude: "41"; latitude: "89"; height: "18"; }
- ListElement{ longitude: "41"; latitude: "90"; height: "19"; }
- ListElement{ longitude: "41"; latitude: "91"; height: "40"; }
- ListElement{ longitude: "41"; latitude: "92"; height: "64"; }
- ListElement{ longitude: "41"; latitude: "93"; height: "80"; }
- ListElement{ longitude: "41"; latitude: "94"; height: "102"; }
- ListElement{ longitude: "41"; latitude: "95"; height: "125"; }
- ListElement{ longitude: "41"; latitude: "96"; height: "143"; }
- ListElement{ longitude: "41"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "41"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "41"; latitude: "99"; height: "130"; }
- ListElement{ longitude: "42"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "42"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "11"; height: "130"; }
- ListElement{ longitude: "42"; latitude: "12"; height: "131"; }
- ListElement{ longitude: "42"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "16"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "21"; height: "128"; }
- ListElement{ longitude: "42"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "42"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "42"; latitude: "48"; height: "117"; }
- ListElement{ longitude: "42"; latitude: "49"; height: "116"; }
- ListElement{ longitude: "42"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "42"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "42"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "42"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "42"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "42"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "42"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "42"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "42"; latitude: "63"; height: "132"; }
- ListElement{ longitude: "42"; latitude: "64"; height: "137"; }
- ListElement{ longitude: "42"; latitude: "65"; height: "137"; }
- ListElement{ longitude: "42"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "42"; latitude: "67"; height: "135"; }
- ListElement{ longitude: "42"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "69"; height: "132"; }
- ListElement{ longitude: "42"; latitude: "70"; height: "141"; }
- ListElement{ longitude: "42"; latitude: "71"; height: "160"; }
- ListElement{ longitude: "42"; latitude: "72"; height: "156"; }
- ListElement{ longitude: "42"; latitude: "73"; height: "159"; }
- ListElement{ longitude: "42"; latitude: "74"; height: "143"; }
- ListElement{ longitude: "42"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "42"; latitude: "76"; height: "72"; }
- ListElement{ longitude: "42"; latitude: "77"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "80"; height: "17"; }
- ListElement{ longitude: "42"; latitude: "81"; height: "12"; }
- ListElement{ longitude: "42"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "83"; height: "2"; }
- ListElement{ longitude: "42"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "86"; height: "20"; }
- ListElement{ longitude: "42"; latitude: "87"; height: "7"; }
- ListElement{ longitude: "42"; latitude: "88"; height: "20"; }
- ListElement{ longitude: "42"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "42"; latitude: "91"; height: "34"; }
- ListElement{ longitude: "42"; latitude: "92"; height: "55"; }
- ListElement{ longitude: "42"; latitude: "93"; height: "74"; }
- ListElement{ longitude: "42"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "42"; latitude: "95"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "96"; height: "145"; }
- ListElement{ longitude: "42"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "42"; latitude: "98"; height: "133"; }
- ListElement{ longitude: "42"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "43"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "11"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "43"; latitude: "13"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "15"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "43"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "37"; height: "120"; }
- ListElement{ longitude: "43"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "43"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "43"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "43"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "43"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "43"; latitude: "50"; height: "117"; }
- ListElement{ longitude: "43"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "43"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "43"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "43"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "43"; latitude: "58"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "43"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "43"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "43"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "64"; height: "135"; }
- ListElement{ longitude: "43"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "66"; height: "140"; }
- ListElement{ longitude: "43"; latitude: "67"; height: "137"; }
- ListElement{ longitude: "43"; latitude: "68"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "69"; height: "138"; }
- ListElement{ longitude: "43"; latitude: "70"; height: "145"; }
- ListElement{ longitude: "43"; latitude: "71"; height: "162"; }
- ListElement{ longitude: "43"; latitude: "72"; height: "154"; }
- ListElement{ longitude: "43"; latitude: "73"; height: "153"; }
- ListElement{ longitude: "43"; latitude: "74"; height: "136"; }
- ListElement{ longitude: "43"; latitude: "75"; height: "132"; }
- ListElement{ longitude: "43"; latitude: "76"; height: "101"; }
- ListElement{ longitude: "43"; latitude: "77"; height: "32"; }
- ListElement{ longitude: "43"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "80"; height: "23"; }
- ListElement{ longitude: "43"; latitude: "81"; height: "51"; }
- ListElement{ longitude: "43"; latitude: "82"; height: "50"; }
- ListElement{ longitude: "43"; latitude: "83"; height: "65"; }
- ListElement{ longitude: "43"; latitude: "84"; height: "30"; }
- ListElement{ longitude: "43"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "43"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "88"; height: "8"; }
- ListElement{ longitude: "43"; latitude: "89"; height: "2"; }
- ListElement{ longitude: "43"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "43"; latitude: "91"; height: "22"; }
- ListElement{ longitude: "43"; latitude: "92"; height: "42"; }
- ListElement{ longitude: "43"; latitude: "93"; height: "71"; }
- ListElement{ longitude: "43"; latitude: "94"; height: "86"; }
- ListElement{ longitude: "43"; latitude: "95"; height: "109"; }
- ListElement{ longitude: "43"; latitude: "96"; height: "139"; }
- ListElement{ longitude: "43"; latitude: "97"; height: "140"; }
- ListElement{ longitude: "43"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "43"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "2"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "9"; height: "130"; }
- ListElement{ longitude: "44"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "44"; latitude: "11"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "12"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "23"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "44"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "44"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "44"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "44"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "49"; height: "118"; }
- ListElement{ longitude: "44"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "44"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "44"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "57"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "58"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "59"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "44"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "44"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "44"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "44"; latitude: "64"; height: "134"; }
- ListElement{ longitude: "44"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "44"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "44"; latitude: "67"; height: "138"; }
- ListElement{ longitude: "44"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "44"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "44"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "44"; latitude: "71"; height: "157"; }
- ListElement{ longitude: "44"; latitude: "72"; height: "153"; }
- ListElement{ longitude: "44"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "44"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "44"; latitude: "75"; height: "108"; }
- ListElement{ longitude: "44"; latitude: "76"; height: "85"; }
- ListElement{ longitude: "44"; latitude: "77"; height: "19"; }
- ListElement{ longitude: "44"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "79"; height: "48"; }
- ListElement{ longitude: "44"; latitude: "80"; height: "102"; }
- ListElement{ longitude: "44"; latitude: "81"; height: "112"; }
- ListElement{ longitude: "44"; latitude: "82"; height: "99"; }
- ListElement{ longitude: "44"; latitude: "83"; height: "90"; }
- ListElement{ longitude: "44"; latitude: "84"; height: "71"; }
- ListElement{ longitude: "44"; latitude: "85"; height: "26"; }
- ListElement{ longitude: "44"; latitude: "86"; height: "14"; }
- ListElement{ longitude: "44"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "88"; height: "2"; }
- ListElement{ longitude: "44"; latitude: "89"; height: "5"; }
- ListElement{ longitude: "44"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "44"; latitude: "91"; height: "8"; }
- ListElement{ longitude: "44"; latitude: "92"; height: "51"; }
- ListElement{ longitude: "44"; latitude: "93"; height: "67"; }
- ListElement{ longitude: "44"; latitude: "94"; height: "90"; }
- ListElement{ longitude: "44"; latitude: "95"; height: "102"; }
- ListElement{ longitude: "44"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "44"; latitude: "97"; height: "149"; }
- ListElement{ longitude: "44"; latitude: "98"; height: "145"; }
- ListElement{ longitude: "44"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "45"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "10"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "11"; height: "129"; }
- ListElement{ longitude: "45"; latitude: "12"; height: "130"; }
- ListElement{ longitude: "45"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "15"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "16"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "17"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "30"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "45"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "45"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "45"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "49"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "50"; height: "118"; }
- ListElement{ longitude: "45"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "45"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "57"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "45"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "45"; latitude: "60"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "61"; height: "119"; }
- ListElement{ longitude: "45"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "45"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "45"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "65"; height: "132"; }
- ListElement{ longitude: "45"; latitude: "66"; height: "133"; }
- ListElement{ longitude: "45"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "45"; latitude: "68"; height: "131"; }
- ListElement{ longitude: "45"; latitude: "69"; height: "128"; }
- ListElement{ longitude: "45"; latitude: "70"; height: "131"; }
- ListElement{ longitude: "45"; latitude: "71"; height: "156"; }
- ListElement{ longitude: "45"; latitude: "72"; height: "148"; }
- ListElement{ longitude: "45"; latitude: "73"; height: "148"; }
- ListElement{ longitude: "45"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "45"; latitude: "75"; height: "86"; }
- ListElement{ longitude: "45"; latitude: "76"; height: "72"; }
- ListElement{ longitude: "45"; latitude: "77"; height: "42"; }
- ListElement{ longitude: "45"; latitude: "78"; height: "42"; }
- ListElement{ longitude: "45"; latitude: "79"; height: "84"; }
- ListElement{ longitude: "45"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "45"; latitude: "81"; height: "95"; }
- ListElement{ longitude: "45"; latitude: "82"; height: "94"; }
- ListElement{ longitude: "45"; latitude: "83"; height: "84"; }
- ListElement{ longitude: "45"; latitude: "84"; height: "63"; }
- ListElement{ longitude: "45"; latitude: "85"; height: "21"; }
- ListElement{ longitude: "45"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "45"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "89"; height: "2"; }
- ListElement{ longitude: "45"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "45"; latitude: "92"; height: "39"; }
- ListElement{ longitude: "45"; latitude: "93"; height: "58"; }
- ListElement{ longitude: "45"; latitude: "94"; height: "90"; }
- ListElement{ longitude: "45"; latitude: "95"; height: "103"; }
- ListElement{ longitude: "45"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "45"; latitude: "97"; height: "149"; }
- ListElement{ longitude: "45"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "45"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "46"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "12"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "22"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "23"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "31"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "32"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "35"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "46"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "46"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "46"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "46"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "49"; height: "117"; }
- ListElement{ longitude: "46"; latitude: "50"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "51"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "53"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "46"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "58"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "59"; height: "121"; }
- ListElement{ longitude: "46"; latitude: "60"; height: "118"; }
- ListElement{ longitude: "46"; latitude: "61"; height: "119"; }
- ListElement{ longitude: "46"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "46"; latitude: "63"; height: "118"; }
- ListElement{ longitude: "46"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "46"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "46"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "46"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "46"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "46"; latitude: "70"; height: "137"; }
- ListElement{ longitude: "46"; latitude: "71"; height: "156"; }
- ListElement{ longitude: "46"; latitude: "72"; height: "151"; }
- ListElement{ longitude: "46"; latitude: "73"; height: "152"; }
- ListElement{ longitude: "46"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "46"; latitude: "75"; height: "85"; }
- ListElement{ longitude: "46"; latitude: "76"; height: "46"; }
- ListElement{ longitude: "46"; latitude: "77"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "79"; height: "67"; }
- ListElement{ longitude: "46"; latitude: "80"; height: "98"; }
- ListElement{ longitude: "46"; latitude: "81"; height: "68"; }
- ListElement{ longitude: "46"; latitude: "82"; height: "62"; }
- ListElement{ longitude: "46"; latitude: "83"; height: "62"; }
- ListElement{ longitude: "46"; latitude: "84"; height: "77"; }
- ListElement{ longitude: "46"; latitude: "85"; height: "33"; }
- ListElement{ longitude: "46"; latitude: "86"; height: "20"; }
- ListElement{ longitude: "46"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "46"; latitude: "92"; height: "41"; }
- ListElement{ longitude: "46"; latitude: "93"; height: "70"; }
- ListElement{ longitude: "46"; latitude: "94"; height: "89"; }
- ListElement{ longitude: "46"; latitude: "95"; height: "108"; }
- ListElement{ longitude: "46"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "46"; latitude: "97"; height: "153"; }
- ListElement{ longitude: "46"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "46"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "47"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "9"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "10"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "13"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "14"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "18"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "19"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "20"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "22"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "24"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "28"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "47"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "47"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "47"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "47"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "47"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "51"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "55"; height: "118"; }
- ListElement{ longitude: "47"; latitude: "56"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "58"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "47"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "47"; latitude: "61"; height: "114"; }
- ListElement{ longitude: "47"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "47"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "47"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "47"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "47"; latitude: "66"; height: "121"; }
- ListElement{ longitude: "47"; latitude: "67"; height: "122"; }
- ListElement{ longitude: "47"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "47"; latitude: "69"; height: "128"; }
- ListElement{ longitude: "47"; latitude: "70"; height: "138"; }
- ListElement{ longitude: "47"; latitude: "71"; height: "161"; }
- ListElement{ longitude: "47"; latitude: "72"; height: "157"; }
- ListElement{ longitude: "47"; latitude: "73"; height: "158"; }
- ListElement{ longitude: "47"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "47"; latitude: "75"; height: "98"; }
- ListElement{ longitude: "47"; latitude: "76"; height: "38"; }
- ListElement{ longitude: "47"; latitude: "77"; height: "4"; }
- ListElement{ longitude: "47"; latitude: "78"; height: "16"; }
- ListElement{ longitude: "47"; latitude: "79"; height: "36"; }
- ListElement{ longitude: "47"; latitude: "80"; height: "103"; }
- ListElement{ longitude: "47"; latitude: "81"; height: "83"; }
- ListElement{ longitude: "47"; latitude: "82"; height: "47"; }
- ListElement{ longitude: "47"; latitude: "83"; height: "72"; }
- ListElement{ longitude: "47"; latitude: "84"; height: "97"; }
- ListElement{ longitude: "47"; latitude: "85"; height: "22"; }
- ListElement{ longitude: "47"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "47"; latitude: "87"; height: "2"; }
- ListElement{ longitude: "47"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "47"; latitude: "92"; height: "43"; }
- ListElement{ longitude: "47"; latitude: "93"; height: "76"; }
- ListElement{ longitude: "47"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "47"; latitude: "95"; height: "106"; }
- ListElement{ longitude: "47"; latitude: "96"; height: "143"; }
- ListElement{ longitude: "47"; latitude: "97"; height: "155"; }
- ListElement{ longitude: "47"; latitude: "98"; height: "141"; }
- ListElement{ longitude: "47"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "48"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "2"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "48"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "11"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "12"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "13"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "14"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "16"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "17"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "18"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "19"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "20"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "22"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "27"; height: "127"; }
- ListElement{ longitude: "48"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "30"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "48"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "48"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "48"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "48"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "48"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "48"; latitude: "52"; height: "122"; }
- ListElement{ longitude: "48"; latitude: "53"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "54"; height: "118"; }
- ListElement{ longitude: "48"; latitude: "55"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "56"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "57"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "59"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "60"; height: "113"; }
- ListElement{ longitude: "48"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "48"; latitude: "62"; height: "110"; }
- ListElement{ longitude: "48"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "48"; latitude: "64"; height: "109"; }
- ListElement{ longitude: "48"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "48"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "48"; latitude: "67"; height: "118"; }
- ListElement{ longitude: "48"; latitude: "68"; height: "121"; }
- ListElement{ longitude: "48"; latitude: "69"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "48"; latitude: "71"; height: "145"; }
- ListElement{ longitude: "48"; latitude: "72"; height: "154"; }
- ListElement{ longitude: "48"; latitude: "73"; height: "153"; }
- ListElement{ longitude: "48"; latitude: "74"; height: "125"; }
- ListElement{ longitude: "48"; latitude: "75"; height: "106"; }
- ListElement{ longitude: "48"; latitude: "76"; height: "52"; }
- ListElement{ longitude: "48"; latitude: "77"; height: "6"; }
- ListElement{ longitude: "48"; latitude: "78"; height: "6"; }
- ListElement{ longitude: "48"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "80"; height: "67"; }
- ListElement{ longitude: "48"; latitude: "81"; height: "81"; }
- ListElement{ longitude: "48"; latitude: "82"; height: "57"; }
- ListElement{ longitude: "48"; latitude: "83"; height: "93"; }
- ListElement{ longitude: "48"; latitude: "84"; height: "58"; }
- ListElement{ longitude: "48"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "48"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "88"; height: "2"; }
- ListElement{ longitude: "48"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "91"; height: "1"; }
- ListElement{ longitude: "48"; latitude: "92"; height: "45"; }
- ListElement{ longitude: "48"; latitude: "93"; height: "80"; }
- ListElement{ longitude: "48"; latitude: "94"; height: "91"; }
- ListElement{ longitude: "48"; latitude: "95"; height: "97"; }
- ListElement{ longitude: "48"; latitude: "96"; height: "136"; }
- ListElement{ longitude: "48"; latitude: "97"; height: "148"; }
- ListElement{ longitude: "48"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "48"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "49"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "49"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "49"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "49"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "12"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "13"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "15"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "16"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "17"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "18"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "19"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "20"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "21"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "22"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "23"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "49"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "49"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "49"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "49"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "49"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "42"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "49"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "48"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "49"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "49"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "49"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "49"; latitude: "54"; height: "116"; }
- ListElement{ longitude: "49"; latitude: "55"; height: "111"; }
- ListElement{ longitude: "49"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "57"; height: "108"; }
- ListElement{ longitude: "49"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "49"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "60"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "61"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "49"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "49"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "49"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "49"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "49"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "49"; latitude: "68"; height: "118"; }
- ListElement{ longitude: "49"; latitude: "69"; height: "124"; }
- ListElement{ longitude: "49"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "49"; latitude: "71"; height: "138"; }
- ListElement{ longitude: "49"; latitude: "72"; height: "153"; }
- ListElement{ longitude: "49"; latitude: "73"; height: "156"; }
- ListElement{ longitude: "49"; latitude: "74"; height: "148"; }
- ListElement{ longitude: "49"; latitude: "75"; height: "112"; }
- ListElement{ longitude: "49"; latitude: "76"; height: "83"; }
- ListElement{ longitude: "49"; latitude: "77"; height: "31"; }
- ListElement{ longitude: "49"; latitude: "78"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "79"; height: "9"; }
- ListElement{ longitude: "49"; latitude: "80"; height: "36"; }
- ListElement{ longitude: "49"; latitude: "81"; height: "12"; }
- ListElement{ longitude: "49"; latitude: "82"; height: "15"; }
- ListElement{ longitude: "49"; latitude: "83"; height: "23"; }
- ListElement{ longitude: "49"; latitude: "84"; height: "22"; }
- ListElement{ longitude: "49"; latitude: "85"; height: "9"; }
- ListElement{ longitude: "49"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "49"; latitude: "91"; height: "5"; }
- ListElement{ longitude: "49"; latitude: "92"; height: "22"; }
- ListElement{ longitude: "49"; latitude: "93"; height: "64"; }
- ListElement{ longitude: "49"; latitude: "94"; height: "87"; }
- ListElement{ longitude: "49"; latitude: "95"; height: "89"; }
- ListElement{ longitude: "49"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "49"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "49"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "49"; latitude: "99"; height: "129"; }
- ListElement{ longitude: "50"; latitude: "0"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "1"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "13"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "18"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "50"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "23"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "25"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "26"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "50"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "35"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "50"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "50"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "50"; latitude: "49"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "50"; latitude: "52"; height: "121"; }
- ListElement{ longitude: "50"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "54"; height: "112"; }
- ListElement{ longitude: "50"; latitude: "55"; height: "107"; }
- ListElement{ longitude: "50"; latitude: "56"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "57"; height: "106"; }
- ListElement{ longitude: "50"; latitude: "58"; height: "107"; }
- ListElement{ longitude: "50"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "50"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "62"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "63"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "50"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "50"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "50"; latitude: "68"; height: "117"; }
- ListElement{ longitude: "50"; latitude: "69"; height: "120"; }
- ListElement{ longitude: "50"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "71"; height: "124"; }
- ListElement{ longitude: "50"; latitude: "72"; height: "141"; }
- ListElement{ longitude: "50"; latitude: "73"; height: "150"; }
- ListElement{ longitude: "50"; latitude: "74"; height: "153"; }
- ListElement{ longitude: "50"; latitude: "75"; height: "118"; }
- ListElement{ longitude: "50"; latitude: "76"; height: "85"; }
- ListElement{ longitude: "50"; latitude: "77"; height: "65"; }
- ListElement{ longitude: "50"; latitude: "78"; height: "19"; }
- ListElement{ longitude: "50"; latitude: "79"; height: "18"; }
- ListElement{ longitude: "50"; latitude: "80"; height: "28"; }
- ListElement{ longitude: "50"; latitude: "81"; height: "3"; }
- ListElement{ longitude: "50"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "83"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "89"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "90"; height: "1"; }
- ListElement{ longitude: "50"; latitude: "91"; height: "19"; }
- ListElement{ longitude: "50"; latitude: "92"; height: "10"; }
- ListElement{ longitude: "50"; latitude: "93"; height: "59"; }
- ListElement{ longitude: "50"; latitude: "94"; height: "72"; }
- ListElement{ longitude: "50"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "50"; latitude: "96"; height: "127"; }
- ListElement{ longitude: "50"; latitude: "97"; height: "129"; }
- ListElement{ longitude: "50"; latitude: "98"; height: "132"; }
- ListElement{ longitude: "50"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "17"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "18"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "19"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "20"; height: "118"; }
- ListElement{ longitude: "51"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "27"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "42"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "51"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "51"; latitude: "49"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "51"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "51"; latitude: "52"; height: "120"; }
- ListElement{ longitude: "51"; latitude: "53"; height: "117"; }
- ListElement{ longitude: "51"; latitude: "54"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "55"; height: "105"; }
- ListElement{ longitude: "51"; latitude: "56"; height: "102"; }
- ListElement{ longitude: "51"; latitude: "57"; height: "102"; }
- ListElement{ longitude: "51"; latitude: "58"; height: "105"; }
- ListElement{ longitude: "51"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "51"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "51"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "64"; height: "109"; }
- ListElement{ longitude: "51"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "51"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "51"; latitude: "69"; height: "118"; }
- ListElement{ longitude: "51"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "51"; latitude: "71"; height: "121"; }
- ListElement{ longitude: "51"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "51"; latitude: "73"; height: "151"; }
- ListElement{ longitude: "51"; latitude: "74"; height: "153"; }
- ListElement{ longitude: "51"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "51"; latitude: "76"; height: "98"; }
- ListElement{ longitude: "51"; latitude: "77"; height: "64"; }
- ListElement{ longitude: "51"; latitude: "78"; height: "32"; }
- ListElement{ longitude: "51"; latitude: "79"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "80"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "82"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "83"; height: "6"; }
- ListElement{ longitude: "51"; latitude: "84"; height: "8"; }
- ListElement{ longitude: "51"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "87"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "88"; height: "1"; }
- ListElement{ longitude: "51"; latitude: "89"; height: "13"; }
- ListElement{ longitude: "51"; latitude: "90"; height: "15"; }
- ListElement{ longitude: "51"; latitude: "91"; height: "22"; }
- ListElement{ longitude: "51"; latitude: "92"; height: "33"; }
- ListElement{ longitude: "51"; latitude: "93"; height: "67"; }
- ListElement{ longitude: "51"; latitude: "94"; height: "69"; }
- ListElement{ longitude: "51"; latitude: "95"; height: "110"; }
- ListElement{ longitude: "51"; latitude: "96"; height: "125"; }
- ListElement{ longitude: "51"; latitude: "97"; height: "127"; }
- ListElement{ longitude: "51"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "51"; latitude: "99"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "52"; latitude: "2"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "24"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "26"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "31"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "52"; latitude: "41"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "52"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "52"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "52"; latitude: "50"; height: "123"; }
- ListElement{ longitude: "52"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "52"; height: "119"; }
- ListElement{ longitude: "52"; latitude: "53"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "54"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "55"; height: "106"; }
- ListElement{ longitude: "52"; latitude: "56"; height: "101"; }
- ListElement{ longitude: "52"; latitude: "57"; height: "101"; }
- ListElement{ longitude: "52"; latitude: "58"; height: "104"; }
- ListElement{ longitude: "52"; latitude: "59"; height: "107"; }
- ListElement{ longitude: "52"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "52"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "52"; latitude: "62"; height: "112"; }
- ListElement{ longitude: "52"; latitude: "63"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "52"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "52"; latitude: "66"; height: "114"; }
- ListElement{ longitude: "52"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "52"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "52"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "52"; latitude: "72"; height: "126"; }
- ListElement{ longitude: "52"; latitude: "73"; height: "146"; }
- ListElement{ longitude: "52"; latitude: "74"; height: "152"; }
- ListElement{ longitude: "52"; latitude: "75"; height: "148"; }
- ListElement{ longitude: "52"; latitude: "76"; height: "117"; }
- ListElement{ longitude: "52"; latitude: "77"; height: "93"; }
- ListElement{ longitude: "52"; latitude: "78"; height: "72"; }
- ListElement{ longitude: "52"; latitude: "79"; height: "50"; }
- ListElement{ longitude: "52"; latitude: "80"; height: "16"; }
- ListElement{ longitude: "52"; latitude: "81"; height: "1"; }
- ListElement{ longitude: "52"; latitude: "82"; height: "3"; }
- ListElement{ longitude: "52"; latitude: "83"; height: "6"; }
- ListElement{ longitude: "52"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "52"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "52"; latitude: "86"; height: "4"; }
- ListElement{ longitude: "52"; latitude: "87"; height: "4"; }
- ListElement{ longitude: "52"; latitude: "88"; height: "7"; }
- ListElement{ longitude: "52"; latitude: "89"; height: "42"; }
- ListElement{ longitude: "52"; latitude: "90"; height: "52"; }
- ListElement{ longitude: "52"; latitude: "91"; height: "47"; }
- ListElement{ longitude: "52"; latitude: "92"; height: "46"; }
- ListElement{ longitude: "52"; latitude: "93"; height: "61"; }
- ListElement{ longitude: "52"; latitude: "94"; height: "73"; }
- ListElement{ longitude: "52"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "52"; latitude: "96"; height: "121"; }
- ListElement{ longitude: "52"; latitude: "97"; height: "127"; }
- ListElement{ longitude: "52"; latitude: "98"; height: "129"; }
- ListElement{ longitude: "52"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "1"; height: "117"; }
- ListElement{ longitude: "53"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "53"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "17"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "21"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "53"; latitude: "27"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "53"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "53"; latitude: "30"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "31"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "32"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "53"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "53"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "50"; height: "122"; }
- ListElement{ longitude: "53"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "53"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "53"; latitude: "53"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "54"; height: "106"; }
- ListElement{ longitude: "53"; latitude: "55"; height: "108"; }
- ListElement{ longitude: "53"; latitude: "56"; height: "105"; }
- ListElement{ longitude: "53"; latitude: "57"; height: "104"; }
- ListElement{ longitude: "53"; latitude: "58"; height: "103"; }
- ListElement{ longitude: "53"; latitude: "59"; height: "107"; }
- ListElement{ longitude: "53"; latitude: "60"; height: "109"; }
- ListElement{ longitude: "53"; latitude: "61"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "62"; height: "111"; }
- ListElement{ longitude: "53"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "53"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "53"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "53"; latitude: "69"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "70"; height: "114"; }
- ListElement{ longitude: "53"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "53"; latitude: "73"; height: "133"; }
- ListElement{ longitude: "53"; latitude: "74"; height: "150"; }
- ListElement{ longitude: "53"; latitude: "75"; height: "154"; }
- ListElement{ longitude: "53"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "53"; latitude: "77"; height: "103"; }
- ListElement{ longitude: "53"; latitude: "78"; height: "97"; }
- ListElement{ longitude: "53"; latitude: "79"; height: "94"; }
- ListElement{ longitude: "53"; latitude: "80"; height: "54"; }
- ListElement{ longitude: "53"; latitude: "81"; height: "17"; }
- ListElement{ longitude: "53"; latitude: "82"; height: "5"; }
- ListElement{ longitude: "53"; latitude: "83"; height: "4"; }
- ListElement{ longitude: "53"; latitude: "84"; height: "1"; }
- ListElement{ longitude: "53"; latitude: "85"; height: "1"; }
- ListElement{ longitude: "53"; latitude: "86"; height: "19"; }
- ListElement{ longitude: "53"; latitude: "87"; height: "9"; }
- ListElement{ longitude: "53"; latitude: "88"; height: "25"; }
- ListElement{ longitude: "53"; latitude: "89"; height: "40"; }
- ListElement{ longitude: "53"; latitude: "90"; height: "55"; }
- ListElement{ longitude: "53"; latitude: "91"; height: "54"; }
- ListElement{ longitude: "53"; latitude: "92"; height: "53"; }
- ListElement{ longitude: "53"; latitude: "93"; height: "69"; }
- ListElement{ longitude: "53"; latitude: "94"; height: "100"; }
- ListElement{ longitude: "53"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "53"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "53"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "53"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "53"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "0"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "2"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "6"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "9"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "13"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "18"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "19"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "26"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "54"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "54"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "54"; latitude: "39"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "54"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "54"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "54"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "54"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "54"; latitude: "53"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "54"; height: "96"; }
- ListElement{ longitude: "54"; latitude: "55"; height: "107"; }
- ListElement{ longitude: "54"; latitude: "56"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "57"; height: "105"; }
- ListElement{ longitude: "54"; latitude: "58"; height: "105"; }
- ListElement{ longitude: "54"; latitude: "59"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "54"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "54"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "63"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "64"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "65"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "54"; latitude: "67"; height: "113"; }
- ListElement{ longitude: "54"; latitude: "68"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "69"; height: "115"; }
- ListElement{ longitude: "54"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "54"; latitude: "72"; height: "112"; }
- ListElement{ longitude: "54"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "54"; latitude: "74"; height: "140"; }
- ListElement{ longitude: "54"; latitude: "75"; height: "151"; }
- ListElement{ longitude: "54"; latitude: "76"; height: "150"; }
- ListElement{ longitude: "54"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "54"; latitude: "78"; height: "104"; }
- ListElement{ longitude: "54"; latitude: "79"; height: "102"; }
- ListElement{ longitude: "54"; latitude: "80"; height: "90"; }
- ListElement{ longitude: "54"; latitude: "81"; height: "46"; }
- ListElement{ longitude: "54"; latitude: "82"; height: "37"; }
- ListElement{ longitude: "54"; latitude: "83"; height: "30"; }
- ListElement{ longitude: "54"; latitude: "84"; height: "24"; }
- ListElement{ longitude: "54"; latitude: "85"; height: "16"; }
- ListElement{ longitude: "54"; latitude: "86"; height: "18"; }
- ListElement{ longitude: "54"; latitude: "87"; height: "46"; }
- ListElement{ longitude: "54"; latitude: "88"; height: "26"; }
- ListElement{ longitude: "54"; latitude: "89"; height: "28"; }
- ListElement{ longitude: "54"; latitude: "90"; height: "60"; }
- ListElement{ longitude: "54"; latitude: "91"; height: "51"; }
- ListElement{ longitude: "54"; latitude: "92"; height: "54"; }
- ListElement{ longitude: "54"; latitude: "93"; height: "108"; }
- ListElement{ longitude: "54"; latitude: "94"; height: "131"; }
- ListElement{ longitude: "54"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "54"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "54"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "54"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "54"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "55"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "8"; height: "129"; }
- ListElement{ longitude: "55"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "55"; latitude: "10"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "11"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "55"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "31"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "32"; height: "116"; }
- ListElement{ longitude: "55"; latitude: "33"; height: "120"; }
- ListElement{ longitude: "55"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "35"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "55"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "55"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "55"; latitude: "48"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "55"; latitude: "52"; height: "117"; }
- ListElement{ longitude: "55"; latitude: "53"; height: "114"; }
- ListElement{ longitude: "55"; latitude: "54"; height: "112"; }
- ListElement{ longitude: "55"; latitude: "55"; height: "115"; }
- ListElement{ longitude: "55"; latitude: "56"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "57"; height: "112"; }
- ListElement{ longitude: "55"; latitude: "58"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "60"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "61"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "55"; latitude: "63"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "64"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "55"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "55"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "55"; latitude: "72"; height: "109"; }
- ListElement{ longitude: "55"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "55"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "75"; height: "145"; }
- ListElement{ longitude: "55"; latitude: "76"; height: "156"; }
- ListElement{ longitude: "55"; latitude: "77"; height: "161"; }
- ListElement{ longitude: "55"; latitude: "78"; height: "148"; }
- ListElement{ longitude: "55"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "55"; latitude: "80"; height: "99"; }
- ListElement{ longitude: "55"; latitude: "81"; height: "90"; }
- ListElement{ longitude: "55"; latitude: "82"; height: "59"; }
- ListElement{ longitude: "55"; latitude: "83"; height: "48"; }
- ListElement{ longitude: "55"; latitude: "84"; height: "35"; }
- ListElement{ longitude: "55"; latitude: "85"; height: "9"; }
- ListElement{ longitude: "55"; latitude: "86"; height: "1"; }
- ListElement{ longitude: "55"; latitude: "87"; height: "32"; }
- ListElement{ longitude: "55"; latitude: "88"; height: "55"; }
- ListElement{ longitude: "55"; latitude: "89"; height: "52"; }
- ListElement{ longitude: "55"; latitude: "90"; height: "55"; }
- ListElement{ longitude: "55"; latitude: "91"; height: "70"; }
- ListElement{ longitude: "55"; latitude: "92"; height: "90"; }
- ListElement{ longitude: "55"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "55"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "55"; latitude: "95"; height: "118"; }
- ListElement{ longitude: "55"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "55"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "55"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "1"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "2"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "6"; height: "124"; }
- ListElement{ longitude: "56"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "12"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "56"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "56"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "29"; height: "120"; }
- ListElement{ longitude: "56"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "33"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "34"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "37"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "38"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "56"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "56"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "48"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "56"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "51"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "52"; height: "123"; }
- ListElement{ longitude: "56"; latitude: "53"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "54"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "56"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "57"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "56"; latitude: "59"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "56"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "56"; latitude: "63"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "56"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "68"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "56"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "56"; latitude: "71"; height: "107"; }
- ListElement{ longitude: "56"; latitude: "72"; height: "106"; }
- ListElement{ longitude: "56"; latitude: "73"; height: "112"; }
- ListElement{ longitude: "56"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "56"; latitude: "75"; height: "129"; }
- ListElement{ longitude: "56"; latitude: "76"; height: "142"; }
- ListElement{ longitude: "56"; latitude: "77"; height: "164"; }
- ListElement{ longitude: "56"; latitude: "78"; height: "167"; }
- ListElement{ longitude: "56"; latitude: "79"; height: "152"; }
- ListElement{ longitude: "56"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "56"; latitude: "81"; height: "118"; }
- ListElement{ longitude: "56"; latitude: "82"; height: "99"; }
- ListElement{ longitude: "56"; latitude: "83"; height: "102"; }
- ListElement{ longitude: "56"; latitude: "84"; height: "102"; }
- ListElement{ longitude: "56"; latitude: "85"; height: "88"; }
- ListElement{ longitude: "56"; latitude: "86"; height: "73"; }
- ListElement{ longitude: "56"; latitude: "87"; height: "66"; }
- ListElement{ longitude: "56"; latitude: "88"; height: "56"; }
- ListElement{ longitude: "56"; latitude: "89"; height: "51"; }
- ListElement{ longitude: "56"; latitude: "90"; height: "73"; }
- ListElement{ longitude: "56"; latitude: "91"; height: "104"; }
- ListElement{ longitude: "56"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "56"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "56"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "56"; latitude: "95"; height: "122"; }
- ListElement{ longitude: "56"; latitude: "96"; height: "126"; }
- ListElement{ longitude: "56"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "56"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "56"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "6"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "9"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "10"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "57"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "13"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "14"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "16"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "26"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "57"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "57"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "57"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "57"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "57"; latitude: "39"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "40"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "57"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "52"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "53"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "57"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "56"; height: "120"; }
- ListElement{ longitude: "57"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "57"; latitude: "59"; height: "115"; }
- ListElement{ longitude: "57"; latitude: "60"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "61"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "63"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "57"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "57"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "57"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "57"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "57"; latitude: "72"; height: "110"; }
- ListElement{ longitude: "57"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "57"; latitude: "74"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "57"; latitude: "76"; height: "133"; }
- ListElement{ longitude: "57"; latitude: "77"; height: "139"; }
- ListElement{ longitude: "57"; latitude: "78"; height: "148"; }
- ListElement{ longitude: "57"; latitude: "79"; height: "161"; }
- ListElement{ longitude: "57"; latitude: "80"; height: "167"; }
- ListElement{ longitude: "57"; latitude: "81"; height: "167"; }
- ListElement{ longitude: "57"; latitude: "82"; height: "164"; }
- ListElement{ longitude: "57"; latitude: "83"; height: "152"; }
- ListElement{ longitude: "57"; latitude: "84"; height: "143"; }
- ListElement{ longitude: "57"; latitude: "85"; height: "138"; }
- ListElement{ longitude: "57"; latitude: "86"; height: "102"; }
- ListElement{ longitude: "57"; latitude: "87"; height: "94"; }
- ListElement{ longitude: "57"; latitude: "88"; height: "81"; }
- ListElement{ longitude: "57"; latitude: "89"; height: "81"; }
- ListElement{ longitude: "57"; latitude: "90"; height: "91"; }
- ListElement{ longitude: "57"; latitude: "91"; height: "99"; }
- ListElement{ longitude: "57"; latitude: "92"; height: "107"; }
- ListElement{ longitude: "57"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "57"; latitude: "94"; height: "126"; }
- ListElement{ longitude: "57"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "57"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "57"; latitude: "97"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "57"; latitude: "99"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "9"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "10"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "11"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "13"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "15"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "58"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "23"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "26"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "28"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "32"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "34"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "36"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "38"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "40"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "58"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "58"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "58"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "58"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "58"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "58"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "58"; latitude: "59"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "60"; height: "118"; }
- ListElement{ longitude: "58"; latitude: "61"; height: "116"; }
- ListElement{ longitude: "58"; latitude: "62"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "58"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "68"; height: "114"; }
- ListElement{ longitude: "58"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "58"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "58"; latitude: "71"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "72"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "58"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "58"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "58"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "58"; latitude: "79"; height: "139"; }
- ListElement{ longitude: "58"; latitude: "80"; height: "142"; }
- ListElement{ longitude: "58"; latitude: "81"; height: "149"; }
- ListElement{ longitude: "58"; latitude: "82"; height: "153"; }
- ListElement{ longitude: "58"; latitude: "83"; height: "149"; }
- ListElement{ longitude: "58"; latitude: "84"; height: "141"; }
- ListElement{ longitude: "58"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "58"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "58"; latitude: "87"; height: "94"; }
- ListElement{ longitude: "58"; latitude: "88"; height: "83"; }
- ListElement{ longitude: "58"; latitude: "89"; height: "89"; }
- ListElement{ longitude: "58"; latitude: "90"; height: "98"; }
- ListElement{ longitude: "58"; latitude: "91"; height: "109"; }
- ListElement{ longitude: "58"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "58"; latitude: "93"; height: "126"; }
- ListElement{ longitude: "58"; latitude: "94"; height: "128"; }
- ListElement{ longitude: "58"; latitude: "95"; height: "127"; }
- ListElement{ longitude: "58"; latitude: "96"; height: "129"; }
- ListElement{ longitude: "58"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "58"; latitude: "98"; height: "135"; }
- ListElement{ longitude: "58"; latitude: "99"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "13"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "14"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "15"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "19"; height: "118"; }
- ListElement{ longitude: "59"; latitude: "20"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "23"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "59"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "30"; height: "105"; }
- ListElement{ longitude: "59"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "33"; height: "121"; }
- ListElement{ longitude: "59"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "35"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "36"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "37"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "39"; height: "130"; }
- ListElement{ longitude: "59"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "59"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "46"; height: "129"; }
- ListElement{ longitude: "59"; latitude: "47"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "59"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "59"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "59"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "59"; latitude: "52"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "53"; height: "129"; }
- ListElement{ longitude: "59"; latitude: "54"; height: "128"; }
- ListElement{ longitude: "59"; latitude: "55"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "59"; latitude: "59"; height: "115"; }
- ListElement{ longitude: "59"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "59"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "62"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "63"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "67"; height: "114"; }
- ListElement{ longitude: "59"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "59"; latitude: "69"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "59"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "59"; latitude: "72"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "73"; height: "116"; }
- ListElement{ longitude: "59"; latitude: "74"; height: "117"; }
- ListElement{ longitude: "59"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "59"; latitude: "77"; height: "118"; }
- ListElement{ longitude: "59"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "59"; latitude: "80"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "81"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "82"; height: "132"; }
- ListElement{ longitude: "59"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "59"; latitude: "84"; height: "133"; }
- ListElement{ longitude: "59"; latitude: "85"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "86"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "87"; height: "105"; }
- ListElement{ longitude: "59"; latitude: "88"; height: "92"; }
- ListElement{ longitude: "59"; latitude: "89"; height: "95"; }
- ListElement{ longitude: "59"; latitude: "90"; height: "100"; }
- ListElement{ longitude: "59"; latitude: "91"; height: "111"; }
- ListElement{ longitude: "59"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "59"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "59"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "59"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "59"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "59"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "59"; latitude: "98"; height: "138"; }
- ListElement{ longitude: "59"; latitude: "99"; height: "135"; }
- ListElement{ longitude: "60"; latitude: "0"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "3"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "6"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "8"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "12"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "13"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "14"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "15"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "17"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "20"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "60"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "25"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "30"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "31"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "32"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "34"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "35"; height: "129"; }
- ListElement{ longitude: "60"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "37"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "38"; height: "128"; }
- ListElement{ longitude: "60"; latitude: "39"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "60"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "60"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "60"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "60"; latitude: "50"; height: "139"; }
- ListElement{ longitude: "60"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "60"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "60"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "55"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "58"; height: "116"; }
- ListElement{ longitude: "60"; latitude: "59"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "60"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "62"; height: "114"; }
- ListElement{ longitude: "60"; latitude: "63"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "64"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "60"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "60"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "71"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "72"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "73"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "75"; height: "117"; }
- ListElement{ longitude: "60"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "77"; height: "123"; }
- ListElement{ longitude: "60"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "79"; height: "125"; }
- ListElement{ longitude: "60"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "81"; height: "124"; }
- ListElement{ longitude: "60"; latitude: "82"; height: "132"; }
- ListElement{ longitude: "60"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "60"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "60"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "86"; height: "113"; }
- ListElement{ longitude: "60"; latitude: "87"; height: "102"; }
- ListElement{ longitude: "60"; latitude: "88"; height: "98"; }
- ListElement{ longitude: "60"; latitude: "89"; height: "103"; }
- ListElement{ longitude: "60"; latitude: "90"; height: "112"; }
- ListElement{ longitude: "60"; latitude: "91"; height: "114"; }
- ListElement{ longitude: "60"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "60"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "60"; latitude: "94"; height: "127"; }
- ListElement{ longitude: "60"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "60"; latitude: "96"; height: "137"; }
- ListElement{ longitude: "60"; latitude: "97"; height: "139"; }
- ListElement{ longitude: "60"; latitude: "98"; height: "140"; }
- ListElement{ longitude: "60"; latitude: "99"; height: "138"; }
- ListElement{ longitude: "61"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "1"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "3"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "5"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "6"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "7"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "8"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "9"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "11"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "12"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "14"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "15"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "16"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "18"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "19"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "20"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "24"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "27"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "28"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "29"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "31"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "32"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "33"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "34"; height: "127"; }
- ListElement{ longitude: "61"; latitude: "35"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "36"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "37"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "38"; height: "129"; }
- ListElement{ longitude: "61"; latitude: "39"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "41"; height: "107"; }
- ListElement{ longitude: "61"; latitude: "42"; height: "98"; }
- ListElement{ longitude: "61"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "44"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "61"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "61"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "61"; latitude: "50"; height: "138"; }
- ListElement{ longitude: "61"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "61"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "61"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "61"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "61"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "61"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "61"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "61"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "63"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "67"; height: "108"; }
- ListElement{ longitude: "61"; latitude: "68"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "69"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "71"; height: "112"; }
- ListElement{ longitude: "61"; latitude: "72"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "73"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "61"; latitude: "77"; height: "121"; }
- ListElement{ longitude: "61"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "79"; height: "122"; }
- ListElement{ longitude: "61"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "61"; latitude: "82"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "83"; height: "128"; }
- ListElement{ longitude: "61"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "86"; height: "116"; }
- ListElement{ longitude: "61"; latitude: "87"; height: "112"; }
- ListElement{ longitude: "61"; latitude: "88"; height: "110"; }
- ListElement{ longitude: "61"; latitude: "89"; height: "109"; }
- ListElement{ longitude: "61"; latitude: "90"; height: "113"; }
- ListElement{ longitude: "61"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "61"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "61"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "61"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "61"; latitude: "96"; height: "131"; }
- ListElement{ longitude: "61"; latitude: "97"; height: "144"; }
- ListElement{ longitude: "61"; latitude: "98"; height: "143"; }
- ListElement{ longitude: "61"; latitude: "99"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "0"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "1"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "2"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "4"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "5"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "6"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "7"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "9"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "10"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "11"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "12"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "13"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "14"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "15"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "16"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "17"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "18"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "19"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "20"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "24"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "27"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "29"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "31"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "32"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "35"; height: "130"; }
- ListElement{ longitude: "62"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "41"; height: "106"; }
- ListElement{ longitude: "62"; latitude: "42"; height: "94"; }
- ListElement{ longitude: "62"; latitude: "43"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "47"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "62"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "62"; latitude: "51"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "62"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "62"; latitude: "54"; height: "125"; }
- ListElement{ longitude: "62"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "62"; latitude: "57"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "62"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "62"; latitude: "60"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "61"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "62"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "63"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "62"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "62"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "62"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "62"; latitude: "71"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "72"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "76"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "79"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "80"; height: "121"; }
- ListElement{ longitude: "62"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "62"; latitude: "83"; height: "127"; }
- ListElement{ longitude: "62"; latitude: "84"; height: "124"; }
- ListElement{ longitude: "62"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "62"; latitude: "86"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "62"; latitude: "89"; height: "113"; }
- ListElement{ longitude: "62"; latitude: "90"; height: "114"; }
- ListElement{ longitude: "62"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "62"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "62"; latitude: "95"; height: "118"; }
- ListElement{ longitude: "62"; latitude: "96"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "97"; height: "126"; }
- ListElement{ longitude: "62"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "62"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "1"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "2"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "63"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "5"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "8"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "9"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "11"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "12"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "13"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "14"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "15"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "16"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "17"; height: "120"; }
- ListElement{ longitude: "63"; latitude: "18"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "19"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "22"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "24"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "63"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "30"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "32"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "33"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "34"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "35"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "36"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "37"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "38"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "63"; latitude: "44"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "46"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "47"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "63"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "63"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "63"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "63"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "54"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "55"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "56"; height: "110"; }
- ListElement{ longitude: "63"; latitude: "57"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "63"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "60"; height: "107"; }
- ListElement{ longitude: "63"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "62"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "64"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "65"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "66"; height: "104"; }
- ListElement{ longitude: "63"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "68"; height: "106"; }
- ListElement{ longitude: "63"; latitude: "69"; height: "107"; }
- ListElement{ longitude: "63"; latitude: "70"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "71"; height: "114"; }
- ListElement{ longitude: "63"; latitude: "72"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "73"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "63"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "63"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "80"; height: "125"; }
- ListElement{ longitude: "63"; latitude: "81"; height: "122"; }
- ListElement{ longitude: "63"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "83"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "84"; height: "123"; }
- ListElement{ longitude: "63"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "86"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "87"; height: "115"; }
- ListElement{ longitude: "63"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "63"; latitude: "90"; height: "118"; }
- ListElement{ longitude: "63"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "93"; height: "109"; }
- ListElement{ longitude: "63"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "63"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "63"; latitude: "96"; height: "121"; }
- ListElement{ longitude: "63"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "63"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "63"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "3"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "5"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "8"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "10"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "11"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "12"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "13"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "14"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "15"; height: "117"; }
- ListElement{ longitude: "64"; latitude: "16"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "17"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "23"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "64"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "64"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "64"; latitude: "27"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "30"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "31"; height: "114"; }
- ListElement{ longitude: "64"; latitude: "32"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "33"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "34"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "35"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "36"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "38"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "64"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "64"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "64"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "64"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "64"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "64"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "64"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "64"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "64"; latitude: "53"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "58"; height: "112"; }
- ListElement{ longitude: "64"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "64"; latitude: "60"; height: "107"; }
- ListElement{ longitude: "64"; latitude: "61"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "62"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "63"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "64"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "64"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "64"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "70"; height: "110"; }
- ListElement{ longitude: "64"; latitude: "71"; height: "113"; }
- ListElement{ longitude: "64"; latitude: "72"; height: "115"; }
- ListElement{ longitude: "64"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "75"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "76"; height: "129"; }
- ListElement{ longitude: "64"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "64"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "64"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "64"; latitude: "80"; height: "123"; }
- ListElement{ longitude: "64"; latitude: "81"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "83"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "84"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "85"; height: "121"; }
- ListElement{ longitude: "64"; latitude: "86"; height: "117"; }
- ListElement{ longitude: "64"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "64"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "93"; height: "106"; }
- ListElement{ longitude: "64"; latitude: "94"; height: "111"; }
- ListElement{ longitude: "64"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "64"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "64"; latitude: "97"; height: "118"; }
- ListElement{ longitude: "64"; latitude: "98"; height: "119"; }
- ListElement{ longitude: "64"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "65"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "65"; latitude: "4"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "5"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "7"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "8"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "10"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "11"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "12"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "65"; latitude: "14"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "15"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "16"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "17"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "18"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "19"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "21"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "27"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "29"; height: "108"; }
- ListElement{ longitude: "65"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "31"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "33"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "34"; height: "115"; }
- ListElement{ longitude: "65"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "36"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "65"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "65"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "65"; latitude: "45"; height: "132"; }
- ListElement{ longitude: "65"; latitude: "46"; height: "133"; }
- ListElement{ longitude: "65"; latitude: "47"; height: "134"; }
- ListElement{ longitude: "65"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "65"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "65"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "65"; latitude: "51"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "65"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "65"; latitude: "54"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "55"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "56"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "57"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "58"; height: "113"; }
- ListElement{ longitude: "65"; latitude: "59"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "61"; height: "108"; }
- ListElement{ longitude: "65"; latitude: "62"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "63"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "64"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "65"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "66"; height: "107"; }
- ListElement{ longitude: "65"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "65"; latitude: "68"; height: "104"; }
- ListElement{ longitude: "65"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "65"; latitude: "71"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "65"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "65"; latitude: "76"; height: "132"; }
- ListElement{ longitude: "65"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "65"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "65"; latitude: "80"; height: "124"; }
- ListElement{ longitude: "65"; latitude: "81"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "83"; height: "121"; }
- ListElement{ longitude: "65"; latitude: "84"; height: "121"; }
- ListElement{ longitude: "65"; latitude: "85"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "86"; height: "119"; }
- ListElement{ longitude: "65"; latitude: "87"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "89"; height: "118"; }
- ListElement{ longitude: "65"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "65"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "65"; latitude: "93"; height: "111"; }
- ListElement{ longitude: "65"; latitude: "94"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "95"; height: "110"; }
- ListElement{ longitude: "65"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "65"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "65"; latitude: "99"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "1"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "66"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "66"; latitude: "4"; height: "123"; }
- ListElement{ longitude: "66"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "9"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "10"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "11"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "14"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "15"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "16"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "18"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "19"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "22"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "24"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "27"; height: "102"; }
- ListElement{ longitude: "66"; latitude: "28"; height: "102"; }
- ListElement{ longitude: "66"; latitude: "29"; height: "107"; }
- ListElement{ longitude: "66"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "31"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "34"; height: "113"; }
- ListElement{ longitude: "66"; latitude: "35"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "36"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "66"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "66"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "66"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "66"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "66"; latitude: "47"; height: "134"; }
- ListElement{ longitude: "66"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "49"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "51"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "52"; height: "124"; }
- ListElement{ longitude: "66"; latitude: "53"; height: "125"; }
- ListElement{ longitude: "66"; latitude: "54"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "55"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "56"; height: "118"; }
- ListElement{ longitude: "66"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "66"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "59"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "61"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "62"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "63"; height: "111"; }
- ListElement{ longitude: "66"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "66"; latitude: "65"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "66"; height: "108"; }
- ListElement{ longitude: "66"; latitude: "67"; height: "109"; }
- ListElement{ longitude: "66"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "69"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "70"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "72"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "66"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "66"; latitude: "76"; height: "131"; }
- ListElement{ longitude: "66"; latitude: "77"; height: "134"; }
- ListElement{ longitude: "66"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "66"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "66"; latitude: "80"; height: "126"; }
- ListElement{ longitude: "66"; latitude: "81"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "82"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "83"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "84"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "85"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "86"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "87"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "89"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "66"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "66"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "66"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "66"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "66"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "66"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "66"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "66"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "67"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "3"; height: "126"; }
- ListElement{ longitude: "67"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "8"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "9"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "10"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "67"; latitude: "14"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "18"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "20"; height: "97"; }
- ListElement{ longitude: "67"; latitude: "21"; height: "113"; }
- ListElement{ longitude: "67"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "24"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "27"; height: "105"; }
- ListElement{ longitude: "67"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "67"; latitude: "29"; height: "102"; }
- ListElement{ longitude: "67"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "67"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "32"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "34"; height: "113"; }
- ListElement{ longitude: "67"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "36"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "37"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "39"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "67"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "67"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "67"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "67"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "67"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "67"; latitude: "48"; height: "136"; }
- ListElement{ longitude: "67"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "67"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "67"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "52"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "54"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "55"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "57"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "58"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "59"; height: "104"; }
- ListElement{ longitude: "67"; latitude: "60"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "61"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "62"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "63"; height: "114"; }
- ListElement{ longitude: "67"; latitude: "64"; height: "110"; }
- ListElement{ longitude: "67"; latitude: "65"; height: "109"; }
- ListElement{ longitude: "67"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "67"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "68"; height: "112"; }
- ListElement{ longitude: "67"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "67"; latitude: "72"; height: "118"; }
- ListElement{ longitude: "67"; latitude: "73"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "74"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "75"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "76"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "77"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "78"; height: "132"; }
- ListElement{ longitude: "67"; latitude: "79"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "67"; latitude: "81"; height: "123"; }
- ListElement{ longitude: "67"; latitude: "82"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "83"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "85"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "86"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "87"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "88"; height: "116"; }
- ListElement{ longitude: "67"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "67"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "67"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "67"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "94"; height: "121"; }
- ListElement{ longitude: "67"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "67"; latitude: "96"; height: "124"; }
- ListElement{ longitude: "67"; latitude: "97"; height: "128"; }
- ListElement{ longitude: "67"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "67"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "4"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "5"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "7"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "9"; height: "110"; }
- ListElement{ longitude: "68"; latitude: "10"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "12"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "16"; height: "104"; }
- ListElement{ longitude: "68"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "19"; height: "113"; }
- ListElement{ longitude: "68"; latitude: "20"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "22"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "68"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "68"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "27"; height: "107"; }
- ListElement{ longitude: "68"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "29"; height: "104"; }
- ListElement{ longitude: "68"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "68"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "68"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "68"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "34"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "35"; height: "108"; }
- ListElement{ longitude: "68"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "68"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "43"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "46"; height: "131"; }
- ListElement{ longitude: "68"; latitude: "47"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "48"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "49"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "50"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "52"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "68"; latitude: "54"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "55"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "57"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "59"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "60"; height: "120"; }
- ListElement{ longitude: "68"; latitude: "61"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "63"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "64"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "68"; latitude: "67"; height: "112"; }
- ListElement{ longitude: "68"; latitude: "68"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "69"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "72"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "68"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "68"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "68"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "68"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "68"; latitude: "78"; height: "133"; }
- ListElement{ longitude: "68"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "68"; latitude: "80"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "82"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "83"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "84"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "85"; height: "123"; }
- ListElement{ longitude: "68"; latitude: "86"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "87"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "88"; height: "117"; }
- ListElement{ longitude: "68"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "68"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "68"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "68"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "94"; height: "122"; }
- ListElement{ longitude: "68"; latitude: "95"; height: "124"; }
- ListElement{ longitude: "68"; latitude: "96"; height: "128"; }
- ListElement{ longitude: "68"; latitude: "97"; height: "133"; }
- ListElement{ longitude: "68"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "68"; latitude: "99"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "1"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "5"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "6"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "7"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "8"; height: "113"; }
- ListElement{ longitude: "69"; latitude: "9"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "10"; height: "107"; }
- ListElement{ longitude: "69"; latitude: "11"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "14"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "69"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "21"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "69"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "69"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "25"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "26"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "27"; height: "107"; }
- ListElement{ longitude: "69"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "69"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "69"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "69"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "69"; latitude: "32"; height: "99"; }
- ListElement{ longitude: "69"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "69"; latitude: "34"; height: "104"; }
- ListElement{ longitude: "69"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "69"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "69"; latitude: "37"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "46"; height: "128"; }
- ListElement{ longitude: "69"; latitude: "47"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "69"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "53"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "54"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "55"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "56"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "59"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "60"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "65"; height: "113"; }
- ListElement{ longitude: "69"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "69"; latitude: "67"; height: "116"; }
- ListElement{ longitude: "69"; latitude: "68"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "69"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "72"; height: "121"; }
- ListElement{ longitude: "69"; latitude: "73"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "69"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "69"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "77"; height: "129"; }
- ListElement{ longitude: "69"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "69"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "69"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "81"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "82"; height: "126"; }
- ListElement{ longitude: "69"; latitude: "83"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "84"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "85"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "86"; height: "127"; }
- ListElement{ longitude: "69"; latitude: "87"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "88"; height: "120"; }
- ListElement{ longitude: "69"; latitude: "89"; height: "115"; }
- ListElement{ longitude: "69"; latitude: "90"; height: "115"; }
- ListElement{ longitude: "69"; latitude: "91"; height: "114"; }
- ListElement{ longitude: "69"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "69"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "69"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "69"; latitude: "95"; height: "130"; }
- ListElement{ longitude: "69"; latitude: "96"; height: "133"; }
- ListElement{ longitude: "69"; latitude: "97"; height: "136"; }
- ListElement{ longitude: "69"; latitude: "98"; height: "128"; }
- ListElement{ longitude: "69"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "0"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "70"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "70"; latitude: "6"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "8"; height: "112"; }
- ListElement{ longitude: "70"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "70"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "70"; latitude: "17"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "20"; height: "112"; }
- ListElement{ longitude: "70"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "24"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "25"; height: "109"; }
- ListElement{ longitude: "70"; latitude: "26"; height: "107"; }
- ListElement{ longitude: "70"; latitude: "27"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "28"; height: "104"; }
- ListElement{ longitude: "70"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "70"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "70"; latitude: "31"; height: "97"; }
- ListElement{ longitude: "70"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "33"; height: "99"; }
- ListElement{ longitude: "70"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "70"; latitude: "35"; height: "104"; }
- ListElement{ longitude: "70"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "70"; latitude: "37"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "70"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "70"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "41"; height: "131"; }
- ListElement{ longitude: "70"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "70"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "47"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "70"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "70"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "70"; latitude: "54"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "55"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "56"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "58"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "70"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "70"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "70"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "70"; latitude: "65"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "70"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "70"; latitude: "69"; height: "108"; }
- ListElement{ longitude: "70"; latitude: "70"; height: "102"; }
- ListElement{ longitude: "70"; latitude: "71"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "72"; height: "98"; }
- ListElement{ longitude: "70"; latitude: "73"; height: "115"; }
- ListElement{ longitude: "70"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "70"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "78"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "70"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "70"; latitude: "81"; height: "134"; }
- ListElement{ longitude: "70"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "83"; height: "128"; }
- ListElement{ longitude: "70"; latitude: "84"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "85"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "86"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "87"; height: "127"; }
- ListElement{ longitude: "70"; latitude: "88"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "89"; height: "119"; }
- ListElement{ longitude: "70"; latitude: "90"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "91"; height: "117"; }
- ListElement{ longitude: "70"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "70"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "70"; latitude: "94"; height: "124"; }
- ListElement{ longitude: "70"; latitude: "95"; height: "129"; }
- ListElement{ longitude: "70"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "70"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "70"; latitude: "98"; height: "134"; }
- ListElement{ longitude: "70"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "0"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "1"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "3"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "4"; height: "116"; }
- ListElement{ longitude: "71"; latitude: "5"; height: "114"; }
- ListElement{ longitude: "71"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "71"; latitude: "11"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "12"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "71"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "71"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "18"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "71"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "23"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "25"; height: "111"; }
- ListElement{ longitude: "71"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "71"; latitude: "27"; height: "109"; }
- ListElement{ longitude: "71"; latitude: "28"; height: "105"; }
- ListElement{ longitude: "71"; latitude: "29"; height: "101"; }
- ListElement{ longitude: "71"; latitude: "30"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "32"; height: "102"; }
- ListElement{ longitude: "71"; latitude: "33"; height: "103"; }
- ListElement{ longitude: "71"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "71"; latitude: "35"; height: "105"; }
- ListElement{ longitude: "71"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "71"; latitude: "37"; height: "109"; }
- ListElement{ longitude: "71"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "71"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "40"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "41"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "43"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "45"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "46"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "50"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "51"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "53"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "56"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "57"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "71"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "71"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "63"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "71"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "71"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "71"; latitude: "68"; height: "118"; }
- ListElement{ longitude: "71"; latitude: "69"; height: "93"; }
- ListElement{ longitude: "71"; latitude: "70"; height: "94"; }
- ListElement{ longitude: "71"; latitude: "71"; height: "95"; }
- ListElement{ longitude: "71"; latitude: "72"; height: "92"; }
- ListElement{ longitude: "71"; latitude: "73"; height: "100"; }
- ListElement{ longitude: "71"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "75"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "78"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "71"; latitude: "80"; height: "138"; }
- ListElement{ longitude: "71"; latitude: "81"; height: "134"; }
- ListElement{ longitude: "71"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "71"; latitude: "83"; height: "133"; }
- ListElement{ longitude: "71"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "71"; latitude: "85"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "86"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "71"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "71"; latitude: "89"; height: "124"; }
- ListElement{ longitude: "71"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "71"; latitude: "91"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "71"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "71"; latitude: "94"; height: "125"; }
- ListElement{ longitude: "71"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "71"; latitude: "96"; height: "132"; }
- ListElement{ longitude: "71"; latitude: "97"; height: "138"; }
- ListElement{ longitude: "71"; latitude: "98"; height: "136"; }
- ListElement{ longitude: "71"; latitude: "99"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "2"; height: "124"; }
- ListElement{ longitude: "72"; latitude: "3"; height: "124"; }
- ListElement{ longitude: "72"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "72"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "72"; latitude: "6"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "7"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "11"; height: "104"; }
- ListElement{ longitude: "72"; latitude: "12"; height: "103"; }
- ListElement{ longitude: "72"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "14"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "15"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "16"; height: "102"; }
- ListElement{ longitude: "72"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "26"; height: "111"; }
- ListElement{ longitude: "72"; latitude: "27"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "72"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "31"; height: "105"; }
- ListElement{ longitude: "72"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "33"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "35"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "36"; height: "108"; }
- ListElement{ longitude: "72"; latitude: "37"; height: "107"; }
- ListElement{ longitude: "72"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "72"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "72"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "43"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "72"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "72"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "72"; latitude: "49"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "50"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "53"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "55"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "56"; height: "136"; }
- ListElement{ longitude: "72"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "58"; height: "115"; }
- ListElement{ longitude: "72"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "72"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "72"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "72"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "68"; height: "109"; }
- ListElement{ longitude: "72"; latitude: "69"; height: "101"; }
- ListElement{ longitude: "72"; latitude: "70"; height: "106"; }
- ListElement{ longitude: "72"; latitude: "71"; height: "100"; }
- ListElement{ longitude: "72"; latitude: "72"; height: "91"; }
- ListElement{ longitude: "72"; latitude: "73"; height: "101"; }
- ListElement{ longitude: "72"; latitude: "74"; height: "119"; }
- ListElement{ longitude: "72"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "76"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "77"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "78"; height: "135"; }
- ListElement{ longitude: "72"; latitude: "79"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "80"; height: "141"; }
- ListElement{ longitude: "72"; latitude: "81"; height: "139"; }
- ListElement{ longitude: "72"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "83"; height: "136"; }
- ListElement{ longitude: "72"; latitude: "84"; height: "134"; }
- ListElement{ longitude: "72"; latitude: "85"; height: "133"; }
- ListElement{ longitude: "72"; latitude: "86"; height: "132"; }
- ListElement{ longitude: "72"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "72"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "72"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "72"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "72"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "72"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "72"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "72"; latitude: "95"; height: "126"; }
- ListElement{ longitude: "72"; latitude: "96"; height: "130"; }
- ListElement{ longitude: "72"; latitude: "97"; height: "137"; }
- ListElement{ longitude: "72"; latitude: "98"; height: "138"; }
- ListElement{ longitude: "72"; latitude: "99"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "0"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "2"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "4"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "73"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "7"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "73"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "73"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "73"; latitude: "15"; height: "103"; }
- ListElement{ longitude: "73"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "73"; latitude: "17"; height: "104"; }
- ListElement{ longitude: "73"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "20"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "22"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "25"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "26"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "27"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "28"; height: "113"; }
- ListElement{ longitude: "73"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "73"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "31"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "73"; latitude: "35"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "36"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "37"; height: "106"; }
- ListElement{ longitude: "73"; latitude: "38"; height: "107"; }
- ListElement{ longitude: "73"; latitude: "39"; height: "112"; }
- ListElement{ longitude: "73"; latitude: "40"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "42"; height: "131"; }
- ListElement{ longitude: "73"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "73"; latitude: "48"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "49"; height: "132"; }
- ListElement{ longitude: "73"; latitude: "50"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "51"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "53"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "73"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "73"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "73"; latitude: "58"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "73"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "73"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "73"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "73"; latitude: "67"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "73"; latitude: "69"; height: "97"; }
- ListElement{ longitude: "73"; latitude: "70"; height: "104"; }
- ListElement{ longitude: "73"; latitude: "71"; height: "102"; }
- ListElement{ longitude: "73"; latitude: "72"; height: "92"; }
- ListElement{ longitude: "73"; latitude: "73"; height: "109"; }
- ListElement{ longitude: "73"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "73"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "73"; latitude: "77"; height: "132"; }
- ListElement{ longitude: "73"; latitude: "78"; height: "137"; }
- ListElement{ longitude: "73"; latitude: "79"; height: "140"; }
- ListElement{ longitude: "73"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "73"; latitude: "81"; height: "141"; }
- ListElement{ longitude: "73"; latitude: "82"; height: "140"; }
- ListElement{ longitude: "73"; latitude: "83"; height: "136"; }
- ListElement{ longitude: "73"; latitude: "84"; height: "134"; }
- ListElement{ longitude: "73"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "73"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "73"; latitude: "87"; height: "130"; }
- ListElement{ longitude: "73"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "73"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "73"; latitude: "90"; height: "125"; }
- ListElement{ longitude: "73"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "73"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "73"; latitude: "96"; height: "122"; }
- ListElement{ longitude: "73"; latitude: "97"; height: "131"; }
- ListElement{ longitude: "73"; latitude: "98"; height: "137"; }
- ListElement{ longitude: "73"; latitude: "99"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "74"; latitude: "4"; height: "124"; }
- ListElement{ longitude: "74"; latitude: "5"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "6"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "7"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "8"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "74"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "16"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "74"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "74"; latitude: "20"; height: "110"; }
- ListElement{ longitude: "74"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "22"; height: "112"; }
- ListElement{ longitude: "74"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "74"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "74"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "74"; latitude: "30"; height: "112"; }
- ListElement{ longitude: "74"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "74"; latitude: "32"; height: "108"; }
- ListElement{ longitude: "74"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "74"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "74"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "74"; latitude: "36"; height: "104"; }
- ListElement{ longitude: "74"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "74"; latitude: "38"; height: "109"; }
- ListElement{ longitude: "74"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "74"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "42"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "47"; height: "122"; }
- ListElement{ longitude: "74"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "74"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "74"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "53"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "74"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "74"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "74"; latitude: "58"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "74"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "74"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "64"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "65"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "66"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "67"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "69"; height: "103"; }
- ListElement{ longitude: "74"; latitude: "70"; height: "100"; }
- ListElement{ longitude: "74"; latitude: "71"; height: "97"; }
- ListElement{ longitude: "74"; latitude: "72"; height: "96"; }
- ListElement{ longitude: "74"; latitude: "73"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "74"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "74"; latitude: "77"; height: "133"; }
- ListElement{ longitude: "74"; latitude: "78"; height: "138"; }
- ListElement{ longitude: "74"; latitude: "79"; height: "142"; }
- ListElement{ longitude: "74"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "74"; latitude: "81"; height: "143"; }
- ListElement{ longitude: "74"; latitude: "82"; height: "141"; }
- ListElement{ longitude: "74"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "74"; latitude: "84"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "85"; height: "135"; }
- ListElement{ longitude: "74"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "74"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "74"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "74"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "74"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "74"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "74"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "74"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "74"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "74"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "74"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "74"; latitude: "98"; height: "131"; }
- ListElement{ longitude: "74"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "0"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "1"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "4"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "5"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "75"; latitude: "7"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "8"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "10"; height: "107"; }
- ListElement{ longitude: "75"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "75"; latitude: "12"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "13"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "14"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "15"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "16"; height: "103"; }
- ListElement{ longitude: "75"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "75"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "20"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "75"; latitude: "22"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "23"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "75"; latitude: "30"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "31"; height: "108"; }
- ListElement{ longitude: "75"; latitude: "32"; height: "105"; }
- ListElement{ longitude: "75"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "75"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "75"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "75"; latitude: "37"; height: "104"; }
- ListElement{ longitude: "75"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "75"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "75"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "75"; latitude: "43"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "45"; height: "124"; }
- ListElement{ longitude: "75"; latitude: "46"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "75"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "49"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "75"; latitude: "52"; height: "139"; }
- ListElement{ longitude: "75"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "75"; latitude: "58"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "75"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "75"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "75"; latitude: "65"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "66"; height: "113"; }
- ListElement{ longitude: "75"; latitude: "67"; height: "115"; }
- ListElement{ longitude: "75"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "75"; latitude: "70"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "71"; height: "110"; }
- ListElement{ longitude: "75"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "75"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "75"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "77"; height: "135"; }
- ListElement{ longitude: "75"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "75"; latitude: "79"; height: "144"; }
- ListElement{ longitude: "75"; latitude: "80"; height: "146"; }
- ListElement{ longitude: "75"; latitude: "81"; height: "147"; }
- ListElement{ longitude: "75"; latitude: "82"; height: "140"; }
- ListElement{ longitude: "75"; latitude: "83"; height: "141"; }
- ListElement{ longitude: "75"; latitude: "84"; height: "137"; }
- ListElement{ longitude: "75"; latitude: "85"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "75"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "75"; latitude: "88"; height: "130"; }
- ListElement{ longitude: "75"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "75"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "75"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "75"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "75"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "75"; latitude: "96"; height: "114"; }
- ListElement{ longitude: "75"; latitude: "97"; height: "120"; }
- ListElement{ longitude: "75"; latitude: "98"; height: "127"; }
- ListElement{ longitude: "75"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "0"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "1"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "2"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "3"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "4"; height: "130"; }
- ListElement{ longitude: "76"; latitude: "5"; height: "125"; }
- ListElement{ longitude: "76"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "76"; latitude: "7"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "8"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "76"; latitude: "10"; height: "105"; }
- ListElement{ longitude: "76"; latitude: "11"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "76"; latitude: "13"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "14"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "16"; height: "100"; }
- ListElement{ longitude: "76"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "76"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "76"; latitude: "20"; height: "109"; }
- ListElement{ longitude: "76"; latitude: "21"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "23"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "24"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "76"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "29"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "30"; height: "106"; }
- ListElement{ longitude: "76"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "76"; latitude: "32"; height: "103"; }
- ListElement{ longitude: "76"; latitude: "33"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "76"; latitude: "37"; height: "104"; }
- ListElement{ longitude: "76"; latitude: "38"; height: "107"; }
- ListElement{ longitude: "76"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "76"; latitude: "40"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "41"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "76"; latitude: "43"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "76"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "76"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "76"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "52"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "56"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "58"; height: "134"; }
- ListElement{ longitude: "76"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "76"; latitude: "60"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "76"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "76"; latitude: "65"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "66"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "67"; height: "110"; }
- ListElement{ longitude: "76"; latitude: "68"; height: "111"; }
- ListElement{ longitude: "76"; latitude: "69"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "70"; height: "121"; }
- ListElement{ longitude: "76"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "76"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "76"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "76"; latitude: "75"; height: "131"; }
- ListElement{ longitude: "76"; latitude: "76"; height: "134"; }
- ListElement{ longitude: "76"; latitude: "77"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "78"; height: "140"; }
- ListElement{ longitude: "76"; latitude: "79"; height: "143"; }
- ListElement{ longitude: "76"; latitude: "80"; height: "143"; }
- ListElement{ longitude: "76"; latitude: "81"; height: "144"; }
- ListElement{ longitude: "76"; latitude: "82"; height: "141"; }
- ListElement{ longitude: "76"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "76"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "76"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "76"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "76"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "76"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "76"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "76"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "76"; latitude: "92"; height: "117"; }
- ListElement{ longitude: "76"; latitude: "93"; height: "115"; }
- ListElement{ longitude: "76"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "76"; latitude: "96"; height: "116"; }
- ListElement{ longitude: "76"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "76"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "76"; latitude: "99"; height: "114"; }
- ListElement{ longitude: "77"; latitude: "0"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "1"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "2"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "3"; height: "127"; }
- ListElement{ longitude: "77"; latitude: "4"; height: "130"; }
- ListElement{ longitude: "77"; latitude: "5"; height: "131"; }
- ListElement{ longitude: "77"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "77"; latitude: "9"; height: "110"; }
- ListElement{ longitude: "77"; latitude: "10"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "11"; height: "103"; }
- ListElement{ longitude: "77"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "77"; latitude: "13"; height: "98"; }
- ListElement{ longitude: "77"; latitude: "14"; height: "98"; }
- ListElement{ longitude: "77"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "77"; latitude: "16"; height: "99"; }
- ListElement{ longitude: "77"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "19"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "77"; latitude: "21"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "22"; height: "107"; }
- ListElement{ longitude: "77"; latitude: "23"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "77"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "77"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "28"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "29"; height: "108"; }
- ListElement{ longitude: "77"; latitude: "30"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "32"; height: "101"; }
- ListElement{ longitude: "77"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "77"; latitude: "34"; height: "104"; }
- ListElement{ longitude: "77"; latitude: "35"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "77"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "77"; latitude: "38"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "39"; height: "112"; }
- ListElement{ longitude: "77"; latitude: "40"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "42"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "43"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "77"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "46"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "47"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "48"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "77"; latitude: "50"; height: "131"; }
- ListElement{ longitude: "77"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "54"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "77"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "77"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "59"; height: "130"; }
- ListElement{ longitude: "77"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "77"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "63"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "64"; height: "114"; }
- ListElement{ longitude: "77"; latitude: "65"; height: "111"; }
- ListElement{ longitude: "77"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "77"; latitude: "67"; height: "107"; }
- ListElement{ longitude: "77"; latitude: "68"; height: "106"; }
- ListElement{ longitude: "77"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "77"; latitude: "70"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "77"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "77"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "77"; latitude: "75"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "76"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "77"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "78"; height: "142"; }
- ListElement{ longitude: "77"; latitude: "79"; height: "143"; }
- ListElement{ longitude: "77"; latitude: "80"; height: "141"; }
- ListElement{ longitude: "77"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "77"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "77"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "77"; latitude: "84"; height: "137"; }
- ListElement{ longitude: "77"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "77"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "77"; latitude: "87"; height: "133"; }
- ListElement{ longitude: "77"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "77"; latitude: "89"; height: "128"; }
- ListElement{ longitude: "77"; latitude: "90"; height: "123"; }
- ListElement{ longitude: "77"; latitude: "91"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "92"; height: "118"; }
- ListElement{ longitude: "77"; latitude: "93"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "77"; latitude: "95"; height: "116"; }
- ListElement{ longitude: "77"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "77"; latitude: "97"; height: "120"; }
- ListElement{ longitude: "77"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "77"; latitude: "99"; height: "117"; }
- ListElement{ longitude: "78"; latitude: "0"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "1"; height: "118"; }
- ListElement{ longitude: "78"; latitude: "2"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "3"; height: "125"; }
- ListElement{ longitude: "78"; latitude: "4"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "5"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "6"; height: "126"; }
- ListElement{ longitude: "78"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "8"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "9"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "10"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "11"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "12"; height: "100"; }
- ListElement{ longitude: "78"; latitude: "13"; height: "101"; }
- ListElement{ longitude: "78"; latitude: "14"; height: "102"; }
- ListElement{ longitude: "78"; latitude: "15"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "16"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "17"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "19"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "78"; latitude: "21"; height: "92"; }
- ListElement{ longitude: "78"; latitude: "22"; height: "96"; }
- ListElement{ longitude: "78"; latitude: "23"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "78"; latitude: "26"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "78"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "29"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "78"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "78"; latitude: "32"; height: "99"; }
- ListElement{ longitude: "78"; latitude: "33"; height: "102"; }
- ListElement{ longitude: "78"; latitude: "34"; height: "105"; }
- ListElement{ longitude: "78"; latitude: "35"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "36"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "37"; height: "103"; }
- ListElement{ longitude: "78"; latitude: "38"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "78"; latitude: "40"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "41"; height: "118"; }
- ListElement{ longitude: "78"; latitude: "42"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "44"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "45"; height: "116"; }
- ListElement{ longitude: "78"; latitude: "46"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "78"; latitude: "48"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "50"; height: "127"; }
- ListElement{ longitude: "78"; latitude: "51"; height: "132"; }
- ListElement{ longitude: "78"; latitude: "52"; height: "134"; }
- ListElement{ longitude: "78"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "78"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "56"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "58"; height: "130"; }
- ListElement{ longitude: "78"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "78"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "62"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "63"; height: "117"; }
- ListElement{ longitude: "78"; latitude: "64"; height: "114"; }
- ListElement{ longitude: "78"; latitude: "65"; height: "110"; }
- ListElement{ longitude: "78"; latitude: "66"; height: "109"; }
- ListElement{ longitude: "78"; latitude: "67"; height: "103"; }
- ListElement{ longitude: "78"; latitude: "68"; height: "104"; }
- ListElement{ longitude: "78"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "78"; latitude: "70"; height: "111"; }
- ListElement{ longitude: "78"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "78"; latitude: "74"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "75"; height: "139"; }
- ListElement{ longitude: "78"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "78"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "78"; latitude: "78"; height: "139"; }
- ListElement{ longitude: "78"; latitude: "79"; height: "138"; }
- ListElement{ longitude: "78"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "78"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "82"; height: "133"; }
- ListElement{ longitude: "78"; latitude: "83"; height: "135"; }
- ListElement{ longitude: "78"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "86"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "87"; height: "136"; }
- ListElement{ longitude: "78"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "78"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "78"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "78"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "78"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "78"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "78"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "78"; latitude: "95"; height: "120"; }
- ListElement{ longitude: "78"; latitude: "96"; height: "124"; }
- ListElement{ longitude: "78"; latitude: "97"; height: "125"; }
- ListElement{ longitude: "78"; latitude: "98"; height: "130"; }
- ListElement{ longitude: "78"; latitude: "99"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "0"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "1"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "2"; height: "116"; }
- ListElement{ longitude: "79"; latitude: "3"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "4"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "5"; height: "126"; }
- ListElement{ longitude: "79"; latitude: "6"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "7"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "8"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "9"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "10"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "11"; height: "108"; }
- ListElement{ longitude: "79"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "79"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "79"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "17"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "20"; height: "100"; }
- ListElement{ longitude: "79"; latitude: "21"; height: "94"; }
- ListElement{ longitude: "79"; latitude: "22"; height: "96"; }
- ListElement{ longitude: "79"; latitude: "23"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "24"; height: "111"; }
- ListElement{ longitude: "79"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "26"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "27"; height: "113"; }
- ListElement{ longitude: "79"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "79"; latitude: "29"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "30"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "79"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "79"; latitude: "33"; height: "99"; }
- ListElement{ longitude: "79"; latitude: "34"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "79"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "37"; height: "102"; }
- ListElement{ longitude: "79"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "79"; latitude: "39"; height: "104"; }
- ListElement{ longitude: "79"; latitude: "40"; height: "110"; }
- ListElement{ longitude: "79"; latitude: "41"; height: "115"; }
- ListElement{ longitude: "79"; latitude: "42"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "45"; height: "117"; }
- ListElement{ longitude: "79"; latitude: "46"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "47"; height: "117"; }
- ListElement{ longitude: "79"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "49"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "50"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "51"; height: "128"; }
- ListElement{ longitude: "79"; latitude: "52"; height: "131"; }
- ListElement{ longitude: "79"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "79"; latitude: "54"; height: "133"; }
- ListElement{ longitude: "79"; latitude: "55"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "79"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "79"; latitude: "59"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "61"; height: "121"; }
- ListElement{ longitude: "79"; latitude: "62"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "63"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "64"; height: "118"; }
- ListElement{ longitude: "79"; latitude: "65"; height: "114"; }
- ListElement{ longitude: "79"; latitude: "66"; height: "111"; }
- ListElement{ longitude: "79"; latitude: "67"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "68"; height: "107"; }
- ListElement{ longitude: "79"; latitude: "69"; height: "106"; }
- ListElement{ longitude: "79"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "79"; latitude: "71"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "74"; height: "137"; }
- ListElement{ longitude: "79"; latitude: "75"; height: "138"; }
- ListElement{ longitude: "79"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "79"; latitude: "77"; height: "140"; }
- ListElement{ longitude: "79"; latitude: "78"; height: "137"; }
- ListElement{ longitude: "79"; latitude: "79"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "79"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "82"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "83"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "86"; height: "136"; }
- ListElement{ longitude: "79"; latitude: "87"; height: "134"; }
- ListElement{ longitude: "79"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "79"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "79"; latitude: "90"; height: "127"; }
- ListElement{ longitude: "79"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "79"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "79"; latitude: "93"; height: "119"; }
- ListElement{ longitude: "79"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "79"; latitude: "95"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "96"; height: "123"; }
- ListElement{ longitude: "79"; latitude: "97"; height: "122"; }
- ListElement{ longitude: "79"; latitude: "98"; height: "124"; }
- ListElement{ longitude: "79"; latitude: "99"; height: "118"; }
- ListElement{ longitude: "80"; latitude: "0"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "2"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "3"; height: "114"; }
- ListElement{ longitude: "80"; latitude: "4"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "5"; height: "123"; }
- ListElement{ longitude: "80"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "7"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "9"; height: "118"; }
- ListElement{ longitude: "80"; latitude: "10"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "11"; height: "113"; }
- ListElement{ longitude: "80"; latitude: "12"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "80"; latitude: "19"; height: "105"; }
- ListElement{ longitude: "80"; latitude: "20"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "21"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "22"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "23"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "80"; latitude: "25"; height: "113"; }
- ListElement{ longitude: "80"; latitude: "26"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "80"; latitude: "29"; height: "102"; }
- ListElement{ longitude: "80"; latitude: "30"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "31"; height: "98"; }
- ListElement{ longitude: "80"; latitude: "32"; height: "95"; }
- ListElement{ longitude: "80"; latitude: "33"; height: "97"; }
- ListElement{ longitude: "80"; latitude: "34"; height: "100"; }
- ListElement{ longitude: "80"; latitude: "35"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "36"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "37"; height: "101"; }
- ListElement{ longitude: "80"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "80"; latitude: "39"; height: "106"; }
- ListElement{ longitude: "80"; latitude: "40"; height: "109"; }
- ListElement{ longitude: "80"; latitude: "41"; height: "112"; }
- ListElement{ longitude: "80"; latitude: "42"; height: "115"; }
- ListElement{ longitude: "80"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "46"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "47"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "48"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "80"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "80"; latitude: "52"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "80"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "80"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "80"; latitude: "58"; height: "130"; }
- ListElement{ longitude: "80"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "60"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "61"; height: "123"; }
- ListElement{ longitude: "80"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "63"; height: "122"; }
- ListElement{ longitude: "80"; latitude: "64"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "67"; height: "111"; }
- ListElement{ longitude: "80"; latitude: "68"; height: "108"; }
- ListElement{ longitude: "80"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "80"; latitude: "70"; height: "112"; }
- ListElement{ longitude: "80"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "72"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "80"; latitude: "74"; height: "139"; }
- ListElement{ longitude: "80"; latitude: "75"; height: "144"; }
- ListElement{ longitude: "80"; latitude: "76"; height: "144"; }
- ListElement{ longitude: "80"; latitude: "77"; height: "141"; }
- ListElement{ longitude: "80"; latitude: "78"; height: "136"; }
- ListElement{ longitude: "80"; latitude: "79"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "80"; height: "128"; }
- ListElement{ longitude: "80"; latitude: "81"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "83"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "84"; height: "135"; }
- ListElement{ longitude: "80"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "80"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "80"; latitude: "87"; height: "131"; }
- ListElement{ longitude: "80"; latitude: "88"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "89"; height: "129"; }
- ListElement{ longitude: "80"; latitude: "90"; height: "127"; }
- ListElement{ longitude: "80"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "80"; latitude: "92"; height: "121"; }
- ListElement{ longitude: "80"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "95"; height: "119"; }
- ListElement{ longitude: "80"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "80"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "80"; latitude: "98"; height: "116"; }
- ListElement{ longitude: "80"; latitude: "99"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "0"; height: "107"; }
- ListElement{ longitude: "81"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "81"; latitude: "2"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "3"; height: "109"; }
- ListElement{ longitude: "81"; latitude: "4"; height: "114"; }
- ListElement{ longitude: "81"; latitude: "5"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "6"; height: "121"; }
- ListElement{ longitude: "81"; latitude: "7"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "8"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "9"; height: "129"; }
- ListElement{ longitude: "81"; latitude: "10"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "11"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "12"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "14"; height: "107"; }
- ListElement{ longitude: "81"; latitude: "15"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "81"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "19"; height: "104"; }
- ListElement{ longitude: "81"; latitude: "20"; height: "101"; }
- ListElement{ longitude: "81"; latitude: "21"; height: "102"; }
- ListElement{ longitude: "81"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "23"; height: "106"; }
- ListElement{ longitude: "81"; latitude: "24"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "81"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "27"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "28"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "29"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "30"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "31"; height: "99"; }
- ListElement{ longitude: "81"; latitude: "32"; height: "97"; }
- ListElement{ longitude: "81"; latitude: "33"; height: "93"; }
- ListElement{ longitude: "81"; latitude: "34"; height: "95"; }
- ListElement{ longitude: "81"; latitude: "35"; height: "94"; }
- ListElement{ longitude: "81"; latitude: "36"; height: "95"; }
- ListElement{ longitude: "81"; latitude: "37"; height: "99"; }
- ListElement{ longitude: "81"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "81"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "40"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "41"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "42"; height: "116"; }
- ListElement{ longitude: "81"; latitude: "43"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "44"; height: "119"; }
- ListElement{ longitude: "81"; latitude: "45"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "46"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "47"; height: "119"; }
- ListElement{ longitude: "81"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "49"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "52"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "53"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "54"; height: "128"; }
- ListElement{ longitude: "81"; latitude: "55"; height: "132"; }
- ListElement{ longitude: "81"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "81"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "81"; latitude: "60"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "81"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "63"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "64"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "65"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "66"; height: "116"; }
- ListElement{ longitude: "81"; latitude: "67"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "68"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "69"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "81"; latitude: "71"; height: "117"; }
- ListElement{ longitude: "81"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "81"; latitude: "73"; height: "130"; }
- ListElement{ longitude: "81"; latitude: "74"; height: "141"; }
- ListElement{ longitude: "81"; latitude: "75"; height: "140"; }
- ListElement{ longitude: "81"; latitude: "76"; height: "141"; }
- ListElement{ longitude: "81"; latitude: "77"; height: "138"; }
- ListElement{ longitude: "81"; latitude: "78"; height: "115"; }
- ListElement{ longitude: "81"; latitude: "79"; height: "118"; }
- ListElement{ longitude: "81"; latitude: "80"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "81"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "82"; height: "131"; }
- ListElement{ longitude: "81"; latitude: "83"; height: "133"; }
- ListElement{ longitude: "81"; latitude: "84"; height: "136"; }
- ListElement{ longitude: "81"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "81"; latitude: "86"; height: "134"; }
- ListElement{ longitude: "81"; latitude: "87"; height: "129"; }
- ListElement{ longitude: "81"; latitude: "88"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "89"; height: "127"; }
- ListElement{ longitude: "81"; latitude: "90"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "81"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "81"; latitude: "93"; height: "122"; }
- ListElement{ longitude: "81"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "81"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "81"; latitude: "96"; height: "112"; }
- ListElement{ longitude: "81"; latitude: "97"; height: "108"; }
- ListElement{ longitude: "81"; latitude: "98"; height: "110"; }
- ListElement{ longitude: "81"; latitude: "99"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "0"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "3"; height: "109"; }
- ListElement{ longitude: "82"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "5"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "82"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "9"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "10"; height: "88"; }
- ListElement{ longitude: "82"; latitude: "11"; height: "118"; }
- ListElement{ longitude: "82"; latitude: "12"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "13"; height: "111"; }
- ListElement{ longitude: "82"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "15"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "16"; height: "106"; }
- ListElement{ longitude: "82"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "82"; latitude: "19"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "21"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "22"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "23"; height: "104"; }
- ListElement{ longitude: "82"; latitude: "24"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "25"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "82"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "28"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "29"; height: "107"; }
- ListElement{ longitude: "82"; latitude: "30"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "32"; height: "97"; }
- ListElement{ longitude: "82"; latitude: "33"; height: "95"; }
- ListElement{ longitude: "82"; latitude: "34"; height: "92"; }
- ListElement{ longitude: "82"; latitude: "35"; height: "94"; }
- ListElement{ longitude: "82"; latitude: "36"; height: "96"; }
- ListElement{ longitude: "82"; latitude: "37"; height: "99"; }
- ListElement{ longitude: "82"; latitude: "38"; height: "103"; }
- ListElement{ longitude: "82"; latitude: "39"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "40"; height: "113"; }
- ListElement{ longitude: "82"; latitude: "41"; height: "116"; }
- ListElement{ longitude: "82"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "43"; height: "116"; }
- ListElement{ longitude: "82"; latitude: "44"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "45"; height: "120"; }
- ListElement{ longitude: "82"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "82"; latitude: "48"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "51"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "54"; height: "130"; }
- ListElement{ longitude: "82"; latitude: "55"; height: "130"; }
- ListElement{ longitude: "82"; latitude: "56"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "57"; height: "134"; }
- ListElement{ longitude: "82"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "61"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "62"; height: "125"; }
- ListElement{ longitude: "82"; latitude: "63"; height: "127"; }
- ListElement{ longitude: "82"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "65"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "66"; height: "112"; }
- ListElement{ longitude: "82"; latitude: "67"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "68"; height: "119"; }
- ListElement{ longitude: "82"; latitude: "69"; height: "117"; }
- ListElement{ longitude: "82"; latitude: "70"; height: "113"; }
- ListElement{ longitude: "82"; latitude: "71"; height: "115"; }
- ListElement{ longitude: "82"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "82"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "75"; height: "108"; }
- ListElement{ longitude: "82"; latitude: "76"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "82"; latitude: "78"; height: "100"; }
- ListElement{ longitude: "82"; latitude: "79"; height: "109"; }
- ListElement{ longitude: "82"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "82"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "82"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "82"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "82"; latitude: "84"; height: "139"; }
- ListElement{ longitude: "82"; latitude: "85"; height: "135"; }
- ListElement{ longitude: "82"; latitude: "86"; height: "131"; }
- ListElement{ longitude: "82"; latitude: "87"; height: "128"; }
- ListElement{ longitude: "82"; latitude: "88"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "82"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "82"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "82"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "82"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "82"; latitude: "96"; height: "106"; }
- ListElement{ longitude: "82"; latitude: "97"; height: "102"; }
- ListElement{ longitude: "82"; latitude: "98"; height: "105"; }
- ListElement{ longitude: "82"; latitude: "99"; height: "106"; }
- ListElement{ longitude: "83"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "83"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "83"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "83"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "4"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "6"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "7"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "8"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "9"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "10"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "12"; height: "114"; }
- ListElement{ longitude: "83"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "83"; latitude: "14"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "83"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "18"; height: "100"; }
- ListElement{ longitude: "83"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "83"; latitude: "21"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "22"; height: "99"; }
- ListElement{ longitude: "83"; latitude: "23"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "24"; height: "112"; }
- ListElement{ longitude: "83"; latitude: "25"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "26"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "27"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "28"; height: "114"; }
- ListElement{ longitude: "83"; latitude: "29"; height: "109"; }
- ListElement{ longitude: "83"; latitude: "30"; height: "107"; }
- ListElement{ longitude: "83"; latitude: "31"; height: "102"; }
- ListElement{ longitude: "83"; latitude: "32"; height: "98"; }
- ListElement{ longitude: "83"; latitude: "33"; height: "96"; }
- ListElement{ longitude: "83"; latitude: "34"; height: "93"; }
- ListElement{ longitude: "83"; latitude: "35"; height: "93"; }
- ListElement{ longitude: "83"; latitude: "36"; height: "95"; }
- ListElement{ longitude: "83"; latitude: "37"; height: "100"; }
- ListElement{ longitude: "83"; latitude: "38"; height: "105"; }
- ListElement{ longitude: "83"; latitude: "39"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "40"; height: "115"; }
- ListElement{ longitude: "83"; latitude: "41"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "42"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "43"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "45"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "46"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "83"; latitude: "48"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "49"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "50"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "51"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "52"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "53"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "55"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "56"; height: "134"; }
- ListElement{ longitude: "83"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "58"; height: "136"; }
- ListElement{ longitude: "83"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "83"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "64"; height: "116"; }
- ListElement{ longitude: "83"; latitude: "65"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "66"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "83"; latitude: "68"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "69"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "70"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "71"; height: "118"; }
- ListElement{ longitude: "83"; latitude: "72"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "83"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "83"; latitude: "75"; height: "94"; }
- ListElement{ longitude: "83"; latitude: "76"; height: "111"; }
- ListElement{ longitude: "83"; latitude: "77"; height: "131"; }
- ListElement{ longitude: "83"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "83"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "83"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "83"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "83"; latitude: "82"; height: "142"; }
- ListElement{ longitude: "83"; latitude: "83"; height: "143"; }
- ListElement{ longitude: "83"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "83"; latitude: "85"; height: "137"; }
- ListElement{ longitude: "83"; latitude: "86"; height: "133"; }
- ListElement{ longitude: "83"; latitude: "87"; height: "127"; }
- ListElement{ longitude: "83"; latitude: "88"; height: "125"; }
- ListElement{ longitude: "83"; latitude: "89"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "90"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "83"; latitude: "92"; height: "123"; }
- ListElement{ longitude: "83"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "83"; latitude: "94"; height: "122"; }
- ListElement{ longitude: "83"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "83"; latitude: "96"; height: "104"; }
- ListElement{ longitude: "83"; latitude: "97"; height: "97"; }
- ListElement{ longitude: "83"; latitude: "98"; height: "103"; }
- ListElement{ longitude: "83"; latitude: "99"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "0"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "84"; latitude: "2"; height: "110"; }
- ListElement{ longitude: "84"; latitude: "3"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "4"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "5"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "6"; height: "118"; }
- ListElement{ longitude: "84"; latitude: "7"; height: "124"; }
- ListElement{ longitude: "84"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "9"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "10"; height: "115"; }
- ListElement{ longitude: "84"; latitude: "11"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "12"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "13"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "14"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "17"; height: "98"; }
- ListElement{ longitude: "84"; latitude: "18"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "20"; height: "98"; }
- ListElement{ longitude: "84"; latitude: "21"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "22"; height: "103"; }
- ListElement{ longitude: "84"; latitude: "23"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "24"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "25"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "26"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "27"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "28"; height: "116"; }
- ListElement{ longitude: "84"; latitude: "29"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "30"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "31"; height: "104"; }
- ListElement{ longitude: "84"; latitude: "32"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "33"; height: "100"; }
- ListElement{ longitude: "84"; latitude: "34"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "35"; height: "97"; }
- ListElement{ longitude: "84"; latitude: "36"; height: "99"; }
- ListElement{ longitude: "84"; latitude: "37"; height: "103"; }
- ListElement{ longitude: "84"; latitude: "38"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "39"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "40"; height: "118"; }
- ListElement{ longitude: "84"; latitude: "41"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "42"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "45"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "46"; height: "124"; }
- ListElement{ longitude: "84"; latitude: "47"; height: "127"; }
- ListElement{ longitude: "84"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "49"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "84"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "84"; latitude: "54"; height: "131"; }
- ListElement{ longitude: "84"; latitude: "55"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "56"; height: "135"; }
- ListElement{ longitude: "84"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "84"; latitude: "58"; height: "135"; }
- ListElement{ longitude: "84"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "60"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "64"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "84"; latitude: "67"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "68"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "70"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "71"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "84"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "75"; height: "114"; }
- ListElement{ longitude: "84"; latitude: "76"; height: "109"; }
- ListElement{ longitude: "84"; latitude: "77"; height: "111"; }
- ListElement{ longitude: "84"; latitude: "78"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "79"; height: "129"; }
- ListElement{ longitude: "84"; latitude: "80"; height: "136"; }
- ListElement{ longitude: "84"; latitude: "81"; height: "142"; }
- ListElement{ longitude: "84"; latitude: "82"; height: "148"; }
- ListElement{ longitude: "84"; latitude: "83"; height: "149"; }
- ListElement{ longitude: "84"; latitude: "84"; height: "145"; }
- ListElement{ longitude: "84"; latitude: "85"; height: "142"; }
- ListElement{ longitude: "84"; latitude: "86"; height: "138"; }
- ListElement{ longitude: "84"; latitude: "87"; height: "132"; }
- ListElement{ longitude: "84"; latitude: "88"; height: "128"; }
- ListElement{ longitude: "84"; latitude: "89"; height: "123"; }
- ListElement{ longitude: "84"; latitude: "90"; height: "122"; }
- ListElement{ longitude: "84"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "84"; latitude: "93"; height: "121"; }
- ListElement{ longitude: "84"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "84"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "84"; latitude: "96"; height: "110"; }
- ListElement{ longitude: "84"; latitude: "97"; height: "107"; }
- ListElement{ longitude: "84"; latitude: "98"; height: "113"; }
- ListElement{ longitude: "84"; latitude: "99"; height: "111"; }
- ListElement{ longitude: "85"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "1"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "2"; height: "108"; }
- ListElement{ longitude: "85"; latitude: "3"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "4"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "5"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "6"; height: "119"; }
- ListElement{ longitude: "85"; latitude: "7"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "8"; height: "128"; }
- ListElement{ longitude: "85"; latitude: "9"; height: "117"; }
- ListElement{ longitude: "85"; latitude: "10"; height: "126"; }
- ListElement{ longitude: "85"; latitude: "11"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "12"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "13"; height: "108"; }
- ListElement{ longitude: "85"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "85"; latitude: "15"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "17"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "18"; height: "99"; }
- ListElement{ longitude: "85"; latitude: "19"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "20"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "21"; height: "107"; }
- ListElement{ longitude: "85"; latitude: "22"; height: "111"; }
- ListElement{ longitude: "85"; latitude: "23"; height: "117"; }
- ListElement{ longitude: "85"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "25"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "26"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "27"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "28"; height: "118"; }
- ListElement{ longitude: "85"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "85"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "31"; height: "106"; }
- ListElement{ longitude: "85"; latitude: "32"; height: "103"; }
- ListElement{ longitude: "85"; latitude: "33"; height: "101"; }
- ListElement{ longitude: "85"; latitude: "34"; height: "98"; }
- ListElement{ longitude: "85"; latitude: "35"; height: "100"; }
- ListElement{ longitude: "85"; latitude: "36"; height: "102"; }
- ListElement{ longitude: "85"; latitude: "37"; height: "106"; }
- ListElement{ longitude: "85"; latitude: "38"; height: "110"; }
- ListElement{ longitude: "85"; latitude: "39"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "41"; height: "121"; }
- ListElement{ longitude: "85"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "44"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "45"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "46"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "50"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "52"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "53"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "54"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "55"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "57"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "58"; height: "134"; }
- ListElement{ longitude: "85"; latitude: "59"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "60"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "64"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "85"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "68"; height: "128"; }
- ListElement{ longitude: "85"; latitude: "69"; height: "125"; }
- ListElement{ longitude: "85"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "71"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "85"; latitude: "74"; height: "132"; }
- ListElement{ longitude: "85"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "85"; latitude: "76"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "77"; height: "113"; }
- ListElement{ longitude: "85"; latitude: "78"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "79"; height: "130"; }
- ListElement{ longitude: "85"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "81"; height: "146"; }
- ListElement{ longitude: "85"; latitude: "82"; height: "152"; }
- ListElement{ longitude: "85"; latitude: "83"; height: "154"; }
- ListElement{ longitude: "85"; latitude: "84"; height: "149"; }
- ListElement{ longitude: "85"; latitude: "85"; height: "148"; }
- ListElement{ longitude: "85"; latitude: "86"; height: "141"; }
- ListElement{ longitude: "85"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "85"; latitude: "88"; height: "133"; }
- ListElement{ longitude: "85"; latitude: "89"; height: "131"; }
- ListElement{ longitude: "85"; latitude: "90"; height: "124"; }
- ListElement{ longitude: "85"; latitude: "91"; height: "122"; }
- ListElement{ longitude: "85"; latitude: "92"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "93"; height: "120"; }
- ListElement{ longitude: "85"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "85"; latitude: "96"; height: "115"; }
- ListElement{ longitude: "85"; latitude: "97"; height: "116"; }
- ListElement{ longitude: "85"; latitude: "98"; height: "123"; }
- ListElement{ longitude: "85"; latitude: "99"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "0"; height: "112"; }
- ListElement{ longitude: "86"; latitude: "1"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "2"; height: "106"; }
- ListElement{ longitude: "86"; latitude: "3"; height: "108"; }
- ListElement{ longitude: "86"; latitude: "4"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "5"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "6"; height: "116"; }
- ListElement{ longitude: "86"; latitude: "7"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "8"; height: "122"; }
- ListElement{ longitude: "86"; latitude: "9"; height: "124"; }
- ListElement{ longitude: "86"; latitude: "10"; height: "123"; }
- ListElement{ longitude: "86"; latitude: "11"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "12"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "13"; height: "107"; }
- ListElement{ longitude: "86"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "86"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "86"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "86"; latitude: "18"; height: "101"; }
- ListElement{ longitude: "86"; latitude: "19"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "86"; latitude: "21"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "86"; latitude: "23"; height: "124"; }
- ListElement{ longitude: "86"; latitude: "24"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "25"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "27"; height: "122"; }
- ListElement{ longitude: "86"; latitude: "28"; height: "121"; }
- ListElement{ longitude: "86"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "86"; latitude: "30"; height: "113"; }
- ListElement{ longitude: "86"; latitude: "31"; height: "110"; }
- ListElement{ longitude: "86"; latitude: "32"; height: "107"; }
- ListElement{ longitude: "86"; latitude: "33"; height: "104"; }
- ListElement{ longitude: "86"; latitude: "34"; height: "101"; }
- ListElement{ longitude: "86"; latitude: "35"; height: "103"; }
- ListElement{ longitude: "86"; latitude: "36"; height: "105"; }
- ListElement{ longitude: "86"; latitude: "37"; height: "111"; }
- ListElement{ longitude: "86"; latitude: "38"; height: "115"; }
- ListElement{ longitude: "86"; latitude: "39"; height: "120"; }
- ListElement{ longitude: "86"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "43"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "44"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "46"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "47"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "48"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "49"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "50"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "51"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "86"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "86"; latitude: "55"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "56"; height: "138"; }
- ListElement{ longitude: "86"; latitude: "57"; height: "136"; }
- ListElement{ longitude: "86"; latitude: "58"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "60"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "61"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "62"; height: "135"; }
- ListElement{ longitude: "86"; latitude: "63"; height: "134"; }
- ListElement{ longitude: "86"; latitude: "64"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "86"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "68"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "86"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "86"; latitude: "71"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "72"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "73"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "74"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "76"; height: "127"; }
- ListElement{ longitude: "86"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "86"; latitude: "80"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "81"; height: "143"; }
- ListElement{ longitude: "86"; latitude: "82"; height: "150"; }
- ListElement{ longitude: "86"; latitude: "83"; height: "151"; }
- ListElement{ longitude: "86"; latitude: "84"; height: "153"; }
- ListElement{ longitude: "86"; latitude: "85"; height: "151"; }
- ListElement{ longitude: "86"; latitude: "86"; height: "147"; }
- ListElement{ longitude: "86"; latitude: "87"; height: "144"; }
- ListElement{ longitude: "86"; latitude: "88"; height: "141"; }
- ListElement{ longitude: "86"; latitude: "89"; height: "137"; }
- ListElement{ longitude: "86"; latitude: "90"; height: "132"; }
- ListElement{ longitude: "86"; latitude: "91"; height: "125"; }
- ListElement{ longitude: "86"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "86"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "94"; height: "115"; }
- ListElement{ longitude: "86"; latitude: "95"; height: "112"; }
- ListElement{ longitude: "86"; latitude: "96"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "86"; latitude: "98"; height: "126"; }
- ListElement{ longitude: "86"; latitude: "99"; height: "120"; }
- ListElement{ longitude: "87"; latitude: "0"; height: "110"; }
- ListElement{ longitude: "87"; latitude: "1"; height: "108"; }
- ListElement{ longitude: "87"; latitude: "2"; height: "102"; }
- ListElement{ longitude: "87"; latitude: "3"; height: "102"; }
- ListElement{ longitude: "87"; latitude: "4"; height: "107"; }
- ListElement{ longitude: "87"; latitude: "5"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "6"; height: "110"; }
- ListElement{ longitude: "87"; latitude: "7"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "8"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "9"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "10"; height: "115"; }
- ListElement{ longitude: "87"; latitude: "11"; height: "111"; }
- ListElement{ longitude: "87"; latitude: "12"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "87"; latitude: "15"; height: "100"; }
- ListElement{ longitude: "87"; latitude: "16"; height: "98"; }
- ListElement{ longitude: "87"; latitude: "17"; height: "101"; }
- ListElement{ longitude: "87"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "87"; latitude: "19"; height: "107"; }
- ListElement{ longitude: "87"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "21"; height: "121"; }
- ListElement{ longitude: "87"; latitude: "22"; height: "129"; }
- ListElement{ longitude: "87"; latitude: "23"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "24"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "25"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "26"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "28"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "87"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "87"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "87"; latitude: "32"; height: "112"; }
- ListElement{ longitude: "87"; latitude: "33"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "34"; height: "106"; }
- ListElement{ longitude: "87"; latitude: "35"; height: "108"; }
- ListElement{ longitude: "87"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "87"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "87"; latitude: "38"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "87"; latitude: "40"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "41"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "44"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "45"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "47"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "48"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "49"; height: "132"; }
- ListElement{ longitude: "87"; latitude: "50"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "51"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "52"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "53"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "87"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "87"; latitude: "57"; height: "137"; }
- ListElement{ longitude: "87"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "87"; latitude: "59"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "61"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "62"; height: "135"; }
- ListElement{ longitude: "87"; latitude: "63"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "65"; height: "131"; }
- ListElement{ longitude: "87"; latitude: "66"; height: "134"; }
- ListElement{ longitude: "87"; latitude: "67"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "71"; height: "132"; }
- ListElement{ longitude: "87"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "87"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "87"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "77"; height: "126"; }
- ListElement{ longitude: "87"; latitude: "78"; height: "125"; }
- ListElement{ longitude: "87"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "87"; latitude: "81"; height: "140"; }
- ListElement{ longitude: "87"; latitude: "82"; height: "147"; }
- ListElement{ longitude: "87"; latitude: "83"; height: "151"; }
- ListElement{ longitude: "87"; latitude: "84"; height: "153"; }
- ListElement{ longitude: "87"; latitude: "85"; height: "152"; }
- ListElement{ longitude: "87"; latitude: "86"; height: "151"; }
- ListElement{ longitude: "87"; latitude: "87"; height: "149"; }
- ListElement{ longitude: "87"; latitude: "88"; height: "147"; }
- ListElement{ longitude: "87"; latitude: "89"; height: "143"; }
- ListElement{ longitude: "87"; latitude: "90"; height: "136"; }
- ListElement{ longitude: "87"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "87"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "87"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "94"; height: "113"; }
- ListElement{ longitude: "87"; latitude: "95"; height: "113"; }
- ListElement{ longitude: "87"; latitude: "96"; height: "116"; }
- ListElement{ longitude: "87"; latitude: "97"; height: "118"; }
- ListElement{ longitude: "87"; latitude: "98"; height: "122"; }
- ListElement{ longitude: "87"; latitude: "99"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "0"; height: "108"; }
- ListElement{ longitude: "88"; latitude: "1"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "2"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "4"; height: "103"; }
- ListElement{ longitude: "88"; latitude: "5"; height: "107"; }
- ListElement{ longitude: "88"; latitude: "6"; height: "107"; }
- ListElement{ longitude: "88"; latitude: "7"; height: "112"; }
- ListElement{ longitude: "88"; latitude: "8"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "9"; height: "113"; }
- ListElement{ longitude: "88"; latitude: "10"; height: "109"; }
- ListElement{ longitude: "88"; latitude: "11"; height: "106"; }
- ListElement{ longitude: "88"; latitude: "12"; height: "110"; }
- ListElement{ longitude: "88"; latitude: "13"; height: "105"; }
- ListElement{ longitude: "88"; latitude: "14"; height: "103"; }
- ListElement{ longitude: "88"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "88"; latitude: "16"; height: "101"; }
- ListElement{ longitude: "88"; latitude: "17"; height: "102"; }
- ListElement{ longitude: "88"; latitude: "18"; height: "106"; }
- ListElement{ longitude: "88"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "88"; latitude: "20"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "21"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "22"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "23"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "24"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "25"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "26"; height: "129"; }
- ListElement{ longitude: "88"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "28"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "29"; height: "123"; }
- ListElement{ longitude: "88"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "88"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "32"; height: "114"; }
- ListElement{ longitude: "88"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "88"; latitude: "34"; height: "108"; }
- ListElement{ longitude: "88"; latitude: "35"; height: "109"; }
- ListElement{ longitude: "88"; latitude: "36"; height: "111"; }
- ListElement{ longitude: "88"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "38"; height: "120"; }
- ListElement{ longitude: "88"; latitude: "39"; height: "123"; }
- ListElement{ longitude: "88"; latitude: "40"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "88"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "45"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "47"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "49"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "50"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "51"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "54"; height: "140"; }
- ListElement{ longitude: "88"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "88"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "88"; latitude: "59"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "88"; latitude: "61"; height: "137"; }
- ListElement{ longitude: "88"; latitude: "62"; height: "138"; }
- ListElement{ longitude: "88"; latitude: "63"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "88"; latitude: "65"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "66"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "67"; height: "132"; }
- ListElement{ longitude: "88"; latitude: "68"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "69"; height: "135"; }
- ListElement{ longitude: "88"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "71"; height: "133"; }
- ListElement{ longitude: "88"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "73"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "77"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "88"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "88"; latitude: "80"; height: "131"; }
- ListElement{ longitude: "88"; latitude: "81"; height: "136"; }
- ListElement{ longitude: "88"; latitude: "82"; height: "142"; }
- ListElement{ longitude: "88"; latitude: "83"; height: "146"; }
- ListElement{ longitude: "88"; latitude: "84"; height: "150"; }
- ListElement{ longitude: "88"; latitude: "85"; height: "149"; }
- ListElement{ longitude: "88"; latitude: "86"; height: "149"; }
- ListElement{ longitude: "88"; latitude: "87"; height: "150"; }
- ListElement{ longitude: "88"; latitude: "88"; height: "148"; }
- ListElement{ longitude: "88"; latitude: "89"; height: "147"; }
- ListElement{ longitude: "88"; latitude: "90"; height: "140"; }
- ListElement{ longitude: "88"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "88"; latitude: "92"; height: "124"; }
- ListElement{ longitude: "88"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "88"; latitude: "94"; height: "116"; }
- ListElement{ longitude: "88"; latitude: "95"; height: "117"; }
- ListElement{ longitude: "88"; latitude: "96"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "97"; height: "119"; }
- ListElement{ longitude: "88"; latitude: "98"; height: "125"; }
- ListElement{ longitude: "88"; latitude: "99"; height: "113"; }
- ListElement{ longitude: "89"; latitude: "0"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "1"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "2"; height: "97"; }
- ListElement{ longitude: "89"; latitude: "3"; height: "99"; }
- ListElement{ longitude: "89"; latitude: "4"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "5"; height: "104"; }
- ListElement{ longitude: "89"; latitude: "6"; height: "104"; }
- ListElement{ longitude: "89"; latitude: "7"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "8"; height: "101"; }
- ListElement{ longitude: "89"; latitude: "9"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "10"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "11"; height: "107"; }
- ListElement{ longitude: "89"; latitude: "12"; height: "105"; }
- ListElement{ longitude: "89"; latitude: "13"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "89"; latitude: "15"; height: "103"; }
- ListElement{ longitude: "89"; latitude: "16"; height: "103"; }
- ListElement{ longitude: "89"; latitude: "17"; height: "105"; }
- ListElement{ longitude: "89"; latitude: "18"; height: "108"; }
- ListElement{ longitude: "89"; latitude: "19"; height: "113"; }
- ListElement{ longitude: "89"; latitude: "20"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "21"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "22"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "23"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "24"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "25"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "26"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "28"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "30"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "31"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "32"; height: "115"; }
- ListElement{ longitude: "89"; latitude: "33"; height: "112"; }
- ListElement{ longitude: "89"; latitude: "34"; height: "111"; }
- ListElement{ longitude: "89"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "89"; latitude: "36"; height: "114"; }
- ListElement{ longitude: "89"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "89"; latitude: "38"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "89"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "41"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "42"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "43"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "44"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "47"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "48"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "49"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "51"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "52"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "53"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "89"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "89"; latitude: "59"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "60"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "61"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "62"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "64"; height: "127"; }
- ListElement{ longitude: "89"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "66"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "67"; height: "132"; }
- ListElement{ longitude: "89"; latitude: "68"; height: "135"; }
- ListElement{ longitude: "89"; latitude: "69"; height: "134"; }
- ListElement{ longitude: "89"; latitude: "70"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "71"; height: "136"; }
- ListElement{ longitude: "89"; latitude: "72"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "89"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "75"; height: "126"; }
- ListElement{ longitude: "89"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "77"; height: "125"; }
- ListElement{ longitude: "89"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "89"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "89"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "89"; latitude: "83"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "84"; height: "143"; }
- ListElement{ longitude: "89"; latitude: "85"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "86"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "87"; height: "146"; }
- ListElement{ longitude: "89"; latitude: "88"; height: "147"; }
- ListElement{ longitude: "89"; latitude: "89"; height: "145"; }
- ListElement{ longitude: "89"; latitude: "90"; height: "140"; }
- ListElement{ longitude: "89"; latitude: "91"; height: "133"; }
- ListElement{ longitude: "89"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "89"; latitude: "93"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "94"; height: "123"; }
- ListElement{ longitude: "89"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "89"; latitude: "96"; height: "120"; }
- ListElement{ longitude: "89"; latitude: "97"; height: "117"; }
- ListElement{ longitude: "89"; latitude: "98"; height: "119"; }
- ListElement{ longitude: "89"; latitude: "99"; height: "107"; }
- ListElement{ longitude: "90"; latitude: "0"; height: "102"; }
- ListElement{ longitude: "90"; latitude: "1"; height: "99"; }
- ListElement{ longitude: "90"; latitude: "2"; height: "98"; }
- ListElement{ longitude: "90"; latitude: "3"; height: "99"; }
- ListElement{ longitude: "90"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "90"; latitude: "5"; height: "101"; }
- ListElement{ longitude: "90"; latitude: "6"; height: "101"; }
- ListElement{ longitude: "90"; latitude: "7"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "8"; height: "106"; }
- ListElement{ longitude: "90"; latitude: "9"; height: "105"; }
- ListElement{ longitude: "90"; latitude: "10"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "11"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "12"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "90"; latitude: "14"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "15"; height: "107"; }
- ListElement{ longitude: "90"; latitude: "16"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "17"; height: "109"; }
- ListElement{ longitude: "90"; latitude: "18"; height: "112"; }
- ListElement{ longitude: "90"; latitude: "19"; height: "119"; }
- ListElement{ longitude: "90"; latitude: "20"; height: "122"; }
- ListElement{ longitude: "90"; latitude: "21"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "22"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "23"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "24"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "25"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "26"; height: "134"; }
- ListElement{ longitude: "90"; latitude: "27"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "28"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "29"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "30"; height: "123"; }
- ListElement{ longitude: "90"; latitude: "31"; height: "117"; }
- ListElement{ longitude: "90"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "90"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "35"; height: "111"; }
- ListElement{ longitude: "90"; latitude: "36"; height: "113"; }
- ListElement{ longitude: "90"; latitude: "37"; height: "116"; }
- ListElement{ longitude: "90"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "90"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "90"; latitude: "40"; height: "122"; }
- ListElement{ longitude: "90"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "90"; latitude: "42"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "43"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "44"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "45"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "46"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "47"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "48"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "49"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "52"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "54"; height: "136"; }
- ListElement{ longitude: "90"; latitude: "55"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "56"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "57"; height: "139"; }
- ListElement{ longitude: "90"; latitude: "58"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "59"; height: "134"; }
- ListElement{ longitude: "90"; latitude: "60"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "62"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "64"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "65"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "66"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "67"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "68"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "69"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "70"; height: "133"; }
- ListElement{ longitude: "90"; latitude: "71"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "72"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "73"; height: "132"; }
- ListElement{ longitude: "90"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "90"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "78"; height: "126"; }
- ListElement{ longitude: "90"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "90"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "90"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "90"; latitude: "82"; height: "135"; }
- ListElement{ longitude: "90"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "90"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "90"; latitude: "85"; height: "141"; }
- ListElement{ longitude: "90"; latitude: "86"; height: "143"; }
- ListElement{ longitude: "90"; latitude: "87"; height: "143"; }
- ListElement{ longitude: "90"; latitude: "88"; height: "142"; }
- ListElement{ longitude: "90"; latitude: "89"; height: "140"; }
- ListElement{ longitude: "90"; latitude: "90"; height: "137"; }
- ListElement{ longitude: "90"; latitude: "91"; height: "131"; }
- ListElement{ longitude: "90"; latitude: "92"; height: "127"; }
- ListElement{ longitude: "90"; latitude: "93"; height: "129"; }
- ListElement{ longitude: "90"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "90"; latitude: "95"; height: "86"; }
- ListElement{ longitude: "90"; latitude: "96"; height: "103"; }
- ListElement{ longitude: "90"; latitude: "97"; height: "110"; }
- ListElement{ longitude: "90"; latitude: "98"; height: "108"; }
- ListElement{ longitude: "90"; latitude: "99"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "0"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "1"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "2"; height: "100"; }
- ListElement{ longitude: "91"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "91"; latitude: "5"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "6"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "7"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "8"; height: "99"; }
- ListElement{ longitude: "91"; latitude: "9"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "10"; height: "100"; }
- ListElement{ longitude: "91"; latitude: "11"; height: "102"; }
- ListElement{ longitude: "91"; latitude: "12"; height: "101"; }
- ListElement{ longitude: "91"; latitude: "13"; height: "104"; }
- ListElement{ longitude: "91"; latitude: "14"; height: "106"; }
- ListElement{ longitude: "91"; latitude: "15"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "16"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "17"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "18"; height: "111"; }
- ListElement{ longitude: "91"; latitude: "19"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "20"; height: "120"; }
- ListElement{ longitude: "91"; latitude: "21"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "22"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "23"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "24"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "25"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "26"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "27"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "28"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "29"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "30"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "32"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "33"; height: "110"; }
- ListElement{ longitude: "91"; latitude: "34"; height: "109"; }
- ListElement{ longitude: "91"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "91"; latitude: "36"; height: "113"; }
- ListElement{ longitude: "91"; latitude: "37"; height: "114"; }
- ListElement{ longitude: "91"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "91"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "91"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "91"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "42"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "44"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "45"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "46"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "47"; height: "140"; }
- ListElement{ longitude: "91"; latitude: "48"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "50"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "91"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "54"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "55"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "56"; height: "133"; }
- ListElement{ longitude: "91"; latitude: "57"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "59"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "61"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "62"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "63"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "65"; height: "122"; }
- ListElement{ longitude: "91"; latitude: "66"; height: "123"; }
- ListElement{ longitude: "91"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "91"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "91"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "71"; height: "129"; }
- ListElement{ longitude: "91"; latitude: "72"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "73"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "74"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "75"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "91"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "78"; height: "127"; }
- ListElement{ longitude: "91"; latitude: "79"; height: "128"; }
- ListElement{ longitude: "91"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "91"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "84"; height: "139"; }
- ListElement{ longitude: "91"; latitude: "85"; height: "140"; }
- ListElement{ longitude: "91"; latitude: "86"; height: "141"; }
- ListElement{ longitude: "91"; latitude: "87"; height: "138"; }
- ListElement{ longitude: "91"; latitude: "88"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "89"; height: "137"; }
- ListElement{ longitude: "91"; latitude: "90"; height: "134"; }
- ListElement{ longitude: "91"; latitude: "91"; height: "132"; }
- ListElement{ longitude: "91"; latitude: "92"; height: "130"; }
- ListElement{ longitude: "91"; latitude: "93"; height: "131"; }
- ListElement{ longitude: "91"; latitude: "94"; height: "120"; }
- ListElement{ longitude: "91"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "91"; latitude: "96"; height: "105"; }
- ListElement{ longitude: "91"; latitude: "97"; height: "106"; }
- ListElement{ longitude: "91"; latitude: "98"; height: "97"; }
- ListElement{ longitude: "91"; latitude: "99"; height: "91"; }
- ListElement{ longitude: "92"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "1"; height: "97"; }
- ListElement{ longitude: "92"; latitude: "2"; height: "101"; }
- ListElement{ longitude: "92"; latitude: "3"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "4"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "5"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "6"; height: "95"; }
- ListElement{ longitude: "92"; latitude: "7"; height: "98"; }
- ListElement{ longitude: "92"; latitude: "8"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "9"; height: "98"; }
- ListElement{ longitude: "92"; latitude: "10"; height: "97"; }
- ListElement{ longitude: "92"; latitude: "11"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "12"; height: "99"; }
- ListElement{ longitude: "92"; latitude: "13"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "14"; height: "102"; }
- ListElement{ longitude: "92"; latitude: "15"; height: "105"; }
- ListElement{ longitude: "92"; latitude: "16"; height: "107"; }
- ListElement{ longitude: "92"; latitude: "17"; height: "108"; }
- ListElement{ longitude: "92"; latitude: "18"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "19"; height: "112"; }
- ListElement{ longitude: "92"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "23"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "24"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "25"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "26"; height: "133"; }
- ListElement{ longitude: "92"; latitude: "27"; height: "134"; }
- ListElement{ longitude: "92"; latitude: "28"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "29"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "30"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "92"; latitude: "32"; height: "110"; }
- ListElement{ longitude: "92"; latitude: "33"; height: "113"; }
- ListElement{ longitude: "92"; latitude: "34"; height: "112"; }
- ListElement{ longitude: "92"; latitude: "35"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "36"; height: "116"; }
- ListElement{ longitude: "92"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "92"; latitude: "38"; height: "116"; }
- ListElement{ longitude: "92"; latitude: "39"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "40"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "41"; height: "126"; }
- ListElement{ longitude: "92"; latitude: "42"; height: "127"; }
- ListElement{ longitude: "92"; latitude: "43"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "44"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "45"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "46"; height: "135"; }
- ListElement{ longitude: "92"; latitude: "47"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "48"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "49"; height: "141"; }
- ListElement{ longitude: "92"; latitude: "50"; height: "140"; }
- ListElement{ longitude: "92"; latitude: "51"; height: "139"; }
- ListElement{ longitude: "92"; latitude: "52"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "53"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "54"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "56"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "59"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "60"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "61"; height: "127"; }
- ListElement{ longitude: "92"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "92"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "92"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "92"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "92"; latitude: "66"; height: "118"; }
- ListElement{ longitude: "92"; latitude: "67"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "92"; latitude: "69"; height: "121"; }
- ListElement{ longitude: "92"; latitude: "70"; height: "124"; }
- ListElement{ longitude: "92"; latitude: "71"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "72"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "74"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "75"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "76"; height: "125"; }
- ListElement{ longitude: "92"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "92"; latitude: "79"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "80"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "92"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "83"; height: "134"; }
- ListElement{ longitude: "92"; latitude: "84"; height: "131"; }
- ListElement{ longitude: "92"; latitude: "85"; height: "137"; }
- ListElement{ longitude: "92"; latitude: "86"; height: "142"; }
- ListElement{ longitude: "92"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "92"; latitude: "88"; height: "136"; }
- ListElement{ longitude: "92"; latitude: "89"; height: "133"; }
- ListElement{ longitude: "92"; latitude: "90"; height: "129"; }
- ListElement{ longitude: "92"; latitude: "91"; height: "130"; }
- ListElement{ longitude: "92"; latitude: "92"; height: "132"; }
- ListElement{ longitude: "92"; latitude: "93"; height: "124"; }
- ListElement{ longitude: "92"; latitude: "94"; height: "119"; }
- ListElement{ longitude: "92"; latitude: "95"; height: "114"; }
- ListElement{ longitude: "92"; latitude: "96"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "97"; height: "109"; }
- ListElement{ longitude: "92"; latitude: "98"; height: "96"; }
- ListElement{ longitude: "92"; latitude: "99"; height: "87"; }
- ListElement{ longitude: "93"; latitude: "0"; height: "96"; }
- ListElement{ longitude: "93"; latitude: "1"; height: "100"; }
- ListElement{ longitude: "93"; latitude: "2"; height: "103"; }
- ListElement{ longitude: "93"; latitude: "3"; height: "105"; }
- ListElement{ longitude: "93"; latitude: "4"; height: "105"; }
- ListElement{ longitude: "93"; latitude: "5"; height: "96"; }
- ListElement{ longitude: "93"; latitude: "6"; height: "97"; }
- ListElement{ longitude: "93"; latitude: "7"; height: "97"; }
- ListElement{ longitude: "93"; latitude: "8"; height: "93"; }
- ListElement{ longitude: "93"; latitude: "9"; height: "94"; }
- ListElement{ longitude: "93"; latitude: "10"; height: "94"; }
- ListElement{ longitude: "93"; latitude: "11"; height: "95"; }
- ListElement{ longitude: "93"; latitude: "12"; height: "98"; }
- ListElement{ longitude: "93"; latitude: "13"; height: "99"; }
- ListElement{ longitude: "93"; latitude: "14"; height: "99"; }
- ListElement{ longitude: "93"; latitude: "15"; height: "102"; }
- ListElement{ longitude: "93"; latitude: "16"; height: "100"; }
- ListElement{ longitude: "93"; latitude: "17"; height: "104"; }
- ListElement{ longitude: "93"; latitude: "18"; height: "107"; }
- ListElement{ longitude: "93"; latitude: "19"; height: "110"; }
- ListElement{ longitude: "93"; latitude: "20"; height: "113"; }
- ListElement{ longitude: "93"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "22"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "93"; latitude: "24"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "25"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "26"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "27"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "29"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "30"; height: "120"; }
- ListElement{ longitude: "93"; latitude: "31"; height: "113"; }
- ListElement{ longitude: "93"; latitude: "32"; height: "111"; }
- ListElement{ longitude: "93"; latitude: "33"; height: "114"; }
- ListElement{ longitude: "93"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "35"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "36"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "37"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "39"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "41"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "42"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "43"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "44"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "45"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "46"; height: "134"; }
- ListElement{ longitude: "93"; latitude: "47"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "48"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "49"; height: "142"; }
- ListElement{ longitude: "93"; latitude: "50"; height: "140"; }
- ListElement{ longitude: "93"; latitude: "51"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "52"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "53"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "55"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "93"; latitude: "57"; height: "131"; }
- ListElement{ longitude: "93"; latitude: "58"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "59"; height: "129"; }
- ListElement{ longitude: "93"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "93"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "93"; latitude: "63"; height: "119"; }
- ListElement{ longitude: "93"; latitude: "64"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "65"; height: "117"; }
- ListElement{ longitude: "93"; latitude: "66"; height: "120"; }
- ListElement{ longitude: "93"; latitude: "67"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "68"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "69"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "70"; height: "122"; }
- ListElement{ longitude: "93"; latitude: "71"; height: "123"; }
- ListElement{ longitude: "93"; latitude: "72"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "73"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "93"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "78"; height: "130"; }
- ListElement{ longitude: "93"; latitude: "79"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "80"; height: "133"; }
- ListElement{ longitude: "93"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "93"; latitude: "82"; height: "138"; }
- ListElement{ longitude: "93"; latitude: "83"; height: "135"; }
- ListElement{ longitude: "93"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "93"; latitude: "85"; height: "136"; }
- ListElement{ longitude: "93"; latitude: "86"; height: "144"; }
- ListElement{ longitude: "93"; latitude: "87"; height: "139"; }
- ListElement{ longitude: "93"; latitude: "88"; height: "132"; }
- ListElement{ longitude: "93"; latitude: "89"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "90"; height: "126"; }
- ListElement{ longitude: "93"; latitude: "91"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "92"; height: "128"; }
- ListElement{ longitude: "93"; latitude: "93"; height: "118"; }
- ListElement{ longitude: "93"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "93"; latitude: "95"; height: "111"; }
- ListElement{ longitude: "93"; latitude: "96"; height: "110"; }
- ListElement{ longitude: "93"; latitude: "97"; height: "109"; }
- ListElement{ longitude: "93"; latitude: "98"; height: "98"; }
- ListElement{ longitude: "93"; latitude: "99"; height: "85"; }
- ListElement{ longitude: "94"; latitude: "0"; height: "91"; }
- ListElement{ longitude: "94"; latitude: "1"; height: "93"; }
- ListElement{ longitude: "94"; latitude: "2"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "3"; height: "101"; }
- ListElement{ longitude: "94"; latitude: "4"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "5"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "6"; height: "89"; }
- ListElement{ longitude: "94"; latitude: "7"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "8"; height: "95"; }
- ListElement{ longitude: "94"; latitude: "9"; height: "91"; }
- ListElement{ longitude: "94"; latitude: "10"; height: "90"; }
- ListElement{ longitude: "94"; latitude: "11"; height: "92"; }
- ListElement{ longitude: "94"; latitude: "12"; height: "94"; }
- ListElement{ longitude: "94"; latitude: "13"; height: "95"; }
- ListElement{ longitude: "94"; latitude: "14"; height: "98"; }
- ListElement{ longitude: "94"; latitude: "15"; height: "99"; }
- ListElement{ longitude: "94"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "94"; latitude: "17"; height: "101"; }
- ListElement{ longitude: "94"; latitude: "18"; height: "105"; }
- ListElement{ longitude: "94"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "94"; latitude: "20"; height: "113"; }
- ListElement{ longitude: "94"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "94"; latitude: "22"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "24"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "25"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "26"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "27"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "28"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "29"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "30"; height: "119"; }
- ListElement{ longitude: "94"; latitude: "31"; height: "116"; }
- ListElement{ longitude: "94"; latitude: "32"; height: "114"; }
- ListElement{ longitude: "94"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "94"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "94"; latitude: "35"; height: "113"; }
- ListElement{ longitude: "94"; latitude: "36"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "37"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "38"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "39"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "41"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "44"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "45"; height: "130"; }
- ListElement{ longitude: "94"; latitude: "46"; height: "136"; }
- ListElement{ longitude: "94"; latitude: "47"; height: "141"; }
- ListElement{ longitude: "94"; latitude: "48"; height: "145"; }
- ListElement{ longitude: "94"; latitude: "49"; height: "145"; }
- ListElement{ longitude: "94"; latitude: "50"; height: "136"; }
- ListElement{ longitude: "94"; latitude: "51"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "52"; height: "138"; }
- ListElement{ longitude: "94"; latitude: "53"; height: "140"; }
- ListElement{ longitude: "94"; latitude: "54"; height: "138"; }
- ListElement{ longitude: "94"; latitude: "55"; height: "139"; }
- ListElement{ longitude: "94"; latitude: "56"; height: "131"; }
- ListElement{ longitude: "94"; latitude: "57"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "58"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "59"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "60"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "61"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "62"; height: "126"; }
- ListElement{ longitude: "94"; latitude: "63"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "64"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "65"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "66"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "67"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "68"; height: "125"; }
- ListElement{ longitude: "94"; latitude: "69"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "70"; height: "123"; }
- ListElement{ longitude: "94"; latitude: "71"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "73"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "76"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "94"; latitude: "78"; height: "129"; }
- ListElement{ longitude: "94"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "94"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "94"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "94"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "84"; height: "142"; }
- ListElement{ longitude: "94"; latitude: "85"; height: "148"; }
- ListElement{ longitude: "94"; latitude: "86"; height: "146"; }
- ListElement{ longitude: "94"; latitude: "87"; height: "137"; }
- ListElement{ longitude: "94"; latitude: "88"; height: "124"; }
- ListElement{ longitude: "94"; latitude: "89"; height: "117"; }
- ListElement{ longitude: "94"; latitude: "90"; height: "120"; }
- ListElement{ longitude: "94"; latitude: "91"; height: "121"; }
- ListElement{ longitude: "94"; latitude: "92"; height: "122"; }
- ListElement{ longitude: "94"; latitude: "93"; height: "115"; }
- ListElement{ longitude: "94"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "94"; latitude: "95"; height: "115"; }
- ListElement{ longitude: "94"; latitude: "96"; height: "111"; }
- ListElement{ longitude: "94"; latitude: "97"; height: "106"; }
- ListElement{ longitude: "94"; latitude: "98"; height: "94"; }
- ListElement{ longitude: "94"; latitude: "99"; height: "84"; }
- ListElement{ longitude: "95"; latitude: "0"; height: "87"; }
- ListElement{ longitude: "95"; latitude: "1"; height: "89"; }
- ListElement{ longitude: "95"; latitude: "2"; height: "92"; }
- ListElement{ longitude: "95"; latitude: "3"; height: "96"; }
- ListElement{ longitude: "95"; latitude: "4"; height: "100"; }
- ListElement{ longitude: "95"; latitude: "5"; height: "107"; }
- ListElement{ longitude: "95"; latitude: "6"; height: "101"; }
- ListElement{ longitude: "95"; latitude: "7"; height: "102"; }
- ListElement{ longitude: "95"; latitude: "8"; height: "96"; }
- ListElement{ longitude: "95"; latitude: "9"; height: "93"; }
- ListElement{ longitude: "95"; latitude: "10"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "11"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "12"; height: "92"; }
- ListElement{ longitude: "95"; latitude: "13"; height: "93"; }
- ListElement{ longitude: "95"; latitude: "14"; height: "94"; }
- ListElement{ longitude: "95"; latitude: "15"; height: "95"; }
- ListElement{ longitude: "95"; latitude: "16"; height: "99"; }
- ListElement{ longitude: "95"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "95"; latitude: "18"; height: "103"; }
- ListElement{ longitude: "95"; latitude: "19"; height: "111"; }
- ListElement{ longitude: "95"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "95"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "95"; latitude: "22"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "23"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "26"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "27"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "28"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "95"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "31"; height: "111"; }
- ListElement{ longitude: "95"; latitude: "32"; height: "113"; }
- ListElement{ longitude: "95"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "95"; latitude: "34"; height: "110"; }
- ListElement{ longitude: "95"; latitude: "35"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "36"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "37"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "38"; height: "123"; }
- ListElement{ longitude: "95"; latitude: "39"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "95"; latitude: "41"; height: "119"; }
- ListElement{ longitude: "95"; latitude: "42"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "43"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "44"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "45"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "46"; height: "132"; }
- ListElement{ longitude: "95"; latitude: "47"; height: "141"; }
- ListElement{ longitude: "95"; latitude: "48"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "95"; latitude: "50"; height: "143"; }
- ListElement{ longitude: "95"; latitude: "51"; height: "138"; }
- ListElement{ longitude: "95"; latitude: "52"; height: "145"; }
- ListElement{ longitude: "95"; latitude: "53"; height: "143"; }
- ListElement{ longitude: "95"; latitude: "54"; height: "140"; }
- ListElement{ longitude: "95"; latitude: "55"; height: "140"; }
- ListElement{ longitude: "95"; latitude: "56"; height: "125"; }
- ListElement{ longitude: "95"; latitude: "57"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "58"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "61"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "62"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "63"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "64"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "95"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "95"; latitude: "67"; height: "127"; }
- ListElement{ longitude: "95"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "69"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "71"; height: "126"; }
- ListElement{ longitude: "95"; latitude: "72"; height: "121"; }
- ListElement{ longitude: "95"; latitude: "73"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "74"; height: "120"; }
- ListElement{ longitude: "95"; latitude: "75"; height: "122"; }
- ListElement{ longitude: "95"; latitude: "76"; height: "124"; }
- ListElement{ longitude: "95"; latitude: "77"; height: "128"; }
- ListElement{ longitude: "95"; latitude: "78"; height: "129"; }
- ListElement{ longitude: "95"; latitude: "79"; height: "133"; }
- ListElement{ longitude: "95"; latitude: "80"; height: "134"; }
- ListElement{ longitude: "95"; latitude: "81"; height: "133"; }
- ListElement{ longitude: "95"; latitude: "82"; height: "137"; }
- ListElement{ longitude: "95"; latitude: "83"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "84"; height: "146"; }
- ListElement{ longitude: "95"; latitude: "85"; height: "146"; }
- ListElement{ longitude: "95"; latitude: "86"; height: "139"; }
- ListElement{ longitude: "95"; latitude: "87"; height: "124"; }
- ListElement{ longitude: "95"; latitude: "88"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "89"; height: "105"; }
- ListElement{ longitude: "95"; latitude: "90"; height: "110"; }
- ListElement{ longitude: "95"; latitude: "91"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "92"; height: "116"; }
- ListElement{ longitude: "95"; latitude: "93"; height: "114"; }
- ListElement{ longitude: "95"; latitude: "94"; height: "112"; }
- ListElement{ longitude: "95"; latitude: "95"; height: "107"; }
- ListElement{ longitude: "95"; latitude: "96"; height: "103"; }
- ListElement{ longitude: "95"; latitude: "97"; height: "101"; }
- ListElement{ longitude: "95"; latitude: "98"; height: "91"; }
- ListElement{ longitude: "95"; latitude: "99"; height: "83"; }
- ListElement{ longitude: "96"; latitude: "0"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "1"; height: "84"; }
- ListElement{ longitude: "96"; latitude: "2"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "3"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "4"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "5"; height: "102"; }
- ListElement{ longitude: "96"; latitude: "6"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "7"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "8"; height: "101"; }
- ListElement{ longitude: "96"; latitude: "9"; height: "95"; }
- ListElement{ longitude: "96"; latitude: "10"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "11"; height: "91"; }
- ListElement{ longitude: "96"; latitude: "12"; height: "92"; }
- ListElement{ longitude: "96"; latitude: "13"; height: "92"; }
- ListElement{ longitude: "96"; latitude: "14"; height: "93"; }
- ListElement{ longitude: "96"; latitude: "15"; height: "96"; }
- ListElement{ longitude: "96"; latitude: "16"; height: "97"; }
- ListElement{ longitude: "96"; latitude: "17"; height: "97"; }
- ListElement{ longitude: "96"; latitude: "18"; height: "93"; }
- ListElement{ longitude: "96"; latitude: "19"; height: "109"; }
- ListElement{ longitude: "96"; latitude: "20"; height: "114"; }
- ListElement{ longitude: "96"; latitude: "21"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "22"; height: "121"; }
- ListElement{ longitude: "96"; latitude: "23"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "24"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "25"; height: "121"; }
- ListElement{ longitude: "96"; latitude: "26"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "27"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "28"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "29"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "30"; height: "117"; }
- ListElement{ longitude: "96"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "96"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "33"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "96"; latitude: "35"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "36"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "37"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "38"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "39"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "40"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "41"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "43"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "44"; height: "120"; }
- ListElement{ longitude: "96"; latitude: "45"; height: "125"; }
- ListElement{ longitude: "96"; latitude: "46"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "47"; height: "139"; }
- ListElement{ longitude: "96"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "96"; latitude: "49"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "50"; height: "147"; }
- ListElement{ longitude: "96"; latitude: "51"; height: "149"; }
- ListElement{ longitude: "96"; latitude: "52"; height: "148"; }
- ListElement{ longitude: "96"; latitude: "53"; height: "149"; }
- ListElement{ longitude: "96"; latitude: "54"; height: "146"; }
- ListElement{ longitude: "96"; latitude: "55"; height: "144"; }
- ListElement{ longitude: "96"; latitude: "56"; height: "137"; }
- ListElement{ longitude: "96"; latitude: "57"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "58"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "59"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "60"; height: "128"; }
- ListElement{ longitude: "96"; latitude: "61"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "62"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "63"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "64"; height: "133"; }
- ListElement{ longitude: "96"; latitude: "65"; height: "134"; }
- ListElement{ longitude: "96"; latitude: "66"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "67"; height: "131"; }
- ListElement{ longitude: "96"; latitude: "68"; height: "129"; }
- ListElement{ longitude: "96"; latitude: "69"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "70"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "72"; height: "123"; }
- ListElement{ longitude: "96"; latitude: "73"; height: "127"; }
- ListElement{ longitude: "96"; latitude: "74"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "75"; height: "124"; }
- ListElement{ longitude: "96"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "96"; latitude: "77"; height: "130"; }
- ListElement{ longitude: "96"; latitude: "78"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "79"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "80"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "81"; height: "132"; }
- ListElement{ longitude: "96"; latitude: "82"; height: "136"; }
- ListElement{ longitude: "96"; latitude: "83"; height: "138"; }
- ListElement{ longitude: "96"; latitude: "84"; height: "144"; }
- ListElement{ longitude: "96"; latitude: "85"; height: "143"; }
- ListElement{ longitude: "96"; latitude: "86"; height: "135"; }
- ListElement{ longitude: "96"; latitude: "87"; height: "122"; }
- ListElement{ longitude: "96"; latitude: "88"; height: "113"; }
- ListElement{ longitude: "96"; latitude: "89"; height: "107"; }
- ListElement{ longitude: "96"; latitude: "90"; height: "106"; }
- ListElement{ longitude: "96"; latitude: "91"; height: "112"; }
- ListElement{ longitude: "96"; latitude: "92"; height: "119"; }
- ListElement{ longitude: "96"; latitude: "93"; height: "117"; }
- ListElement{ longitude: "96"; latitude: "94"; height: "106"; }
- ListElement{ longitude: "96"; latitude: "95"; height: "95"; }
- ListElement{ longitude: "96"; latitude: "96"; height: "87"; }
- ListElement{ longitude: "96"; latitude: "97"; height: "85"; }
- ListElement{ longitude: "96"; latitude: "98"; height: "81"; }
- ListElement{ longitude: "96"; latitude: "99"; height: "75"; }
- ListElement{ longitude: "97"; latitude: "0"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "1"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "2"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "3"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "4"; height: "78"; }
- ListElement{ longitude: "97"; latitude: "5"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "6"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "7"; height: "93"; }
- ListElement{ longitude: "97"; latitude: "8"; height: "92"; }
- ListElement{ longitude: "97"; latitude: "9"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "10"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "11"; height: "86"; }
- ListElement{ longitude: "97"; latitude: "12"; height: "90"; }
- ListElement{ longitude: "97"; latitude: "13"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "14"; height: "95"; }
- ListElement{ longitude: "97"; latitude: "15"; height: "94"; }
- ListElement{ longitude: "97"; latitude: "16"; height: "95"; }
- ListElement{ longitude: "97"; latitude: "17"; height: "99"; }
- ListElement{ longitude: "97"; latitude: "18"; height: "104"; }
- ListElement{ longitude: "97"; latitude: "19"; height: "108"; }
- ListElement{ longitude: "97"; latitude: "20"; height: "115"; }
- ListElement{ longitude: "97"; latitude: "21"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "22"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "23"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "24"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "25"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "26"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "27"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "28"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "29"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "30"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "31"; height: "118"; }
- ListElement{ longitude: "97"; latitude: "32"; height: "122"; }
- ListElement{ longitude: "97"; latitude: "33"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "34"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "35"; height: "125"; }
- ListElement{ longitude: "97"; latitude: "36"; height: "119"; }
- ListElement{ longitude: "97"; latitude: "37"; height: "115"; }
- ListElement{ longitude: "97"; latitude: "38"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "39"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "40"; height: "116"; }
- ListElement{ longitude: "97"; latitude: "41"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "42"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "44"; height: "114"; }
- ListElement{ longitude: "97"; latitude: "45"; height: "119"; }
- ListElement{ longitude: "97"; latitude: "46"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "47"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "48"; height: "134"; }
- ListElement{ longitude: "97"; latitude: "49"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "50"; height: "141"; }
- ListElement{ longitude: "97"; latitude: "51"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "52"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "53"; height: "143"; }
- ListElement{ longitude: "97"; latitude: "54"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "55"; height: "136"; }
- ListElement{ longitude: "97"; latitude: "56"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "57"; height: "127"; }
- ListElement{ longitude: "97"; latitude: "58"; height: "122"; }
- ListElement{ longitude: "97"; latitude: "59"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "60"; height: "117"; }
- ListElement{ longitude: "97"; latitude: "61"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "62"; height: "130"; }
- ListElement{ longitude: "97"; latitude: "63"; height: "134"; }
- ListElement{ longitude: "97"; latitude: "64"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "65"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "97"; latitude: "67"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "68"; height: "133"; }
- ListElement{ longitude: "97"; latitude: "69"; height: "136"; }
- ListElement{ longitude: "97"; latitude: "70"; height: "131"; }
- ListElement{ longitude: "97"; latitude: "71"; height: "130"; }
- ListElement{ longitude: "97"; latitude: "72"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "73"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "74"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "75"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "76"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "77"; height: "127"; }
- ListElement{ longitude: "97"; latitude: "78"; height: "128"; }
- ListElement{ longitude: "97"; latitude: "79"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "80"; height: "123"; }
- ListElement{ longitude: "97"; latitude: "81"; height: "126"; }
- ListElement{ longitude: "97"; latitude: "82"; height: "129"; }
- ListElement{ longitude: "97"; latitude: "83"; height: "137"; }
- ListElement{ longitude: "97"; latitude: "84"; height: "140"; }
- ListElement{ longitude: "97"; latitude: "85"; height: "138"; }
- ListElement{ longitude: "97"; latitude: "86"; height: "132"; }
- ListElement{ longitude: "97"; latitude: "87"; height: "124"; }
- ListElement{ longitude: "97"; latitude: "88"; height: "111"; }
- ListElement{ longitude: "97"; latitude: "89"; height: "102"; }
- ListElement{ longitude: "97"; latitude: "90"; height: "99"; }
- ListElement{ longitude: "97"; latitude: "91"; height: "109"; }
- ListElement{ longitude: "97"; latitude: "92"; height: "110"; }
- ListElement{ longitude: "97"; latitude: "93"; height: "96"; }
- ListElement{ longitude: "97"; latitude: "94"; height: "76"; }
- ListElement{ longitude: "97"; latitude: "95"; height: "68"; }
- ListElement{ longitude: "97"; latitude: "96"; height: "68"; }
- ListElement{ longitude: "97"; latitude: "97"; height: "72"; }
- ListElement{ longitude: "97"; latitude: "98"; height: "70"; }
- ListElement{ longitude: "97"; latitude: "99"; height: "65"; }
- ListElement{ longitude: "98"; latitude: "0"; height: "93"; }
- ListElement{ longitude: "98"; latitude: "1"; height: "90"; }
- ListElement{ longitude: "98"; latitude: "2"; height: "85"; }
- ListElement{ longitude: "98"; latitude: "3"; height: "78"; }
- ListElement{ longitude: "98"; latitude: "4"; height: "74"; }
- ListElement{ longitude: "98"; latitude: "5"; height: "71"; }
- ListElement{ longitude: "98"; latitude: "6"; height: "80"; }
- ListElement{ longitude: "98"; latitude: "7"; height: "78"; }
- ListElement{ longitude: "98"; latitude: "8"; height: "83"; }
- ListElement{ longitude: "98"; latitude: "9"; height: "85"; }
- ListElement{ longitude: "98"; latitude: "10"; height: "81"; }
- ListElement{ longitude: "98"; latitude: "11"; height: "82"; }
- ListElement{ longitude: "98"; latitude: "12"; height: "87"; }
- ListElement{ longitude: "98"; latitude: "13"; height: "90"; }
- ListElement{ longitude: "98"; latitude: "14"; height: "91"; }
- ListElement{ longitude: "98"; latitude: "15"; height: "86"; }
- ListElement{ longitude: "98"; latitude: "16"; height: "88"; }
- ListElement{ longitude: "98"; latitude: "17"; height: "91"; }
- ListElement{ longitude: "98"; latitude: "18"; height: "94"; }
- ListElement{ longitude: "98"; latitude: "19"; height: "97"; }
- ListElement{ longitude: "98"; latitude: "20"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "21"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "22"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "23"; height: "108"; }
- ListElement{ longitude: "98"; latitude: "24"; height: "107"; }
- ListElement{ longitude: "98"; latitude: "25"; height: "104"; }
- ListElement{ longitude: "98"; latitude: "26"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "27"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "28"; height: "109"; }
- ListElement{ longitude: "98"; latitude: "29"; height: "106"; }
- ListElement{ longitude: "98"; latitude: "30"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "32"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "33"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "98"; latitude: "35"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "36"; height: "109"; }
- ListElement{ longitude: "98"; latitude: "37"; height: "105"; }
- ListElement{ longitude: "98"; latitude: "38"; height: "106"; }
- ListElement{ longitude: "98"; latitude: "39"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "40"; height: "112"; }
- ListElement{ longitude: "98"; latitude: "41"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "42"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "43"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "44"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "45"; height: "112"; }
- ListElement{ longitude: "98"; latitude: "46"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "47"; height: "121"; }
- ListElement{ longitude: "98"; latitude: "48"; height: "124"; }
- ListElement{ longitude: "98"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "50"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "51"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "52"; height: "126"; }
- ListElement{ longitude: "98"; latitude: "53"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "54"; height: "126"; }
- ListElement{ longitude: "98"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "98"; latitude: "56"; height: "121"; }
- ListElement{ longitude: "98"; latitude: "57"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "58"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "59"; height: "111"; }
- ListElement{ longitude: "98"; latitude: "60"; height: "110"; }
- ListElement{ longitude: "98"; latitude: "61"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "62"; height: "123"; }
- ListElement{ longitude: "98"; latitude: "63"; height: "131"; }
- ListElement{ longitude: "98"; latitude: "64"; height: "138"; }
- ListElement{ longitude: "98"; latitude: "65"; height: "140"; }
- ListElement{ longitude: "98"; latitude: "66"; height: "139"; }
- ListElement{ longitude: "98"; latitude: "67"; height: "136"; }
- ListElement{ longitude: "98"; latitude: "68"; height: "134"; }
- ListElement{ longitude: "98"; latitude: "69"; height: "133"; }
- ListElement{ longitude: "98"; latitude: "70"; height: "129"; }
- ListElement{ longitude: "98"; latitude: "71"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "72"; height: "122"; }
- ListElement{ longitude: "98"; latitude: "73"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "74"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "75"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "76"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "77"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "78"; height: "117"; }
- ListElement{ longitude: "98"; latitude: "79"; height: "114"; }
- ListElement{ longitude: "98"; latitude: "80"; height: "113"; }
- ListElement{ longitude: "98"; latitude: "81"; height: "115"; }
- ListElement{ longitude: "98"; latitude: "82"; height: "119"; }
- ListElement{ longitude: "98"; latitude: "83"; height: "127"; }
- ListElement{ longitude: "98"; latitude: "84"; height: "130"; }
- ListElement{ longitude: "98"; latitude: "85"; height: "125"; }
- ListElement{ longitude: "98"; latitude: "86"; height: "116"; }
- ListElement{ longitude: "98"; latitude: "87"; height: "103"; }
- ListElement{ longitude: "98"; latitude: "88"; height: "89"; }
- ListElement{ longitude: "98"; latitude: "89"; height: "81"; }
- ListElement{ longitude: "98"; latitude: "90"; height: "79"; }
- ListElement{ longitude: "98"; latitude: "91"; height: "84"; }
- ListElement{ longitude: "98"; latitude: "92"; height: "86"; }
- ListElement{ longitude: "98"; latitude: "93"; height: "79"; }
- ListElement{ longitude: "98"; latitude: "94"; height: "69"; }
- ListElement{ longitude: "98"; latitude: "95"; height: "66"; }
- ListElement{ longitude: "98"; latitude: "96"; height: "73"; }
- ListElement{ longitude: "98"; latitude: "97"; height: "80"; }
- ListElement{ longitude: "98"; latitude: "98"; height: "71"; }
- ListElement{ longitude: "98"; latitude: "99"; height: "64"; }
- ListElement{ longitude: "99"; latitude: "0"; height: "93"; }
- ListElement{ longitude: "99"; latitude: "1"; height: "90"; }
- ListElement{ longitude: "99"; latitude: "2"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "3"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "4"; height: "74"; }
- ListElement{ longitude: "99"; latitude: "5"; height: "74"; }
- ListElement{ longitude: "99"; latitude: "6"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "7"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "8"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "9"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "10"; height: "83"; }
- ListElement{ longitude: "99"; latitude: "11"; height: "79"; }
- ListElement{ longitude: "99"; latitude: "12"; height: "77"; }
- ListElement{ longitude: "99"; latitude: "13"; height: "80"; }
- ListElement{ longitude: "99"; latitude: "14"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "15"; height: "86"; }
- ListElement{ longitude: "99"; latitude: "16"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "17"; height: "85"; }
- ListElement{ longitude: "99"; latitude: "18"; height: "90"; }
- ListElement{ longitude: "99"; latitude: "19"; height: "95"; }
- ListElement{ longitude: "99"; latitude: "20"; height: "99"; }
- ListElement{ longitude: "99"; latitude: "21"; height: "101"; }
- ListElement{ longitude: "99"; latitude: "22"; height: "102"; }
- ListElement{ longitude: "99"; latitude: "23"; height: "103"; }
- ListElement{ longitude: "99"; latitude: "24"; height: "106"; }
- ListElement{ longitude: "99"; latitude: "25"; height: "110"; }
- ListElement{ longitude: "99"; latitude: "26"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "27"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "28"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "29"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "30"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "31"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "32"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "33"; height: "118"; }
- ListElement{ longitude: "99"; latitude: "34"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "35"; height: "115"; }
- ListElement{ longitude: "99"; latitude: "36"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "37"; height: "110"; }
- ListElement{ longitude: "99"; latitude: "38"; height: "114"; }
- ListElement{ longitude: "99"; latitude: "39"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "40"; height: "123"; }
- ListElement{ longitude: "99"; latitude: "41"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "42"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "43"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "44"; height: "118"; }
- ListElement{ longitude: "99"; latitude: "45"; height: "117"; }
- ListElement{ longitude: "99"; latitude: "46"; height: "119"; }
- ListElement{ longitude: "99"; latitude: "47"; height: "123"; }
- ListElement{ longitude: "99"; latitude: "48"; height: "125"; }
- ListElement{ longitude: "99"; latitude: "49"; height: "125"; }
- ListElement{ longitude: "99"; latitude: "50"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "51"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "52"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "53"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "54"; height: "124"; }
- ListElement{ longitude: "99"; latitude: "55"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "56"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "57"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "58"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "59"; height: "116"; }
- ListElement{ longitude: "99"; latitude: "60"; height: "112"; }
- ListElement{ longitude: "99"; latitude: "61"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "62"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "63"; height: "128"; }
- ListElement{ longitude: "99"; latitude: "64"; height: "132"; }
- ListElement{ longitude: "99"; latitude: "65"; height: "130"; }
- ListElement{ longitude: "99"; latitude: "66"; height: "130"; }
- ListElement{ longitude: "99"; latitude: "67"; height: "128"; }
- ListElement{ longitude: "99"; latitude: "68"; height: "126"; }
- ListElement{ longitude: "99"; latitude: "69"; height: "127"; }
- ListElement{ longitude: "99"; latitude: "70"; height: "126"; }
- ListElement{ longitude: "99"; latitude: "71"; height: "122"; }
- ListElement{ longitude: "99"; latitude: "72"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "73"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "74"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "75"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "76"; height: "121"; }
- ListElement{ longitude: "99"; latitude: "77"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "78"; height: "120"; }
- ListElement{ longitude: "99"; latitude: "79"; height: "119"; }
- ListElement{ longitude: "99"; latitude: "80"; height: "116"; }
- ListElement{ longitude: "99"; latitude: "81"; height: "113"; }
- ListElement{ longitude: "99"; latitude: "82"; height: "111"; }
- ListElement{ longitude: "99"; latitude: "83"; height: "107"; }
- ListElement{ longitude: "99"; latitude: "84"; height: "109"; }
- ListElement{ longitude: "99"; latitude: "85"; height: "107"; }
- ListElement{ longitude: "99"; latitude: "86"; height: "98"; }
- ListElement{ longitude: "99"; latitude: "87"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "88"; height: "75"; }
- ListElement{ longitude: "99"; latitude: "89"; height: "68"; }
- ListElement{ longitude: "99"; latitude: "90"; height: "70"; }
- ListElement{ longitude: "99"; latitude: "91"; height: "81"; }
- ListElement{ longitude: "99"; latitude: "92"; height: "88"; }
- ListElement{ longitude: "99"; latitude: "93"; height: "89"; }
- ListElement{ longitude: "99"; latitude: "94"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "95"; height: "87"; }
- ListElement{ longitude: "99"; latitude: "96"; height: "88"; }
- ListElement{ longitude: "99"; latitude: "97"; height: "84"; }
- ListElement{ longitude: "99"; latitude: "98"; height: "75"; }
- ListElement{ longitude: "99"; latitude: "99"; height: "67"; }
- }
-}
diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml b/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml
deleted file mode 100644
index 8a0802cb..00000000
--- a/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml
+++ /dev/null
@@ -1,263 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
-
-Rectangle {
- id: mainview
- width: 1024
- height: 768
- color: surfacePlot.theme.windowColor
-
- Data {
- id: surfaceData
- }
-
- Item {
- id: surfaceView
- width: mainview.width
- height: mainview.height
- anchors.top: mainview.top
- anchors.left: mainview.left
-
- //! [0]
- ColorGradient {
- id: surfaceGradient
- ColorGradientStop { position: 0.0; color: "darkslategray" }
- ColorGradientStop { id: middleGradient; position: 0.25; color: "peru" }
- ColorGradientStop { position: 1.0; color: "red" }
- }
- //! [0]
-
- Surface3D {
- id: surfacePlot
- width: surfaceView.width
- height: surfaceView.height
- //! [7]
- theme: Theme3D {
- type: Theme3D.ThemeStoneMoss
- font.family: "STCaiyun"
- font.pointSize: 35
- colorStyle: Theme3D.ColorStyleRangeGradient
- baseGradients: [surfaceGradient]
- }
- //! [7]
- shadowQuality: AbstractGraph3D.ShadowQualityMedium
- selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
- axisY.min: 0.0
- axisY.max: 500.0
- axisX.segmentCount: 10
- axisX.subSegmentCount: 2
- axisX.labelFormat: "%i"
- axisZ.segmentCount: 10
- axisZ.subSegmentCount: 2
- axisZ.labelFormat: "%i"
- axisY.segmentCount: 5
- axisY.subSegmentCount: 2
- axisY.labelFormat: "%i"
- axisY.title: "Height"
- axisX.title: "Latitude"
- axisZ.title: "Longitude"
-
- //! [5]
- Surface3DSeries {
- id: surfaceSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
-
- ItemModelSurfaceDataProxy {
- //! [5]
- //! [6]
- itemModel: surfaceData.model
- rowRole: "longitude"
- columnRole: "latitude"
- yPosRole: "height"
- }
- //! [6]
- onDrawModeChanged: checkState()
- }
- //! [4]
- Surface3DSeries {
- id: heightSeries
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- visible: false
-
- HeightMapSurfaceDataProxy {
- heightMapFile: ":/heightmaps/image"
- // We don't want the default data values set by heightmap proxy.
- minZValue: 30
- maxZValue: 60
- minXValue: 67
- maxXValue: 97
- }
-
- onDrawModeChanged: checkState()
- }
- //! [4]
- }
- }
-
- RowLayout {
- id: buttonLayout
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- opacity: 0.5
-
- NewButton {
- id: surfaceGridToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Show Surface Grid"
- //! [1]
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
- heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
- }
- }
- //! [1]
- }
-
- NewButton {
- id: surfaceToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Hide Surface"
- //! [8]
- onClicked: {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface) {
- surfaceSeries.drawMode &= ~Surface3DSeries.DrawSurface;
- heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
- } else {
- surfaceSeries.drawMode |= Surface3DSeries.DrawSurface;
- heightSeries.drawMode |= Surface3DSeries.DrawSurface;
- }
- }
- //! [8]
- }
-
- NewButton {
- id: flatShadingToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported"
- enabled: surfaceSeries.flatShadingSupported
- //! [2]
- onClicked: {
- if (surfaceSeries.flatShadingEnabled === true) {
- surfaceSeries.flatShadingEnabled = false;
- heightSeries.flatShadingEnabled = false;
- text = "Show Flat"
- } else {
- surfaceSeries.flatShadingEnabled = true;
- heightSeries.flatShadingEnabled = true;
- text = "Show Smooth"
- }
- }
- //! [2]
- }
-
- NewButton {
- id: backgroundToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Hide Background"
- onClicked: {
- if (surfacePlot.theme.backgroundEnabled === true) {
- surfacePlot.theme.backgroundEnabled = false;
- text = "Show Background"
- } else {
- surfacePlot.theme.backgroundEnabled = true;
- text = "Hide Background"
- }
- }
- }
-
- NewButton {
- id: gridToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Hide Grid"
- onClicked: {
- if (surfacePlot.theme.gridEnabled === true) {
- surfacePlot.theme.gridEnabled = false;
- text = "Show Grid"
- } else {
- surfacePlot.theme.gridEnabled = true;
- text = "Hide Grid"
- }
- }
- }
-
- NewButton {
- id: seriesToggle
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: "Switch to Height Map Series"
- //! [3]
- onClicked: {
- if (surfaceSeries.visible === false) {
- surfacePlot.axisY.max = 500.0
- surfaceSeries.visible = true
- heightSeries.visible = false
- middleGradient.position = 0.25
- text = "Switch to Height Map Series"
- } else {
- surfacePlot.axisY.max = 250.0
- surfaceSeries.visible = false
- heightSeries.visible = true
- middleGradient.position = 0.50
- text = "Switch to Item Model Series"
- }
- }
- //! [3]
- }
- }
-
- function checkState() {
- if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface)
- surfaceToggle.text = "Hide Surface"
- else
- surfaceToggle.text = "Show Surface"
-
- if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
- surfaceGridToggle.text = "Hide Surface Grid"
- else
- surfaceGridToggle.text = "Show Surface Grid"
- }
-}
diff --git a/examples/datavisualization/qmlsurface/qmlsurface.pro b/examples/datavisualization/qmlsurface/qmlsurface.pro
deleted file mode 100644
index 401d59a7..00000000
--- a/examples/datavisualization/qmlsurface/qmlsurface.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlsurface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlsurface/*
diff --git a/examples/datavisualization/qmlsurface/qmlsurface.qrc b/examples/datavisualization/qmlsurface/qmlsurface.qrc
deleted file mode 100644
index c27f2d56..00000000
--- a/examples/datavisualization/qmlsurface/qmlsurface.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<RCC>
- <qresource prefix="/qml">
- <file>qml/qmlsurface/main.qml</file>
- <file>qml/qmlsurface/Data.qml</file>
- <file>qml/qmlsurface/NewButton.qml</file>
- </qresource>
- <qresource prefix="/heightmaps">
- <file alias="image">heightmap.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/qmlsurfacegallery/CMakeLists.txt b/examples/datavisualization/qmlsurfacegallery/CMakeLists.txt
new file mode 100644
index 00000000..ab4dd77d
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/CMakeLists.txt
@@ -0,0 +1,60 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qmlsurfacegallery LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Qml)
+find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(qmlsurfacegallery
+ main.cpp
+)
+set_target_properties(qmlsurfacegallery PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(qmlsurfacegallery PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+)
+
+qt6_add_qml_module(qmlsurfacegallery
+ URI SurfaceGallery
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ SOURCES
+ datasource.cpp datasource.h
+ QML_FILES
+ qml/qmlsurfacegallery/main.qml
+ qml/qmlsurfacegallery/SpectrogramData.qml
+ qml/qmlsurfacegallery/SurfaceHeightMap.qml
+ qml/qmlsurfacegallery/SurfaceOscilloscope.qml
+ qml/qmlsurfacegallery/SurfaceSpectrogram.qml
+ RESOURCES
+ qml/qmlsurfacegallery/heightmap.png
+)
+
+install(TARGETS qmlsurfacegallery
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/qmloscilloscope/datasource.cpp b/examples/datavisualization/qmlsurfacegallery/datasource.cpp
index 19580e03..7aeea178 100644
--- a/examples/datavisualization/qmloscilloscope/datasource.cpp
+++ b/examples/datavisualization/qmlsurfacegallery/datasource.cpp
@@ -1,50 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "datasource.h"
#include <QtCore/qmath.h>
#include <QtCore/qrandom.h>
-using namespace QtDataVisualization;
-
-//! [3]
-Q_DECLARE_METATYPE(QSurface3DSeries *)
-//! [3]
+#include <algorithm>
DataSource::DataSource(QObject *parent) :
- QObject(parent),
- m_index(-1),
- m_resetArray(nullptr)
+ QObject(parent)
{
- //! [4]
+ //! [3]
qRegisterMetaType<QSurface3DSeries *>();
- //! [4]
+ //! [3]
}
DataSource::~DataSource()
@@ -52,21 +20,22 @@ DataSource::~DataSource()
clearData();
}
-//! [0]
void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
- float xMin, float xMax, float yMin, float yMax,
+ float xMin, float xMax,
+ float yMin, float yMax,
float zMin, float zMax)
{
if (!cacheCount || !rowCount || !columnCount)
return;
clearData();
+
// Re-create the cache array
m_data.resize(cacheCount);
- for (int i(0); i < cacheCount; i++) {
+ for (int i = 0; i < cacheCount; ++i) {
QSurfaceDataArray &array = m_data[i];
array.reserve(rowCount);
- for (int j(0); j < rowCount; j++)
+ for (int j = 0; j < rowCount; ++j)
array.append(new QSurfaceDataRow(columnCount));
}
@@ -76,12 +45,14 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
int cacheIndexStep = columnCount / cacheCount;
float cacheStep = float(cacheIndexStep) * xRange / float(columnCount);
+ //! [0]
// Populate caches
- for (int i(0); i < cacheCount; i++) {
+ auto *generator = QRandomGenerator::global();
+ for (int i = 0; i < cacheCount; ++i) {
QSurfaceDataArray &cache = m_data[i];
float cacheXAdjustment = cacheStep * i;
float cacheIndexAdjustment = cacheIndexStep * i;
- for (int j(0); j < rowCount; j++) {
+ for (int j = 0; j < rowCount; ++j) {
QSurfaceDataRow &row = *(cache[j]);
float rowMod = (float(j)) / float(rowCount);
float yRangeMod = yRange * rowMod;
@@ -89,14 +60,14 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
float z = zRangeMod + zMin;
qreal rowColWaveAngleMul = M_PI * M_PI * rowMod;
float rowColWaveMul = yRangeMod * 0.2f;
- for (int k(0); k < columnCount; k++) {
+ for (int k = 0; k < columnCount; k++) {
float colMod = (float(k)) / float(columnCount);
float xRangeMod = xRange * colMod;
float x = xRangeMod + xMin + cacheXAdjustment;
float colWave = float(qSin((2.0 * M_PI * colMod) - (1.0 / 2.0 * M_PI)) + 1.0);
float y = (colWave * ((float(qSin(rowColWaveAngleMul * colMod) + 1.0))))
* rowColWaveMul
- + QRandomGenerator::global()->bounded(0.15f) * yRangeMod;
+ + generator->bounded(0.15f) * yRangeMod;
int index = k + cacheIndexAdjustment;
if (index >= columnCount) {
@@ -108,19 +79,18 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount,
}
}
}
+ //! [0]
}
-//! [0]
-//! [1]
void DataSource::update(QSurface3DSeries *series)
{
- if (series && m_data.size()) {
+ if (series && !m_data.isEmpty()) {
+ //! [1]
// Each iteration uses data from a different cached array
- m_index++;
- if (m_index > m_data.count() - 1)
+ if (++m_index >= m_data.size())
m_index = 0;
- QSurfaceDataArray array = m_data.at(m_index);
+ const QSurfaceDataArray &array = m_data.at(m_index);
int newRowCount = array.size();
int newColumnCount = array.at(0)->size();
@@ -130,30 +100,26 @@ void DataSource::update(QSurface3DSeries *series)
|| series->dataProxy()->columnCount() != newColumnCount) {
m_resetArray = new QSurfaceDataArray();
m_resetArray->reserve(newRowCount);
- for (int i(0); i < newRowCount; i++)
+ for (int i = 0; i < newRowCount; ++i)
m_resetArray->append(new QSurfaceDataRow(newColumnCount));
}
// Copy items from our cache to the reset array
- for (int i(0); i < newRowCount; i++) {
+ for (int i = 0; i < newRowCount; ++i) {
const QSurfaceDataRow &sourceRow = *(array.at(i));
QSurfaceDataRow &row = *(*m_resetArray)[i];
- for (int j(0); j < newColumnCount; j++)
- row[j].setPosition(sourceRow.at(j).position());
+ std::copy(sourceRow.cbegin(), sourceRow.cend(), row.begin());
}
// Notify the proxy that data has changed
series->dataProxy()->resetArray(m_resetArray);
+ //! [1]
}
}
-//! [1]
void DataSource::clearData()
{
- for (int i(0); i < m_data.size(); i++) {
- QSurfaceDataArray &array = m_data[i];
- for (int j(0); j < array.size(); j++)
- delete array[j];
- array.clear();
- }
+ for (auto &array : std::as_const(m_data))
+ qDeleteAll(array);
+ m_data.clear();
}
diff --git a/examples/datavisualization/qmlsurfacegallery/datasource.h b/examples/datavisualization/qmlsurfacegallery/datasource.h
new file mode 100644
index 00000000..bac5eeb2
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/datasource.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DATASOURCE_H
+#define DATASOURCE_H
+
+#include <QtDataVisualization/qsurface3dseries.h>
+#include <QtQml/qqmlregistration.h>
+
+//! [0]
+//! [2]
+class DataSource : public QObject
+{
+ Q_OBJECT
+ //! [0]
+ QML_ELEMENT
+ //! [2]
+public:
+ explicit DataSource(QObject *parent = nullptr);
+ virtual ~DataSource();
+
+ //! [1]
+ Q_INVOKABLE void generateData(int cacheCount, int rowCount, int columnCount,
+ float xMin, float xMax,
+ float yMin, float yMax,
+ float zMin, float zMax);
+
+ Q_INVOKABLE void update(QSurface3DSeries *series);
+ //! [1]
+private:
+ void clearData();
+
+ QList<QSurfaceDataArray> m_data;
+ int m_index = -1;
+ QSurfaceDataArray *m_resetArray = nullptr;
+};
+
+#endif
diff --git a/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png b/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png
new file mode 100644
index 00000000..c7023160
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/doc/images/qmlsurfacegallery-example.png
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc b/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc
new file mode 100644
index 00000000..3b33177c
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/doc/src/qmlsurfacegallery.qdoc
@@ -0,0 +1,238 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example qmlsurfacegallery
+ \meta tags {DataVisualization, Surface3D, Dynamic Data, Surface Graph, Height Map, Polar Graph}
+ \title Surface Graph Gallery
+ \ingroup qtdatavisualization_qmlexamples
+ \brief Gallery with three different ways to use a Surface3D graph.
+
+ \e {Surface Graph Gallery} demonstrates three different custom features with Surface3D graphs.
+ The features have their own tabs in the application.
+
+ The following sections concentrate on those features only and skip explaining the basic
+ functionality - for more detailed QML example documentation, see \l{Simple Scatter Graph}.
+
+ \image qmlsurfacegallery-example.png
+
+ \include examples-run.qdocinc
+
+ \section1 Height Map
+
+ In the \uicontrol {Height Map} tab, generate a surface graph from height data. The data used is
+ a height map of Mount Ruapehu and Mount Ngauruhoe in New Zealand.
+
+ \section2 Adding Data to the Graph
+
+ The data is set using HeightMapSurfaceDataProxy, which reads height information from a height
+ map image. The proxy itself is contained in a Surface3DSeries. Inside the
+ HeightMapSurfaceDataProxy the \c heightMapFile property specifies the image file containing the
+ height data. The value properties in the proxy define the minimum and maximum values for surface
+ area width, depth, and height. The \c z and \c x values are in latitude and longitude,
+ approximately at the real-world position, and the \c y is in meters.
+ \note The aspect ratio of the graph is not set to real-life scale, but the height is exaggerated
+ instead.
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 0
+
+ \section2 Displaying the Data
+
+ In \c main.qml, set up the Surface3D element to display the data.
+
+ First, define the custom gradient to be used for the surface. Set the colors from position
+ 0.0 to 1.0 with ColorGradient, with two extra stops to make the graph more vivid:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 1
+
+ Set this element into the \c baseGradients property in the \c theme used in Surface3D:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 2
+
+ Use the buttons to control other Surface3D features.
+
+ The first button toggles on and off the surface grid. The draw mode cannot
+ be cleared completely, so unless the surface itself is visible, the surface grid cannot be
+ hidden:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 3
+
+ The second one sets the surface grid color:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 4
+
+ The third one toggles the surface on or off in the surface draw mode. The draw mode cannot
+ be cleared completely, so unless the surface grid is visible, the surface itself cannot be
+ hidden:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 5
+
+ The fourth sets the for shading mode. If you are running the example on OpenGL ES system, flat
+ shading is not available:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml 6
+
+ The remaining buttons control the graph background features.
+
+ \section1 Spectrogram
+
+ In the \uicontrol {Spectrogram} tab, display polar and cartesian spectrograms and use
+ orthographic projection to show them in 2D.
+
+ A spectrogram is a surface graph with a range gradient used to emphasize the different
+ values. Typically, spectrograms are shown with two-dimensional surfaces, which is simulated
+ with a top-down orthographic view of the graph. To enforce the 2D effect, disable the
+ graph rotation via mouse or touch when in the orthographic mode.
+
+ \section2 Creating a Spectrogram
+
+ To create a 2D spectrogram, define a Surface3D item with the data given in the Surface3DSeries
+ with an ItemModelSurfaceDataProxy:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 0
+
+ The key properties for enabling the 2D effect are
+ \l{AbstractGraph3D::orthoProjection}{orthoProjection} and
+ \l{Camera3D::cameraPreset}{scene.activeCamera.cameraPreset}. Remove the perspective by
+ enabling orthographic projection for the graph, and the Y-dimension by viewing the graph
+ directly from above:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 1
+
+ Since this viewpoint causes the horizontal axis grid to be mostly obscured by the surface,
+ flip the horizontal grid to be drawn on top of the graph:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 2
+
+ \section2 Polar Spectrogram
+
+ Depending on the data, it is sometimes more natural to use a polar graph instead of a cartesian
+ one. This is supported via the \l{AbstractGraph3D::polar}{polar} property.
+
+ Add a button to switch between polar and cartesian modes:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 3
+
+ In the polar mode, X-axis is converted into the angular polar axis, and Z-axis is converted into
+ a radial polar axis. The surface points are recalculated according to the new axes.
+
+ The radial axis labels are drawn outside the graph by default. To draw them right next to the 0
+ degree angular axis inside the graph, define only a small offset for them:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 4
+
+ To enforce the 2D effect, disable graph rotation in orthographic mode by overriding the default
+ input handler with a custom one, which automatically toggles the
+ \l{InputHandler3D::rotationEnabled}{rotationEnabled} property based on the projection mode:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml 5
+
+ \section1 Oscilloscope
+
+ In the \uicontrol {Oscilloscope} tab, combine C++ and QML in an application, and show data that
+ dynamically changes.
+
+ \section2 Data Source in C++
+
+ The item model based proxies are good for simple or static graphs, but use basic proxies to
+ achieve the best performance when displaying data changing in realtime.
+ These are not supported in QML, as the data items they store do not inherit \l{QObject} and
+ cannot therefore be directly manipulated from QML code.
+ To overcome this limitation, implement a simple \c DataSource class in C++ to populate the
+ data proxy of the series.
+
+ Create a \c DataSource class to provide two methods that can be invoked from QML:
+
+ \snippet qmlsurfacegallery/datasource.h 0
+ \dots 4
+ \snippet qmlsurfacegallery/datasource.h 1
+
+ The first method, \c generateData(), creates a cache of simulated oscilloscope data to display.
+ The data is cached in a format that QSurfaceDataProxy accepts:
+
+ \snippet qmlsurfacegallery/datasource.cpp 0
+
+ The second method, \c update(), copies one set of the cached data into another array, which is
+ set to the data proxy of the series by calling QSurfaceDataProxy::resetArray().
+ To minimize overhead, reuse the same array if the array dimensions have not changed:
+
+ \snippet qmlsurfacegallery/datasource.cpp 1
+
+ Even though we are operating on the array pointer previously set to the proxy,
+ QSurfaceDataProxy::resetArray() still needs to be called after changing the data in it to prompt
+ the graph to render the data.
+
+ To be able to access the \c DataSource methods from QML, expose the data source by
+ making the DataSource a QML_ELEMENT:
+
+ \snippet qmlsurfacegallery/datasource.h 2
+
+ Further, declare it as a QML module in the CMakeLists.txt:
+
+ \badcode
+ qt6_add_qml_module(qmlsurfacegallery
+ URI SurfaceGallery
+ VERSION 1.0
+ NO_RESOURCE_TARGET_PATH
+ SOURCES
+ datasource.cpp datasource.h
+ ...
+ )
+ \endcode
+
+ To use QSurface3DSeries pointers as parameters for the \c DataSource class methods on all
+ environments and builds, make sure the meta type is registered:
+
+ \snippet qmlsurfacegallery/datasource.cpp 3
+
+ \section2 QML Application
+
+ To use the \c{DataSource}, import the QML module and create an instance of \c DataSource to be
+ used:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 0
+ \dots 0
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 1
+
+ Define a Surface3D graph and give it a Surface3DSeries:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 2
+
+ Don't specify a proxy for the Surface3DSeries that you attach to the graph. This makes the
+ series utilize the default QSurfaceDataProxy.
+
+ Hide the item label with \l{Abstract3DSeries::itemLabelVisible}{itemLabelVisible}. With dynamic,
+ fast-changing data, a floating selection label would be distracting and difficult to read.
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 3
+
+ You can display the selected item information in a \c Text element instead of the default
+ floating label above the selection pointer:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 4
+
+ Initialize the \c DataSource cache when the graph is complete by calling a helper function
+ \c generateData(), which calls the method with the same name in \c DataSource:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 5
+ \dots 0
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 6
+
+ To trigger the updates in data, define a \c{Timer}, which calls the \c update() method in
+ \c DataSource at requested intervals:
+
+ \snippet qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml 7
+
+ \section2 Enabling Direct Rendering
+
+ Since this application potentially deals with a lot of rapidly changing data, it uses direct
+ rendering mode for performance. To enable antialiasing in this mode, change the surface format
+ of the application window. The default format used by QQuickView doesn't support antialiasing.
+ Use the utility function provided to change the surface format in \c main.cpp:
+
+ \snippet qmlsurfacegallery/main.cpp 0
+ \dots 0
+ \snippet qmlsurfacegallery/main.cpp 1
+
+ \section1 Example Contents
+*/
diff --git a/examples/datavisualization/qmlsurfacegallery/main.cpp b/examples/datavisualization/qmlsurfacegallery/main.cpp
new file mode 100644
index 00000000..cbd831b6
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/main.cpp
@@ -0,0 +1,52 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+//! [0]
+#include <QtDataVisualization/qutils.h>
+//! [0]
+
+#include <QtGui/qguiapplication.h>
+#include <QtQuick/qquickview.h>
+#include <QtQml/qqmlengine.h>
+
+#ifdef QMAKE_BUILD
+#include "datasource.h"
+#endif
+
+using namespace Qt::StringLiterals;
+
+int main(int argc, char *argv[])
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+ QGuiApplication app(argc, argv);
+
+#ifdef QMAKE_BUILD
+ qmlRegisterType<DataSource>("SurfaceGallery", 1, 0, "DataSource");
+#endif
+
+ QQuickView viewer;
+
+ //! [1]
+ // Enable antialiasing in direct rendering mode
+ viewer.setFormat(qDefaultSurfaceFormat(true));
+ //! [1]
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(u"%1/../../../../%2"_s);
+#else
+ QString extraImportPath(u"%1/../../../%2"_s);
+#endif
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ u"qml"_s));
+ QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+
+ viewer.setTitle(u"Surface Graph Gallery"_s);
+
+ viewer.setSource(QUrl(u"qrc:/qml/qmlsurfacegallery/main.qml"_s));
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.show();
+
+ return app.exec();
+}
diff --git a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml
index ed9913b3..6e1b5722 100644
--- a/examples/datavisualization/qmlspectrogram/qml/qmlspectrogram/Data.qml
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SpectrogramData.qml
@@ -1,33 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
Item {
property alias model: dataModel
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml
new file mode 100644
index 00000000..6f65e17c
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceHeightMap.qml
@@ -0,0 +1,227 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+
+Rectangle {
+ id: heightMapView
+ color: surfacePlot.theme.windowColor
+
+ required property bool portraitMode
+
+ property real buttonWidth: heightMapView.portraitMode ? (heightMapView.width - 35) / 2
+ : (heightMapView.width - 40) / 3
+
+ Item {
+ id: surfaceView
+ anchors.top: buttons.bottom
+ anchors.bottom: heightMapView.bottom
+ anchors.left: heightMapView.left
+ anchors.right: heightMapView.right
+
+ //! [1]
+ ColorGradient {
+ id: surfaceGradient
+ ColorGradientStop { position: 0.0; color: "darkgreen"}
+ ColorGradientStop { position: 0.15; color: "darkslategray" }
+ ColorGradientStop { position: 0.7; color: "peru" }
+ ColorGradientStop { position: 1.0; color: "white" }
+ }
+ //! [1]
+
+ Surface3D {
+ id: surfacePlot
+ width: surfaceView.width
+ height: surfaceView.height
+ aspectRatio: 3.0
+ //! [2]
+ theme: Theme3D {
+ type: Theme3D.ThemeStoneMoss
+ font.family: "STCaiyun"
+ font.pointSize: 35
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ baseGradients: [surfaceGradient] // Use the custom gradient
+ }
+ //! [2]
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
+ axisX.segmentCount: 3
+ axisX.subSegmentCount: 3
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 3
+ axisZ.subSegmentCount: 3
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 2
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+ axisY.title: "Height (m)"
+ axisX.title: "Longitude 175.x\"E"
+ axisZ.title: "Latitude -39.x\"N"
+ axisY.titleVisible: true
+ axisX.titleVisible: true
+ axisZ.titleVisible: true
+
+ //! [0]
+ Surface3DSeries {
+ id: heightSeries
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: "://qml/qmlsurfacegallery/heightmap.png"
+ // We don't want the default data values set by heightmap proxy, but use
+ // actual coordinate and height values instead
+ autoScaleY: true
+ minYValue: 740
+ maxYValue: 2787
+ minZValue: -374 // ~ -39.374411"N
+ maxZValue: -116 // ~ -39.115971"N
+ minXValue: 472 // ~ 175.471767"E
+ maxXValue: 781 // ~ 175.780758"E
+ }
+
+ onDrawModeChanged: heightMapView.checkState()
+ }
+ //! [0]
+ }
+ }
+
+ Item {
+ id: buttons
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: 10
+ height: heightMapView.portraitMode ? surfaceGridToggle.implicitHeight * 3 + 20
+ : surfaceGridToggle.implicitHeight * 2 + 15
+ opacity: 0.5
+
+ Button {
+ id: surfaceGridToggle
+ anchors.margins: 5
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: heightMapView.buttonWidth // Calculated elsewhere based on screen orientation
+ text: "Show Surface\nGrid"
+ //! [3]
+ onClicked: {
+ if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
+ heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ else
+ heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ }
+ //! [3]
+ }
+
+ Button {
+ id: surfaceGridColor
+ anchors.margins: 5
+ anchors.left: surfaceGridToggle.right
+ anchors.top: parent.top
+ width: heightMapView.buttonWidth
+ text: "Red surface\ngrid color"
+ //! [4]
+ onClicked: {
+ if (Qt.colorEqual(heightSeries.wireframeColor, "#000000")) {
+ heightSeries.wireframeColor = "red";
+ text = "Black surface\ngrid color";
+ } else {
+ heightSeries.wireframeColor = "black";
+ text = "Red surface\ngrid color";
+ }
+ }
+ //! [4]
+ }
+
+ Button {
+ id: surfaceToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? parent.left : surfaceGridColor.right
+ anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : parent.top
+ width: heightMapView.buttonWidth
+ text: "Hide\nSurface"
+ //! [5]
+ onClicked: {
+ if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
+ heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
+ else
+ heightSeries.drawMode |= Surface3DSeries.DrawSurface;
+ }
+ //! [5]
+ }
+
+ Button {
+ id: flatShadingToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? surfaceToggle.right : parent.left
+ anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: heightSeries.flatShadingSupported ? "Show\nFlat" : "Flat not\nsupported"
+ enabled: heightSeries.flatShadingSupported
+ //! [6]
+ onClicked: {
+ if (heightSeries.flatShadingEnabled) {
+ heightSeries.flatShadingEnabled = false;
+ text = "Show\nFlat"
+ } else {
+ heightSeries.flatShadingEnabled = true;
+ text = "Show\nSmooth"
+ }
+ }
+ //! [6]
+ }
+
+ Button {
+ id: backgroundToggle
+ anchors.margins: 5
+ anchors.left: heightMapView.portraitMode ? parent.left : flatShadingToggle.right
+ anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
+ : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: "Hide\nBackground"
+ onClicked: {
+ if (surfacePlot.theme.backgroundEnabled) {
+ surfacePlot.theme.backgroundEnabled = false;
+ text = "Show\nBackground";
+ } else {
+ surfacePlot.theme.backgroundEnabled = true;
+ text = "Hide\nBackground";
+ }
+ }
+ }
+
+ Button {
+ id: gridToggle
+ anchors.margins: 5
+ anchors.left: backgroundToggle.right
+ anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
+ : surfaceToggle.bottom
+ width: heightMapView.buttonWidth
+ text: "Hide\nGrid"
+ onClicked: {
+ if (surfacePlot.theme.gridEnabled) {
+ surfacePlot.theme.gridEnabled = false;
+ text = "Show\nGrid";
+ } else {
+ surfacePlot.theme.gridEnabled = true;
+ text = "Hide\nGrid";
+ }
+ }
+ }
+ }
+
+ function checkState() {
+ if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
+ surfaceToggle.text = "Hide\nSurface";
+ else
+ surfaceToggle.text = "Show\nSurface";
+
+ if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
+ surfaceGridToggle.text = "Hide Surface\nGrid";
+ else
+ surfaceGridToggle.text = "Show Surface\nGrid";
+ }
+}
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml
new file mode 100644
index 00000000..a5ff8acd
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceOscilloscope.qml
@@ -0,0 +1,430 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+//! [0]
+import SurfaceGallery
+//! [0]
+
+Item {
+ id: oscilloscopeView
+
+ property int sampleColumns: sampleSlider.value
+ property int sampleRows: sampleColumns / 2
+ property int sampleCache: 24
+
+ required property bool portraitMode
+
+ property real controlWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
+ : oscilloscopeView.width / 4 - 6.66
+
+ property real buttonWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
+ : oscilloscopeView.width / 3 - 7.5
+
+ onSampleRowsChanged: {
+ surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
+ generateData()
+ }
+
+ //![1]
+ DataSource {
+ id: dataSource
+ }
+ //![1]
+
+ Item {
+ id: dataView
+ anchors.bottom: parent.bottom
+ width: parent.width
+ height: parent.height - controlArea.height
+
+ //! [2]
+ Surface3D {
+ id: surfaceGraph
+ anchors.fill: parent
+
+ Surface3DSeries {
+ id: surfaceSeries
+ drawMode: Surface3DSeries.DrawSurfaceAndWireframe
+ itemLabelFormat: "@xLabel, @zLabel: @yLabel"
+ //! [2]
+ //! [3]
+ itemLabelVisible: false
+ //! [3]
+
+ //! [4]
+ onItemLabelChanged: {
+ if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
+ selectionText.text = "No selection";
+ else
+ selectionText.text = surfaceSeries.itemLabel;
+ }
+ //! [4]
+ }
+
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
+ theme: Theme3D {
+ type: Theme3D.ThemeIsabelle
+ backgroundEnabled: false
+ }
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetFrontHigh
+
+ axisX.labelFormat: "%d ms"
+ axisY.labelFormat: "%d W"
+ axisZ.labelFormat: "%d mV"
+ axisX.min: 0
+ axisY.min: 0
+ axisZ.min: 0
+ axisX.max: 1000
+ axisY.max: 100
+ axisZ.max: 800
+ axisX.segmentCount: 4
+ axisY.segmentCount: 4
+ axisZ.segmentCount: 4
+ measureFps: true
+ renderingMode: AbstractGraph3D.RenderDirectToBackground
+
+ onCurrentFpsChanged: (fps)=> {
+ if (fps > 10)
+ fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps);
+ else
+ fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0;
+ }
+
+ //! [5]
+ Component.onCompleted: oscilloscopeView.generateData();
+ //! [5]
+ }
+ }
+
+ //! [7]
+ Timer {
+ id: refreshTimer
+ interval: 1000 / frequencySlider.value
+ running: true
+ repeat: true
+ onTriggered: dataSource.update(surfaceSeries);
+ }
+ //! [7]
+
+ Rectangle {
+ id: controlArea
+ height: oscilloscopeView.portraitMode ? flatShadingToggle.implicitHeight * 7
+ : flatShadingToggle.implicitHeight * 2
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.right: parent.right
+ color: surfaceGraph.theme.backgroundColor
+
+ // Samples
+ Rectangle {
+ id: samples
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Row {
+ anchors.centerIn: parent
+ spacing: 10
+ padding: 5
+
+ Slider {
+ id: sampleSlider
+ from: oscilloscopeView.sampleCache * 2
+ to: from * 10
+ stepSize: oscilloscopeView.sampleCache
+
+ background: Rectangle {
+ x: sampleSlider.leftPadding
+ y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: sampleSlider.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: surfaceGraph.theme.gridLineColor
+
+ Rectangle {
+ width: sampleSlider.visualPosition * parent.width
+ height: parent.height
+ color: surfaceGraph.theme.labelTextColor
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: sampleSlider.leftPadding + sampleSlider.visualPosition
+ * (sampleSlider.availableWidth - width)
+ y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: 10
+ color: sampleSlider.pressed ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: sampleSlider.pressed ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ }
+
+ Component.onCompleted: value = from;
+ }
+
+ Text {
+ id: samplesText
+ text: "Samples: " + (oscilloscopeView.sampleRows * oscilloscopeView.sampleColumns)
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+ }
+
+ // Frequency
+ Rectangle {
+ id: frequency
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : samples.right
+ anchors.top: oscilloscopeView.portraitMode ? samples.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Row {
+ anchors.centerIn: parent
+ spacing: 10
+ padding: 5
+
+ Slider {
+ id: frequencySlider
+ from: 2
+ to: 60
+ stepSize: 2
+ value: 30
+
+ background: Rectangle {
+ x: frequencySlider.leftPadding
+ y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: frequencySlider.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: surfaceGraph.theme.gridLineColor
+
+ Rectangle {
+ width: frequencySlider.visualPosition * parent.width
+ height: parent.height
+ color: surfaceGraph.theme.labelTextColor
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: frequencySlider.leftPadding + frequencySlider.visualPosition
+ * (frequencySlider.availableWidth - width)
+ y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
+ - height / 2
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: 10
+ color: frequencySlider.pressed ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: frequencySlider.pressed ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ }
+ }
+
+ Text {
+ id: frequencyText
+ text: "Freq: " + frequencySlider.value + " Hz"
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+ }
+
+ // FPS
+ Rectangle {
+ id: fpsindicator
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : frequency.right
+ anchors.top: oscilloscopeView.portraitMode ? frequency.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Text {
+ id: fpsText
+ anchors.fill: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+
+ // Selection
+ Rectangle {
+ id: selection
+ width: oscilloscopeView.controlWidth
+ height: flatShadingToggle.implicitHeight
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : fpsindicator.right
+ anchors.top: oscilloscopeView.portraitMode ? fpsindicator.bottom : parent.top
+ anchors.margins: 5
+
+ color: surfaceGraph.theme.windowColor
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 4
+
+ Text {
+ id: selectionText
+ anchors.fill: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: "No selection"
+ color: surfaceGraph.theme.labelTextColor
+ }
+ }
+
+ // Flat shading
+ Button {
+ id: flatShadingToggle
+ width: oscilloscopeView.buttonWidth
+ anchors.left: parent.left
+ anchors.top: selection.bottom
+ anchors.margins: 5
+
+ text: surfaceSeries.flatShadingSupported ? "Show\nSmooth" : "Flat\nnot supported"
+ enabled: surfaceSeries.flatShadingSupported
+
+ onClicked: {
+ if (surfaceSeries.flatShadingEnabled) {
+ surfaceSeries.flatShadingEnabled = false;
+ text = "Show\nFlat"
+ } else {
+ surfaceSeries.flatShadingEnabled = true;
+ text = "Show\nSmooth"
+ }
+ }
+
+ contentItem: Text {
+ text: flatShadingToggle.text
+ opacity: flatShadingToggle.enabled ? 1.0 : 0.3
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ opacity: flatShadingToggle.enabled ? 1 : 0.3
+ color: flatShadingToggle.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: flatShadingToggle.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+
+ // Surface grid
+ Button {
+ id: surfaceGridToggle
+ width: oscilloscopeView.buttonWidth
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : flatShadingToggle.right
+ anchors.top: oscilloscopeView.portraitMode ? flatShadingToggle.bottom : selection.bottom
+ anchors.margins: 5
+
+ text: "Hide\nSurface Grid"
+
+ onClicked: {
+ if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ text = "Show\nSurface Grid";
+ } else {
+ surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ text = "Hid\nSurface Grid";
+ }
+ }
+
+ contentItem: Text {
+ text: surfaceGridToggle.text
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ color: surfaceGridToggle.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: surfaceGridToggle.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+
+ // Exit
+ Button {
+ id: exitButton
+ width: oscilloscopeView.buttonWidth
+ height: surfaceGridToggle.height
+ anchors.left: oscilloscopeView.portraitMode ? parent.left : surfaceGridToggle.right
+ anchors.top: oscilloscopeView.portraitMode ? surfaceGridToggle.bottom : selection.bottom
+ anchors.margins: 5
+
+ text: "Quit"
+
+ onClicked: Qt.quit();
+
+ contentItem: Text {
+ text: exitButton.text
+ color: surfaceGraph.theme.labelTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ color: exitButton.down ? surfaceGraph.theme.gridLineColor
+ : surfaceGraph.theme.windowColor
+ border.color: exitButton.down ? surfaceGraph.theme.labelTextColor
+ : surfaceGraph.theme.gridLineColor
+ border.width: 1
+ radius: 2
+ }
+ }
+ }
+
+ //! [6]
+ function generateData() {
+ dataSource.generateData(oscilloscopeView.sampleCache, oscilloscopeView.sampleRows,
+ oscilloscopeView.sampleColumns,
+ surfaceGraph.axisX.min, surfaceGraph.axisX.max,
+ surfaceGraph.axisY.min, surfaceGraph.axisY.max,
+ surfaceGraph.axisZ.min, surfaceGraph.axisZ.max);
+ }
+ //! [6]
+}
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml
new file mode 100644
index 00000000..cedb9850
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/SurfaceSpectrogram.qml
@@ -0,0 +1,272 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtDataVisualization
+
+Rectangle {
+ id: spectrogramView
+ color: surfaceGraph.theme.windowColor
+
+ required property bool portraitMode
+
+ property real buttonWidth: spectrogramView.portraitMode ? (spectrogramView.width - 35) / 2
+ : (spectrogramView.width - 50) / 5
+
+ SpectrogramData {
+ id: surfaceData
+ }
+
+ Item {
+ id: surfaceView
+ anchors.top: buttons.bottom
+ anchors.left: parent.left
+ anchors.right: legend.left
+ anchors.bottom: parent.bottom
+
+ ColorGradient {
+ id: surfaceGradient
+ ColorGradientStop { position: 0.0; color: "black" }
+ ColorGradientStop { position: 0.2; color: "red" }
+ ColorGradientStop { position: 0.5; color: "blue" }
+ ColorGradientStop { position: 0.8; color: "yellow" }
+ ColorGradientStop { position: 1.0; color: "white" }
+ }
+
+ ValueAxis3D {
+ id: xAxis
+ segmentCount: 8
+ labelFormat: "%i\u00B0"
+ title: "Angle"
+ titleVisible: true
+ titleFixed: false
+ }
+
+ ValueAxis3D {
+ id: yAxis
+ segmentCount: 8
+ labelFormat: "%i \%"
+ title: "Value"
+ titleVisible: true
+ labelAutoRotation: 0
+ titleFixed: false
+ }
+
+ ValueAxis3D {
+ id: zAxis
+ segmentCount: 5
+ labelFormat: "%i nm"
+ title: "Radius"
+ titleVisible: true
+ titleFixed: false
+ }
+
+ Theme3D {
+ id: customTheme
+ type: Theme3D.ThemeQt
+ // Don't show specular spotlight as we don't want it to distort the colors
+ lightStrength: 0.0
+ ambientLightStrength: 1.0
+ backgroundEnabled: false
+ gridLineColor: "#AAAAAA"
+ windowColor: "#EEEEEE"
+ }
+
+ //! [0]
+ Surface3D {
+ id: surfaceGraph
+ anchors.fill: parent
+
+ Surface3DSeries {
+ id: surfaceSeries
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+ baseGradient: surfaceGradient
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ itemLabelFormat: "(@xLabel, @zLabel): @yLabel"
+
+ ItemModelSurfaceDataProxy {
+ itemModel: surfaceData.model
+ rowRole: "radius"
+ columnRole: "angle"
+ yPosRole: "value"
+ }
+ }
+ //! [0]
+
+ //! [1]
+ // Remove the perspective and view the graph from top down to achieve 2D effect
+ orthoProjection: true
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetDirectlyAbove
+ //! [1]
+
+ //! [2]
+ flipHorizontalGrid: true
+ //! [2]
+
+ //! [4]
+ radialLabelOffset: 0.01
+ //! [4]
+
+ //! [5]
+ inputHandler: TouchInputHandler3D {
+ rotationEnabled: !surfaceGraph.orthoProjection
+ }
+ //! [5]
+
+ theme: customTheme
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
+ axisX: xAxis
+ axisY: yAxis
+ axisZ: zAxis
+
+ aspectRatio: 1.0
+ horizontalAspectRatio: 1.0
+ scene.activeCamera.zoomLevel: 140
+ }
+ }
+
+ Item {
+ id: buttons
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: spectrogramView.portraitMode ? (polarToggle.height + 10) * 3
+ : polarToggle.height + 30
+ anchors.margins: 10
+
+ //! [3]
+ Button {
+ id: polarToggle
+ anchors.margins: 5
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: spectrogramView.buttonWidth // Calculated elsewhere based on screen orientation
+ text: "Switch to\n" + (surfaceGraph.polar ? "cartesian" : "polar")
+ onClicked: surfaceGraph.polar = !surfaceGraph.polar;
+ }
+ //! [3]
+
+ Button {
+ id: orthoToggle
+ anchors.margins: 5
+ anchors.left: polarToggle.right
+ anchors.top: parent.top
+ width: spectrogramView.buttonWidth
+ text: "Switch to\n" + (surfaceGraph.orthoProjection ? "perspective" : "orthographic")
+ onClicked: {
+ if (surfaceGraph.orthoProjection) {
+ surfaceGraph.orthoProjection = false;
+ xAxis.labelAutoRotation = 30;
+ yAxis.labelAutoRotation = 30;
+ zAxis.labelAutoRotation = 30;
+ } else {
+ surfaceGraph.orthoProjection = true;
+ surfaceGraph.scene.activeCamera.cameraPreset
+ = Camera3D.CameraPresetDirectlyAbove;
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ xAxis.labelAutoRotation = 0;
+ yAxis.labelAutoRotation = 0;
+ zAxis.labelAutoRotation = 0;
+ }
+ }
+ }
+
+ Button {
+ id: flipGridToggle
+ anchors.margins: 5
+ anchors.left: spectrogramView.portraitMode ? parent.left : orthoToggle.right
+ anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
+ width: spectrogramView.buttonWidth
+ text: "Toggle axis\ngrid on top"
+ onClicked: surfaceGraph.flipHorizontalGrid = !surfaceGraph.flipHorizontalGrid;
+ }
+
+ Button {
+ id: labelOffsetToggle
+ anchors.margins: 5
+ anchors.left: flipGridToggle.right
+ anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
+ width: spectrogramView.buttonWidth
+ text: "Toggle radial\nlabel position"
+ visible: surfaceGraph.polar
+ onClicked: {
+ if (surfaceGraph.radialLabelOffset >= 1.0)
+ surfaceGraph.radialLabelOffset = 0.01;
+ else
+ surfaceGraph.radialLabelOffset = 1.0;
+ }
+ }
+
+ Button {
+ id: surfaceGridToggle
+ anchors.margins: 5
+ anchors.left: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? parent.left
+ : flipGridToggle.right)
+ : (labelOffsetToggle.visible ? labelOffsetToggle.right
+ : flipGridToggle.right)
+ anchors.top: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? labelOffsetToggle.bottom
+ : orthoToggle.bottom)
+ : parent.top
+ width: spectrogramView.buttonWidth
+ text: "Toggle\nsurface grid"
+ visible: !surfaceGraph.orthoProjection
+ onClicked: {
+ if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
+ surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
+ else
+ surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
+ }
+ }
+ }
+
+ Item {
+ id: legend
+ anchors.bottom: parent.bottom
+ anchors.top: buttons.bottom
+ anchors.right: parent.right
+ width: spectrogramView.portraitMode ? 100 : 125
+
+ Rectangle {
+ id: gradient
+ anchors.margins: 20
+ anchors.bottom: legend.bottom
+ anchors.top: legend.top
+ anchors.right: legend.right
+ border.color: "black"
+ border.width: 1
+ width: spectrogramView.portraitMode ? 25 : 50
+ rotation: 180
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "black" }
+ GradientStop { position: 0.2; color: "red" }
+ GradientStop { position: 0.5; color: "blue" }
+ GradientStop { position: 0.8; color: "yellow" }
+ GradientStop { position: 1.0; color: "white" }
+ }
+ }
+
+ Text {
+ anchors.verticalCenter: gradient.bottom
+ anchors.right: gradient.left
+ anchors.margins: 2
+ text: surfaceGraph.axisY.min + "%"
+ }
+
+ Text {
+ anchors.verticalCenter: gradient.verticalCenter
+ anchors.right: gradient.left
+ anchors.margins: 2
+ text: (surfaceGraph.axisY.max + surfaceGraph.axisY.min) / 2 + "%"
+ }
+
+ Text {
+ anchors.verticalCenter: gradient.top
+ anchors.right: gradient.left
+ anchors.margins: 2
+ text: surfaceGraph.axisY.max + "%"
+ }
+ }
+}
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png
new file mode 100644
index 00000000..02f41230
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.png
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme
new file mode 100644
index 00000000..505fee85
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/heightmap.readme
@@ -0,0 +1,25 @@
+Heightmap of Mt Ruapehu & Mt Ngauruhoe
+
+Authored on: 22 July 2018
+Source: University of Otago (https://koordinates.com/layer/3736-09-taumarunui-15m-dem-nzsosdem-v10/)
+
+Creative Commons Attribution - CC BY-SA 4.0
+https://creativecommons.org/licenses/by-sa/4.0/
+
+You are free to:
+
+ Share — copy and redistribute the material in any medium or format
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
+
+This license is acceptable for Free Cultural Works.
+
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
+
+Under the following terms:
+
+ Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
+
+ ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
+
+ No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
+
diff --git a/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml
new file mode 100644
index 00000000..2d0b82db
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qml/qmlsurfacegallery/main.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Item {
+ id: mainView
+ width: 1280
+ height: 1024
+ visible: true
+
+ property bool portraitMode: width < height
+
+ TabBar {
+ id: tabBar
+ width: parent.width
+
+ TabButton {
+ text: "Height Map"
+ }
+
+ TabButton {
+ text: "Spectrogram"
+ }
+
+ TabButton {
+ text: "Oscilloscope"
+ }
+ }
+
+ StackLayout {
+ anchors.top: tabBar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ currentIndex: tabBar.currentIndex
+
+ SurfaceHeightMap {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+
+ SurfaceSpectrogram {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+
+ SurfaceOscilloscope {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ portraitMode: mainView.portraitMode
+ }
+ }
+}
diff --git a/examples/datavisualization/qmloscilloscope/qmloscilloscope.pro b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro
index 89023cc0..c79366ba 100644
--- a/examples/datavisualization/qmloscilloscope/qmloscilloscope.pro
+++ b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.pro
@@ -2,15 +2,16 @@
error( "Couldn't find the examples.pri file!" )
}
+DEFINES += QMAKE_BUILD
+
QT += datavisualization
-# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp \
datasource.cpp
HEADERS += datasource.h
-RESOURCES += qmloscilloscope.qrc
+RESOURCES += qmlsurfacegallery.qrc
OTHER_FILES += doc/src/* \
doc/images/* \
- qml/qmloscilloscope/*
+ qml/qmlsurfacegallery/*
diff --git a/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc
new file mode 100644
index 00000000..191c5cc4
--- /dev/null
+++ b/examples/datavisualization/qmlsurfacegallery/qmlsurfacegallery.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlsurfacegallery/heightmap.png</file>
+ <file>qml/qmlsurfacegallery/main.qml</file>
+ <file>qml/qmlsurfacegallery/SpectrogramData.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceHeightMap.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceOscilloscope.qml</file>
+ <file>qml/qmlsurfacegallery/SurfaceSpectrogram.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png b/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png
deleted file mode 100644
index c5a48fcb..00000000
--- a/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc b/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc
deleted file mode 100644
index f2cbd2c9..00000000
--- a/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example qmlsurfacelayers
- \title Qt Quick 2 Surface Multiseries Example
- \ingroup qtdatavisualization_examples
- \brief Using multiple series with Surface3D in a QML application.
-
- The Qt Quick 2 surface example shows how to make a 3D surface plot displaying 3 layers using
- Surface3D with Qt Quick 2.
-
- \image qmlsurfacelayers-example.png
-
- The focus in this example is on generating a multiseries surface plot from 3 different height
- map images, so in this section we skip explaining the application creation. For a more detailed
- QML example documentation, see \l{Qt Quick 2 Scatter Example}.
-
- \include examples-run.qdocinc
-
- \section1 Adding Data to the Graph
-
- This example shows how to add several surface series to one graph using using
- HeightMapSurfaceDataProxies and how to control their visibilities individually.
-
- Let's start by creating a specific gradient for each layer:
-
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 0
-
- Then we'll create the series themselves. It happens simply by adding 3 separate Surface3DSeries
- to the Surface3D graph as children:
-
- \dots 0
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 1
- \dots 0
-
- You'll notice we added the created gradients to the \c baseGradient properties of the series.
- We could have added them to the \c baseGradients property of the Theme3D in Surface3D instead,
- but doing it this way ensures each gradient is applied to a correct series:
-
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 2
- \dots
-
- \section1 Controlling the Graph
-
- Let's add some checkboxes to control the visibility of layers:
-
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 3
-
- We don't need to do anything on the \c onCheckedChanged as we bound the \c checked state to
- the \c visible property of the series directly:
-
- \dots 0
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 4
- \dots 0
-
- Let's add some more checkboxes to control how the layers are displayed, when visible:
-
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 5
-
- In addition to these we have three buttons, one of which is of special interest to us. It is
- used to control whether we want to slice into only one layer, or all of them:
-
- \snippet qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 6
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/qmlsurfacelayers/layer_1.png b/examples/datavisualization/qmlsurfacelayers/layer_1.png
deleted file mode 100644
index 9138c710..00000000
--- a/examples/datavisualization/qmlsurfacelayers/layer_1.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacelayers/layer_2.png b/examples/datavisualization/qmlsurfacelayers/layer_2.png
deleted file mode 100644
index 3af154e2..00000000
--- a/examples/datavisualization/qmlsurfacelayers/layer_2.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacelayers/layer_3.png b/examples/datavisualization/qmlsurfacelayers/layer_3.png
deleted file mode 100644
index 796df64d..00000000
--- a/examples/datavisualization/qmlsurfacelayers/layer_3.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/qmlsurfacelayers/main.cpp b/examples/datavisualization/qmlsurfacelayers/main.cpp
deleted file mode 100644
index d54cb447..00000000
--- a/examples/datavisualization/qmlsurfacelayers/main.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtDataVisualization/qutils.h>
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // Enable antialiasing in direct rendering mode
- viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat());
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
-
- viewer.setSource(QUrl("qrc:/qml/qmlsurfacelayers/main.qml"));
-
- viewer.setTitle(QStringLiteral("3-layered Terrain"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml
deleted file mode 100644
index 4b1dd5a3..00000000
--- a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
- property real fontSize: 12
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight * 2
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- font.pointSize: fontSize
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml
deleted file mode 100644
index e5c48562..00000000
--- a/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml
+++ /dev/null
@@ -1,343 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-import QtDataVisualization 1.0
-import "."
-
-Item {
- id: mainview
- width: 1280
- height: 720
-
- property real fontSize: 12
-
- Item {
- id: surfaceView
- width: mainview.width - buttonLayout.width
- height: mainview.height
- anchors.right: mainview.right;
-
- //! [0]
- ColorGradient {
- id: layerOneGradient
- ColorGradientStop { position: 0.0; color: "black" }
- ColorGradientStop { position: 0.31; color: "tan" }
- ColorGradientStop { position: 0.32; color: "green" }
- ColorGradientStop { position: 0.40; color: "darkslategray" }
- ColorGradientStop { position: 1.0; color: "white" }
- }
-
- ColorGradient {
- id: layerTwoGradient
- ColorGradientStop { position: 0.315; color: "blue" }
- ColorGradientStop { position: 0.33; color: "white" }
- }
-
- ColorGradient {
- id: layerThreeGradient
- ColorGradientStop { position: 0.0; color: "red" }
- ColorGradientStop { position: 0.15; color: "black" }
- }
- //! [0]
-
- Surface3D {
- id: surfaceLayers
- width: surfaceView.width
- height: surfaceView.height
- theme: Theme3D {
- type: Theme3D.ThemeEbony
- font.pointSize: 35
- colorStyle: Theme3D.ColorStyleRangeGradient
- }
- shadowQuality: AbstractGraph3D.ShadowQualityNone
- selectionMode: AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
- axisY.min: 20
- axisY.max: 200
- axisX.segmentCount: 5
- axisX.subSegmentCount: 2
- axisX.labelFormat: "%i"
- axisZ.segmentCount: 5
- axisZ.subSegmentCount: 2
- axisZ.labelFormat: "%i"
- axisY.segmentCount: 5
- axisY.subSegmentCount: 2
- axisY.labelFormat: "%i"
-
- //! [1]
- //! [2]
- Surface3DSeries {
- id: layerOneSeries
- baseGradient: layerOneGradient
- //! [2]
- HeightMapSurfaceDataProxy {
- heightMapFile: ":/heightmaps/layer_1.png"
- }
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- //! [4]
- visible: layerOneToggle.checked // bind to checkbox state
- //! [4]
- }
-
- Surface3DSeries {
- id: layerTwoSeries
- baseGradient: layerTwoGradient
- HeightMapSurfaceDataProxy {
- heightMapFile: ":/heightmaps/layer_2.png"
- }
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- visible: layerTwoToggle.checked // bind to checkbox state
- }
-
- Surface3DSeries {
- id: layerThreeSeries
- baseGradient: layerThreeGradient
- HeightMapSurfaceDataProxy {
- heightMapFile: ":/heightmaps/layer_3.png"
- }
- flatShadingEnabled: false
- drawMode: Surface3DSeries.DrawSurface
- visible: layerThreeToggle.checked // bind to checkbox state
- }
- //! [1]
- }
- }
-
- ColumnLayout {
- id: buttonLayout
- anchors.top: parent.top
- anchors.left: parent.left
- spacing: 0
-
- //! [3]
- GroupBox {
- flat: true
- Layout.fillWidth: true
- Column {
- spacing: 10
-
- Label {
- font.pointSize: fontSize
- font.bold: true
- text: "Layer Selection"
- }
-
- CheckBox {
- id: layerOneToggle
- checked: true
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Ground Layer"
- }
- }
- }
-
- CheckBox {
- id: layerTwoToggle
- checked: true
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Sea Layer"
- }
- }
- }
-
- CheckBox {
- id: layerThreeToggle
- checked: true
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Tectonic Layer"
- }
- }
- }
- }
- }
- //! [3]
-
- //! [5]
- GroupBox {
- flat: true
- Layout.fillWidth: true
- Column {
- spacing: 10
-
- Label {
- font.pointSize: fontSize
- font.bold: true
- text: "Layer Style"
- }
-
- CheckBox {
- id: layerOneGrid
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Ground as Grid"
- }
- }
- onCheckedChanged: {
- if (checked)
- layerOneSeries.drawMode = Surface3DSeries.DrawWireframe
- else
- layerOneSeries.drawMode = Surface3DSeries.DrawSurface
- }
- }
-
- CheckBox {
- id: layerTwoGrid
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Sea as Grid"
- }
- }
- onCheckedChanged: {
- if (checked)
- layerTwoSeries.drawMode = Surface3DSeries.DrawWireframe
- else
- layerTwoSeries.drawMode = Surface3DSeries.DrawSurface
- }
- }
-
- CheckBox {
- id: layerThreeGrid
- style: CheckBoxStyle {
- label: Label {
- font.pointSize: fontSize
- text: "Show Tectonic as Grid"
- }
- }
- onCheckedChanged: {
- if (checked)
- layerThreeSeries.drawMode = Surface3DSeries.DrawWireframe
- else
- layerThreeSeries.drawMode = Surface3DSeries.DrawSurface
- }
- }
- }
- }
- //! [5]
-
- //! [6]
- NewButton {
- id: sliceButton
- text: "Slice All Layers"
- fontSize: fontSize
- Layout.fillWidth: true
- Layout.minimumHeight: 40
- onClicked: {
- if (surfaceLayers.selectionMode & AbstractGraph3D.SelectionMultiSeries) {
- surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
- | AbstractGraph3D.SelectionSlice
- text = "Slice All Layers"
- } else {
- surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
- | AbstractGraph3D.SelectionSlice
- | AbstractGraph3D.SelectionMultiSeries
- text = "Slice One Layer"
- }
- }
- }
- //! [6]
-
- NewButton {
- id: shadowButton
- fontSize: fontSize
- Layout.fillWidth: true
- Layout.minimumHeight: 40
- text: surfaceLayers.shadowsSupported ? "Show Shadows" : "Shadows not supported"
- enabled: surfaceLayers.shadowsSupported
- onClicked: {
- if (surfaceLayers.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
- surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityLow
- text = "Hide Shadows"
- } else {
- surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityNone
- text = "Show Shadows"
- }
- }
- }
-
- NewButton {
- id: renderModeButton
- fontSize: fontSize
- text: "Switch Render Mode"
- Layout.fillWidth: true
- Layout.minimumHeight: 40
- onClicked: {
- var modeText = "Indirect "
- var aaText
- if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
- surfaceLayers.msaaSamples === 0) {
- surfaceLayers.renderingMode = AbstractGraph3D.RenderDirectToBackground
- modeText = "BackGround "
- } else if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
- surfaceLayers.msaaSamples === 4) {
- surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
- surfaceLayers.msaaSamples = 0
- } else if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
- surfaceLayers.msaaSamples === 8) {
- surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
- surfaceLayers.msaaSamples = 4
- } else {
- surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
- surfaceLayers.msaaSamples = 8
- }
-
- if (surfaceLayers.msaaSamples <= 0) {
- aaText = "No AA"
- } else {
- aaText = surfaceLayers.msaaSamples + "xMSAA"
- }
-
- renderLabel.text = modeText + aaText
- }
- }
-
- TextField {
- id: renderLabel
- font.pointSize: fontSize
- Layout.fillWidth: true
- Layout.minimumHeight: 40
- enabled: false
- horizontalAlignment: TextInput.AlignHCenter
- text: "Indirect, " + surfaceLayers.msaaSamples + "xMSAA"
- }
- }
-}
diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro
deleted file mode 100644
index 2bfa904d..00000000
--- a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlsurfacelayers.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlsurfacelayers/*
diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc
deleted file mode 100644
index 028a91db..00000000
--- a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc
+++ /dev/null
@@ -1,11 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlsurfacelayers/main.qml</file>
- <file>qml/qmlsurfacelayers/NewButton.qml</file>
- </qresource>
- <qresource prefix="/heightmaps">
- <file>layer_1.png</file>
- <file>layer_2.png</file>
- <file>layer_3.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/rotations/doc/images/rotations-example.png b/examples/datavisualization/rotations/doc/images/rotations-example.png
deleted file mode 100644
index 74bebbf7..00000000
--- a/examples/datavisualization/rotations/doc/images/rotations-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/rotations/doc/src/rotations.qdoc b/examples/datavisualization/rotations/doc/src/rotations.qdoc
deleted file mode 100644
index 5f1b8887..00000000
--- a/examples/datavisualization/rotations/doc/src/rotations.qdoc
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example rotations
- \title Rotations Example
- \ingroup qtdatavisualization_examples
- \brief Using rotated scatter items.
-
- This example shows how to do the following:
-
- \list
- \li Use item rotations
- \li Use custom item meshes
- \li Use range gradient to color the series
- \endlist
-
- For more basic example about using Qt Data Visualization graphs, see \l{Bars Example}.
-
- \image rotations-example.png
-
- \include examples-run.qdocinc
-
- \section1 Using Rotations
-
- In this example we want to orient the arrow items tangentially to the origin. This requires
- rotating them, which can be achieved by specifying rotation quaternion to each item:
-
- \snippet rotations/scatterdatamodifier.cpp 0
- \snippet rotations/scatterdatamodifier.cpp 1
- \snippet rotations/scatterdatamodifier.cpp 2
-
- Since the items need to be rotated along two axes, we define two rotation quaternions, one
- for Y-axis and one for Z-axis, and then multiply these together to get the total rotation,
- which we set to the data item.
-
- \section1 Using Custom Item Meshes
-
- The narrow arrow mesh we use for magnetic field arrow items is not a standard mesh. Instead
- we supply our own \c{narrowarrow.obj} file which contains the object definition for the mesh
- in \c Wavefront obj format:
-
- \snippet rotations/scatterdatamodifier.cpp 3
-
- \section1 Using Range Gradient
-
- Setting the color style to range gradient in a series means that the item is colored according
- to its relative Y-value on the visible Y-coordinate range. We want the arrows on the bottom
- part of the graph to be darker and gradually get lighter higher they are, so we define a
- range gradient with black color at the position 0.0 and white color at the position 1.0:
-
- \snippet rotations/scatterdatamodifier.cpp 4
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/rotations/main.cpp b/examples/datavisualization/rotations/main.cpp
deleted file mode 100644
index 23ae94f8..00000000
--- a/examples/datavisualization/rotations/main.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- widget->setWindowTitle(QStringLiteral("Item rotations example - Magnetic field of the sun"));
-
- QPushButton *toggleRotationButton = new QPushButton(widget);
- toggleRotationButton->setText(QStringLiteral("Toggle animation"));
- QPushButton *toggleSunButton = new QPushButton(widget);
- toggleSunButton->setText(QStringLiteral("Toggle Sun"));
-
- QSlider *fieldLinesSlider = new QSlider(Qt::Horizontal, widget);
- fieldLinesSlider->setTickInterval(1);
- fieldLinesSlider->setMinimum(1);
- fieldLinesSlider->setValue(12);
- fieldLinesSlider->setMaximum(128);
-
- QSlider *arrowsSlider = new QSlider(Qt::Horizontal, widget);
- arrowsSlider->setTickInterval(1);
- arrowsSlider->setMinimum(8);
- arrowsSlider->setValue(16);
- arrowsSlider->setMaximum(32);
-
- vLayout->addWidget(toggleRotationButton);
- vLayout->addWidget(toggleSunButton);
- vLayout->addWidget(new QLabel(QStringLiteral("Field Lines (1 - 128):")));
- vLayout->addWidget(fieldLinesSlider);
- vLayout->addWidget(new QLabel(QStringLiteral("Arrows per line (8 - 32):")));
- vLayout->addWidget(arrowsSlider, 1, Qt::AlignTop);
-
- ScatterDataModifier *modifier = new ScatterDataModifier(graph);
-
- QObject::connect(toggleRotationButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::toggleRotation);
- QObject::connect(toggleSunButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::toggleSun);
- QObject::connect(fieldLinesSlider, &QSlider::valueChanged, modifier,
- &ScatterDataModifier::setFieldLines);
- QObject::connect(arrowsSlider, &QSlider::valueChanged, modifier,
- &ScatterDataModifier::setArrowsPerLine);
-
- widget->show();
- return app.exec();
-}
diff --git a/examples/datavisualization/rotations/mesh/largesphere.obj b/examples/datavisualization/rotations/mesh/largesphere.obj
deleted file mode 100644
index 63101413..00000000
--- a/examples/datavisualization/rotations/mesh/largesphere.obj
+++ /dev/null
@@ -1,1938 +0,0 @@
-# Blender v2.66 (sub 0) OBJ File: ''
-# www.blender.org
-o Sphere_Sphere.001
-v -1.251476 7.901507 0.000000
-v -2.472136 7.608452 0.000000
-v -3.631924 7.128052 0.000000
-v -4.702282 6.472136 0.000000
-v -5.656854 5.656854 0.000000
-v -6.472136 4.702282 0.000000
-v -7.128052 3.631924 0.000000
-v -7.608452 2.472136 0.000000
-v -7.901507 1.251475 0.000000
-v -8.000000 -0.000001 0.000000
-v -7.901506 -1.251477 0.000000
-v -7.608451 -2.472138 0.000000
-v -7.128051 -3.631927 0.000000
-v -6.472134 -4.702285 0.000000
-v -5.656851 -5.656857 0.000000
-v -4.702279 -6.472138 0.000000
-v -3.631920 -7.128055 0.000000
-v -2.472131 -7.608454 0.000000
-v -1.251470 -7.901508 0.000000
-v -1.190224 7.901506 -0.386729
-v -2.351141 7.608452 -0.763934
-v -3.454165 7.128052 -1.122328
-v -4.472136 6.472136 -1.453087
-v -5.379988 5.656855 -1.748066
-v -6.155366 4.702282 -2.000002
-v -6.779180 3.631924 -2.202692
-v -7.236068 2.472136 -2.351143
-v -7.514779 1.251475 -2.441702
-v -7.608452 -0.000001 -2.472138
-v -7.514779 -1.251477 -2.441702
-v -7.236067 -2.472138 -2.351143
-v -6.779179 -3.631927 -2.202691
-v -6.155365 -4.702285 -2.000002
-v -5.379985 -5.656857 -1.748065
-v -4.472132 -6.472138 -1.453086
-v -3.454160 -7.128055 -1.122327
-v -2.351136 -7.608454 -0.763933
-v -1.190218 -7.901508 -0.386727
-v 0.000006 -8.000000 0.000000
-v -1.012464 7.901506 -0.735603
-v -1.999999 7.608452 -1.453089
-v -2.938287 7.128052 -2.134795
-v -3.804224 6.472136 -2.763936
-v -4.576490 5.656855 -3.325019
-v -5.236066 4.702282 -3.804230
-v -5.766714 3.631924 -4.189768
-v -6.155365 2.472136 -4.472140
-v -6.392451 1.251475 -4.644393
-v -6.472135 -0.000001 -4.702287
-v -6.392451 -1.251477 -4.644393
-v -6.155365 -2.472138 -4.472139
-v -5.766713 -3.631927 -4.189767
-v -5.236064 -4.702285 -3.804229
-v -4.576487 -5.656857 -3.325018
-v -3.804221 -6.472138 -2.763934
-v -2.938283 -7.128055 -2.134793
-v -1.999994 -7.608454 -1.453086
-v -1.012459 -7.901508 -0.735599
-v -0.735596 7.901506 -1.012470
-v -1.453082 7.608452 -2.000005
-v -2.134788 7.128052 -2.938294
-v -2.763928 6.472136 -3.804231
-v -3.325012 5.656855 -4.576497
-v -3.804222 4.702282 -5.236073
-v -4.189760 3.631924 -5.766721
-v -4.472132 2.472136 -6.155373
-v -4.644385 1.251475 -6.392459
-v -4.702279 -0.000001 -6.472142
-v -4.644385 -1.251477 -6.392458
-v -4.472132 -2.472138 -6.155372
-v -4.189760 -3.631927 -5.766720
-v -3.804221 -4.702285 -5.236072
-v -3.325010 -5.656857 -4.576494
-v -2.763927 -6.472138 -3.804229
-v -2.134786 -7.128055 -2.938290
-v -1.453079 -7.608454 -2.000001
-v -0.735593 -7.901508 -1.012466
-v -0.386723 7.901506 -1.190230
-v -0.763927 7.608452 -2.351147
-v -1.122321 7.128052 -3.454171
-v -1.453079 6.472136 -4.472141
-v -1.748058 5.656855 -5.379994
-v -1.999994 4.702282 -6.155373
-v -2.202683 3.631924 -6.779186
-v -2.351135 2.472136 -7.236074
-v -2.441693 1.251475 -7.514785
-v -2.472130 -0.000001 -7.608459
-v -2.441693 -1.251477 -7.514784
-v -2.351135 -2.472138 -7.236073
-v -2.202683 -3.631927 -6.779185
-v -1.999993 -4.702285 -6.155371
-v -1.748057 -5.656857 -5.379991
-v -1.453079 -6.472138 -4.472138
-v -1.122320 -7.128055 -3.454167
-v -0.763926 -7.608454 -2.351142
-v -0.386721 -7.901508 -1.190225
-v 0.000007 7.901506 -1.251482
-v 0.000007 7.608452 -2.472142
-v 0.000007 7.128052 -3.631930
-v 0.000008 6.472136 -4.702287
-v 0.000008 5.656855 -5.656860
-v 0.000008 4.702282 -6.472141
-v 0.000008 3.631924 -7.128057
-v 0.000008 2.472136 -7.608458
-v 0.000009 1.251475 -7.901512
-v 0.000009 -0.000001 -8.000006
-v 0.000009 -1.251477 -7.901511
-v 0.000008 -2.472138 -7.608456
-v 0.000008 -3.631927 -7.128057
-v 0.000008 -4.702285 -6.472139
-v 0.000008 -5.656857 -5.656857
-v 0.000007 -6.472138 -4.702284
-v 0.000007 -7.128055 -3.631926
-v 0.000007 -7.608454 -2.472137
-v 0.000007 -7.901508 -1.251476
-v 0.386736 7.901506 -1.190230
-v 0.763941 7.608452 -2.351147
-v 1.122336 7.128052 -3.454170
-v 1.453094 6.472136 -4.472140
-v 1.748074 5.656855 -5.379993
-v 2.000010 4.702282 -6.155371
-v 2.202699 3.631924 -6.779185
-v 2.351151 2.472136 -7.236073
-v 2.441710 1.251475 -7.514783
-v 2.472147 -0.000001 -7.608457
-v 2.441710 -1.251477 -7.514783
-v 2.351151 -2.472138 -7.236071
-v 2.202699 -3.631927 -6.779184
-v 2.000009 -4.702285 -6.155369
-v 1.748073 -5.656857 -5.379990
-v 1.453093 -6.472138 -4.472137
-v 1.122334 -7.128055 -3.454166
-v 0.763939 -7.608454 -2.351141
-v 0.386734 -7.901508 -1.190225
-v 0.735610 7.901506 -1.012470
-v 1.453096 7.608452 -2.000005
-v 2.134803 7.128052 -2.938292
-v 2.763942 6.472136 -3.804229
-v 3.325027 5.656855 -4.576495
-v 3.804237 4.702282 -5.236070
-v 4.189775 3.631924 -5.766718
-v 4.472148 2.472136 -6.155370
-v 4.644401 1.251475 -6.392455
-v 4.702294 -0.000001 -6.472139
-v 4.644400 -1.251477 -6.392455
-v 4.472147 -2.472138 -6.155369
-v 4.189774 -3.631927 -5.766717
-v 3.804236 -4.702285 -5.236069
-v 3.325025 -5.656857 -4.576492
-v 2.763941 -6.472138 -3.804227
-v 2.134800 -7.128055 -2.938289
-v 1.453092 -7.608454 -2.000000
-v 0.735606 -7.901508 -1.012465
-v 1.012477 7.901506 -0.735602
-v 2.000012 7.608452 -1.453088
-v 2.938301 7.128052 -2.134794
-v 3.804237 6.472136 -2.763933
-v 4.576503 5.656855 -3.325017
-v 5.236080 4.702282 -3.804226
-v 5.766727 3.631924 -4.189765
-v 6.155380 2.472136 -4.472136
-v 6.392465 1.251475 -4.644389
-v 6.472148 -0.000001 -4.702283
-v 6.392465 -1.251477 -4.644389
-v 6.155378 -2.472138 -4.472136
-v 5.766726 -3.631927 -4.189764
-v 5.236078 -4.702285 -3.804225
-v 4.576500 -5.656857 -3.325016
-v 3.804235 -6.472138 -2.763932
-v 2.938297 -7.128055 -2.134791
-v 2.000007 -7.608454 -1.453085
-v 1.012472 -7.901508 -0.735599
-v 1.190237 7.901506 -0.386729
-v 2.351154 7.608452 -0.763933
-v 3.454178 7.128052 -1.122326
-v 4.472147 6.472136 -1.453085
-v 5.380000 5.656855 -1.748063
-v 6.155379 4.702282 -1.999998
-v 6.779192 3.631924 -2.202688
-v 7.236081 2.472136 -2.351139
-v 7.514791 1.251475 -2.441698
-v 7.608464 -0.000001 -2.472134
-v 7.514791 -1.251477 -2.441698
-v 7.236079 -2.472138 -2.351139
-v 6.779191 -3.631927 -2.202688
-v 6.155377 -4.702285 -1.999998
-v 5.379997 -5.656857 -1.748063
-v 4.472144 -6.472138 -1.453084
-v 3.454173 -7.128055 -1.122325
-v 2.351148 -7.608454 -0.763931
-v 1.190231 -7.901508 -0.386727
-v 1.251488 7.901506 0.000001
-v 2.472148 7.608452 0.000001
-v 3.631936 7.128052 0.000002
-v 4.702293 6.472136 0.000002
-v 5.656866 5.656855 0.000003
-v 6.472147 4.702282 0.000004
-v 7.128063 3.631924 0.000003
-v 7.608464 2.472136 0.000004
-v 7.901517 1.251475 0.000004
-v 8.000011 -0.000001 0.000004
-v 7.901517 -1.251477 0.000004
-v 7.608462 -2.472138 0.000004
-v 7.128062 -3.631927 0.000003
-v 6.472145 -4.702285 0.000004
-v 5.656862 -5.656857 0.000002
-v 4.702290 -6.472138 0.000002
-v 3.631932 -7.128055 0.000002
-v 2.472143 -7.608454 0.000001
-v 1.251483 -7.901508 0.000001
-v 1.190236 7.901506 0.386730
-v 2.351153 7.608452 0.763935
-v 3.454176 7.128052 1.122330
-v 4.472146 6.472136 1.453089
-v 5.379998 5.656855 1.748069
-v 6.155376 4.702282 2.000005
-v 6.779190 3.631924 2.202694
-v 7.236078 2.472136 2.351147
-v 7.514788 1.251475 2.441705
-v 7.608462 -0.000001 2.472141
-v 7.514788 -1.251477 2.441705
-v 7.236076 -2.472138 2.351146
-v 6.779189 -3.631927 2.202693
-v 6.155375 -4.702285 2.000004
-v 5.379995 -5.656857 1.748067
-v 4.472143 -6.472138 1.453088
-v 3.454172 -7.128055 1.122328
-v 2.351147 -7.608454 0.763933
-v 1.190231 -7.901508 0.386728
-v 1.012476 7.901506 0.735603
-v 2.000010 7.608452 1.453090
-v 2.938298 7.128052 2.134796
-v 3.804235 6.472136 2.763937
-v 4.576499 5.656855 3.325021
-v 5.236075 4.702282 3.804232
-v 5.766723 3.631924 4.189770
-v 6.155375 2.472136 4.472143
-v 6.392460 1.251475 4.644395
-v 6.472144 -0.000001 4.702289
-v 6.392460 -1.251477 4.644395
-v 6.155374 -2.472138 4.472141
-v 5.766722 -3.631927 4.189769
-v 5.236074 -4.702285 3.804231
-v 4.576497 -5.656857 3.325018
-v 3.804232 -6.472138 2.763935
-v 2.938295 -7.128055 2.134794
-v 2.000006 -7.608454 1.453086
-v 1.012471 -7.901508 0.735600
-v 0.735608 7.901506 1.012471
-v 1.453094 7.608452 2.000006
-v 2.134799 7.128052 2.938294
-v 2.763939 6.472136 3.804232
-v 3.325022 5.656855 4.576497
-v 3.804231 4.702282 5.236074
-v 4.189770 3.631924 5.766721
-v 4.472141 2.472136 6.155374
-v 4.644393 1.251475 6.392459
-v 4.702287 -0.000001 6.472143
-v 4.644393 -1.251477 6.392459
-v 4.472141 -2.472138 6.155372
-v 4.189768 -3.631927 5.766720
-v 3.804231 -4.702285 5.236073
-v 3.325021 -5.656857 4.576494
-v 2.763937 -6.472138 3.804228
-v 2.134797 -7.128055 2.938291
-v 1.453090 -7.608454 2.000001
-v 0.735605 -7.901508 1.012466
-v 0.386735 7.901506 1.190230
-v 0.763939 7.608452 2.351147
-v 1.122332 7.128052 3.454171
-v 1.453090 6.472136 4.472141
-v 1.748069 5.656855 5.379993
-v 2.000002 4.702282 6.155373
-v 2.202693 3.631924 6.779186
-v 2.351144 2.472136 7.236073
-v 2.441703 1.251475 7.514784
-v 2.472139 -0.000001 7.608459
-v 2.441703 -1.251477 7.514784
-v 2.351144 -2.472138 7.236072
-v 2.202692 -3.631927 6.779184
-v 2.000003 -4.702285 6.155371
-v 1.748068 -5.656857 5.379990
-v 1.453089 -6.472138 4.472137
-v 1.122331 -7.128055 3.454167
-v 0.763937 -7.608454 2.351141
-v 0.386733 -7.901508 1.190225
-v 0.000005 7.901506 1.251482
-v 0.000005 7.608452 2.472142
-v 0.000004 7.128052 3.631929
-v 0.000003 6.472136 4.702286
-v 0.000003 5.656855 5.656859
-v 0.000001 4.702282 6.472140
-v 0.000002 3.631924 7.128057
-v 0.000001 2.472136 7.608456
-v 0.000001 1.251475 7.901510
-v 0.000000 -0.000001 8.000005
-v 0.000001 -1.251477 7.901510
-v 0.000002 -2.472138 7.608455
-v 0.000001 -3.631927 7.128055
-v 0.000002 -4.702285 6.472138
-v 0.000003 -5.656857 5.656855
-v 0.000004 -6.472138 4.702283
-v 0.000004 -7.128055 3.631925
-v 0.000005 -7.608454 2.472136
-v 0.000006 -7.901508 1.251476
-v -0.386724 7.901506 1.190230
-v -0.763929 7.608452 2.351146
-v -1.122324 7.128052 3.454169
-v -1.453083 6.472136 4.472139
-v -1.748063 5.656855 5.379992
-v -2.000000 4.702282 6.155369
-v -2.202688 3.631924 6.779183
-v -2.351142 2.472136 7.236070
-v -2.441700 1.251475 7.514781
-v -2.472137 -0.000001 7.608455
-v -2.441700 -1.251477 7.514781
-v -2.351140 -2.472138 7.236069
-v -2.202689 -3.631927 6.779181
-v -1.999999 -4.702285 6.155367
-v -1.748061 -5.656857 5.379988
-v -1.453082 -6.472138 4.472136
-v -1.122323 -7.128055 3.454165
-v -0.763927 -7.608454 2.351140
-v -0.386722 -7.901508 1.190224
-v -0.735597 7.901506 1.012470
-v -1.453084 7.608452 2.000003
-v -2.134790 7.128052 2.938291
-v -2.763931 6.472136 3.804227
-v -3.325015 5.656855 4.576493
-v -3.804227 4.702282 5.236067
-v -4.189764 3.631924 5.766716
-v -4.472137 2.472136 6.155366
-v -4.644390 1.251475 6.392452
-v -4.702284 -0.000001 6.472136
-v -4.644390 -1.251477 6.392452
-v -4.472136 -2.472138 6.155365
-v -4.189764 -3.631927 5.766714
-v -3.804225 -4.702285 5.236066
-v -3.325012 -5.656857 4.576489
-v -2.763929 -6.472138 3.804224
-v -2.134788 -7.128055 2.938287
-v -1.453080 -7.608454 1.999999
-v -0.735594 -7.901508 1.012465
-v 0.000001 8.000000 0.000004
-v -1.012464 7.901506 0.735602
-v -1.999999 7.608452 1.453087
-v -2.938287 7.128052 2.134792
-v -3.804225 6.472136 2.763931
-v -4.576491 5.656855 3.325015
-v -5.236069 4.702282 3.804223
-v -5.766715 3.631924 4.189762
-v -6.155367 2.472136 4.472132
-v -6.392453 1.251475 4.644385
-v -6.472137 -0.000001 4.702279
-v -6.392453 -1.251477 4.644385
-v -6.155365 -2.472138 4.472132
-v -5.766714 -3.631927 4.189760
-v -5.236066 -4.702285 3.804223
-v -4.576488 -5.656857 3.325012
-v -3.804222 -6.472138 2.763929
-v -2.938284 -7.128055 2.134789
-v -1.999995 -7.608454 1.453083
-v -1.012460 -7.901508 0.735598
-v -1.190224 7.901506 0.386728
-v -2.351140 7.608452 0.763932
-v -3.454164 7.128052 1.122325
-v -4.472135 6.472136 1.453082
-v -5.379988 5.656855 1.748062
-v -6.155366 4.702282 1.999995
-v -6.779179 3.631924 2.202685
-v -7.236067 2.472136 2.351135
-v -7.514778 1.251475 2.441694
-v -7.608452 -0.000001 2.472130
-v -7.514778 -1.251477 2.441694
-v -7.236065 -2.472138 2.351135
-v -6.779178 -3.631927 2.202684
-v -6.155364 -4.702285 1.999995
-v -5.379983 -5.656857 1.748060
-v -4.472131 -6.472138 1.453082
-v -3.454160 -7.128055 1.122324
-v -2.351135 -7.608454 0.763930
-v -1.190218 -7.901508 0.386726
-vt 0.035483 0.289114
-vt 0.042491 0.337738
-vt 0.007397 0.296413
-vt 0.063422 0.533643
-vt 0.068439 0.582662
-vt 0.015908 0.545902
-vt 0.097669 0.776914
-vt 0.111929 0.824070
-vt 0.027296 0.795217
-vt 0.391159 0.929226
-vt 0.461397 0.895775
-vt 0.452242 0.950225
-vt 0.026572 0.240871
-vt 0.004734 0.246573
-vt 0.058567 0.484592
-vt 0.014398 0.495993
-vt 0.087726 0.728878
-vt 0.023823 0.745426
-vt 0.270350 0.936037
-vt 0.231553 0.980467
-vt 0.014254 0.193317
-vt 0.001048 0.196795
-vt 0.053639 0.435556
-vt 0.012882 0.446084
-vt 0.080129 0.680372
-vt 0.021272 0.695580
-vt 0.178869 0.909944
-vt 0.068145 0.942733
-vt 0.048386 0.386583
-vt 0.011281 0.396180
-vt 0.073887 0.631595
-vt 0.019234 0.645702
-vt 0.135028 0.869370
-vt 0.042415 0.894305
-vt 0.009500 0.346287
-vt 0.017489 0.595807
-vt 0.032618 0.844897
-vt 0.484179 0.902186
-vt 0.550590 0.948315
-vt 1.004734 0.246573
-vt 1.007397 0.296413
-vt 0.982704 0.246140
-vt 1.014398 0.495993
-vt 1.015908 0.545902
-vt 0.969883 0.495119
-vt 1.023823 0.745426
-vt 1.027296 0.795217
-vt 0.957447 0.744128
-vt 1.231553 0.980467
-vt 0.750122 0.974207
-vt 1.001048 0.196795
-vt 0.987598 0.196530
-vt 1.012882 0.446084
-vt 0.971892 0.445278
-vt 1.021272 0.695580
-vt 0.960802 0.694395
-vt 1.068145 0.942733
-vt 0.901563 0.939596
-vt 1.011281 0.396180
-vt 0.974014 0.395447
-vt 1.019234 0.645702
-vt 0.963490 0.644610
-vt 1.042415 0.894305
-vt 0.933349 0.892198
-vt 1.009500 0.346287
-vt 0.976377 0.345635
-vt 1.017489 0.595807
-vt 0.965794 0.594793
-vt 1.032618 0.844897
-vt 0.945957 0.843211
-vt 0.979169 0.295858
-vt 0.967884 0.544959
-vt 0.952893 0.793765
-vt 0.960930 0.239587
-vt 0.925822 0.482052
-vt 0.894284 0.725297
-vt 0.716363 0.929856
-vt 0.974473 0.192535
-vt 0.931207 0.433203
-vt 0.902436 0.677050
-vt 0.801451 0.904132
-vt 0.936960 0.384433
-vt 0.909171 0.628493
-vt 0.844888 0.864413
-vt 0.943427 0.335818
-vt 0.915075 0.579756
-vt 0.868695 0.819731
-vt 0.951128 0.287472
-vt 0.920529 0.530922
-vt 0.883697 0.773009
-vt 0.509882 0.901680
-vt 0.603672 0.925341
-vt 0.939868 0.227168
-vt 0.882765 0.457977
-vt 0.837646 0.692981
-vt 0.690972 0.886830
-vt 0.962264 0.185007
-vt 0.891191 0.410771
-vt 0.848554 0.646630
-vt 0.746350 0.860374
-vt 0.900372 0.363822
-vt 0.857974 0.599764
-vt 0.782623 0.823943
-vt 0.910879 0.317332
-vt 0.866529 0.552601
-vt 0.806908 0.782514
-vt 0.923572 0.271605
-vt 0.874667 0.505296
-vt 0.824298 0.738476
-vt 0.531785 0.894399
-vt 0.616896 0.895419
-vt 0.840708 0.424882
-vt 0.787319 0.652419
-vt 0.666434 0.846117
-vt 0.951650 0.174333
-vt 0.851788 0.379552
-vt 0.799275 0.607479
-vt 0.706276 0.816232
-vt 0.864196 0.334814
-vt 0.810089 0.562030
-vt 0.735147 0.779653
-vt 0.878757 0.291055
-vt 0.820304 0.516318
-vt 0.756661 0.739218
-vt 0.896714 0.248885
-vt 0.830369 0.470540
-vt 0.773481 0.696510
-vt 0.545835 0.882162
-vt 0.613251 0.864748
-vt 0.920019 0.209353
-vt 0.601814 0.835743
-vt 0.902011 0.186799
-vt 0.798974 0.385208
-vt 0.741339 0.608286
-vt 0.641659 0.808678
-vt 0.812374 0.341530
-vt 0.753261 0.563866
-vt 0.671741 0.774500
-vt 0.827915 0.298950
-vt 0.764518 0.519117
-vt 0.694750 0.736000
-vt 0.846764 0.258126
-vt 0.775586 0.474273
-vt 0.713019 0.694862
-vt 0.551827 0.867272
-vt 0.551336 0.851697
-vt 0.870653 0.220135
-vt 0.786910 0.429557
-vt 0.728181 0.652086
-vt 0.943465 0.161100
-vt 0.886800 0.160336
-vt 0.756203 0.341667
-vt 0.697515 0.564418
-vt 0.616262 0.775491
-vt 0.771631 0.298973
-vt 0.708699 0.519594
-vt 0.639253 0.736889
-vt 0.790354 0.258010
-vt 0.719689 0.474675
-vt 0.657473 0.695657
-vt 0.814109 0.219846
-vt 0.730930 0.429879
-vt 0.672573 0.652794
-vt 0.546100 0.836912
-vt 0.845356 0.186292
-vt 0.742904 0.385443
-vt 0.685664 0.608914
-vt 0.586129 0.809772
-vt 0.938802 0.146131
-vt 0.876174 0.131001
-vt 0.710309 0.297343
-vt 0.654008 0.524127
-vt 0.590087 0.747535
-vt 0.727302 0.254538
-vt 0.663845 0.478153
-vt 0.607276 0.704820
-vt 0.749262 0.214082
-vt 0.673880 0.432264
-vt 0.621259 0.660654
-vt 0.779077 0.177660
-vt 0.684564 0.386653
-vt 0.643951 0.570007
-vt 0.537514 0.823995
-vt 0.820645 0.148333
-vt 0.696450 0.341564
-vt 0.567816 0.787838
-vt 0.658464 0.256085
-vt 0.609517 0.490486
-vt 0.563122 0.725732
-vt 0.700288 0.169995
-vt 0.617324 0.442954
-vt 0.575103 0.679574
-vt 0.625569 0.395564
-vt 0.633223 0.615598
-vt 0.585045 0.632740
-vt 0.737701 0.133357
-vt 0.634697 0.348462
-vt 0.601779 0.538040
-vt 0.526630 0.813733
-vt 0.796084 0.107238
-vt 0.645335 0.301858
-vt 0.547763 0.770746
-vt 0.939113 0.130553
-vt 0.874144 0.100247
-vt 0.563421 0.466357
-vt 0.535483 0.710885
-vt 0.675759 0.211740
-vt 0.635028 0.130630
-vt 0.568439 0.417338
-vt 0.542491 0.662261
-vt 0.573887 0.368405
-vt 0.593757 0.585502
-vt 0.548386 0.613416
-vt 0.678869 0.090056
-vt 0.580129 0.319628
-vt 0.558567 0.515408
-vt 0.514254 0.806683
-vt 0.770350 0.063964
-vt 0.587726 0.271122
-vt 0.526572 0.759129
-vt 0.946160 0.115905
-vt 0.891158 0.070774
-vt 0.597669 0.223086
-vt 0.611929 0.175930
-vt 0.542415 0.105695
-vt 0.517489 0.404193
-vt 0.509500 0.653713
-vt 0.519234 0.354298
-vt 0.553639 0.564444
-vt 0.511281 0.603820
-vt 0.568145 0.057267
-vt 0.521272 0.304420
-vt 0.514398 0.504007
-vt 0.501048 0.803204
-vt 0.731552 0.019533
-vt 0.523822 0.254574
-vt 0.504734 0.753426
-vt 0.961397 0.104224
-vt 0.952242 0.049775
-vt 0.527296 0.204783
-vt 0.515908 0.454098
-vt 0.507397 0.703586
-vt 0.532618 0.155103
-vt 0.433350 0.107802
-vt 0.465794 0.405207
-vt 0.476377 0.654364
-vt 0.463490 0.355390
-vt 0.512882 0.553916
-vt 0.474014 0.604552
-vt 0.401564 0.060404
-vt 0.460802 0.305605
-vt 0.469884 0.504881
-vt 0.487599 0.803469
-vt 1.250123 0.025793
-vt 0.457447 0.255872
-vt 0.482704 0.753860
-vt 0.984179 0.097813
-vt 1.050589 0.051685
-vt 0.452893 0.206235
-vt 0.467885 0.455040
-vt 0.479169 0.704142
-vt 0.445957 0.156790
-vt 0.344888 0.135587
-vt 0.415075 0.420244
-vt 0.443428 0.664182
-vt 0.409171 0.371507
-vt 0.471892 0.554721
-vt 0.436960 0.615567
-vt 0.250123 0.025793
-vt 0.301452 0.095868
-vt 0.402437 0.322950
-vt 0.425822 0.517948
-vt 0.474473 0.807464
-vt 0.050589 0.051685
-vt 0.216363 0.070144
-vt 0.394284 0.274702
-vt 0.460930 0.760413
-vt 0.009882 0.098319
-vt 0.103671 0.074658
-vt 0.383698 0.226991
-vt 0.420529 0.469078
-vt 0.451128 0.712528
-vt 0.366529 0.447399
-vt 0.410880 0.682668
-vt 0.282623 0.176056
-vt 0.357975 0.400236
-vt 0.431207 0.566797
-vt 0.400372 0.636177
-vt 0.246351 0.139626
-vt 0.348554 0.353370
-vt 0.382765 0.542022
-vt 0.462264 0.814992
-vt 0.190972 0.113170
-vt 0.337646 0.307019
-vt 0.439868 0.772831
-vt 0.031785 0.105600
-vt 0.116896 0.104580
-vt 0.368695 0.180269
-vt 0.324298 0.261524
-vt 0.374667 0.494704
-vt 0.423573 0.728394
-vt 0.306908 0.217486
-vt 0.378757 0.708945
-vt 0.235147 0.220346
-vt 0.310089 0.437969
-vt 0.391191 0.589229
-vt 0.364196 0.665186
-vt 0.206276 0.183767
-vt 0.299275 0.392521
-vt 0.340709 0.575117
-vt 0.451650 0.825666
-vt 0.166434 0.153882
-vt 0.287319 0.347580
-vt 0.420019 0.790647
-vt 0.045835 0.117837
-vt 0.113250 0.135252
-vt 0.273481 0.303490
-vt 0.330370 0.529459
-vt 0.396715 0.751114
-vt 0.256661 0.260781
-vt 0.320304 0.483681
-vt 0.171741 0.225499
-vt 0.253261 0.436134
-vt 0.351788 0.620448
-vt 0.312374 0.658470
-vt 0.141659 0.191322
-vt 0.241339 0.391714
-vt 0.402011 0.813201
-vt 0.101814 0.164257
-vt 0.228181 0.347914
-vt 0.286910 0.570443
-vt 0.370653 0.779864
-vt 0.051826 0.132727
-vt 0.051336 0.148303
-vt 0.213019 0.305137
-vt 0.275586 0.525726
-vt 0.346765 0.741874
-vt 0.194750 0.264000
-vt 0.264518 0.480883
-vt 0.327915 0.701050
-vt 0.139253 0.263111
-vt 0.208699 0.480406
-vt 0.271631 0.701027
-vt 0.116262 0.224508
-vt 0.197515 0.435582
-vt 0.298975 0.614792
-vt 0.443465 0.838899
-vt 0.386800 0.839664
-vt 0.086129 0.190228
-vt 0.185664 0.391086
-vt 0.242904 0.614557
-vt 0.345357 0.813708
-vt 0.046099 0.163088
-vt 0.172573 0.347205
-vt 0.230930 0.570121
-vt 0.314109 0.780154
-vt 0.157473 0.304343
-vt 0.219689 0.525325
-vt 0.290354 0.741990
-vt 0.107276 0.295180
-vt 0.163845 0.521847
-vt 0.227302 0.745462
-vt 0.090087 0.252465
-vt 0.154008 0.475873
-vt 0.256203 0.658333
-vt 0.438803 0.853868
-vt 0.376175 0.868999
-vt 0.067816 0.212161
-vt 0.143951 0.429993
-vt 0.196450 0.658436
-vt 0.320646 0.851667
-vt 0.037514 0.176004
-vt 0.133223 0.384401
-vt 0.184564 0.613347
-vt 0.279077 0.822340
-vt 0.121259 0.339345
-vt 0.173881 0.567736
-vt 0.249262 0.785918
-vt 0.175759 0.788260
-vt 0.063122 0.274267
-vt 0.109517 0.509514
-vt 0.210309 0.702657
-vt 0.439113 0.869447
-vt 0.374144 0.899752
-vt 0.047763 0.229253
-vt 0.101779 0.461959
-vt 0.145335 0.698142
-vt 0.296085 0.892762
-vt 0.026630 0.186267
-vt 0.093757 0.414497
-vt 0.134697 0.651538
-vt 0.237701 0.866643
-vt 0.085045 0.367260
-vt 0.125569 0.604436
-vt 0.200288 0.830006
-vt 0.075103 0.320425
-vt 0.117324 0.557046
-vt 0.995265 0.147143
-vt 1.014254 0.193317
-vt 0.495265 0.852856
-vt 1.009882 0.098319
-vt 1.031785 0.105600
-vt 1.045835 0.117837
-vt 1.051826 0.132727
-vt 1.051336 0.148303
-vt 1.046099 0.163088
-vt 1.037514 0.176004
-vt 0.446160 0.884095
-vt 1.026630 0.186267
-vt 0.158464 0.743915
-vn -0.460158 -0.887814 0.000000
-vn -0.592853 -0.805292 0.000000
-vn -0.437635 -0.887814 -0.142186
-vn -0.951781 -0.306742 0.000000
-vn -0.987854 -0.155217 0.000000
-vn -0.905179 -0.306742 -0.294107
-vn -0.892575 0.450850 0.000000
-vn -0.811670 0.584063 0.000000
-vn -0.848903 0.450850 -0.275826
-vn -0.316050 0.948729 0.000000
-vn -0.164068 0.986419 0.000000
-vn -0.300577 0.948729 -0.097659
-vn -0.316050 -0.948729 0.000000
-vn -0.300577 -0.948729 -0.097659
-vn -0.892575 -0.450850 0.000000
-vn -0.848903 -0.450850 -0.275826
-vn -0.951781 0.306742 0.000000
-vn -0.905179 0.306742 -0.294107
-vn -0.460158 0.887814 0.000000
-vn -0.437635 0.887814 -0.142186
-vn -0.164068 -0.986419 0.000000
-vn -0.156011 -0.986419 -0.050691
-vn -0.811670 -0.584063 0.000000
-vn -0.771935 -0.584063 -0.250801
-vn -0.987854 0.155217 0.000000
-vn -0.939512 0.155217 -0.305246
-vn -0.592853 0.805292 0.000000
-vn -0.563829 0.805292 -0.183203
-vn -0.710959 -0.703207 0.000000
-vn -0.676168 -0.703207 -0.219703
-vn -1.000000 0.000000 0.000000
-vn -0.951048 0.000000 -0.309000
-vn -0.710959 0.703207 0.000000
-vn -0.676168 0.703207 -0.219703
-vn -0.563829 -0.805292 -0.183203
-vn -0.939512 -0.155217 -0.305246
-vn -0.771935 0.584063 -0.250801
-vn -0.156011 0.986419 -0.050691
-vn -0.255684 0.948729 -0.185766
-vn -0.255684 -0.948729 -0.185766
-vn -0.722098 -0.450850 -0.524644
-vn -0.770012 0.306742 -0.559435
-vn -0.372265 0.887814 -0.270455
-vn -0.132725 -0.986419 -0.096408
-vn -0.656667 -0.584063 -0.477096
-vn -0.799188 0.155217 -0.580645
-vn -0.479629 0.805292 -0.348460
-vn -0.575182 -0.703207 -0.417890
-vn -0.809015 0.000000 -0.587756
-vn -0.575182 0.703207 -0.417890
-vn -0.479629 -0.805292 -0.348460
-vn -0.799188 -0.155217 -0.580645
-vn -0.656667 0.584063 -0.477096
-vn -0.372265 -0.887814 -0.270455
-vn -0.770012 -0.306742 -0.559435
-vn -0.722098 0.450850 -0.524644
-vn -0.185766 -0.948729 -0.255684
-vn -0.524644 -0.450850 -0.722098
-vn -0.559435 0.306742 -0.770012
-vn -0.270455 0.887814 -0.372265
-vn -0.096408 -0.986419 -0.132725
-vn -0.477096 -0.584063 -0.656667
-vn -0.580645 0.155217 -0.799188
-vn -0.348460 0.805292 -0.479629
-vn -0.417890 -0.703207 -0.575182
-vn -0.587756 0.000000 -0.809015
-vn -0.417890 0.703207 -0.575182
-vn -0.348460 -0.805292 -0.479629
-vn -0.580645 -0.155217 -0.799188
-vn -0.477096 0.584063 -0.656667
-vn -0.270455 -0.887814 -0.372265
-vn -0.559435 -0.306742 -0.770012
-vn -0.524644 0.450850 -0.722098
-vn -0.132725 0.986419 -0.096408
-vn -0.185766 0.948729 -0.255684
-vn -0.097659 -0.948729 -0.300577
-vn -0.275826 -0.450850 -0.848903
-vn -0.294107 0.306742 -0.905179
-vn -0.142186 0.887814 -0.437635
-vn -0.050691 -0.986419 -0.156011
-vn -0.250801 -0.584063 -0.771935
-vn -0.305246 0.155217 -0.939512
-vn -0.183203 0.805292 -0.563829
-vn -0.219703 -0.703207 -0.676168
-vn -0.309000 0.000000 -0.951048
-vn -0.219703 0.703207 -0.676168
-vn -0.183203 -0.805292 -0.563829
-vn -0.305246 -0.155217 -0.939512
-vn -0.250801 0.584063 -0.771935
-vn -0.142186 -0.887814 -0.437635
-vn -0.294107 -0.306742 -0.905179
-vn -0.275826 0.450850 -0.848903
-vn -0.096408 0.986419 -0.132725
-vn -0.097659 0.948729 -0.300577
-vn 0.000000 -0.450850 -0.892575
-vn 0.000000 0.306742 -0.951781
-vn 0.000000 0.887814 -0.460158
-vn 0.000000 -0.986419 -0.164068
-vn 0.000000 -0.584063 -0.811670
-vn 0.000000 0.155217 -0.987854
-vn 0.000000 0.805292 -0.592853
-vn 0.000000 -0.703207 -0.710959
-vn 0.000000 0.000000 -1.000000
-vn 0.000000 0.703207 -0.710959
-vn 0.000000 -0.805292 -0.592853
-vn 0.000000 -0.155217 -0.987854
-vn 0.000000 0.584063 -0.811670
-vn 0.000000 -0.887814 -0.460158
-vn 0.000000 -0.306742 -0.951781
-vn 0.000000 0.450850 -0.892575
-vn -0.050691 0.986419 -0.156011
-vn 0.000000 0.948729 -0.316050
-vn 0.000000 -0.948729 -0.316050
-vn 0.097659 0.948729 -0.300577
-vn 0.097659 -0.948729 -0.300577
-vn 0.275826 -0.450850 -0.848903
-vn 0.294107 0.306742 -0.905179
-vn 0.142186 0.887814 -0.437635
-vn 0.250801 -0.584063 -0.771935
-vn 0.305246 0.155217 -0.939512
-vn 0.183203 0.805292 -0.563829
-vn 0.219703 -0.703207 -0.676168
-vn 0.309000 0.000000 -0.951048
-vn 0.219703 0.703207 -0.676168
-vn 0.183203 -0.805292 -0.563829
-vn 0.305246 -0.155217 -0.939512
-vn 0.250801 0.584063 -0.771935
-vn 0.000000 0.986419 -0.164068
-vn 0.050691 0.986419 -0.156011
-vn 0.142186 -0.887814 -0.437635
-vn 0.294107 -0.306742 -0.905179
-vn 0.275826 0.450850 -0.848903
-vn 0.050691 -0.986419 -0.156011
-vn 0.185766 -0.948729 -0.255684
-vn 0.524644 -0.450850 -0.722098
-vn 0.559435 0.306742 -0.770012
-vn 0.270455 0.887814 -0.372265
-vn 0.477096 -0.584063 -0.656667
-vn 0.580645 0.155217 -0.799188
-vn 0.348460 0.805292 -0.479629
-vn 0.417890 -0.703207 -0.575182
-vn 0.587756 0.000000 -0.809015
-vn 0.417890 0.703207 -0.575182
-vn 0.348460 -0.805292 -0.479629
-vn 0.580645 -0.155217 -0.799188
-vn 0.477096 0.584063 -0.656667
-vn 0.096408 0.986419 -0.132725
-vn 0.270455 -0.887814 -0.372265
-vn 0.559435 -0.306742 -0.770012
-vn 0.524644 0.450850 -0.722098
-vn 0.185766 0.948729 -0.255684
-vn 0.096408 -0.986419 -0.132725
-vn 0.255684 -0.948729 -0.185766
-vn 0.722098 -0.450850 -0.524644
-vn 0.770012 0.306742 -0.559435
-vn 0.372265 0.887814 -0.270455
-vn 0.656667 -0.584063 -0.477096
-vn 0.799188 0.155217 -0.580645
-vn 0.479629 0.805292 -0.348460
-vn 0.575182 -0.703207 -0.417890
-vn 0.809015 0.000000 -0.587756
-vn 0.575182 0.703207 -0.417890
-vn 0.479629 -0.805292 -0.348460
-vn 0.799188 -0.155217 -0.580645
-vn 0.722098 0.450850 -0.524644
-vn 0.132725 0.986419 -0.096408
-vn 0.372265 -0.887814 -0.270455
-vn 0.770012 -0.306742 -0.559435
-vn 0.255684 0.948729 -0.185766
-vn 0.848903 -0.450850 -0.275826
-vn 0.905179 0.306742 -0.294107
-vn 0.437635 0.887814 -0.142186
-vn 0.676168 -0.703207 -0.219703
-vn 0.939512 0.155217 -0.305246
-vn 0.563829 0.805292 -0.183203
-vn 0.951048 0.000000 -0.309000
-vn 0.656667 0.584063 -0.477096
-vn 0.676168 0.703207 -0.219703
-vn 0.563829 -0.805292 -0.183203
-vn 0.939512 -0.155217 -0.305246
-vn 0.848903 0.450850 -0.275826
-vn 0.156011 0.986419 -0.050691
-vn 0.437635 -0.887814 -0.142186
-vn 0.905179 -0.306742 -0.294107
-vn 0.300577 0.948729 -0.097659
-vn 0.132725 -0.986419 -0.096408
-vn 0.300577 -0.948729 -0.097659
-vn 0.951781 0.306742 0.000000
-vn 0.460158 0.887814 0.000000
-vn 0.771935 -0.584063 -0.250801
-vn 0.710959 -0.703207 0.000000
-vn 0.987854 0.155217 0.000000
-vn 0.592853 0.805292 0.000000
-vn 1.000000 0.000000 0.000000
-vn 0.771935 0.584063 -0.250801
-vn 0.710959 0.703207 0.000000
-vn 0.592853 -0.805292 0.000000
-vn 0.987854 -0.155217 0.000000
-vn 0.892575 0.450850 0.000000
-vn 0.164068 0.986419 0.000000
-vn 0.460158 -0.887814 0.000000
-vn 0.951781 -0.306742 0.000000
-vn 0.316050 0.948729 0.000000
-vn 0.156011 -0.986419 -0.050691
-vn 0.316050 -0.948729 0.000000
-vn 0.892575 -0.450850 0.000000
-vn 0.811670 -0.584063 0.000000
-vn 0.676168 -0.703207 0.219703
-vn 0.939512 0.155217 0.305246
-vn 0.563829 0.805292 0.183203
-vn 0.951048 0.000000 0.309000
-vn 0.811670 0.584063 0.000000
-vn 0.676168 0.703207 0.219703
-vn 0.563829 -0.805292 0.183203
-vn 0.939512 -0.155217 0.305246
-vn 0.848903 0.450850 0.275826
-vn 0.156011 0.986419 0.050691
-vn 0.437635 -0.887814 0.142186
-vn 0.905179 -0.306742 0.294107
-vn 0.300577 0.948729 0.097659
-vn 0.164068 -0.986419 0.000000
-vn 0.300577 -0.948729 0.097659
-vn 0.848903 -0.450850 0.275826
-vn 0.905179 0.306742 0.294107
-vn 0.437635 0.887814 0.142186
-vn 0.771935 -0.584063 0.250801
-vn 0.575182 -0.703207 0.417890
-vn 0.799188 0.155217 0.580645
-vn 0.479629 0.805292 0.348460
-vn 0.809015 0.000000 0.587756
-vn 0.771935 0.584063 0.250801
-vn 0.575182 0.703207 0.417890
-vn 0.479629 -0.805292 0.348460
-vn 0.799188 -0.155217 0.580645
-vn 0.722098 0.450850 0.524644
-vn 0.132725 0.986419 0.096408
-vn 0.372265 -0.887814 0.270455
-vn 0.770012 -0.306742 0.559435
-vn 0.255684 0.948729 0.185766
-vn 0.156011 -0.986419 0.050691
-vn 0.255684 -0.948729 0.185766
-vn 0.722098 -0.450850 0.524644
-vn 0.770012 0.306742 0.559435
-vn 0.372265 0.887814 0.270455
-vn 0.656667 -0.584063 0.477096
-vn 0.417890 -0.703207 0.575182
-vn 0.580645 0.155217 0.799188
-vn 0.348460 0.805292 0.479629
-vn 0.587756 0.000000 0.809015
-vn 0.656667 0.584063 0.477096
-vn 0.417890 0.703207 0.575182
-vn 0.348460 -0.805292 0.479629
-vn 0.580645 -0.155217 0.799188
-vn 0.524644 0.450850 0.722098
-vn 0.096408 0.986419 0.132725
-vn 0.270455 -0.887814 0.372265
-vn 0.559435 -0.306742 0.770012
-vn 0.185766 0.948729 0.255684
-vn 0.132725 -0.986419 0.096408
-vn 0.185766 -0.948729 0.255684
-vn 0.524644 -0.450850 0.722098
-vn 0.559435 0.306742 0.770012
-vn 0.270455 0.887814 0.372265
-vn 0.305246 0.155217 0.939512
-vn 0.183203 0.805292 0.563829
-vn 0.219703 -0.703207 0.676168
-vn 0.309000 0.000000 0.951048
-vn 0.477096 0.584063 0.656667
-vn 0.219703 0.703207 0.676168
-vn 0.183203 -0.805292 0.563829
-vn 0.305246 -0.155217 0.939512
-vn 0.275826 0.450850 0.848903
-vn 0.050691 0.986419 0.156011
-vn 0.142186 -0.887814 0.437635
-vn 0.294107 -0.306742 0.905179
-vn 0.097659 0.948729 0.300577
-vn 0.096408 -0.986419 0.132725
-vn 0.097659 -0.948729 0.300577
-vn 0.477096 -0.584063 0.656667
-vn 0.275826 -0.450850 0.848903
-vn 0.294107 0.306742 0.905179
-vn 0.142186 0.887814 0.437635
-vn 0.250801 -0.584063 0.771935
-vn 0.000000 0.805292 0.592853
-vn 0.000000 -0.703207 0.710959
-vn 0.000000 0.000000 1.000000
-vn 0.250801 0.584063 0.771935
-vn 0.000000 0.703207 0.710959
-vn 0.000000 -0.805292 0.592853
-vn 0.000000 -0.155217 0.987854
-vn 0.000000 0.450850 0.892575
-vn 0.000000 0.986419 0.164068
-vn 0.000000 -0.887814 0.460158
-vn 0.000000 -0.306742 0.951781
-vn 0.000000 0.948729 0.316050
-vn 0.050691 -0.986419 0.156011
-vn 0.000000 -0.948729 0.316050
-vn 0.000000 -0.450850 0.892575
-vn 0.000000 0.306742 0.951781
-vn 0.000000 0.887814 0.460158
-vn 0.000000 -0.584063 0.811670
-vn 0.000000 0.155217 0.987854
-vn -0.183203 -0.805292 0.563829
-vn -0.305246 -0.155217 0.939512
-vn 0.000000 0.584063 0.811670
-vn -0.250801 0.584063 0.771935
-vn -0.142186 -0.887814 0.437635
-vn -0.294107 -0.306742 0.905179
-vn -0.097659 0.948729 0.300577
-vn -0.097659 -0.948729 0.300577
-vn -0.275826 -0.450850 0.848903
-vn -0.294107 0.306742 0.905179
-vn -0.142186 0.887814 0.437635
-vn 0.000000 -0.986419 0.164068
-vn -0.050691 -0.986419 0.156011
-vn -0.250801 -0.584063 0.771935
-vn -0.305246 0.155217 0.939512
-vn -0.183203 0.805292 0.563829
-vn -0.219703 -0.703207 0.676168
-vn -0.309000 0.000000 0.951048
-vn -0.219703 0.703207 0.676168
-vn -0.348460 -0.805292 0.479629
-vn -0.580645 -0.155217 0.799188
-vn -0.477096 0.584063 0.656667
-vn -0.270455 -0.887814 0.372265
-vn -0.559435 -0.306742 0.770012
-vn -0.275826 0.450850 0.848903
-vn -0.050691 0.986419 0.156011
-vn -0.185766 0.948729 0.255684
-vn -0.185766 -0.948729 0.255684
-vn -0.524644 -0.450850 0.722098
-vn -0.559435 0.306742 0.770012
-vn -0.270455 0.887814 0.372265
-vn -0.096408 -0.986419 0.132725
-vn -0.477096 -0.584063 0.656667
-vn -0.580645 0.155217 0.799188
-vn -0.348460 0.805292 0.479629
-vn -0.417890 -0.703207 0.575182
-vn -0.587756 0.000000 0.809015
-vn -0.417890 0.703207 0.575182
-vn -0.479629 -0.805292 0.348460
-vn -0.799188 -0.155217 0.580645
-vn -0.656667 0.584063 0.477096
-vn -0.372265 -0.887814 0.270455
-vn -0.770012 -0.306742 0.559435
-vn -0.524644 0.450850 0.722098
-vn -0.096408 0.986419 0.132725
-vn -0.255684 0.948729 0.185766
-vn -0.255684 -0.948729 0.185766
-vn -0.722098 -0.450850 0.524644
-vn -0.770012 0.306742 0.559435
-vn -0.372265 0.887814 0.270455
-vn -0.132725 -0.986419 0.096408
-vn -0.656667 -0.584063 0.477096
-vn -0.799188 0.155217 0.580645
-vn -0.479629 0.805292 0.348460
-vn -0.575182 -0.703207 0.417890
-vn -0.809015 0.000000 0.587756
-vn -0.575182 0.703207 0.417890
-vn -0.771935 0.584063 0.250801
-vn -0.437635 -0.887814 0.142186
-vn -0.905179 -0.306742 0.294107
-vn -0.722098 0.450850 0.524644
-vn -0.132725 0.986419 0.096408
-vn -0.300577 0.948729 0.097659
-vn -0.300577 -0.948729 0.097659
-vn -0.848903 -0.450850 0.275826
-vn -0.905179 0.306742 0.294107
-vn -0.437635 0.887814 0.142186
-vn -0.156011 -0.986419 0.050691
-vn -0.771935 -0.584063 0.250801
-vn -0.939512 0.155217 0.305246
-vn -0.563829 0.805292 0.183203
-vn -0.676168 -0.703207 0.219703
-vn -0.951048 0.000000 0.309000
-vn -0.676168 0.703207 0.219703
-vn -0.563829 -0.805292 0.183203
-vn -0.939512 -0.155217 0.305246
-vn 0.000000 -0.999969 0.000000
-vn 0.000000 1.000000 0.000000
-vn -0.156011 0.986419 0.050691
-vn -0.848903 0.450850 0.275826
-s 1
-f 17/1/1 16/2/2 36/3/3
-f 12/4/4 11/5/5 31/6/6
-f 7/7/7 6/8/8 26/9/9
-f 2/10/10 1/11/11 21/12/12
-f 18/13/13 17/1/1 37/14/14
-f 13/15/15 12/4/4 32/16/16
-f 8/17/17 7/7/7 27/18/18
-f 3/19/19 2/10/10 22/20/20
-f 19/21/21 18/13/13 38/22/22
-f 14/23/23 13/15/15 33/24/24
-f 9/25/25 8/17/17 28/26/26
-f 4/27/27 3/19/19 23/28/28
-f 15/29/29 14/23/23 34/30/30
-f 10/31/31 9/25/25 29/32/32
-f 5/33/33 4/27/27 24/34/34
-f 16/2/2 15/29/29 35/35/35
-f 11/5/5 10/31/31 30/36/36
-f 6/8/8 5/33/33 25/37/37
-f 21/12/12 20/38/38 41/39/39
-f 37/40/14 36/41/3 57/42/40
-f 32/43/16 31/44/6 52/45/41
-f 27/46/18 26/47/9 47/48/42
-f 22/49/20 21/12/12 42/50/43
-f 38/51/22 37/40/14 58/52/44
-f 33/53/24 32/43/16 53/54/45
-f 28/55/26 27/46/18 48/56/46
-f 23/57/28 22/49/20 43/58/47
-f 34/59/30 33/53/24 54/60/48
-f 29/61/32 28/55/26 49/62/49
-f 24/63/34 23/57/28 44/64/50
-f 35/65/35 34/59/30 55/66/51
-f 30/67/36 29/61/32 50/68/52
-f 25/69/37 24/63/34 45/70/53
-f 36/41/3 35/65/35 56/71/54
-f 31/44/6 30/67/36 51/72/55
-f 26/47/9 25/69/37 46/73/56
-f 57/42/40 56/71/54 76/74/57
-f 52/45/41 51/72/55 71/75/58
-f 47/48/42 46/73/56 66/76/59
-f 42/50/43 41/39/39 61/77/60
-f 58/52/44 57/42/40 77/78/61
-f 53/54/45 52/45/41 72/79/62
-f 48/56/46 47/48/42 67/80/63
-f 43/58/47 42/50/43 62/81/64
-f 54/60/48 53/54/45 73/82/65
-f 49/62/49 48/56/46 68/83/66
-f 44/64/50 43/58/47 63/84/67
-f 55/66/51 54/60/48 74/85/68
-f 50/68/52 49/62/49 69/86/69
-f 45/70/53 44/64/50 64/87/70
-f 56/71/54 55/66/51 75/88/71
-f 51/72/55 50/68/52 70/89/72
-f 46/73/56 45/70/53 65/90/73
-f 41/39/39 40/91/74 60/92/75
-f 76/74/57 75/88/71 95/93/76
-f 71/75/58 70/89/72 90/94/77
-f 66/76/59 65/90/73 85/95/78
-f 61/77/60 60/92/75 80/96/79
-f 77/78/61 76/74/57 96/97/80
-f 72/79/62 71/75/58 91/98/81
-f 67/80/63 66/76/59 86/99/82
-f 62/81/64 61/77/60 81/100/83
-f 73/82/65 72/79/62 92/101/84
-f 68/83/66 67/80/63 87/102/85
-f 63/84/67 62/81/64 82/103/86
-f 74/85/68 73/82/65 93/104/87
-f 69/86/69 68/83/66 88/105/88
-f 64/87/70 63/84/67 83/106/89
-f 75/88/71 74/85/68 94/107/90
-f 70/89/72 69/86/69 89/108/91
-f 65/90/73 64/87/70 84/109/92
-f 60/92/75 59/110/93 79/111/94
-f 90/94/77 89/108/91 109/112/95
-f 85/95/78 84/109/92 104/113/96
-f 80/96/79 79/111/94 99/114/97
-f 96/97/80 95/93/76 115/115/98
-f 91/98/81 90/94/77 110/116/99
-f 86/99/82 85/95/78 105/117/100
-f 81/100/83 80/96/79 100/118/101
-f 92/101/84 91/98/81 111/119/102
-f 87/102/85 86/99/82 106/120/103
-f 82/103/86 81/100/83 101/121/104
-f 93/104/87 92/101/84 112/122/105
-f 88/105/88 87/102/85 107/123/106
-f 83/106/89 82/103/86 102/124/107
-f 94/107/90 93/104/87 113/125/108
-f 89/108/91 88/105/88 108/126/109
-f 84/109/92 83/106/89 103/127/110
-f 79/111/94 78/128/111 98/129/112
-f 95/93/76 94/107/90 114/130/113
-f 99/114/97 98/129/112 117/131/114
-f 115/115/98 114/130/113 133/132/115
-f 110/116/99 109/112/95 128/133/116
-f 105/117/100 104/113/96 123/134/117
-f 100/118/101 99/114/97 118/135/118
-f 111/119/102 110/116/99 129/136/119
-f 106/120/103 105/117/100 124/137/120
-f 101/121/104 100/118/101 119/138/121
-f 112/122/105 111/119/102 130/139/122
-f 107/123/106 106/120/103 125/140/123
-f 102/124/107 101/121/104 120/141/124
-f 113/125/108 112/122/105 131/142/125
-f 108/126/109 107/123/106 126/143/126
-f 103/127/110 102/124/107 121/144/127
-f 98/129/112 97/145/128 116/146/129
-f 114/130/113 113/125/108 132/147/130
-f 109/112/95 108/126/109 127/148/131
-f 104/113/96 103/127/110 122/149/132
-f 134/150/133 133/132/115 152/151/134
-f 129/136/119 128/133/116 147/152/135
-f 124/137/120 123/134/117 142/153/136
-f 119/138/121 118/135/118 137/154/137
-f 130/139/122 129/136/119 148/155/138
-f 125/140/123 124/137/120 143/156/139
-f 120/141/124 119/138/121 138/157/140
-f 131/142/125 130/139/122 149/158/141
-f 126/143/126 125/140/123 144/159/142
-f 121/144/127 120/141/124 139/160/143
-f 132/147/130 131/142/125 150/161/144
-f 127/148/131 126/143/126 145/162/145
-f 122/149/132 121/144/127 140/163/146
-f 117/131/114 116/146/129 135/164/147
-f 133/132/115 132/147/130 151/165/148
-f 128/133/116 127/148/131 146/166/149
-f 123/134/117 122/149/132 141/167/150
-f 118/135/118 117/131/114 136/168/151
-f 153/169/152 152/151/134 171/170/153
-f 148/155/138 147/152/135 166/171/154
-f 143/156/139 142/153/136 161/172/155
-f 138/157/140 137/154/137 156/173/156
-f 149/158/141 148/155/138 167/174/157
-f 144/159/142 143/156/139 162/175/158
-f 139/160/143 138/157/140 157/176/159
-f 150/161/144 149/158/141 168/177/160
-f 145/162/145 144/159/142 163/178/161
-f 140/163/146 139/160/143 158/179/162
-f 151/165/148 150/161/144 169/180/163
-f 146/166/149 145/162/145 164/181/164
-f 141/167/150 140/163/146 160/182/165
-f 136/168/151 135/164/147 154/183/166
-f 152/151/134 151/165/148 170/184/167
-f 147/152/135 146/166/149 165/185/168
-f 142/153/136 141/167/150 160/182/165
-f 137/154/137 136/168/151 155/186/169
-f 167/174/157 166/171/154 185/187/170
-f 162/175/158 161/172/155 180/188/171
-f 157/176/159 156/173/156 175/189/172
-f 168/177/160 167/174/157 187/190/173
-f 163/178/161 162/175/158 181/191/174
-f 158/179/162 157/176/159 176/192/175
-f 169/180/163 168/177/160 187/190/173
-f 164/181/164 163/178/161 182/193/176
-f 159/194/177 158/179/162 177/195/178
-f 170/184/167 169/180/163 188/196/179
-f 165/185/168 164/181/164 183/197/180
-f 160/182/165 159/194/177 179/198/181
-f 155/186/169 154/183/166 173/199/182
-f 171/170/153 170/184/167 189/200/183
-f 166/171/154 165/185/168 184/201/184
-f 161/172/155 160/182/165 179/198/181
-f 156/173/156 155/186/169 174/202/185
-f 172/203/186 171/170/153 190/204/187
-f 181/191/174 180/188/171 199/205/188
-f 176/192/175 175/189/172 194/206/189
-f 187/190/173 186/207/190 206/208/191
-f 182/193/176 181/191/174 200/209/192
-f 177/195/178 176/192/175 195/210/193
-f 188/196/179 187/190/173 206/208/191
-f 183/197/180 182/193/176 201/211/194
-f 178/212/195 177/195/178 196/213/196
-f 189/200/183 188/196/179 207/214/197
-f 184/201/184 183/197/180 202/215/198
-f 179/198/181 178/212/195 198/216/199
-f 174/202/185 173/199/182 192/217/200
-f 190/204/187 189/200/183 208/218/201
-f 185/187/170 184/201/184 203/219/202
-f 180/188/171 179/198/181 198/216/199
-f 175/189/172 174/202/185 193/220/203
-f 191/221/204 190/204/187 209/222/205
-f 186/207/190 185/187/170 204/223/206
-f 206/208/191 205/224/207 225/225/208
-f 201/211/194 200/209/192 219/226/209
-f 196/213/196 195/210/193 214/227/210
-f 207/214/197 206/208/191 225/225/208
-f 202/215/198 201/211/194 220/228/211
-f 197/229/212 196/213/196 215/230/213
-f 208/218/201 207/214/197 226/231/214
-f 203/219/202 202/215/198 221/232/215
-f 198/216/199 197/229/212 217/233/216
-f 193/220/203 192/217/200 211/234/217
-f 209/222/205 208/218/201 227/235/218
-f 204/223/206 203/219/202 222/236/219
-f 199/205/188 198/216/199 217/233/216
-f 194/206/189 193/220/203 212/237/220
-f 210/238/221 209/222/205 228/239/222
-f 205/224/207 204/223/206 223/240/223
-f 200/209/192 199/205/188 218/241/224
-f 195/210/193 194/206/189 213/242/225
-f 225/225/208 224/243/226 244/244/227
-f 220/228/211 219/226/209 238/245/228
-f 215/230/213 214/227/210 233/246/229
-f 226/231/214 225/225/208 244/244/227
-f 221/232/215 220/228/211 239/247/230
-f 216/248/231 215/230/213 234/249/232
-f 227/235/218 226/231/214 245/250/233
-f 222/236/219 221/232/215 240/251/234
-f 217/233/216 216/248/231 236/252/235
-f 212/237/220 211/234/217 230/253/236
-f 228/239/222 227/235/218 246/254/237
-f 223/240/223 222/236/219 241/255/238
-f 218/241/224 217/233/216 236/252/235
-f 213/242/225 212/237/220 231/256/239
-f 229/257/240 228/239/222 247/258/241
-f 224/243/226 223/240/223 242/259/242
-f 219/226/209 218/241/224 237/260/243
-f 214/227/210 213/242/225 232/261/244
-f 244/244/227 243/262/245 263/263/246
-f 239/247/230 238/245/228 257/264/247
-f 234/249/232 233/246/229 252/265/248
-f 245/250/233 244/244/227 263/263/246
-f 240/251/234 239/247/230 258/266/249
-f 235/267/250 234/249/232 253/268/251
-f 246/269/237 245/250/233 264/270/252
-f 241/255/238 240/251/234 259/271/253
-f 236/252/235 235/267/250 255/272/254
-f 231/256/239 230/253/236 249/273/255
-f 247/274/241 246/269/237 265/275/256
-f 242/259/242 241/255/238 260/276/257
-f 237/260/243 236/252/235 255/272/254
-f 232/261/244 231/256/239 250/277/258
-f 248/278/259 247/274/241 266/279/260
-f 243/262/245 242/259/242 261/280/261
-f 238/245/228 237/260/243 256/281/262
-f 233/246/229 232/261/244 251/282/263
-f 258/266/249 257/264/247 276/283/264
-f 253/268/251 252/265/248 271/284/265
-f 264/270/252 263/263/246 282/285/266
-f 259/271/253 258/266/249 277/286/267
-f 254/287/268 253/268/251 272/288/269
-f 265/275/256 264/270/252 283/289/270
-f 260/276/257 259/271/253 278/290/271
-f 255/272/254 254/287/268 274/291/272
-f 250/277/258 249/273/255 268/292/273
-f 266/279/260 265/275/256 284/293/274
-f 261/280/261 260/276/257 279/294/275
-f 256/281/262 255/272/254 274/291/272
-f 251/282/263 250/277/258 269/295/276
-f 267/296/277 266/279/260 285/297/278
-f 262/298/279 261/280/261 280/299/280
-f 257/264/247 256/281/262 275/300/281
-f 252/265/248 251/282/263 270/301/282
-f 263/263/246 262/298/279 281/302/283
-f 272/288/269 271/284/265 290/303/284
-f 283/289/270 282/285/266 301/304/285
-f 278/290/271 277/286/267 296/305/286
-f 273/306/287 272/288/269 291/307/288
-f 284/293/274 283/289/270 302/308/289
-f 279/294/275 278/290/271 297/309/290
-f 274/291/272 273/306/287 293/310/291
-f 269/295/276 268/292/273 287/311/292
-f 285/297/278 284/293/274 303/312/293
-f 280/299/280 279/294/275 298/313/294
-f 275/300/281 274/291/272 293/310/291
-f 270/301/282 269/295/276 288/314/295
-f 286/315/296 285/297/278 304/316/297
-f 281/302/283 280/299/280 299/317/298
-f 276/283/264 275/300/281 294/318/299
-f 271/284/265 270/301/282 289/319/300
-f 282/285/266 281/302/283 300/320/301
-f 277/286/267 276/283/264 295/321/302
-f 302/308/289 301/304/285 321/322/303
-f 297/309/290 296/305/286 316/323/304
-f 292/324/305 291/307/288 311/325/306
-f 303/312/293 302/308/289 322/326/307
-f 298/313/294 297/309/290 317/327/308
-f 293/310/291 292/324/305 311/325/306
-f 288/314/295 287/311/292 307/328/309
-f 304/316/297 303/312/293 323/329/310
-f 299/317/298 298/313/294 318/330/311
-f 294/318/299 293/310/291 313/331/312
-f 289/319/300 288/314/295 308/332/313
-f 305/333/314 304/316/297 324/334/315
-f 300/320/301 299/317/298 319/335/316
-f 295/321/302 294/318/299 314/336/317
-f 290/303/284 289/319/300 309/337/318
-f 301/304/285 300/320/301 320/338/319
-f 296/305/286 295/321/302 315/339/320
-f 291/307/288 290/303/284 310/340/321
-f 321/322/303 320/338/319 340/341/322
-f 316/323/304 315/339/320 335/342/323
-f 311/325/306 310/340/321 330/343/324
-f 322/326/307 321/322/303 341/344/325
-f 317/327/308 316/323/304 336/345/326
-f 312/346/327 311/325/306 330/343/324
-f 307/328/309 306/347/328 326/348/329
-f 323/329/310 322/326/307 342/349/330
-f 318/330/311 317/327/308 337/350/331
-f 313/331/312 312/346/327 332/351/332
-f 308/332/313 307/328/309 327/352/333
-f 324/334/315 323/329/310 343/353/334
-f 319/335/316 318/330/311 338/354/335
-f 314/336/317 313/331/312 333/355/336
-f 309/337/318 308/332/313 328/356/337
-f 320/338/319 319/335/316 339/357/338
-f 315/339/320 314/336/317 334/358/339
-f 310/340/321 309/337/318 329/359/340
-f 340/341/322 339/357/338 360/360/341
-f 335/342/323 334/358/339 355/361/342
-f 330/343/324 329/359/340 350/362/343
-f 341/344/325 340/341/322 361/363/344
-f 336/345/326 335/342/323 356/364/345
-f 331/365/346 330/343/324 350/362/343
-f 326/348/329 325/366/347 346/367/348
-f 342/349/330 341/344/325 362/368/349
-f 337/350/331 336/345/326 357/369/350
-f 332/351/332 331/365/346 352/370/351
-f 327/352/333 326/348/329 347/371/352
-f 343/353/334 342/349/330 363/372/353
-f 338/354/335 337/350/331 358/373/354
-f 333/355/336 332/351/332 353/374/355
-f 328/356/337 327/352/333 348/375/356
-f 339/357/338 338/354/335 359/376/357
-f 334/358/339 333/355/336 354/377/358
-f 329/359/340 328/356/337 349/378/359
-f 350/362/343 349/378/359 369/379/360
-f 361/363/344 360/360/341 380/380/361
-f 356/364/345 355/361/342 375/381/362
-f 351/382/363 350/362/343 369/379/360
-f 346/367/348 345/383/364 365/384/365
-f 362/368/349 361/363/344 381/385/366
-f 357/369/350 356/364/345 376/386/367
-f 352/370/351 351/382/363 371/387/368
-f 347/371/352 346/367/348 366/388/369
-f 363/372/353 362/368/349 382/389/370
-f 358/373/354 357/369/350 377/390/371
-f 353/374/355 352/370/351 372/391/372
-f 348/375/356 347/371/352 367/392/373
-f 359/376/357 358/373/354 378/393/374
-f 354/377/358 353/374/355 373/394/375
-f 349/378/359 348/375/356 368/395/376
-f 360/360/341 359/376/357 379/396/377
-f 355/361/342 354/377/358 374/397/378
-f 39/398/379 19/399/21 38/51/22
-f 1/11/11 344/400/380 20/38/38
-f 39/398/379 38/51/22 58/52/44
-f 20/38/38 344/400/380 40/91/74
-f 39/398/379 58/52/44 77/78/61
-f 40/91/74 344/400/380 59/110/93
-f 39/398/379 77/78/61 96/97/80
-f 59/110/93 344/400/380 78/128/111
-f 39/398/379 96/97/80 115/115/98
-f 78/128/111 344/400/380 97/145/128
-f 39/398/379 115/115/98 134/150/133
-f 97/145/128 344/400/380 116/146/129
-f 39/398/379 134/150/133 153/169/152
-f 116/146/129 344/400/380 135/164/147
-f 39/398/379 153/169/152 172/203/186
-f 135/164/147 344/400/380 154/183/166
-f 39/398/379 172/203/186 191/221/204
-f 154/183/166 344/400/380 173/199/182
-f 39/398/379 191/221/204 210/238/221
-f 173/199/182 344/400/380 192/217/200
-f 39/398/379 210/238/221 229/257/240
-f 192/217/200 344/400/380 211/234/217
-f 39/398/379 229/257/240 248/401/259
-f 211/234/217 344/400/380 230/253/236
-f 39/398/379 248/401/259 267/402/277
-f 230/253/236 344/400/380 249/273/255
-f 249/273/255 344/400/380 268/292/273
-f 39/398/379 267/402/277 286/403/296
-f 268/292/273 344/400/380 287/311/292
-f 39/398/379 286/403/296 305/404/314
-f 287/311/292 344/400/380 306/347/328
-f 39/398/379 305/404/314 324/405/315
-f 306/347/328 344/400/380 325/366/347
-f 39/398/379 324/405/315 343/406/334
-f 325/366/347 344/400/380 345/383/364
-f 39/398/379 343/406/334 363/407/353
-f 345/383/364 344/400/380 364/408/381
-f 39/398/379 363/407/353 382/409/370
-f 364/408/381 344/400/380 1/11/11
-f 380/380/361 379/396/377 16/2/2
-f 375/381/362 374/397/378 12/4/4
-f 370/410/382 369/379/360 7/7/7
-f 365/384/365 364/408/381 2/10/10
-f 381/385/366 380/380/361 17/1/1
-f 376/386/367 375/381/362 13/15/15
-f 371/387/368 370/410/382 8/17/17
-f 366/388/369 365/384/365 3/19/19
-f 382/389/370 381/385/366 18/13/13
-f 377/390/371 376/386/367 13/15/15
-f 372/391/372 371/387/368 9/25/25
-f 367/392/373 366/388/369 4/27/27
-f 39/398/379 382/409/370 19/399/21
-f 378/393/374 377/390/371 14/23/23
-f 373/394/375 372/391/372 10/31/31
-f 368/395/376 367/392/373 5/33/33
-f 379/396/377 378/393/374 15/29/29
-f 374/397/378 373/394/375 11/5/5
-f 369/379/360 368/395/376 6/8/8
-f 16/2/2 35/35/35 36/3/3
-f 11/5/5 30/36/36 31/6/6
-f 6/8/8 25/37/37 26/9/9
-f 1/11/11 20/38/38 21/12/12
-f 17/1/1 36/3/3 37/14/14
-f 12/4/4 31/6/6 32/16/16
-f 7/7/7 26/9/9 27/18/18
-f 2/10/10 21/12/12 22/20/20
-f 18/13/13 37/14/14 38/22/22
-f 13/15/15 32/16/16 33/24/24
-f 8/17/17 27/18/18 28/26/26
-f 3/19/19 22/20/20 23/28/28
-f 14/23/23 33/24/24 34/30/30
-f 9/25/25 28/26/26 29/32/32
-f 4/27/27 23/28/28 24/34/34
-f 15/29/29 34/30/30 35/35/35
-f 10/31/31 29/32/32 30/36/36
-f 5/33/33 24/34/34 25/37/37
-f 20/38/38 40/91/74 41/39/39
-f 36/41/3 56/71/54 57/42/40
-f 31/44/6 51/72/55 52/45/41
-f 26/47/9 46/73/56 47/48/42
-f 21/12/12 41/39/39 42/50/43
-f 37/40/14 57/42/40 58/52/44
-f 32/43/16 52/45/41 53/54/45
-f 27/46/18 47/48/42 48/56/46
-f 22/49/20 42/50/43 43/58/47
-f 33/53/24 53/54/45 54/60/48
-f 28/55/26 48/56/46 49/62/49
-f 23/57/28 43/58/47 44/64/50
-f 34/59/30 54/60/48 55/66/51
-f 29/61/32 49/62/49 50/68/52
-f 24/63/34 44/64/50 45/70/53
-f 35/65/35 55/66/51 56/71/54
-f 30/67/36 50/68/52 51/72/55
-f 25/69/37 45/70/53 46/73/56
-f 56/71/54 75/88/71 76/74/57
-f 51/72/55 70/89/72 71/75/58
-f 46/73/56 65/90/73 66/76/59
-f 41/39/39 60/92/75 61/77/60
-f 57/42/40 76/74/57 77/78/61
-f 52/45/41 71/75/58 72/79/62
-f 47/48/42 66/76/59 67/80/63
-f 42/50/43 61/77/60 62/81/64
-f 53/54/45 72/79/62 73/82/65
-f 48/56/46 67/80/63 68/83/66
-f 43/58/47 62/81/64 63/84/67
-f 54/60/48 73/82/65 74/85/68
-f 49/62/49 68/83/66 69/86/69
-f 44/64/50 63/84/67 64/87/70
-f 55/66/51 74/85/68 75/88/71
-f 50/68/52 69/86/69 70/89/72
-f 45/70/53 64/87/70 65/90/73
-f 40/91/74 59/110/93 60/92/75
-f 75/88/71 94/107/90 95/93/76
-f 70/89/72 89/108/91 90/94/77
-f 65/90/73 84/109/92 85/95/78
-f 60/92/75 79/111/94 80/96/79
-f 76/74/57 95/93/76 96/97/80
-f 71/75/58 90/94/77 91/98/81
-f 66/76/59 85/95/78 86/99/82
-f 61/77/60 80/96/79 81/100/83
-f 72/79/62 91/98/81 92/101/84
-f 67/80/63 86/99/82 87/102/85
-f 62/81/64 81/100/83 82/103/86
-f 73/82/65 92/101/84 93/104/87
-f 68/83/66 87/102/85 88/105/88
-f 63/84/67 82/103/86 83/106/89
-f 74/85/68 93/104/87 94/107/90
-f 69/86/69 88/105/88 89/108/91
-f 64/87/70 83/106/89 84/109/92
-f 59/110/93 78/128/111 79/111/94
-f 89/108/91 108/126/109 109/112/95
-f 84/109/92 103/127/110 104/113/96
-f 79/111/94 98/129/112 99/114/97
-f 95/93/76 114/130/113 115/115/98
-f 90/94/77 109/112/95 110/116/99
-f 85/95/78 104/113/96 105/117/100
-f 80/96/79 99/114/97 100/118/101
-f 91/98/81 110/116/99 111/119/102
-f 86/99/82 105/117/100 106/120/103
-f 81/100/83 100/118/101 101/121/104
-f 92/101/84 111/119/102 112/122/105
-f 87/102/85 106/120/103 107/123/106
-f 82/103/86 101/121/104 102/124/107
-f 93/104/87 112/122/105 113/125/108
-f 88/105/88 107/123/106 108/126/109
-f 83/106/89 102/124/107 103/127/110
-f 78/128/111 97/145/128 98/129/112
-f 94/107/90 113/125/108 114/130/113
-f 118/135/118 99/114/97 117/131/114
-f 134/150/133 115/115/98 133/132/115
-f 129/136/119 110/116/99 128/133/116
-f 124/137/120 105/117/100 123/134/117
-f 119/138/121 100/118/101 118/135/118
-f 130/139/122 111/119/102 129/136/119
-f 125/140/123 106/120/103 124/137/120
-f 120/141/124 101/121/104 119/138/121
-f 131/142/125 112/122/105 130/139/122
-f 126/143/126 107/123/106 125/140/123
-f 121/144/127 102/124/107 120/141/124
-f 132/147/130 113/125/108 131/142/125
-f 127/148/131 108/126/109 126/143/126
-f 122/149/132 103/127/110 121/144/127
-f 117/131/114 98/129/112 116/146/129
-f 133/132/115 114/130/113 132/147/130
-f 128/133/116 109/112/95 127/148/131
-f 123/134/117 104/113/96 122/149/132
-f 153/169/152 134/150/133 152/151/134
-f 148/155/138 129/136/119 147/152/135
-f 143/156/139 124/137/120 142/153/136
-f 138/157/140 119/138/121 137/154/137
-f 149/158/141 130/139/122 148/155/138
-f 144/159/142 125/140/123 143/156/139
-f 139/160/143 120/141/124 138/157/140
-f 150/161/144 131/142/125 149/158/141
-f 145/162/145 126/143/126 144/159/142
-f 140/163/146 121/144/127 139/160/143
-f 151/165/148 132/147/130 150/161/144
-f 146/166/149 127/148/131 145/162/145
-f 141/167/150 122/149/132 140/163/146
-f 136/168/151 117/131/114 135/164/147
-f 152/151/134 133/132/115 151/165/148
-f 147/152/135 128/133/116 146/166/149
-f 142/153/136 123/134/117 141/167/150
-f 137/154/137 118/135/118 136/168/151
-f 172/203/186 153/169/152 171/170/153
-f 167/174/157 148/155/138 166/171/154
-f 162/175/158 143/156/139 161/172/155
-f 157/176/159 138/157/140 156/173/156
-f 168/177/160 149/158/141 167/174/157
-f 163/178/161 144/159/142 162/175/158
-f 158/179/162 139/160/143 157/176/159
-f 169/180/163 150/161/144 168/177/160
-f 164/181/164 145/162/145 163/178/161
-f 159/194/177 140/163/146 158/179/162
-f 170/184/167 151/165/148 169/180/163
-f 165/185/168 146/166/149 164/181/164
-f 140/163/146 159/194/177 160/182/165
-f 155/186/169 136/168/151 154/183/166
-f 171/170/153 152/151/134 170/184/167
-f 166/171/154 147/152/135 165/185/168
-f 161/172/155 142/153/136 160/182/165
-f 156/173/156 137/154/137 155/186/169
-f 186/207/190 167/174/157 185/187/170
-f 181/191/174 162/175/158 180/188/171
-f 176/192/175 157/176/159 175/189/172
-f 167/174/157 186/207/190 187/190/173
-f 182/193/176 163/178/161 181/191/174
-f 177/195/178 158/179/162 176/192/175
-f 188/196/179 169/180/163 187/190/173
-f 183/197/180 164/181/164 182/193/176
-f 178/212/195 159/194/177 177/195/178
-f 189/200/183 170/184/167 188/196/179
-f 184/201/184 165/185/168 183/197/180
-f 159/194/177 178/212/195 179/198/181
-f 174/202/185 155/186/169 173/199/182
-f 190/204/187 171/170/153 189/200/183
-f 185/187/170 166/171/154 184/201/184
-f 180/188/171 161/172/155 179/198/181
-f 175/189/172 156/173/156 174/202/185
-f 191/221/204 172/203/186 190/204/187
-f 200/209/192 181/191/174 199/205/188
-f 195/210/193 176/192/175 194/206/189
-f 186/207/190 205/224/207 206/208/191
-f 201/211/194 182/193/176 200/209/192
-f 196/213/196 177/195/178 195/210/193
-f 207/214/197 188/196/179 206/208/191
-f 202/215/198 183/197/180 201/211/194
-f 197/229/212 178/212/195 196/213/196
-f 208/218/201 189/200/183 207/214/197
-f 203/219/202 184/201/184 202/215/198
-f 178/212/195 197/229/212 198/216/199
-f 193/220/203 174/202/185 192/217/200
-f 209/222/205 190/204/187 208/218/201
-f 204/223/206 185/187/170 203/219/202
-f 199/205/188 180/188/171 198/216/199
-f 194/206/189 175/189/172 193/220/203
-f 210/238/221 191/221/204 209/222/205
-f 205/224/207 186/207/190 204/223/206
-f 205/224/207 224/243/226 225/225/208
-f 220/228/211 201/211/194 219/226/209
-f 215/230/213 196/213/196 214/227/210
-f 226/231/214 207/214/197 225/225/208
-f 221/232/215 202/215/198 220/228/211
-f 216/248/231 197/229/212 215/230/213
-f 227/235/218 208/218/201 226/231/214
-f 222/236/219 203/219/202 221/232/215
-f 197/229/212 216/248/231 217/233/216
-f 212/237/220 193/220/203 211/234/217
-f 228/239/222 209/222/205 227/235/218
-f 223/240/223 204/223/206 222/236/219
-f 218/241/224 199/205/188 217/233/216
-f 213/242/225 194/206/189 212/237/220
-f 229/257/240 210/238/221 228/239/222
-f 224/243/226 205/224/207 223/240/223
-f 219/226/209 200/209/192 218/241/224
-f 214/227/210 195/210/193 213/242/225
-f 224/243/226 243/262/245 244/244/227
-f 239/247/230 220/228/211 238/245/228
-f 234/249/232 215/230/213 233/246/229
-f 245/250/233 226/231/214 244/244/227
-f 240/251/234 221/232/215 239/247/230
-f 235/267/250 216/248/231 234/249/232
-f 246/269/237 227/235/218 245/250/233
-f 241/255/238 222/236/219 240/251/234
-f 216/248/231 235/267/250 236/252/235
-f 231/256/239 212/237/220 230/253/236
-f 247/258/241 228/239/222 246/254/237
-f 242/259/242 223/240/223 241/255/238
-f 237/260/243 218/241/224 236/252/235
-f 232/261/244 213/242/225 231/256/239
-f 248/401/259 229/257/240 247/258/241
-f 243/262/245 224/243/226 242/259/242
-f 238/245/228 219/226/209 237/260/243
-f 233/246/229 214/227/210 232/261/244
-f 243/262/245 262/298/279 263/263/246
-f 258/266/249 239/247/230 257/264/247
-f 253/268/251 234/249/232 252/265/248
-f 264/270/252 245/250/233 263/263/246
-f 259/271/253 240/251/234 258/266/249
-f 254/287/268 235/267/250 253/268/251
-f 265/275/256 246/269/237 264/270/252
-f 260/276/257 241/255/238 259/271/253
-f 235/267/250 254/287/268 255/272/254
-f 250/277/258 231/256/239 249/273/255
-f 266/279/260 247/274/241 265/275/256
-f 261/280/261 242/259/242 260/276/257
-f 256/281/262 237/260/243 255/272/254
-f 251/282/263 232/261/244 250/277/258
-f 267/296/277 248/278/259 266/279/260
-f 262/298/279 243/262/245 261/280/261
-f 257/264/247 238/245/228 256/281/262
-f 252/265/248 233/246/229 251/282/263
-f 277/286/267 258/266/249 276/283/264
-f 272/288/269 253/268/251 271/284/265
-f 283/289/270 264/270/252 282/285/266
-f 278/290/271 259/271/253 277/286/267
-f 273/306/287 254/287/268 272/288/269
-f 284/293/274 265/275/256 283/289/270
-f 279/294/275 260/276/257 278/290/271
-f 254/287/268 273/306/287 274/291/272
-f 269/295/276 250/277/258 268/292/273
-f 285/297/278 266/279/260 284/293/274
-f 280/299/280 261/280/261 279/294/275
-f 275/300/281 256/281/262 274/291/272
-f 270/301/282 251/282/263 269/295/276
-f 286/315/296 267/296/277 285/297/278
-f 281/302/283 262/298/279 280/299/280
-f 276/283/264 257/264/247 275/300/281
-f 271/284/265 252/265/248 270/301/282
-f 282/285/266 263/263/246 281/302/283
-f 291/307/288 272/288/269 290/303/284
-f 302/308/289 283/289/270 301/304/285
-f 297/309/290 278/290/271 296/305/286
-f 292/324/305 273/306/287 291/307/288
-f 303/312/293 284/293/274 302/308/289
-f 298/313/294 279/294/275 297/309/290
-f 273/306/287 292/324/305 293/310/291
-f 288/314/295 269/295/276 287/311/292
-f 304/316/297 285/297/278 303/312/293
-f 299/317/298 280/299/280 298/313/294
-f 294/318/299 275/300/281 293/310/291
-f 289/319/300 270/301/282 288/314/295
-f 305/333/314 286/315/296 304/316/297
-f 300/320/301 281/302/283 299/317/298
-f 295/321/302 276/283/264 294/318/299
-f 290/303/284 271/284/265 289/319/300
-f 301/304/285 282/285/266 300/320/301
-f 296/305/286 277/286/267 295/321/302
-f 301/304/285 320/338/319 321/322/303
-f 296/305/286 315/339/320 316/323/304
-f 291/307/288 310/340/321 311/325/306
-f 302/308/289 321/322/303 322/326/307
-f 297/309/290 316/323/304 317/327/308
-f 312/346/327 293/310/291 311/325/306
-f 287/311/292 306/347/328 307/328/309
-f 303/312/293 322/326/307 323/329/310
-f 298/313/294 317/327/308 318/330/311
-f 293/310/291 312/346/327 313/331/312
-f 288/314/295 307/328/309 308/332/313
-f 304/316/297 323/329/310 324/334/315
-f 299/317/298 318/330/311 319/335/316
-f 294/318/299 313/331/312 314/336/317
-f 289/319/300 308/332/313 309/337/318
-f 300/320/301 319/335/316 320/338/319
-f 295/321/302 314/336/317 315/339/320
-f 290/303/284 309/337/318 310/340/321
-f 320/338/319 339/357/338 340/341/322
-f 315/339/320 334/358/339 335/342/323
-f 310/340/321 329/359/340 330/343/324
-f 321/322/303 340/341/322 341/344/325
-f 316/323/304 335/342/323 336/345/326
-f 331/365/346 312/346/327 330/343/324
-f 306/347/328 325/366/347 326/348/329
-f 322/326/307 341/344/325 342/349/330
-f 317/327/308 336/345/326 337/350/331
-f 312/346/327 331/365/346 332/351/332
-f 307/328/309 326/348/329 327/352/333
-f 323/329/310 342/349/330 343/353/334
-f 318/330/311 337/350/331 338/354/335
-f 313/331/312 332/351/332 333/355/336
-f 308/332/313 327/352/333 328/356/337
-f 319/335/316 338/354/335 339/357/338
-f 314/336/317 333/355/336 334/358/339
-f 309/337/318 328/356/337 329/359/340
-f 339/357/338 359/376/357 360/360/341
-f 334/358/339 354/377/358 355/361/342
-f 329/359/340 349/378/359 350/362/343
-f 340/341/322 360/360/341 361/363/344
-f 335/342/323 355/361/342 356/364/345
-f 351/382/363 331/365/346 350/362/343
-f 325/366/347 345/383/364 346/367/348
-f 341/344/325 361/363/344 362/368/349
-f 336/345/326 356/364/345 357/369/350
-f 331/365/346 351/382/363 352/370/351
-f 326/348/329 346/367/348 347/371/352
-f 342/349/330 362/368/349 363/372/353
-f 337/350/331 357/369/350 358/373/354
-f 332/351/332 352/370/351 353/374/355
-f 327/352/333 347/371/352 348/375/356
-f 338/354/335 358/373/354 359/376/357
-f 333/355/336 353/374/355 354/377/358
-f 328/356/337 348/375/356 349/378/359
-f 349/378/359 368/395/376 369/379/360
-f 360/360/341 379/396/377 380/380/361
-f 355/361/342 374/397/378 375/381/362
-f 370/410/382 351/382/363 369/379/360
-f 345/383/364 364/408/381 365/384/365
-f 361/363/344 380/380/361 381/385/366
-f 356/364/345 375/381/362 376/386/367
-f 351/382/363 370/410/382 371/387/368
-f 346/367/348 365/384/365 366/388/369
-f 362/368/349 381/385/366 382/389/370
-f 357/369/350 376/386/367 377/390/371
-f 352/370/351 371/387/368 372/391/372
-f 347/371/352 366/388/369 367/392/373
-f 358/373/354 377/390/371 378/393/374
-f 353/374/355 372/391/372 373/394/375
-f 348/375/356 367/392/373 368/395/376
-f 359/376/357 378/393/374 379/396/377
-f 354/377/358 373/394/375 374/397/378
-f 17/1/1 380/380/361 16/2/2
-f 374/397/378 11/5/5 12/4/4
-f 369/379/360 6/8/8 7/7/7
-f 364/408/381 1/11/11 2/10/10
-f 18/13/13 381/385/366 17/1/1
-f 375/381/362 12/4/4 13/15/15
-f 370/410/382 7/7/7 8/17/17
-f 365/384/365 2/10/10 3/19/19
-f 19/21/21 382/389/370 18/13/13
-f 14/23/23 377/390/371 13/15/15
-f 371/387/368 8/17/17 9/25/25
-f 366/388/369 3/19/19 4/27/27
-f 15/29/29 378/393/374 14/23/23
-f 372/391/372 9/25/25 10/31/31
-f 367/392/373 4/27/27 5/33/33
-f 16/2/2 379/396/377 15/29/29
-f 373/394/375 10/31/31 11/5/5
-f 368/395/376 5/33/33 6/8/8
diff --git a/examples/datavisualization/rotations/mesh/narrowarrow.obj b/examples/datavisualization/rotations/mesh/narrowarrow.obj
deleted file mode 100644
index 481fc1d1..00000000
--- a/examples/datavisualization/rotations/mesh/narrowarrow.obj
+++ /dev/null
@@ -1,413 +0,0 @@
-# Blender v2.69 (sub 0) OBJ File: ''
-# www.blender.org
-v 0.000000 0.986570 0.000000
-v 0.000000 0.500000 -0.218399
-v -0.042608 0.500000 -0.214202
-v -0.083578 0.500000 -0.201774
-v -0.121336 0.500000 -0.181592
-v -0.154431 0.500000 -0.154431
-v -0.181592 0.500000 -0.121336
-v -0.201774 0.500000 -0.083578
-v -0.214202 0.500000 -0.042608
-v -0.218399 0.500000 -0.000000
-v -0.214202 0.500000 0.042607
-v -0.201774 0.500000 0.083578
-v -0.181592 0.500000 0.121336
-v -0.154431 0.500000 0.154431
-v -0.121336 0.500000 0.181592
-v -0.083578 0.500000 0.201774
-v -0.042607 0.500000 0.214202
-v 0.000000 0.500000 0.218399
-v 0.042608 0.500000 0.214202
-v 0.083578 0.500000 0.201774
-v 0.121336 0.500000 0.181592
-v 0.154431 0.500000 0.154431
-v 0.181592 0.500000 0.121336
-v 0.201774 0.500000 0.083577
-v 0.214202 0.500000 0.042607
-v 0.218399 0.500000 -0.000000
-v 0.214202 0.500000 -0.042608
-v 0.201774 0.500000 -0.083578
-v 0.181592 0.500000 -0.121336
-v 0.154431 0.500000 -0.154432
-v 0.121336 0.500000 -0.181592
-v 0.083577 0.500000 -0.201774
-v 0.042607 0.500000 -0.214202
-v 0.000000 0.000000 0.000000
-v 0.000000 0.000000 0.000000
-v -0.000000 0.500000 -0.126422
-v -0.024664 0.500000 -0.123993
-v -0.048380 0.500000 -0.116799
-v -0.070236 0.500000 -0.105116
-v -0.089394 0.500000 -0.089394
-v -0.105116 0.500000 -0.070236
-v -0.116799 0.500000 -0.048380
-v -0.123993 0.500000 -0.024664
-v -0.126422 0.500000 -0.000000
-v -0.123993 0.500000 0.024664
-v -0.116799 0.500000 0.048380
-v -0.105116 0.500000 0.070236
-v -0.089394 0.500000 0.089394
-v -0.070236 0.500000 0.105116
-v -0.048380 0.500000 0.116799
-v -0.024664 0.500000 0.123993
-v 0.000000 0.500000 0.126422
-v 0.024664 0.500000 0.123993
-v 0.048380 0.500000 0.116799
-v 0.070236 0.500000 0.105116
-v 0.089394 0.500000 0.089394
-v 0.105116 0.500000 0.070236
-v 0.116799 0.500000 0.048380
-v 0.123993 0.500000 0.024664
-v 0.126422 0.500000 -0.000000
-v 0.123993 0.500000 -0.024664
-v 0.116799 0.500000 -0.048380
-v 0.105116 0.500000 -0.070237
-v 0.089394 0.500000 -0.089394
-v 0.070236 0.500000 -0.105116
-v 0.048380 0.500000 -0.116799
-v 0.024664 0.500000 -0.123993
-v 0.126422 -0.983070 -0.000000
-v 0.123993 -0.983070 0.024664
-v -0.048380 -0.983070 -0.116799
-v -0.024664 -0.983070 -0.123993
-v -0.070236 -0.983070 0.105116
-v -0.089394 -0.983070 0.089394
-v 0.116799 -0.983070 0.048380
-v 0.105116 -0.983070 0.070236
-v -0.105116 -0.983070 0.070236
-v -0.116799 -0.983070 0.048380
-v 0.024664 -0.983070 -0.123993
-v 0.048380 -0.983070 -0.116799
-v 0.089394 -0.983070 0.089394
-v 0.070236 -0.983070 0.105116
-v -0.123993 -0.983070 0.024664
-v -0.126422 -0.983070 -0.000000
-v 0.070236 -0.983070 -0.105116
-v 0.089394 -0.983070 -0.089394
-v 0.048380 -0.983070 0.116799
-v 0.024664 -0.983070 0.123993
-v -0.123993 -0.983070 -0.024664
-v -0.116799 -0.983070 -0.048380
-v 0.105116 -0.983070 -0.070237
-v 0.116799 -0.983070 -0.048380
-v -0.105116 -0.983070 -0.070236
-v -0.089394 -0.983070 -0.089394
-v 0.000000 -0.983070 0.126422
-v -0.024664 -0.983070 0.123993
-v 0.123993 -0.983070 -0.024664
-v -0.070236 -0.983070 -0.105116
-v -0.048380 -0.983070 0.116799
-v -0.000000 -0.983070 -0.126422
-vt 0.000000 0.000000
-vt 1.000000 0.000000
-vt 1.000000 1.000000
-vt 0.000000 1.000000
-vt 0.500000 1.000000
-vt 0.597545 0.990393
-vt 0.402456 0.990393
-vt 0.691342 0.961940
-vt 0.777785 0.915735
-vt 0.853553 0.853553
-vt 0.915735 0.777785
-vt 0.961940 0.691342
-vt 0.990393 0.597545
-vt 1.000000 0.500000
-vt 0.990393 0.402455
-vt 0.961940 0.308658
-vt 0.915735 0.222215
-vt 0.853553 0.146447
-vt 0.777785 0.084265
-vt 0.691342 0.038060
-vt 0.597545 0.009607
-vt 0.308659 0.961940
-vt 0.222215 0.915735
-vt 0.146447 0.853554
-vt 0.308658 0.038060
-vt 0.500000 0.000000
-vt 0.402455 0.009607
-vt 0.222215 0.084265
-vt 0.146446 0.146447
-vt 0.084265 0.222215
-vt 0.009607 0.402455
-vt 0.038060 0.308659
-vt 0.009607 0.597546
-vt 0.000000 0.500000
-vt 0.038060 0.691342
-vt 0.084266 0.777786
-vn -0.089495 0.407852 -0.908651
-vn -0.265044 0.407852 -0.873733
-vn -0.430408 0.407852 -0.805236
-vn -0.579231 0.407852 -0.705796
-vn -0.705796 0.407852 -0.579232
-vn -0.805237 0.407852 -0.430408
-vn -0.873733 0.407852 -0.265043
-vn -0.908651 0.407852 -0.089495
-vn -0.908652 0.407852 0.089494
-vn -0.873732 0.407852 0.265044
-vn -0.805237 0.407852 0.430407
-vn -0.705796 0.407852 0.579232
-vn -0.579231 0.407852 0.705796
-vn -0.430408 0.407852 0.805237
-vn -0.265044 0.407852 0.873733
-vn -0.089494 0.407852 0.908652
-vn 0.089495 0.407852 0.908651
-vn 0.265044 0.407852 0.873732
-vn 0.430408 0.407852 0.805237
-vn 0.579232 0.407852 0.705796
-vn 0.705796 0.407852 0.579231
-vn 0.805237 0.407852 0.430406
-vn 0.873733 0.407852 0.265044
-vn 0.908652 0.407852 0.089493
-vn 0.908651 0.407852 -0.089496
-vn 0.873732 0.407852 -0.265045
-vn 0.805236 0.407852 -0.430409
-vn 0.705795 0.407852 -0.579232
-vn 0.579231 0.407852 -0.705796
-vn 0.430407 0.407852 -0.805237
-vn 0.265042 0.407852 -0.873733
-vn 0.089494 0.407852 -0.908652
-vn 0.000000 -1.000000 0.000000
-vn 0.000000 -1.000000 0.000062
-vn -0.290284 0.000000 0.956940
-vn -0.098017 0.000000 0.995185
-vn -0.634393 0.000000 -0.773010
-vn -0.773010 0.000000 -0.634393
-vn 0.956940 0.000000 -0.290286
-vn 0.881921 0.000000 -0.471398
-vn -0.881922 0.000000 -0.471396
-vn -0.956940 0.000000 -0.290285
-vn 0.098017 0.000000 0.995185
-vn 0.290285 0.000000 0.956940
-vn 0.773010 0.000000 -0.634394
-vn 0.634392 0.000000 -0.773011
-vn -0.995185 0.000000 -0.098017
-vn -0.995185 0.000000 0.098017
-vn 0.471397 0.000000 0.881921
-vn 0.634394 0.000000 0.773010
-vn 0.471395 0.000000 -0.881922
-vn 0.290283 0.000000 -0.956941
-vn 0.098016 0.000000 -0.995185
-vn -0.956940 0.000000 0.290285
-vn -0.881922 0.000000 0.471396
-vn 0.773011 0.000000 0.634393
-vn 0.881922 0.000000 0.471396
-vn -0.773010 0.000000 0.634393
-vn -0.634394 0.000000 0.773010
-vn -0.471397 0.000000 0.881921
-vn -0.098016 0.000000 -0.995185
-vn -0.290284 0.000000 -0.956940
-vn -0.471397 0.000000 -0.881921
-vn 0.956941 0.000000 0.290284
-vn 0.995185 0.000000 0.098016
-vn 0.995185 0.000000 -0.098018
-vn 0.000000 -1.000000 0.000001
-vn 0.000000 -1.000000 0.000018
-vn 0.000000 -1.000000 -0.000013
-vn 0.000000 -1.000000 0.000011
-vn 0.000000 -1.000000 0.000002
-vn 0.000000 -1.000000 -0.000031
-vn 0.000000 -1.000000 0.000031
-vn 0.000000 -1.000000 -0.000021
-vn 0.000000 -1.000000 -0.000016
-vn 0.000000 -1.000000 -0.000005
-vn 0.000000 -1.000000 0.000003
-vn -0.098015 0.000000 0.995185
-vn -0.773011 0.000000 -0.634393
-vn -0.881921 0.000000 -0.471396
-vn 0.773009 0.000000 -0.634394
-vn 0.098017 0.000000 -0.995185
-vn -0.634393 0.000000 0.773011
-vn -0.098018 0.000000 -0.995185
-vn -0.290285 0.000000 -0.956940
-s off
-f 1/1/1 2/2/1 3/3/1
-f 1/1/2 3/2/2 4/3/2
-f 1/1/3 4/2/3 5/3/3
-f 1/1/4 5/2/4 6/3/4
-f 1/1/5 6/2/5 7/3/5
-f 1/1/6 7/2/6 8/3/6
-f 1/1/7 8/2/7 9/3/7
-f 1/1/8 9/2/8 10/3/8
-f 1/1/9 10/2/9 11/3/9
-f 1/1/10 11/2/10 12/3/10
-f 1/1/11 12/2/11 13/3/11
-f 1/1/12 13/2/12 14/3/12
-f 1/1/13 14/2/13 15/3/13
-f 1/1/14 15/2/14 16/3/14
-f 1/1/15 16/2/15 17/3/15
-f 1/1/16 17/2/16 18/3/16
-f 1/1/17 18/2/17 19/3/17
-f 1/1/18 19/2/18 20/3/18
-f 1/1/19 20/2/19 21/3/19
-f 1/1/20 21/2/20 22/3/20
-f 1/1/21 22/2/21 23/3/21
-f 1/1/22 23/2/22 24/3/22
-f 1/1/23 24/2/23 25/3/23
-f 1/1/24 25/2/24 26/3/24
-f 1/1/25 26/2/25 27/3/25
-f 1/1/26 27/2/26 28/3/26
-f 1/1/27 28/2/27 29/3/27
-f 1/1/28 29/2/28 30/3/28
-f 1/1/29 30/2/29 31/3/29
-f 1/1/30 31/2/30 32/3/30
-f 1/1/31 32/2/31 33/3/31
-f 1/1/32 33/2/32 2/3/32
-f 24/1/33 23/2/33 58/4/33
-f 13/1/33 12/2/33 47/4/33
-f 2/1/33 33/2/33 36/4/33
-f 23/1/33 22/2/33 57/4/33
-f 12/1/33 11/2/33 46/4/33
-f 33/1/33 32/2/33 67/4/33
-f 22/1/33 21/2/33 56/4/33
-f 11/1/33 10/2/33 45/4/33
-f 32/1/33 31/2/33 66/4/33
-f 21/1/33 20/2/33 55/4/33
-f 10/1/33 9/2/33 44/4/33
-f 31/1/33 30/2/33 65/4/33
-f 20/1/33 19/2/33 54/4/33
-f 9/1/33 8/2/33 43/4/33
-f 30/1/33 29/2/33 64/4/33
-f 19/1/33 18/2/33 53/4/33
-f 3/1/33 2/2/33 37/4/33
-f 8/1/33 7/2/33 42/4/33
-f 29/1/33 28/2/33 63/4/33
-f 7/1/33 6/2/33 41/4/33
-f 18/1/33 17/2/33 52/4/33
-f 28/1/33 27/2/33 62/4/33
-f 6/1/33 5/2/33 40/4/33
-f 17/1/33 16/2/33 51/4/33
-f 27/1/33 26/2/33 61/4/33
-f 5/1/33 4/2/33 39/4/33
-f 16/1/33 15/2/33 50/4/33
-f 26/1/33 25/2/33 60/4/33
-f 4/1/33 3/2/33 38/4/33
-f 15/1/33 14/2/33 49/4/33
-f 25/1/33 24/2/33 59/4/33
-f 14/1/33 13/2/33 48/4/33
-f 81/5/34 86/6/34 80/7/34
-f 51/1/35 50/2/35 95/4/35
-f 52/1/36 51/2/36 94/4/36
-f 40/1/37 39/2/37 93/4/37
-f 41/1/38 40/2/38 92/4/38
-f 62/1/39 61/2/39 91/4/39
-f 63/1/40 62/2/40 90/4/40
-f 42/1/41 41/2/41 89/4/41
-f 43/1/42 42/2/42 88/4/42
-f 53/1/43 52/2/43 87/4/43
-f 54/1/44 53/2/44 86/4/44
-f 64/1/45 63/2/45 85/4/45
-f 65/1/46 64/2/46 84/4/46
-f 44/1/47 43/2/47 83/4/47
-f 45/1/48 44/2/48 82/4/48
-f 55/1/49 54/2/49 81/4/49
-f 56/1/50 55/2/50 80/4/50
-f 66/1/51 65/2/51 79/4/51
-f 67/1/52 66/2/52 78/4/52
-f 36/1/53 67/2/53 99/4/53
-f 46/1/54 45/2/54 77/4/54
-f 47/1/55 46/2/55 76/4/55
-f 57/1/56 56/2/56 75/4/56
-f 58/1/57 57/2/57 74/4/57
-f 48/1/58 47/2/58 73/4/58
-f 49/1/59 48/2/59 72/4/59
-f 50/1/60 49/2/60 98/4/60
-f 37/1/61 36/2/61 71/4/61
-f 38/1/62 37/2/62 70/4/62
-f 39/1/63 38/2/63 97/4/63
-f 59/1/64 58/2/64 69/4/64
-f 60/1/65 59/2/65 68/4/65
-f 61/1/66 60/2/66 96/4/66
-f 23/2/33 57/3/33 58/4/33
-f 12/2/33 46/3/33 47/4/33
-f 33/2/33 67/3/33 36/4/33
-f 22/2/33 56/3/33 57/4/33
-f 11/2/33 45/3/33 46/4/33
-f 32/2/67 66/3/67 67/4/67
-f 21/2/33 55/3/33 56/4/33
-f 10/2/33 44/3/33 45/4/33
-f 31/2/33 65/3/33 66/4/33
-f 20/2/33 54/3/33 55/4/33
-f 9/2/33 43/3/33 44/4/33
-f 30/2/33 64/3/33 65/4/33
-f 19/2/33 53/3/33 54/4/33
-f 8/2/33 42/3/33 43/4/33
-f 29/2/33 63/3/33 64/4/33
-f 18/2/33 52/3/33 53/4/33
-f 2/2/33 36/3/33 37/4/33
-f 7/2/33 41/3/33 42/4/33
-f 28/2/33 62/3/33 63/4/33
-f 6/2/33 40/3/33 41/4/33
-f 17/2/33 51/3/33 52/4/33
-f 27/2/33 61/3/33 62/4/33
-f 5/2/33 39/3/33 40/4/33
-f 16/2/67 50/3/67 51/4/67
-f 26/2/33 60/3/33 61/4/33
-f 4/2/33 38/3/33 39/4/33
-f 15/2/33 49/3/33 50/4/33
-f 25/2/33 59/3/33 60/4/33
-f 3/2/33 37/3/33 38/4/33
-f 14/2/33 48/3/33 49/4/33
-f 24/2/33 58/3/33 59/4/33
-f 13/2/33 47/3/33 48/4/33
-f 86/6/33 87/8/33 80/7/33
-f 87/8/33 94/9/33 80/7/33
-f 94/9/33 95/10/33 80/7/33
-f 95/10/68 98/11/68 80/7/68
-f 98/11/69 72/12/69 80/7/69
-f 72/12/70 73/13/70 80/7/70
-f 73/13/33 76/14/33 80/7/33
-f 76/14/33 77/15/33 80/7/33
-f 77/15/33 82/16/33 80/7/33
-f 82/16/33 83/17/33 80/7/33
-f 83/17/33 88/18/33 80/7/33
-f 88/18/33 89/19/33 80/7/33
-f 89/19/33 92/20/33 93/21/33
-f 80/7/71 89/19/71 93/21/71
-f 75/22/33 80/7/33 93/21/33
-f 74/23/33 75/22/33 93/21/33
-f 69/24/33 74/23/33 93/21/33
-f 71/25/72 97/26/72 70/27/72
-f 71/25/73 93/21/73 97/26/73
-f 99/28/74 93/21/74 71/25/74
-f 78/29/33 93/21/33 99/28/33
-f 79/30/33 93/21/33 78/29/33
-f 85/31/73 79/30/73 84/32/73
-f 85/31/33 93/21/33 79/30/33
-f 91/33/75 85/31/75 90/34/75
-f 91/33/33 93/21/33 85/31/33
-f 96/35/33 68/36/33 91/33/33
-f 68/36/76 69/24/76 93/21/76
-f 91/33/77 68/36/77 93/21/77
-f 50/2/35 98/3/35 95/4/35
-f 51/2/78 95/3/78 94/4/78
-f 39/2/37 97/3/37 93/4/37
-f 40/2/79 93/3/79 92/4/79
-f 61/2/39 96/3/39 91/4/39
-f 62/2/40 91/3/40 90/4/40
-f 41/2/80 92/3/80 89/4/80
-f 42/2/42 89/3/42 88/4/42
-f 52/2/43 94/3/43 87/4/43
-f 53/2/44 87/3/44 86/4/44
-f 63/2/81 90/3/81 85/4/81
-f 64/2/46 85/3/46 84/4/46
-f 43/2/47 88/3/47 83/4/47
-f 44/2/48 83/3/48 82/4/48
-f 54/2/49 86/3/49 81/4/49
-f 55/2/50 81/3/50 80/4/50
-f 65/2/51 84/3/51 79/4/51
-f 66/2/52 79/3/52 78/4/52
-f 67/2/82 78/3/82 99/4/82
-f 45/2/54 82/3/54 77/4/54
-f 46/2/55 77/3/55 76/4/55
-f 56/2/56 80/3/56 75/4/56
-f 57/2/57 75/3/57 74/4/57
-f 47/2/58 76/3/58 73/4/58
-f 48/2/83 73/3/83 72/4/83
-f 49/2/60 72/3/60 98/4/60
-f 36/2/84 99/3/84 71/4/84
-f 37/2/85 71/3/85 70/4/85
-f 38/2/63 70/3/63 97/4/63
-f 58/2/64 74/3/64 69/4/64
-f 59/2/65 69/3/65 68/4/65
-f 60/2/66 68/3/66 96/4/66
diff --git a/examples/datavisualization/rotations/rotations.pro b/examples/datavisualization/rotations/rotations.pro
deleted file mode 100644
index faabc5aa..00000000
--- a/examples/datavisualization/rotations/rotations.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp scatterdatamodifier.cpp
-HEADERS += scatterdatamodifier.h
-
-QT += widgets
-
-RESOURCES += rotations.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/rotations/rotations.qrc b/examples/datavisualization/rotations/rotations.qrc
deleted file mode 100644
index bf66ebeb..00000000
--- a/examples/datavisualization/rotations/rotations.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>mesh/narrowarrow.obj</file>
- <file>mesh/largesphere.obj</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/rotations/scatterdatamodifier.cpp b/examples/datavisualization/rotations/scatterdatamodifier.cpp
deleted file mode 100644
index d3c383b6..00000000
--- a/examples/datavisualization/rotations/scatterdatamodifier.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-#include <QtDataVisualization/qscatterdataproxy.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qscatter3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-#include <QtDataVisualization/QCustom3DItem>
-#include <QtCore/qmath.h>
-
-using namespace QtDataVisualization;
-
-static const float verticalRange = 8.0f;
-static const float horizontalRange = verticalRange;
-static const float ellipse_a = horizontalRange / 3.0f;
-static const float ellipse_b = verticalRange;
-static const float doublePi = float(M_PI) * 2.0f;
-static const float radiansToDegrees = 360.0f / doublePi;
-static const float animationFrames = 30.0f;
-
-ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
- : m_graph(scatter),
- m_fieldLines(12),
- m_arrowsPerLine(16),
- m_magneticField(new QScatter3DSeries),
- m_sun(new QCustom3DItem),
- m_magneticFieldArray(0),
- m_angleOffset(0.0f),
- m_angleStep(doublePi / m_arrowsPerLine / animationFrames)
-{
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
-
- // Magnetic field lines use custom narrow arrow
- m_magneticField->setItemSize(0.2f);
- //! [3]
- m_magneticField->setMesh(QAbstract3DSeries::MeshUserDefined);
- m_magneticField->setUserDefinedMesh(QStringLiteral(":/mesh/narrowarrow.obj"));
- //! [3]
- //! [4]
- QLinearGradient fieldGradient(0, 0, 16, 1024);
- fieldGradient.setColorAt(0.0, Qt::black);
- fieldGradient.setColorAt(1.0, Qt::white);
- m_magneticField->setBaseGradient(fieldGradient);
- m_magneticField->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- //! [4]
-
- // For 'sun' we use a custom large sphere
- m_sun->setScaling(QVector3D(0.07f, 0.07f, 0.07f));
- m_sun->setMeshFile(QStringLiteral(":/mesh/largesphere.obj"));
- QImage sunColor = QImage(2, 2, QImage::Format_RGB32);
- sunColor.fill(QColor(0xff, 0xbb, 0x00));
- m_sun->setTextureImage(sunColor);
-
- m_graph->addSeries(m_magneticField);
- m_graph->addCustomItem(m_sun);
-
- // Configure the axes according to the data
- m_graph->axisX()->setRange(-horizontalRange, horizontalRange);
- m_graph->axisY()->setRange(-verticalRange, verticalRange);
- m_graph->axisZ()->setRange(-horizontalRange, horizontalRange);
- m_graph->axisX()->setSegmentCount(int(horizontalRange));
- m_graph->axisZ()->setSegmentCount(int(horizontalRange));
-
- QObject::connect(&m_rotationTimer, &QTimer::timeout, this,
- &ScatterDataModifier::triggerRotation);
-
- toggleRotation();
- generateData();
-}
-
-ScatterDataModifier::~ScatterDataModifier()
-{
- delete m_graph;
-}
-
-void ScatterDataModifier::generateData()
-{
- // Reusing existing array is computationally cheaper than always generating new array, even if
- // all data items change in the array, if the array size doesn't change.
- if (!m_magneticFieldArray)
- m_magneticFieldArray = new QScatterDataArray;
-
- int arraySize = m_fieldLines * m_arrowsPerLine;
- if (arraySize != m_magneticFieldArray->size())
- m_magneticFieldArray->resize(arraySize);
-
- QScatterDataItem *ptrToDataArray = &m_magneticFieldArray->first();
-
- for (float i = 0; i < m_fieldLines; i++) {
- float horizontalAngle = (doublePi * i) / m_fieldLines;
- float xCenter = ellipse_a * qCos(horizontalAngle);
- float zCenter = ellipse_a * qSin(horizontalAngle);
-
- // Rotate - arrow always tangential to origin
- //! [0]
- QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, horizontalAngle * radiansToDegrees);
- //! [0]
-
- for (float j = 0; j < m_arrowsPerLine; j++) {
- // Calculate point on ellipse centered on origin and parallel to x-axis
- float verticalAngle = ((doublePi * j) / m_arrowsPerLine) + m_angleOffset;
- float xUnrotated = ellipse_a * qCos(verticalAngle);
- float y = ellipse_b * qSin(verticalAngle);
-
- // Rotate the ellipse around y-axis
- float xRotated = xUnrotated * qCos(horizontalAngle);
- float zRotated = xUnrotated * qSin(horizontalAngle);
-
- // Add offset
- float x = xCenter + xRotated;
- float z = zCenter + zRotated;
-
- //! [1]
- QQuaternion zRotation = QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, verticalAngle * radiansToDegrees);
- QQuaternion totalRotation = yRotation * zRotation;
- //! [1]
-
- ptrToDataArray->setPosition(QVector3D(x, y, z));
- //! [2]
- ptrToDataArray->setRotation(totalRotation);
- //! [2]
- ptrToDataArray++;
- }
- }
-
- if (m_graph->selectedSeries() == m_magneticField)
- m_graph->clearSelection();
-
- m_magneticField->dataProxy()->resetArray(m_magneticFieldArray);
-}
-
-void ScatterDataModifier::setFieldLines(int lines)
-{
- m_fieldLines = lines;
- generateData();
-}
-
-void ScatterDataModifier::setArrowsPerLine(int arrows)
-{
- m_angleOffset = 0.0f;
- m_angleStep = doublePi / m_arrowsPerLine / animationFrames;
- m_arrowsPerLine = arrows;
- generateData();
-}
-
-void ScatterDataModifier::triggerRotation()
-{
- m_angleOffset += m_angleStep;
- generateData();
-}
-
-void ScatterDataModifier::toggleSun()
-{
- m_sun->setVisible(!m_sun->isVisible());
-}
-
-void ScatterDataModifier::toggleRotation()
-{
- if (m_rotationTimer.isActive())
- m_rotationTimer.stop();
- else
- m_rotationTimer.start(15);
-}
diff --git a/examples/datavisualization/rotations/scatterdatamodifier.h b/examples/datavisualization/rotations/scatterdatamodifier.h
deleted file mode 100644
index 42472b48..00000000
--- a/examples/datavisualization/rotations/scatterdatamodifier.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SCATTERDATAMODIFIER_H
-#define SCATTERDATAMODIFIER_H
-
-#include <QtDataVisualization/q3dscatter.h>
-#include <QtDataVisualization/qscatterdataproxy.h>
-#include <QtCore/QTimer>
-
-using namespace QtDataVisualization;
-
-class ScatterDataModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit ScatterDataModifier(Q3DScatter *scatter);
- ~ScatterDataModifier();
-
- void generateData();
-
-public Q_SLOTS:
- void setFieldLines(int lines);
- void setArrowsPerLine(int arrows);
- void toggleRotation();
- void triggerRotation();
- void toggleSun();
-
-private:
- Q3DScatter *m_graph;
- QTimer m_rotationTimer;
- int m_fieldLines;
- int m_arrowsPerLine;
- QScatter3DSeries *m_magneticField;
- QCustom3DItem *m_sun;
- QScatterDataArray *m_magneticFieldArray;
- float m_angleOffset;
- float m_angleStep;
-};
-
-#endif
diff --git a/examples/datavisualization/scatter/doc/images/scatter-example.png b/examples/datavisualization/scatter/doc/images/scatter-example.png
deleted file mode 100644
index 82c13855..00000000
--- a/examples/datavisualization/scatter/doc/images/scatter-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/scatter/doc/src/scatter.qdoc b/examples/datavisualization/scatter/doc/src/scatter.qdoc
deleted file mode 100644
index 36887592..00000000
--- a/examples/datavisualization/scatter/doc/src/scatter.qdoc
+++ /dev/null
@@ -1,157 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example scatter
- \title Scatter Example
- \ingroup qtdatavisualization_examples
- \brief Using Q3DScatter in a widget application.
-
- The scatter example shows how to make a simple 3D scatter graph using Q3DScatter and
- combining the use of widgets for adjusting several adjustable qualities. The example shows
- how to:
-
- \list
- \li Create an application with Q3DScatter and some widgets
- \li Use QScatterDataProxy to set data to the graph
- \li Adjust some graph properties using widget controls
- \endlist
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image scatter-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in main.cpp, we create a QApplication, instantiate Q3DScatter, and a window container
- for it:
-
- \snippet scatter/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, and Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
- layout into the horizontal one:
-
- \snippet scatter/main.cpp 1
-
- We're not using the vertical layout for anything yet, but we'll get back to it in
- \l {Using widgets to control the graph}
-
- Next, let's create another class to handle the data addition and other interaction with the
- graph. Let's call it \c ScatterDataModifier (See \l {Setting up the graph} and
- \l {Adding data to the graph} for details):
-
- \snippet scatter/main.cpp 2
-
- The application main is done. We can show the graph and start the event loop:
-
- \snippet scatter/main.cpp 3
-
- \section1 Setting up the Graph
-
- Let's set up some visual qualities for the graph in the constructor of the \c ScatterDataModifier
- class we instantiated in the application main:
-
- \snippet scatter/scatterdatamodifier.cpp 0
-
- None of these are required, but are used to override graph defaults. You can try how it looks
- with the preset defaults by commenting the block above out.
-
- Finally we create a QScatterDataProxy and the associated QScatter3DSeries. We set custom label format
- and mesh smoothing for the series and add it to the graph:
-
- \snippet scatter/scatterdatamodifier.cpp 2
-
- That concludes setting up the graph.
-
- \section1 Adding Data to the Graph
-
- The last thing we do in the \c ScatterDataModifier constructor is to add data to the graph:
-
- \snippet scatter/scatterdatamodifier.cpp 3
-
- The actual data addition is done in \c addData() method. First we configure the axes:
-
- \snippet scatter/scatterdatamodifier.cpp 4
-
- This could have been done in the constructor of \c {ScatterDataModifier}, but we added it here
- to keep the constructor simpler and the axes configuration near the data.
-
- Next we create a data array:
-
- \snippet scatter/scatterdatamodifier.cpp 5
-
- and populate it:
-
- \snippet scatter/scatterdatamodifier.cpp 6
-
- Finally we tell the proxy to start using the data we gave it:
-
- \snippet scatter/scatterdatamodifier.cpp 7
-
- Now our graph has the data and is ready to be used. There isn't much interaction yet, though,
- so let's continue by adding some widgets to play with.
-
- \section1 Using Widgets to Control the Graph
-
- First, back in the application main, we'll create some widgets:
-
- \snippet scatter/main.cpp 4
-
- And add them to the vertical layout we created earlier:
-
- \snippet scatter/main.cpp 5
-
- Now, let's connect them to methods in ScatterDataModifier:
-
- \snippet scatter/main.cpp 6
-
- Here are the methods in ScatterDataModifier the signals were connected to:
-
- \snippet scatter/scatterdatamodifier.cpp 8
-
- And so we have an application in which we can control:
-
- \list
- \li Label style
- \li Camera preset
- \li Background visibility
- \li Grid visibility
- \li Dot shading smoothness
- \li Dot style
- \li Theme
- \li Shadow quality
- \li Label font
- \endlist
-
- \section1 Example Contents
-*/
diff --git a/examples/datavisualization/scatter/main.cpp b/examples/datavisualization/scatter/main.cpp
deleted file mode 100644
index f31eca9e..00000000
--- a/examples/datavisualization/scatter/main.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QFontComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QFontDatabase>
-
-int main(int argc, char **argv)
-{
- //! [0]
- QApplication app(argc, argv);
- Q3DScatter *graph = new Q3DScatter();
- QWidget *container = QWidget::createWindowContainer(graph);
- //! [0]
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- //! [1]
-
- widget->setWindowTitle(QStringLiteral("A Cosine Wave"));
-
- //! [4]
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
- themeList->setCurrentIndex(6);
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QCheckBox *smoothCheckBox = new QCheckBox(widget);
- smoothCheckBox->setText(QStringLiteral("Smooth dots"));
- smoothCheckBox->setChecked(true);
-
- QComboBox *itemStyleList = new QComboBox(widget);
- itemStyleList->addItem(QStringLiteral("Sphere"), int(QAbstract3DSeries::MeshSphere));
- itemStyleList->addItem(QStringLiteral("Cube"), int(QAbstract3DSeries::MeshCube));
- itemStyleList->addItem(QStringLiteral("Minimal"), int(QAbstract3DSeries::MeshMinimal));
- itemStyleList->addItem(QStringLiteral("Point"), int(QAbstract3DSeries::MeshPoint));
- itemStyleList->setCurrentIndex(0);
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
- QPushButton *itemCountButton = new QPushButton(widget);
- itemCountButton->setText(QStringLiteral("Toggle item count"));
-
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
- backgroundCheckBox->setChecked(true);
-
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
- gridCheckBox->setChecked(true);
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->addItem(QStringLiteral("Low Soft"));
- shadowQuality->addItem(QStringLiteral("Medium Soft"));
- shadowQuality->addItem(QStringLiteral("High Soft"));
- shadowQuality->setCurrentIndex(4);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
- fontList->setCurrentFont(QFont("Arial"));
- //! [4]
-
- //! [5]
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(itemCountButton, 0, Qt::AlignTop);
- vLayout->addWidget(backgroundCheckBox);
- vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Change dot style")));
- vLayout->addWidget(itemStyleList);
- vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
- vLayout->addWidget(themeList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList, 1, Qt::AlignTop);
- //! [5]
-
- //! [2]
- ScatterDataModifier *modifier = new ScatterDataModifier(graph);
- //! [2]
-
- //! [6]
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changePresetCamera);
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeLabelStyle);
- QObject::connect(itemCountButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::toggleItemCount);
-
- QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setBackgroundEnabled);
- QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setGridEnabled);
- QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setSmoothDots);
-
- QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged,
- backgroundCheckBox, &QCheckBox::setChecked);
- QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged,
- gridCheckBox, &QCheckBox::setChecked);
- QObject::connect(itemStyleList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeStyle(int)));
-
- QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeTheme(int)));
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
-
- QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
- QObject::connect(graph, &Q3DScatter::shadowQualityChanged, modifier,
- &ScatterDataModifier::shadowQualityUpdatedByVisual);
-
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &ScatterDataModifier::changeFont);
-
- QObject::connect(modifier, &ScatterDataModifier::fontChanged, fontList,
- &QFontComboBox::setCurrentFont);
- //! [6]
-
- //! [3]
- widget->show();
- return app.exec();
- //! [3]
-}
diff --git a/examples/datavisualization/scatter/scatter.pro b/examples/datavisualization/scatter/scatter.pro
deleted file mode 100644
index b9f29f9c..00000000
--- a/examples/datavisualization/scatter/scatter.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp scatterdatamodifier.cpp
-HEADERS += scatterdatamodifier.h
-
-QT += widgets
-requires(qtConfig(combobox))
-requires(qtConfig(fontcombobox))
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/scatter/scatterdatamodifier.cpp b/examples/datavisualization/scatter/scatterdatamodifier.cpp
deleted file mode 100644
index 504645da..00000000
--- a/examples/datavisualization/scatter/scatterdatamodifier.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "scatterdatamodifier.h"
-#include <QtDataVisualization/qscatterdataproxy.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qscatter3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-#include <QtCore/qmath.h>
-#include <QtCore/qrandom.h>
-#include <QtWidgets/QComboBox>
-
-using namespace QtDataVisualization;
-
-//#define RANDOM_SCATTER // Uncomment this to switch to random scatter
-
-const int numberOfItems = 3600;
-const float curveDivider = 3.0f;
-const int lowerNumberOfItems = 900;
-const float lowerCurveDivider = 0.75f;
-
-ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
- : m_graph(scatter),
- m_fontSize(40.0f),
- m_style(QAbstract3DSeries::MeshSphere),
- m_smooth(true),
- m_itemCount(lowerNumberOfItems),
- m_curveDivider(lowerCurveDivider)
-{
- //! [0]
- m_graph->activeTheme()->setType(Q3DTheme::ThemeEbony);
- QFont font = m_graph->activeTheme()->font();
- font.setPointSize(m_fontSize);
- m_graph->activeTheme()->setFont(font);
- m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
- //! [0]
-
- //! [2]
- QScatterDataProxy *proxy = new QScatterDataProxy;
- QScatter3DSeries *series = new QScatter3DSeries(proxy);
- series->setItemLabelFormat(QStringLiteral("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"));
- series->setMeshSmooth(m_smooth);
- m_graph->addSeries(series);
- //! [2]
-
- //! [3]
- addData();
- //! [3]
-}
-
-ScatterDataModifier::~ScatterDataModifier()
-{
- delete m_graph;
-}
-
-void ScatterDataModifier::addData()
-{
- // Configure the axes according to the data
- //! [4]
- m_graph->axisX()->setTitle("X");
- m_graph->axisY()->setTitle("Y");
- m_graph->axisZ()->setTitle("Z");
- //! [4]
-
- //! [5]
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(m_itemCount);
- QScatterDataItem *ptrToDataArray = &dataArray->first();
- //! [5]
-
-#ifdef RANDOM_SCATTER
- for (int i = 0; i < m_itemCount; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
-#else
- //! [6]
- float limit = qSqrt(m_itemCount) / 2.0f;
- for (float i = -limit; i < limit; i++) {
- for (float j = -limit; j < limit; j++) {
- ptrToDataArray->setPosition(QVector3D(i + 0.5f,
- qCos(qDegreesToRadians((i * j) / m_curveDivider)),
- j + 0.5f));
- ptrToDataArray++;
- }
- }
- //! [6]
-#endif
-
- //! [7]
- m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- //! [7]
-}
-
-//! [8]
-void ScatterDataModifier::changeStyle(int style)
-{
- QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
- if (comboBox) {
- m_style = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt());
- if (m_graph->seriesList().size())
- m_graph->seriesList().at(0)->setMesh(m_style);
- }
-}
-
-void ScatterDataModifier::setSmoothDots(int smooth)
-{
- m_smooth = bool(smooth);
- QScatter3DSeries *series = m_graph->seriesList().at(0);
- series->setMeshSmooth(m_smooth);
-}
-
-void ScatterDataModifier::changeTheme(int theme)
-{
- Q3DTheme *currentTheme = m_graph->activeTheme();
- currentTheme->setType(Q3DTheme::Theme(theme));
- emit backgroundEnabledChanged(currentTheme->isBackgroundEnabled());
- emit gridEnabledChanged(currentTheme->isGridEnabled());
- emit fontChanged(currentTheme->font());
-}
-
-void ScatterDataModifier::changePresetCamera()
-{
- static int preset = Q3DCamera::CameraPresetFrontLow;
-
- m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset);
-
- if (++preset > Q3DCamera::CameraPresetDirectlyBelow)
- preset = Q3DCamera::CameraPresetFrontLow;
-}
-
-void ScatterDataModifier::changeLabelStyle()
-{
- m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled());
-}
-
-void ScatterDataModifier::changeFont(const QFont &font)
-{
- QFont newFont = font;
- newFont.setPointSizeF(m_fontSize);
- m_graph->activeTheme()->setFont(newFont);
-}
-
-void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq)
-{
- int quality = int(sq);
- emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp
-}
-
-void ScatterDataModifier::changeShadowQuality(int quality)
-{
- QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality);
- m_graph->setShadowQuality(sq);
-}
-
-void ScatterDataModifier::setBackgroundEnabled(int enabled)
-{
- m_graph->activeTheme()->setBackgroundEnabled((bool)enabled);
-}
-
-void ScatterDataModifier::setGridEnabled(int enabled)
-{
- m_graph->activeTheme()->setGridEnabled((bool)enabled);
-}
-//! [8]
-
-void ScatterDataModifier::toggleItemCount()
-{
- if (m_itemCount == numberOfItems) {
- m_itemCount = lowerNumberOfItems;
- m_curveDivider = lowerCurveDivider;
- } else {
- m_itemCount = numberOfItems;
- m_curveDivider = curveDivider;
- }
- m_graph->seriesList().at(0)->dataProxy()->resetArray(0);
- addData();
-}
-
-QVector3D ScatterDataModifier::randVector()
-{
- return QVector3D(
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 100.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 100.0f,
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f -
- (float)(QRandomGenerator::global()->bounded(100)) / 2.0f);
-}
diff --git a/examples/datavisualization/scatter/scatterdatamodifier.h b/examples/datavisualization/scatter/scatterdatamodifier.h
deleted file mode 100644
index 8b777bc8..00000000
--- a/examples/datavisualization/scatter/scatterdatamodifier.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SCATTERDATAMODIFIER_H
-#define SCATTERDATAMODIFIER_H
-
-#include <QtDataVisualization/q3dscatter.h>
-#include <QtDataVisualization/qabstract3dseries.h>
-#include <QtGui/QFont>
-
-using namespace QtDataVisualization;
-
-class ScatterDataModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit ScatterDataModifier(Q3DScatter *scatter);
- ~ScatterDataModifier();
-
- void addData();
- void changeStyle();
- void changePresetCamera();
- void changeLabelStyle();
- void changeFont(const QFont &font);
- void changeFontSize(int fontsize);
- void setBackgroundEnabled(int enabled);
- void setGridEnabled(int enabled);
- void setSmoothDots(int smooth);
- void toggleItemCount();
- void start();
-
-public Q_SLOTS:
- void changeStyle(int style);
- void changeTheme(int theme);
- void changeShadowQuality(int quality);
- void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
-
-Q_SIGNALS:
- void backgroundEnabledChanged(bool enabled);
- void gridEnabledChanged(bool enabled);
- void shadowQualityChanged(int quality);
- void fontChanged(QFont font);
-
-private:
- QVector3D randVector();
- Q3DScatter *m_graph;
- int m_fontSize;
- QAbstract3DSeries::Mesh m_style;
- bool m_smooth;
- int m_itemCount;
- float m_curveDivider;
-};
-
-#endif
diff --git a/examples/datavisualization/surface/doc/images/surface-example.png b/examples/datavisualization/surface/doc/images/surface-example.png
deleted file mode 100644
index c323df78..00000000
--- a/examples/datavisualization/surface/doc/images/surface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/surface/doc/src/surface.qdoc b/examples/datavisualization/surface/doc/src/surface.qdoc
deleted file mode 100644
index a81b760a..00000000
--- a/examples/datavisualization/surface/doc/src/surface.qdoc
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example surface
- \title Surface Example
- \ingroup qtdatavisualization_examples
- \brief Using Q3DSurface in a widget application.
-
- The surface example shows how to make a simple 3D surface graph using Q3DSurface and
- combining the use of widgets for adjusting several adjustable qualities. This example
- demonstrates the following features:
-
- \list
- \li How to set up a basic QSurfaceDataProxy and set data for it.
- \li How to use QHeightMapSurfaceDataProxy for showing 3D height maps.
- \li Three different selection modes for studying the graph.
- \li Axis range usage for displaying selected portions of the graph.
- \li Changing theme.
- \li How to set a custom surface gradient.
- \endlist
-
- For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}.
-
- \image surface-example.png
-
- \include examples-run.qdocinc
-
- \section1 Creating the Application
-
- First, in \c main.cpp, we create a QApplication, instantiate Q3DSurface, and a window container
- for it:
-
- \snippet surface/main.cpp 0
-
- The call to QWidget::createWindowContainer is required, as all data visualization graph classes
- (Q3DBars, Q3DScatter, and Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
- as a widget any other way.
-
- Then we'll create horizontal and vertical layouts. We'll add the graph with the container and
- the vertical layout into the horizontal one:
-
- \snippet surface/main.cpp 1
-
- The rest of the code in \c main.cpp is creating control widgets for features in Q3DSurface. We
- have separated code for changing these features into \c surfacegraph.cpp and only connect
- signals from widgets into methods in \c surfacegraph.cpp. Next chapter explains more
- about using Q3DSurface.
-
- \section1 Setting up Proxies and Data
-
- First we instantiate a new QSurfaceDataProxy and attach it to a new QSurface3DSeries:
-
- \snippet surface/surfacegraph.cpp 0
-
- Then we fill the proxy with a simple square root and sine wave data. This is done by
- creating a new \c QSurfaceDataArray instance and adding \c QSurfaceDataRow elements to it.
- The created \c QSurfaceDataArray is set to be the data array for the QSurfaceDataProxy.
-
- \snippet surface/surfacegraph.cpp 1
-
- The height map is created by instantiating a QHeightMapSurfaceDataProxy with
- a QImage containing the height data. The method QHeightMapSurfaceDataProxy::setValueRanges() is
- used to define the value range of the map. In our example the map is from imaginary position of
- 34.0\unicode 0x00B0 N - 40.0\unicode 0x00B0 N and 18.0\unicode 0x00B0 E - 24.0\unicode 0x00B0 E.
- These values are used to show and position the map to the axis.
-
- \snippet surface/surfacegraph.cpp 2
-
- For demonstrating different proxies this example has two radio buttons which
- the user can use to switch between the series. When the user selects the
- \c {Sqrt & Sin} radio button, the selected series is activated with the following
- code. First we set the decorative issues like enable the grid for the surface and
- select the flat shading mode. Next lines define the axis label format and value
- ranges. Automatic label rotation is set to improve label readability at low camera angles.
- Finally we make sure the correct series is added to the graph:
-
- \snippet surface/surfacegraph.cpp 3
-
- When the \c{Height Map} radio button is activated, the following code sets the correct series active.
- The axis label format is set to show N and E letters and ranges are set to the imaginary coordinates.
- Auto adjusting Y-axis range is fine for our height map surface, so we ensure it is set.
-
- \snippet surface/surfacegraph.cpp 4
-
- \section1 Selection Modes
-
- Q3Dsurface supports three different selection modes. These are demonstrated in the
- example with radio buttons, which the user can use to activate a suitable selection mode.
- The following inline methods are connected to radio buttons to activate the selected mode.
-
- \snippet surface/surfacegraph.h 0
-
- \section1 Axis Ranges for Studying the Graph
-
- The example has four slider controls for adjusting the min and max values for X and Z
- axis. When selecting the proxy these sliders are adjusted so that one step on the slider
- moves the range by one segment step:
-
- \snippet surface/surfacegraph.cpp 8
-
- The ranges are set for the axes like this:
-
- \snippet surface/surfacegraph.cpp 5
-
- \section1 Themes
-
- Q3DSurface supports all the themes Qt Data Visualization has. The example has a pull
- down menu for selecting the theme. The following method is connected to the
- menu to activate the selected theme. The theme type is changed to another predefined theme,
- which overwrites all theme properties to predefined values:
-
- \snippet surface/surfacegraph.cpp 6
-
- \section1 Custom Surface Gradients
-
- The example demonstrates the custom surface gradients with two push buttons. The gradient
- can be defined with QLinearGradient where the desired colors are set to positions. The following
- code shows how to create an example gradient and set it to the series. Note that you also need
- to change the color style to Q3DTheme::ColorStyleRangeGradient to actually use the gradient.
-
- \snippet surface/surfacegraph.cpp 7
-*/
diff --git a/examples/datavisualization/surface/main.cpp b/examples/datavisualization/surface/main.cpp
deleted file mode 100644
index 0cc48b42..00000000
--- a/examples/datavisualization/surface/main.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "surfacegraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QPainter>
-#include <QtGui/QScreen>
-
-int main(int argc, char **argv)
-{
- //! [0]
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
- //! [0]
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- //! [1]
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- vLayout->setAlignment(Qt::AlignTop);
- //! [1]
-
- widget->setWindowTitle(QStringLiteral("Surface example"));
-
- QGroupBox *modelGroupBox = new QGroupBox(QStringLiteral("Model"));
-
- QRadioButton *sqrtSinModelRB = new QRadioButton(widget);
- sqrtSinModelRB->setText(QStringLiteral("Sqrt && Sin"));
- sqrtSinModelRB->setChecked(false);
-
- QRadioButton *heightMapModelRB = new QRadioButton(widget);
- heightMapModelRB->setText(QStringLiteral("Height Map"));
- heightMapModelRB->setChecked(false);
-
- QVBoxLayout *modelVBox = new QVBoxLayout;
- modelVBox->addWidget(sqrtSinModelRB);
- modelVBox->addWidget(heightMapModelRB);
- modelGroupBox->setLayout(modelVBox);
-
- QGroupBox *selectionGroupBox = new QGroupBox(QStringLiteral("Selection Mode"));
-
- QRadioButton *modeNoneRB = new QRadioButton(widget);
- modeNoneRB->setText(QStringLiteral("No selection"));
- modeNoneRB->setChecked(false);
-
- QRadioButton *modeItemRB = new QRadioButton(widget);
- modeItemRB->setText(QStringLiteral("Item"));
- modeItemRB->setChecked(false);
-
- QRadioButton *modeSliceRowRB = new QRadioButton(widget);
- modeSliceRowRB->setText(QStringLiteral("Row Slice"));
- modeSliceRowRB->setChecked(false);
-
- QRadioButton *modeSliceColumnRB = new QRadioButton(widget);
- modeSliceColumnRB->setText(QStringLiteral("Column Slice"));
- modeSliceColumnRB->setChecked(false);
-
- QVBoxLayout *selectionVBox = new QVBoxLayout;
- selectionVBox->addWidget(modeNoneRB);
- selectionVBox->addWidget(modeItemRB);
- selectionVBox->addWidget(modeSliceRowRB);
- selectionVBox->addWidget(modeSliceColumnRB);
- selectionGroupBox->setLayout(selectionVBox);
-
- QSlider *axisMinSliderX = new QSlider(Qt::Horizontal, widget);
- axisMinSliderX->setMinimum(0);
- axisMinSliderX->setTickInterval(1);
- axisMinSliderX->setEnabled(true);
- QSlider *axisMaxSliderX = new QSlider(Qt::Horizontal, widget);
- axisMaxSliderX->setMinimum(1);
- axisMaxSliderX->setTickInterval(1);
- axisMaxSliderX->setEnabled(true);
- QSlider *axisMinSliderZ = new QSlider(Qt::Horizontal, widget);
- axisMinSliderZ->setMinimum(0);
- axisMinSliderZ->setTickInterval(1);
- axisMinSliderZ->setEnabled(true);
- QSlider *axisMaxSliderZ = new QSlider(Qt::Horizontal, widget);
- axisMaxSliderZ->setMinimum(1);
- axisMaxSliderZ->setTickInterval(1);
- axisMaxSliderZ->setEnabled(true);
-
- QComboBox *themeList = new QComboBox(widget);
- themeList->addItem(QStringLiteral("Qt"));
- themeList->addItem(QStringLiteral("Primary Colors"));
- themeList->addItem(QStringLiteral("Digia"));
- themeList->addItem(QStringLiteral("Stone Moss"));
- themeList->addItem(QStringLiteral("Army Blue"));
- themeList->addItem(QStringLiteral("Retro"));
- themeList->addItem(QStringLiteral("Ebony"));
- themeList->addItem(QStringLiteral("Isabelle"));
-
- QGroupBox *colorGroupBox = new QGroupBox(QStringLiteral("Custom gradient"));
-
- QLinearGradient grBtoY(0, 0, 1, 100);
- grBtoY.setColorAt(1.0, Qt::black);
- grBtoY.setColorAt(0.67, Qt::blue);
- grBtoY.setColorAt(0.33, Qt::red);
- grBtoY.setColorAt(0.0, Qt::yellow);
- QPixmap pm(24, 100);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(grBtoY));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(0, 0, 24, 100);
- QPushButton *gradientBtoYPB = new QPushButton(widget);
- gradientBtoYPB->setIcon(QIcon(pm));
- gradientBtoYPB->setIconSize(QSize(24, 100));
-
- QLinearGradient grGtoR(0, 0, 1, 100);
- grGtoR.setColorAt(1.0, Qt::darkGreen);
- grGtoR.setColorAt(0.5, Qt::yellow);
- grGtoR.setColorAt(0.2, Qt::red);
- grGtoR.setColorAt(0.0, Qt::darkRed);
- pmp.setBrush(QBrush(grGtoR));
- pmp.drawRect(0, 0, 24, 100);
- QPushButton *gradientGtoRPB = new QPushButton(widget);
- gradientGtoRPB->setIcon(QIcon(pm));
- gradientGtoRPB->setIconSize(QSize(24, 100));
-
- QHBoxLayout *colorHBox = new QHBoxLayout;
- colorHBox->addWidget(gradientBtoYPB);
- colorHBox->addWidget(gradientGtoRPB);
- colorGroupBox->setLayout(colorHBox);
-
- vLayout->addWidget(modelGroupBox);
- vLayout->addWidget(selectionGroupBox);
- vLayout->addWidget(new QLabel(QStringLiteral("Column range")));
- vLayout->addWidget(axisMinSliderX);
- vLayout->addWidget(axisMaxSliderX);
- vLayout->addWidget(new QLabel(QStringLiteral("Row range")));
- vLayout->addWidget(axisMinSliderZ);
- vLayout->addWidget(axisMaxSliderZ);
- vLayout->addWidget(new QLabel(QStringLiteral("Theme")));
- vLayout->addWidget(themeList);
- vLayout->addWidget(colorGroupBox);
-
- widget->show();
-
- SurfaceGraph *modifier = new SurfaceGraph(graph);
-
- QObject::connect(heightMapModelRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::enableHeightMapModel);
- QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::enableSqrtSinModel);
- QObject::connect(modeNoneRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeNone);
- QObject::connect(modeItemRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeItem);
- QObject::connect(modeSliceRowRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeSliceRow);
- QObject::connect(modeSliceColumnRB, &QRadioButton::toggled,
- modifier, &SurfaceGraph::toggleModeSliceColumn);
- QObject::connect(axisMinSliderX, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustXMin);
- QObject::connect(axisMaxSliderX, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustXMax);
- QObject::connect(axisMinSliderZ, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustZMin);
- QObject::connect(axisMaxSliderZ, &QSlider::valueChanged,
- modifier, &SurfaceGraph::adjustZMax);
- QObject::connect(themeList, SIGNAL(currentIndexChanged(int)),
- modifier, SLOT(changeTheme(int)));
- QObject::connect(gradientBtoYPB, &QPushButton::pressed,
- modifier, &SurfaceGraph::setBlackToYellowGradient);
- QObject::connect(gradientGtoRPB, &QPushButton::pressed,
- modifier, &SurfaceGraph::setGreenToRedGradient);
-
- modifier->setAxisMinSliderX(axisMinSliderX);
- modifier->setAxisMaxSliderX(axisMaxSliderX);
- modifier->setAxisMinSliderZ(axisMinSliderZ);
- modifier->setAxisMaxSliderZ(axisMaxSliderZ);
-
- sqrtSinModelRB->setChecked(true);
- modeItemRB->setChecked(true);
- themeList->setCurrentIndex(2);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/surface/mountain.png b/examples/datavisualization/surface/mountain.png
deleted file mode 100644
index 9138c710..00000000
--- a/examples/datavisualization/surface/mountain.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/surface/surface.pro b/examples/datavisualization/surface/surface.pro
deleted file mode 100644
index a49fa468..00000000
--- a/examples/datavisualization/surface/surface.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- surfacegraph.cpp
-
-HEADERS += surfacegraph.h
-
-QT += widgets
-requires(qtConfig(combobox))
-
-RESOURCES += surface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/surface/surface.qrc b/examples/datavisualization/surface/surface.qrc
deleted file mode 100644
index e4a7c38b..00000000
--- a/examples/datavisualization/surface/surface.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file alias="mountain">mountain.png</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/surface/surfacegraph.cpp b/examples/datavisualization/surface/surfacegraph.cpp
deleted file mode 100644
index a8c5731c..00000000
--- a/examples/datavisualization/surface/surfacegraph.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "surfacegraph.h"
-
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DTheme>
-#include <QtGui/QImage>
-#include <QtCore/qmath.h>
-
-using namespace QtDataVisualization;
-
-const int sampleCountX = 50;
-const int sampleCountZ = 50;
-const int heightMapGridStepX = 6;
-const int heightMapGridStepZ = 6;
-const float sampleMin = -8.0f;
-const float sampleMax = 8.0f;
-
-SurfaceGraph::SurfaceGraph(Q3DSurface *surface)
- : m_graph(surface)
-{
- m_graph->setAxisX(new QValue3DAxis);
- m_graph->setAxisY(new QValue3DAxis);
- m_graph->setAxisZ(new QValue3DAxis);
-
- //! [0]
- 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_heightMapSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
- m_heightMapProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
- //! [2]
- m_heightMapWidth = heightMapImage.width();
- m_heightMapHeight = heightMapImage.height();
-}
-
-SurfaceGraph::~SurfaceGraph()
-{
- delete m_graph;
-}
-
-//! [1]
-void SurfaceGraph::fillSqrtSinProxy()
-{
- float stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
- float stepZ = (sampleMax - sampleMin) / float(sampleCountZ - 1);
-
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
- dataArray->reserve(sampleCountZ);
- for (int i = 0 ; i < sampleCountZ ; i++) {
- QSurfaceDataRow *newRow = new QSurfaceDataRow(sampleCountX);
- // Keep values within range bounds, since just adding step can cause minor drift due
- // to the rounding errors.
- float z = qMin(sampleMax, (i * stepZ + sampleMin));
- int index = 0;
- for (int j = 0; j < sampleCountX; j++) {
- float x = qMin(sampleMax, (j * stepX + sampleMin));
- float R = qSqrt(z * z + x * x) + 0.01f;
- float y = (qSin(R) / R + 0.24f) * 1.61f;
- (*newRow)[index++].setPosition(QVector3D(x, y, z));
- }
- *dataArray << newRow;
- }
-
- m_sqrtSinProxy->resetArray(dataArray);
-}
-//! [1]
-
-void SurfaceGraph::enableSqrtSinModel(bool enable)
-{
- if (enable) {
- //! [3]
- m_sqrtSinSeries->setDrawMode(QSurface3DSeries::DrawSurfaceAndWireframe);
- m_sqrtSinSeries->setFlatShadingEnabled(true);
-
- m_graph->axisX()->setLabelFormat("%.2f");
- m_graph->axisZ()->setLabelFormat("%.2f");
- m_graph->axisX()->setRange(sampleMin, sampleMax);
- m_graph->axisY()->setRange(0.0f, 2.0f);
- m_graph->axisZ()->setRange(sampleMin, sampleMax);
- m_graph->axisX()->setLabelAutoRotation(30);
- m_graph->axisY()->setLabelAutoRotation(90);
- m_graph->axisZ()->setLabelAutoRotation(30);
-
- m_graph->removeSeries(m_heightMapSeries);
- m_graph->addSeries(m_sqrtSinSeries);
- //! [3]
-
- //! [8]
- // Reset range sliders for Sqrt&Sin
- m_rangeMinX = sampleMin;
- m_rangeMinZ = sampleMin;
- m_stepX = (sampleMax - sampleMin) / float(sampleCountX - 1);
- m_stepZ = (sampleMax - sampleMin) / float(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);
- //! [8]
- }
-}
-
-void SurfaceGraph::enableHeightMapModel(bool enable)
-{
- if (enable) {
- //! [4]
- m_heightMapSeries->setDrawMode(QSurface3DSeries::DrawSurface);
- m_heightMapSeries->setFlatShadingEnabled(false);
-
- m_graph->axisX()->setLabelFormat("%.1f N");
- m_graph->axisZ()->setLabelFormat("%.1f E");
- m_graph->axisX()->setRange(34.0f, 40.0f);
- m_graph->axisY()->setAutoAdjustRange(true);
- m_graph->axisZ()->setRange(18.0f, 24.0f);
-
- m_graph->axisX()->setTitle(QStringLiteral("Latitude"));
- m_graph->axisY()->setTitle(QStringLiteral("Height"));
- m_graph->axisZ()->setTitle(QStringLiteral("Longitude"));
-
- 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.0f;
- m_rangeMinZ = 18.0f;
- m_stepX = 6.0f / float(mapGridCountX - 1);
- m_stepZ = 6.0f / float(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)
-{
- float minX = m_stepX * float(min) + m_rangeMinX;
-
- int max = m_axisMaxSliderX->value();
- if (min >= max) {
- max = min + 1;
- m_axisMaxSliderX->setValue(max);
- }
- float maxX = m_stepX * max + m_rangeMinX;
-
- setAxisXRange(minX, maxX);
-}
-
-void SurfaceGraph::adjustXMax(int max)
-{
- float maxX = m_stepX * float(max) + m_rangeMinX;
-
- int min = m_axisMinSliderX->value();
- if (max <= min) {
- min = max - 1;
- m_axisMinSliderX->setValue(min);
- }
- float minX = m_stepX * min + m_rangeMinX;
-
- setAxisXRange(minX, maxX);
-}
-
-void SurfaceGraph::adjustZMin(int min)
-{
- float minZ = m_stepZ * float(min) + m_rangeMinZ;
-
- int max = m_axisMaxSliderZ->value();
- if (min >= max) {
- max = min + 1;
- m_axisMaxSliderZ->setValue(max);
- }
- float maxZ = m_stepZ * max + m_rangeMinZ;
-
- setAxisZRange(minZ, maxZ);
-}
-
-void SurfaceGraph::adjustZMax(int max)
-{
- float maxX = m_stepZ * float(max) + m_rangeMinZ;
-
- int min = m_axisMinSliderZ->value();
- if (max <= min) {
- min = max - 1;
- m_axisMinSliderZ->setValue(min);
- }
- float minX = m_stepZ * min + m_rangeMinZ;
-
- setAxisZRange(minX, maxX);
-}
-
-//! [5]
-void SurfaceGraph::setAxisXRange(float min, float max)
-{
- m_graph->axisX()->setRange(min, max);
-}
-
-void SurfaceGraph::setAxisZRange(float min, float max)
-{
- m_graph->axisZ()->setRange(min, max);
-}
-//! [5]
-
-//! [6]
-void SurfaceGraph::changeTheme(int theme)
-{
- m_graph->activeTheme()->setType(Q3DTheme::Theme(theme));
-}
-//! [6]
-
-void SurfaceGraph::setBlackToYellowGradient()
-{
- //! [7]
- QLinearGradient gr;
- gr.setColorAt(0.0, Qt::black);
- gr.setColorAt(0.33, Qt::blue);
- gr.setColorAt(0.67, Qt::red);
- gr.setColorAt(1.0, Qt::yellow);
-
- m_graph->seriesList().at(0)->setBaseGradient(gr);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- //! [7]
-}
-
-void SurfaceGraph::setGreenToRedGradient()
-{
- QLinearGradient gr;
- gr.setColorAt(0.0, Qt::darkGreen);
- gr.setColorAt(0.5, Qt::yellow);
- gr.setColorAt(0.8, Qt::red);
- gr.setColorAt(1.0, Qt::darkRed);
-
- m_graph->seriesList().at(0)->setBaseGradient(gr);
- m_graph->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
-}
-
diff --git a/examples/datavisualization/surface/surfacegraph.h b/examples/datavisualization/surface/surfacegraph.h
deleted file mode 100644
index ad87d134..00000000
--- a/examples/datavisualization/surface/surfacegraph.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SURFACEGRAPH_H
-#define SURFACEGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurfaceDataProxy>
-#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-
-using namespace QtDataVisualization;
-
-class SurfaceGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit SurfaceGraph(Q3DSurface *surface);
- ~SurfaceGraph();
-
- void enableHeightMapModel(bool enable);
- void enableSqrtSinModel(bool enable);
-
- //! [0]
- void toggleModeNone() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionNone); }
- void toggleModeItem() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItem); }
- void toggleModeSliceRow() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow
- | QAbstract3DGraph::SelectionSlice); }
- void toggleModeSliceColumn() { m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemAndColumn
- | QAbstract3DGraph::SelectionSlice); }
- //! [0]
-
- void setBlackToYellowGradient();
- void setGreenToRedGradient();
-
- void setAxisMinSliderX(QSlider *slider) { m_axisMinSliderX = slider; }
- void setAxisMaxSliderX(QSlider *slider) { m_axisMaxSliderX = slider; }
- void setAxisMinSliderZ(QSlider *slider) { m_axisMinSliderZ = slider; }
- void setAxisMaxSliderZ(QSlider *slider) { m_axisMaxSliderZ = slider; }
-
- void adjustXMin(int min);
- void adjustXMax(int max);
- void adjustZMin(int min);
- void adjustZMax(int max);
-
-public Q_SLOTS:
- void changeTheme(int theme);
-
-private:
- Q3DSurface *m_graph;
- QHeightMapSurfaceDataProxy *m_heightMapProxy;
- QSurfaceDataProxy *m_sqrtSinProxy;
- QSurface3DSeries *m_heightMapSeries;
- QSurface3DSeries *m_sqrtSinSeries;
-
- QSlider *m_axisMinSliderX;
- QSlider *m_axisMaxSliderX;
- QSlider *m_axisMinSliderZ;
- QSlider *m_axisMaxSliderZ;
- float m_rangeMinX;
- float m_rangeMinZ;
- float m_stepX;
- float m_stepZ;
- int m_heightMapWidth;
- int m_heightMapHeight;
-
- void setAxisXRange(float min, float max);
- void setAxisZRange(float min, float max);
- void fillSqrtSinProxy();
-};
-
-#endif // SURFACEGRAPH_H
diff --git a/examples/datavisualization/texturesurface/custominputhandler.h b/examples/datavisualization/texturesurface/custominputhandler.h
deleted file mode 100644
index 52f6fced..00000000
--- a/examples/datavisualization/texturesurface/custominputhandler.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOMINPUTHANDLER_H
-#define CUSTOMINPUTHANDLER_H
-
-#include <QtDataVisualization/Q3DInputHandler>
-#include <QtDataVisualization/QAbstract3DGraph>
-#include <QtDataVisualization/QValue3DAxis>
-#include "highlightseries.h"
-
-using namespace QtDataVisualization;
-
-class CustomInputHandler : public Q3DInputHandler
-{
- Q_OBJECT
-
- enum InputState {
- StateNormal = 0,
- StateDraggingX,
- StateDraggingZ,
- StateDraggingY
- };
-
-public:
- explicit CustomInputHandler(QAbstract3DGraph *graph, QObject *parent = 0);
-
- inline void setLimits(float min, float max, float minRange) {
- m_areaMinValue = min;
- m_areaMaxValue = max;
- m_axisXMinValue = m_areaMinValue;
- m_axisXMaxValue = m_areaMaxValue;
- m_axisZMinValue = m_areaMinValue;
- m_axisZMaxValue = m_areaMaxValue;
- m_axisXMinRange = minRange;
- m_axisZMinRange = minRange;
- }
- inline void setAxes(QValue3DAxis *axisX, QValue3DAxis *axisY, QValue3DAxis *axisZ) {
- m_axisX = axisX;
- m_axisY = axisY;
- m_axisZ = axisZ;
- }
- inline void setAspectRatio(float ratio) { m_aspectRatio = ratio; }
- inline void setHighlightSeries(HighlightSeries *series) { m_highlight = series; }
- inline void setDragSpeedModifier(float modifier) { m_speedModifier = modifier; }
-
- virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void wheelEvent(QWheelEvent *event);
-
-private:
- void handleElementSelected(QAbstract3DGraph::ElementType type);
- void handleAxisDragging();
- void checkConstraints();
-
-private:
- HighlightSeries *m_highlight;
- bool m_mousePressed;
- InputState m_state;
- QValue3DAxis *m_axisX;
- QValue3DAxis *m_axisY;
- QValue3DAxis *m_axisZ;
- float m_speedModifier;
- float m_aspectRatio;
- float m_axisXMinValue;
- float m_axisXMaxValue;
- float m_axisXMinRange;
- float m_axisZMinValue;
- float m_axisZMaxValue;
- float m_axisZMinRange;
- float m_areaMinValue;
- float m_areaMaxValue;
-};
-
-#endif
diff --git a/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png b/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png
deleted file mode 100644
index 76819607..00000000
--- a/examples/datavisualization/texturesurface/doc/images/texturesurface-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc b/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc
deleted file mode 100644
index c1cdc208..00000000
--- a/examples/datavisualization/texturesurface/doc/src/texturesurface.qdoc
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \example texturesurface
- \title Textured Surface Example
- \ingroup qtdatavisualization_examples
- \brief Using texture with Q3DSurface.
- \since QtDataVisualization 1.2
-
- The textured surface example shows how to add an image as a texture for a surface. The example
- shows also how to:
-
- \list
- \li Create a surface series from an image
- \li Use custom input handler to enable zooming and panning
- \li Highlight an area of the surface
- \endlist
-
- \image texturesurface-example.png
-
- \include examples-run.qdocinc
-
- \section1 Texture to a Surface Series
-
- The image to be set as a texture to a surface can be set using QSurface3DSeries::setTextureFile().
- In this example we have added a check box to control if the texture is set or not. The
- following code extract is for reacting to the check box selections. The image in this
- example is read from the resource file where it is as a JPG file. Setting an empty file
- with the method clears the texture, and the surface uses the gradients or colors from the theme.
-
- \snippet texturesurface/surfacegraph.cpp 0
-
- \section1 Topographic Surface Series
-
- The topographic data for this example is obtained from National Land Survey of Finland. It
- provides a product called \c{Elevation Model 2 m}, which was suitable for our needs. We selected
- Levi fell to be shown. The accuracy of the data was well beyond our needs and therefore it
- is compressed and encoded into a PNG file. The height value from the original ASCII data is
- encoded into RGB format using a multiplier, which you will see later on a code extract.
- The multiplier is calculated simply by dividing the largest 24 bit value with the highest point
- in Finland.
-
- Qt Data Visualization has a special proxy for height map image files, but it converts
- only one byte values. So to utilize the bigger accuracy on the data from National Land
- Survey of Finland, we read the data from the PNG file and decode it into QSurface3DSeries.
- The following code samples show how this is done.
-
- First the encoding multiplier.
- \snippet texturesurface/topographicseries.cpp 0
-
- And then the actual decoding.
- \snippet texturesurface/topographicseries.cpp 1
-
- \section1 Use Custom Input Handler to Enable Zooming and Panning
-
- For the panning the implementation is similar to the \l{Axis Range Dragging With Labels Example}.
- The difference is that in this example we follow only dragging of X and Z axis and we don't
- allow dragging the surface outside the graph. The control for this is very simple and done as
- on the following example for the X axis.
-
- \snippet texturesurface/custominputhandler.cpp 0
-
- For the zooming we catch the \c wheelEvent and adjust the X and Y axis ranges according to delta
- value on QWheelEvent. The Y axis is also adjusted so that the aspect ratio between Y axis and
- XZ plane stays the same, and we don't get silly looking graph with height exaggerated too much.
-
- \snippet texturesurface/custominputhandler.cpp 1
-
- In this case we want to control the zoom level so that it won't get too near to or far from the
- surface. For instance, if the value for the X axis gets below the allowed, i.e. zooming gets too
- far, the value is set to the minimum allowed value. If the range is going to below the range
- minimum, both ends of the axis are adjusted so that the range stays at the limit.
-
- \snippet texturesurface/custominputhandler.cpp 2
-
- \section1 Highlight an Area of the Surface
-
- The main idea on creating a highlight on the surface is to create a copy of the series and add
- a bit of offset to the y value. On this example the class \c HighlightSeries implements the
- creation of the copy on its \c handlePositionChange method. Firstly the \c HighlightSeries
- needs to get the pointer to the original series and then it starts to listen the
- QSurface3DSeries::selectedPointChanged signal.
-
- \snippet texturesurface/highlightseries.cpp 0
-
- When the signal arrives, first thing is to check that the position is valid. Then the ranges
- for the copied area are calculated and checked that they stay within the bounds. Finally
- we simply fill the data array of the highlight series with the range from the data array of
- topography series.
-
- \snippet texturesurface/highlightseries.cpp 1
-
- \section1 A Gradient to the Highlight Series
-
- Since the \c HighlightSeries is QSurface3DSeries, we can use all the decoration methods series can
- have. In this example we added a gradient to emphasize the elevation. Because the suitable gradient
- style depends on the range of the Y axis and we change the range when zooming, we need to adjust
- the gradient color positions as the range change.
-
- For the gradient color positions we define proportional values.
-
- \snippet texturesurface/highlightseries.cpp 2
-
- The gradient modification is done on \c handleGradientChange method and we connect it to react to
- changes on Y axis.
-
- \snippet texturesurface/surfacegraph.cpp 1
-
- When a change on Y axis max value happens, we calculate the gradient color positions.
-
- \snippet texturesurface/highlightseries.cpp 3
-*/
diff --git a/examples/datavisualization/texturesurface/highlightseries.h b/examples/datavisualization/texturesurface/highlightseries.h
deleted file mode 100644
index 9fcfbe6d..00000000
--- a/examples/datavisualization/texturesurface/highlightseries.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef HIGHLIGHTSERIES_H
-#define HIGHLIGHTSERIES_H
-
-#include <QtDataVisualization/QSurface3DSeries>
-
-#include "topographicseries.h"
-
-using namespace QtDataVisualization;
-
-class HighlightSeries : public QSurface3DSeries
-{
- Q_OBJECT
-public:
- explicit HighlightSeries();
- ~HighlightSeries();
-
- void setTopographicSeries(TopographicSeries *series);
- inline void setMinHeight(float height) { m_minHeight = height; }
-
-public Q_SLOTS:
- void handlePositionChange(const QPoint &position);
- void handleGradientChange(float value);
-
-private:
- int m_width;
- int m_height;
- int m_srcWidth;
- int m_srcHeight;
- QPoint m_position;
- TopographicSeries *m_topographicSeries;
- float m_minHeight;
-};
-
-#endif // HIGHLIGHTSERIES_H
diff --git a/examples/datavisualization/texturesurface/main.cpp b/examples/datavisualization/texturesurface/main.cpp
deleted file mode 100644
index 86d03ac9..00000000
--- a/examples/datavisualization/texturesurface/main.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "surfacegraph.h"
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
-#include <QtGui/QPainter>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- Q3DSurface *graph = new Q3DSurface();
- QWidget *container = QWidget::createWindowContainer(graph);
-
- if (!graph->hasContext()) {
- QMessageBox msgBox;
- msgBox.setText("Couldn't initialize the OpenGL context.");
- msgBox.exec();
- return -1;
- }
-
- QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
- vLayout->setAlignment(Qt::AlignTop);
-
- widget->setWindowTitle(QStringLiteral("Textured surface example"));
-
- QCheckBox *enableTexture = new QCheckBox(widget);
- enableTexture->setText(QStringLiteral("Surface texture"));
-
- int height = 400;
- int width = 100;
- int border = 10;
- QLinearGradient gr(0, 0, 1, height - 2 * border);
- gr.setColorAt(1.0f, Qt::black);
- gr.setColorAt(0.8f, Qt::darkGreen);
- gr.setColorAt(0.6f, Qt::green);
- gr.setColorAt(0.4f, Qt::yellow);
- gr.setColorAt(0.2f, Qt::red);
- gr.setColorAt(0.0f, Qt::darkRed);
-
- QPixmap pm(width, height);
- pm.fill(Qt::transparent);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(gr));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(border, border, 35, height - 2 * border);
- pmp.setPen(Qt::black);
- int step = (height - 2 * border) / 5;
- for (int i = 0; i < 6; i++) {
- int yPos = i * step + border;
- pmp.drawLine(border, yPos, 55, yPos);
- pmp.drawText(60, yPos + 2, QString("%1 m").arg(550 - (i * 110)));
- }
-
- QLabel *label = new QLabel(widget);
- label->setPixmap(pm);
-
- QGroupBox *heightMapGroupBox = new QGroupBox(QStringLiteral("Highlight color map"));
- QVBoxLayout *colorMapVBox = new QVBoxLayout;
- colorMapVBox->addWidget(label);
- heightMapGroupBox->setLayout(colorMapVBox);
-
- vLayout->addWidget(enableTexture);
- vLayout->addWidget(heightMapGroupBox);
-
- widget->show();
-
- SurfaceGraph *modifier = new SurfaceGraph(graph);
-
- QObject::connect(enableTexture, &QCheckBox::stateChanged,
- modifier, &SurfaceGraph::toggleSurfaceTexture);
-
- enableTexture->setChecked(true);
-
- return app.exec();
-}
diff --git a/examples/datavisualization/texturesurface/surfacegraph.cpp b/examples/datavisualization/texturesurface/surfacegraph.cpp
deleted file mode 100644
index c34214c6..00000000
--- a/examples/datavisualization/texturesurface/surfacegraph.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "surfacegraph.h"
-#include "topographicseries.h"
-
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DTheme>
-
-using namespace QtDataVisualization;
-
-const float areaWidth = 8000.0f;
-const float areaHeight = 8000.0f;
-const float aspectRatio = 0.1389f;
-const float minRange = areaWidth * 0.49f;
-
-SurfaceGraph::SurfaceGraph(Q3DSurface *surface)
- : m_graph(surface)
-{
- m_graph->setAxisX(new QValue3DAxis);
- m_graph->setAxisY(new QValue3DAxis);
- m_graph->setAxisZ(new QValue3DAxis);
- m_graph->axisX()->setLabelFormat("%i");
- m_graph->axisZ()->setLabelFormat("%i");
- m_graph->axisX()->setRange(0.0f, areaWidth);
- m_graph->axisY()->setRange(100.0f, areaWidth * aspectRatio);
- m_graph->axisZ()->setRange(0.0f, areaHeight);
- m_graph->axisX()->setLabelAutoRotation(30);
- m_graph->axisY()->setLabelAutoRotation(90);
- m_graph->axisZ()->setLabelAutoRotation(30);
- m_graph->activeTheme()->setType(Q3DTheme::ThemePrimaryColors);
-
- QFont font = m_graph->activeTheme()->font();
- font.setPointSize(20);
- m_graph->activeTheme()->setFont(font);
-
- m_topography = new TopographicSeries();
- m_topography->setTopographyFile(":/maps/topography", areaWidth, areaHeight);
- m_topography->setItemLabelFormat(QStringLiteral("@yLabel m"));
-
- m_highlight = new HighlightSeries();
- m_highlight->setTopographicSeries(m_topography);
- m_highlight->setMinHeight(minRange * aspectRatio);
- m_highlight->handleGradientChange(areaWidth * aspectRatio);
-//! [1]
- QObject::connect(m_graph->axisY(), &QValue3DAxis::maxChanged,
- m_highlight, &HighlightSeries::handleGradientChange);
-//! [1]
-
- m_graph->addSeries(m_topography);
- m_graph->addSeries(m_highlight);
-
- m_inputHandler = new CustomInputHandler(m_graph);
- m_inputHandler->setHighlightSeries(m_highlight);
- m_inputHandler->setAxes(m_graph->axisX(), m_graph->axisY(), m_graph->axisZ());
- m_inputHandler->setLimits(0.0f, areaWidth, minRange);
- m_inputHandler->setAspectRatio(aspectRatio);
-
- m_graph->setActiveInputHandler(m_inputHandler);
-}
-
-SurfaceGraph::~SurfaceGraph()
-{
- delete m_graph;
-}
-
-//! [0]
-void SurfaceGraph::toggleSurfaceTexture(bool enable)
-{
- if (enable)
- m_topography->setTextureFile(":/maps/maptexture");
- else
- m_topography->setTextureFile("");
-}
-//! [0]
diff --git a/examples/datavisualization/texturesurface/surfacegraph.h b/examples/datavisualization/texturesurface/surfacegraph.h
deleted file mode 100644
index 47eea71b..00000000
--- a/examples/datavisualization/texturesurface/surfacegraph.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SURFACEGRAPH_H
-#define SURFACEGRAPH_H
-
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtWidgets/QSlider>
-#include "topographicseries.h"
-#include "highlightseries.h"
-
-#include "custominputhandler.h"
-
-using namespace QtDataVisualization;
-
-class SurfaceGraph : public QObject
-{
- Q_OBJECT
-public:
- explicit SurfaceGraph(Q3DSurface *surface);
- ~SurfaceGraph();
-
- void toggleSurfaceTexture(bool enable);
-
-private:
- Q3DSurface *m_graph;
-
- TopographicSeries *m_topography;
- HighlightSeries *m_highlight;
- int m_highlightWidth;
- int m_highlightHeight;
-
- CustomInputHandler *m_inputHandler;
-};
-
-#endif // SURFACEGRAPH_H
diff --git a/examples/datavisualization/texturesurface/texturedsurface.qrc b/examples/datavisualization/texturesurface/texturedsurface.qrc
deleted file mode 100644
index 94b96d24..00000000
--- a/examples/datavisualization/texturesurface/texturedsurface.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/maps">
- <file alias="topography">topography.png</file>
- <file alias="maptexture">maptexture.jpg</file>
- </qresource>
-</RCC>
diff --git a/examples/datavisualization/texturesurface/texturesurface.pro b/examples/datavisualization/texturesurface/texturesurface.pro
deleted file mode 100644
index efef1944..00000000
--- a/examples/datavisualization/texturesurface/texturesurface.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-android|ios|winrt {
- error( "This example is not supported for android, ios, or winrt." )
-}
-
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- surfacegraph.cpp \
- topographicseries.cpp \
- highlightseries.cpp \
- custominputhandler.cpp
-
-HEADERS += surfacegraph.h \
- topographicseries.h \
- highlightseries.h \
- custominputhandler.h
-
-QT += widgets
-
-RESOURCES += texturedsurface.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/*
diff --git a/examples/datavisualization/texturesurface/topographicseries.cpp b/examples/datavisualization/texturesurface/topographicseries.cpp
deleted file mode 100644
index 0495756e..00000000
--- a/examples/datavisualization/texturesurface/topographicseries.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "topographicseries.h"
-
-using namespace QtDataVisualization;
-
-//! [0]
-// Value used to encode height data as RGB value on PNG file
-const float packingFactor = 11983.0f;
-//! [0]
-
-TopographicSeries::TopographicSeries()
-{
- setDrawMode(QSurface3DSeries::DrawSurface);
- setFlatShadingEnabled(true);
- setBaseColor(Qt::white);
-}
-
-TopographicSeries::~TopographicSeries()
-{
-}
-
-void TopographicSeries::setTopographyFile(const QString file, float width, float height)
-{
-//! [1]
- QImage heightMapImage(file);
- uchar *bits = heightMapImage.bits();
- int imageHeight = heightMapImage.height();
- int imageWidth = heightMapImage.width();
- int widthBits = imageWidth * 4;
- float stepX = width / float(imageWidth);
- float stepZ = height / float(imageHeight);
-
- QSurfaceDataArray *dataArray = new QSurfaceDataArray;
- dataArray->reserve(imageHeight);
- for (int i = 0; i < imageHeight; i++) {
- int p = i * widthBits;
- float z = height - float(i) * stepZ;
- QSurfaceDataRow *newRow = new QSurfaceDataRow(imageWidth);
- for (int j = 0; j < imageWidth; j++) {
- uchar aa = bits[p + 0];
- uchar rr = bits[p + 1];
- uchar gg = bits[p + 2];
- uint color = uint((gg << 16) + (rr << 8) + aa);
- float y = float(color) / packingFactor;
- (*newRow)[j].setPosition(QVector3D(float(j) * stepX, y, z));
- p = p + 4;
- }
- *dataArray << newRow;
- }
-
- dataProxy()->resetArray(dataArray);
-//! [1]
-
- m_sampleCountX = float(imageWidth);
- m_sampleCountZ = float(imageHeight);
-}
diff --git a/examples/datavisualization/texturesurface/topographicseries.h b/examples/datavisualization/texturesurface/topographicseries.h
deleted file mode 100644
index f794213a..00000000
--- a/examples/datavisualization/texturesurface/topographicseries.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TOPOGRAPHICSERIES_H
-#define TOPOGRAPHICSERIES_H
-
-#include <QtDataVisualization/QSurface3DSeries>
-
-using namespace QtDataVisualization;
-
-class TopographicSeries : public QSurface3DSeries
-{
- Q_OBJECT
-public:
- explicit TopographicSeries();
- ~TopographicSeries();
-
- void setTopographyFile(const QString file, float width, float height);
-
- float sampleCountX() { return m_sampleCountX; }
- float sampleCountZ() { return m_sampleCountZ; }
-
-public Q_SLOTS:
-
-private:
- float m_sampleCountX;
- float m_sampleCountZ;
-};
-
-#endif // TOPOGRAPHICSERIES_H
diff --git a/examples/datavisualization/volumetric/CMakeLists.txt b/examples/datavisualization/volumetric/CMakeLists.txt
new file mode 100644
index 00000000..fcbf4e0f
--- /dev/null
+++ b/examples/datavisualization/volumetric/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(volumetric LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS DataVisualization)
+
+qt_add_executable(volumetric
+ main.cpp
+ volumetric.cpp volumetric.h
+)
+set_target_properties(volumetric PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(volumetric PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+)
+
+set(volumetric_resource_files
+ "layer_ground.png"
+ "layer_magma.png"
+ "layer_water.png"
+)
+
+qt6_add_resources(volumetric "volumetric"
+ PREFIX
+ "/heightmaps"
+ FILES
+ ${volumetric_resource_files}
+)
+
+install(TARGETS volumetric
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/datavisualization/volumetric/doc/images/volumetric-example.png b/examples/datavisualization/volumetric/doc/images/volumetric-example.png
index 277d4fe4..6cc231d9 100644
--- a/examples/datavisualization/volumetric/doc/images/volumetric-example.png
+++ b/examples/datavisualization/volumetric/doc/images/volumetric-example.png
Binary files differ
diff --git a/examples/datavisualization/volumetric/doc/src/volumetric.qdoc b/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
index b362fd59..54ac6b86 100644
--- a/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
+++ b/examples/datavisualization/volumetric/doc/src/volumetric.qdoc
@@ -1,38 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example volumetric
- \title Volumetric rendering Example
+ \meta tags {DataVisualization, QCustom3DVolume, Custom Item}
+ \title Volumetric Rendering
\ingroup qtdatavisualization_examples
\brief Rendering volumetric objects.
\since QtDataVisualization 1.2
- This example shows how to use QCustom3DVolume items to display volumetric data.
+ \e {Volumetric Rendering} shows how to use QCustom3DVolume to display volumetric data.
\image volumetric-example.png
@@ -42,41 +19,41 @@
The QCustom3DVolume items are special custom items (see QCustom3DItem), which can be used
to display volumetric data. The volume items are only supported with orthographic projection,
- so first we make sure the graph is using it:
-
- \snippet volumetric/volumetric.cpp 6
-
- The following code shows how to create a volumetric item tied to the data ranges of the axes:
+ so first make sure the graph is using it:
\snippet volumetric/volumetric.cpp 0
- By setting the QCustom3DItem::scalingAbsolute property to \c{false}, we indicate that the
- scaling of the volume should follow the changes in the data ranges. Next we define the
- internal contents of the volume:
+ Create a volumetric item tied to the data ranges of the axes:
\snippet volumetric/volumetric.cpp 1
- We use eight bit indexed color for our texture, as it is compact and makes it easy to adjust the
- colors without needing to reset the whole texture. For the texture data we use the data we
- created earlier based on some height maps.
- Typically the data for volume items comes pregenerated in a form of a stack of images, so we are
- not going to explain the data generation in detail. Please refer to the example code if you
- are interested in the actual data generation process.
-
- Since we are using eight bit indexed colors, we need a color table to map the eight bit color
- indexes to actual colors. We use one we populated on our own, but in a typical use case you
- would get the color table from the source images:
+ Indicate that the scaling of the volume should follow the changes in the data ranges by setting
+ the QCustom3DItem::scalingAbsolute property to \c{false}. Next, define the internal contents of
+ the volume:
\snippet volumetric/volumetric.cpp 2
- We want to optionally show slice frames around the volume, so we initialize their properties.
+ Use eight bit indexed color for the texture, as it is compact and makes it easy to adjust the
+ colors without needing to reset the whole texture. For the texture data, use the data created
+ earlier based on height maps.
+ Typically, the data for volume items comes pregenerated in the form of a stack of images, so
+ the data generation details can be skipped. For more information about the actual data
+ generation process, see the example code.
+
+ Since eight bit indexed colors are used, a color table is needed to map the eight bit color
+ indexes to actual colors. In a typical use case, you would get the color table from the source
+ images instead of using one manually defined:
+
+ \snippet volumetric/volumetric.cpp 3
+
+ To have an option to show slice frames around the volume, initialize their properties.
Initially, the frames will be hidden:
- \snippet volumetric/volumetric.cpp 5
+ \snippet volumetric/volumetric.cpp 4
- Finally we add the volume as a custom item to the graph to display it:
+ Finally, add the volume as a custom item to the graph to display it:
- \snippet volumetric/volumetric.cpp 3
+ \snippet volumetric/volumetric.cpp 5
\section1 Slicing into the Volume
@@ -84,28 +61,27 @@
not very helpful. One way to inspect the internal structure of the volume is to view the slices
of the volume. QCustom3DVolume provides two ways to display the slices. The first is to show
the selected slices in place of the volume. For example, to specify a slice perpendicular to
- the X-axis, you can use the following method:
+ the X-axis, use the following method:
- \snippet volumetric/volumetric.cpp 7
+ \snippet volumetric/volumetric.cpp 6
- To actually draw the slice specified above, the QCustom3DVolume::drawSlices property must be
- also set:
+ To display the slice specified above, the QCustom3DVolume::drawSlices property must also be set:
- \snippet volumetric/volumetric.cpp 8
+ \snippet volumetric/volumetric.cpp 7
The second way to view slices is to use QCustom3DVolume::renderSlice() method, which produces
a QImage from the specified slice. This image can then be displayed on another widget, such
- as a QLabel here:
+ as a QLabel:
- \snippet volumetric/volumetric.cpp 9
+ \snippet volumetric/volumetric.cpp 8
\section1 Adjusting Volume Transparency
- Sometimes viewing just the slices doesn't give you a good understanding of the volume's internal
- structure. QCustom3DVolume provides two properties that can be used to adjust the volume
- transparency:
+ Sometimes, viewing just the slices doesn't give you a good understanding of the volume's
+ internal structure. QCustom3DVolume provides two properties that can be used to adjust the
+ volume transparency:
- \snippet volumetric/volumetric.cpp 11
+ \snippet volumetric/volumetric.cpp 9
\dots
\snippet volumetric/volumetric.cpp 10
@@ -115,26 +91,25 @@
doesn't affect colors that are fully opaque, unless the QCustom3DVolume::preserveOpacity
property is set to \c{false}.
- An alternative way to adjust the transparency of the volume is adjust the alpha values of the
- voxels directly. For eight bit indexed textures, this is done simply by modifying and
- resetting the color table:
+ An alternative way to adjust the transparency of the volume is to adjust the alpha values of the
+ voxels directly. For eight bit indexed textures, this is done simply by modifying and resetting
+ the color table:
- \snippet volumetric/volumetric.cpp 12
+ \snippet volumetric/volumetric.cpp 11
\section1 High Definition vs. Low Definition Shader
- By default the volume rendering uses the high definition shader. It accounts for each
- voxel of the volume with correct weight when ray-tracing the volume contents,
- providing an accurate representation of even the finer details of the volume.
+ By default, the volumetric rendering uses a high definition shader. It accounts for each
+ voxel of the volume with the correct weight when ray-tracing the volume contents, providing an
+ accurate representation of even the finer details of the volume.
However, this is computationally very expensive, so the frame rate suffers.
- If rendering speed is more important than pixel-perfect
- accuracy of the volume contents, you can take the much faster low definition shader into use
- by setting \c{false} for QCustom3DVolume::useHighDefShader property. The low definition shader
- achieves the speed by making compromises on the accuracy, so it doesn't guarantee each voxel
- of the volume will be sampled. This can lead to flickering and/or other rendering artifacts
- on the finer details of the volume.
-
- \snippet volumetric/volumetric.cpp 13
+ If rendering speed is more important than pixel-perfect accuracy of the volume contents, take
+ the much faster low definition shader into use by setting QCustom3DVolume::useHighDefShader
+ property \c{false}. The low definition shader achieves the speed by making compromises on
+ accuracy, so it doesn't guarantee that every voxel of the volume will be sampled. This can lead
+ to flickering or other rendering artifacts on the finer details of the volume.
+
+ \snippet volumetric/volumetric.cpp 12
\section1 Example Contents
*/
diff --git a/examples/datavisualization/volumetric/main.cpp b/examples/datavisualization/volumetric/main.cpp
index 751886a8..7bbf1d1d 100644
--- a/examples/datavisualization/volumetric/main.cpp
+++ b/examples/datavisualization/volumetric/main.cpp
@@ -1,48 +1,22 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "volumetric.h"
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QMessageBox>
-#include <QtGui/QScreen>
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qradiobutton.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qcheckbox.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qgroupbox.h>
+#include <QtWidgets/qmessagebox.h>
+#include <QtGui/qscreen.h>
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
Q3DScatter *graph = new Q3DScatter();
QWidget *container = QWidget::createWindowContainer(graph);
@@ -55,7 +29,7 @@ int main(int argc, char **argv)
}
QSize screenSize = graph->screen()->size();
- container->setMinimumSize(QSize(screenSize.width() / 3, screenSize.height() / 3));
+ container->setMinimumSize(QSize(screenSize.width() / 3, screenSize.height() / 2));
container->setMaximumSize(screenSize);
container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
container->setFocusPolicy(Qt::StrongFocus);
@@ -68,7 +42,7 @@ int main(int argc, char **argv)
hLayout->addLayout(vLayout);
hLayout->addLayout(vLayout2);
- widget->setWindowTitle(QStringLiteral("Volumetric object example - 3D terrain"));
+ widget->setWindowTitle(QStringLiteral("Volumetric Rendering - 3D Terrain"));
QCheckBox *sliceXCheckBox = new QCheckBox(widget);
sliceXCheckBox->setText(QStringLiteral("Slice volume on X axis"));
@@ -104,7 +78,7 @@ int main(int argc, char **argv)
QGroupBox *textureDetailGroupBox = new QGroupBox(QStringLiteral("Texture detail"));
QRadioButton *lowDetailRB = new QRadioButton(widget);
- lowDetailRB->setText(QStringLiteral("Low (128x64x128)"));
+ lowDetailRB->setText(QStringLiteral("Low (256x128x256)"));
lowDetailRB->setChecked(true);
QRadioButton *mediumDetailRB = new QRadioButton(widget);
diff --git a/examples/datavisualization/volumetric/volumetric.cpp b/examples/datavisualization/volumetric/volumetric.cpp
index 781081d1..3475c85b 100644
--- a/examples/datavisualization/volumetric/volumetric.cpp
+++ b/examples/datavisualization/volumetric/volumetric.cpp
@@ -1,52 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "volumetric.h"
#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/q3dtheme.h>
#include <QtDataVisualization/qcustom3dlabel.h>
-#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/q3dinputhandler.h>
#include <QtCore/qmath.h>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSlider>
-#include <QtCore/QDebug>
-#include <QtGui/QOpenGLContext>
+#include <QtGui/qopenglcontext.h>
-using namespace QtDataVisualization;
-
-const int lowDetailSize(128);
-const int mediumDetailSize(256);
-const int highDetailSize(512);
+const int lowDetailSize(256);
+const int mediumDetailSize(512);
+const int highDetailSize(1024);
const int colorTableSize(256);
const int layerDataSize(512);
const int mineShaftDiameter(1);
@@ -67,10 +31,8 @@ const int terrainTransparency(12);
static bool isOpenGLES()
{
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
return true;
-#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0))
- return false;
#else
return QOpenGLContext::currentContext()->isOpenGLES();
#endif
@@ -78,36 +40,16 @@ static bool isOpenGLES()
VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
: m_graph(scatter),
- m_volumeItem(0),
m_sliceIndexX(lowDetailSize / 2),
m_sliceIndexY(lowDetailSize / 4),
- m_sliceIndexZ(lowDetailSize / 2),
- m_slicingX(false),
- m_slicingY(false),
- m_slicingZ(false),
- m_mediumDetailRB(0),
- m_highDetailRB(0),
- m_lowDetailData(0),
- m_mediumDetailData(0),
- m_highDetailData(0),
- m_mediumDetailIndex(0),
- m_highDetailIndex(0),
- m_mediumDetailShaftIndex(0),
- m_highDetailShaftIndex(0),
- m_sliceSliderX(0),
- m_sliceSliderY(0),
- m_sliceSliderZ(0),
- m_usingPrimaryTable(true),
- m_sliceLabelX(0),
- m_sliceLabelY(0),
- m_sliceLabelZ(0)
-{
- m_graph->activeTheme()->setType(Q3DTheme::ThemeQt);
+ m_sliceIndexZ(lowDetailSize / 2)
+{
+ m_graph->activeTheme()->setType(Q3DTheme::ThemePrimaryColors);
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
- m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
- //! [6]
+ m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetIsometricLeft);
+ //! [0]
m_graph->setOrthoProjection(true);
- //! [6]
+ //! [0]
m_graph->activeTheme()->setBackgroundEnabled(false);
// Only allow zooming at the center and limit the zoom to 200% to avoid clipping issues
@@ -117,10 +59,12 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
toggleAreaAll(true);
if (!isOpenGLES()) {
- m_lowDetailData = new QList<uchar>(lowDetailSize * lowDetailSize * lowDetailSize / 2);
- m_mediumDetailData =
- new QList<uchar>(mediumDetailSize * mediumDetailSize * mediumDetailSize / 2);
- m_highDetailData = new QList<uchar>(highDetailSize * highDetailSize * highDetailSize / 2);
+ m_lowDetailData
+ = new QList<uchar>(lowDetailSize * lowDetailSize * lowDetailSize / 2);
+ m_mediumDetailData
+ = new QList<uchar>(mediumDetailSize * mediumDetailSize * mediumDetailSize / 2);
+ m_highDetailData
+ = new QList<uchar>(highDetailSize * highDetailSize * highDetailSize / 2);
initHeightMap(QStringLiteral(":/heightmaps/layer_ground.png"), m_groundLayer);
initHeightMap(QStringLiteral(":/heightmaps/layer_water.png"), m_waterLayer);
@@ -131,7 +75,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
createVolume(lowDetailSize, 0, lowDetailSize, m_lowDetailData);
excavateMineShaft(lowDetailSize, 0, m_mineShaftArray.size(), m_lowDetailData);
- //! [0]
+ //! [1]
m_volumeItem = new QCustom3DVolume;
// Adjust water level to zero with a minor tweak to y-coordinate position and scaling
m_volumeItem->setScaling(
@@ -144,16 +88,16 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
(m_graph->axisY()->max() + m_graph->axisY()->min()) / 2.0f,
(m_graph->axisZ()->max() + m_graph->axisZ()->min()) / 2.0f));
m_volumeItem->setScalingAbsolute(false);
- //! [0]
//! [1]
+ //! [2]
m_volumeItem->setTextureWidth(lowDetailSize);
m_volumeItem->setTextureHeight(lowDetailSize / 2);
m_volumeItem->setTextureDepth(lowDetailSize);
m_volumeItem->setTextureFormat(QImage::Format_Indexed8);
m_volumeItem->setTextureData(new QList<uchar>(*m_lowDetailData));
- //! [1]
+ //! [2]
- // Generate color tables.
+ // Generate color tables
m_colorTable1.resize(colorTableSize);
m_colorTable2.resize(colorTableSize);
@@ -184,13 +128,17 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
if (i < magmaColorsMax) {
m_colorTable2[i] = qRgba(((i - aboveWaterGroundColorsMax) * 2),
((i - aboveWaterGroundColorsMax) * 2),
- ((i - aboveWaterGroundColorsMax) * 2), 255);
+ ((i - aboveWaterGroundColorsMax) * 2),
+ 255);
} else if (i < underWaterGroundColorsMax) {
m_colorTable2[i] = qRgba(((i - aboveWaterGroundColorsMax) * 2),
((i - aboveWaterGroundColorsMax) * 2),
- ((i - aboveWaterGroundColorsMax) * 2), terrainTransparency);
+ ((i - aboveWaterGroundColorsMax) * 2),
+ terrainTransparency);
} else if (i < waterColorsMax) {
- m_colorTable2[i] = qRgba(0, 0, ((i - underWaterGroundColorsMax) * 2) + 120,
+ m_colorTable2[i] = qRgba(0,
+ 0,
+ ((i - underWaterGroundColorsMax) * 2) + 120,
terrainTransparency);
} else {
m_colorTable2[i] = qRgba(0, 0, 0, 0); // Not used
@@ -199,21 +147,21 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter)
m_colorTable2[airColorIndex] = qRgba(0, 0, 0, 0);
m_colorTable2[mineShaftColorIndex] = qRgba(255, 255, 0, 255);
- //! [2]
+ //! [3]
m_volumeItem->setColorTable(m_colorTable1);
- //! [2]
+ //! [3]
- //! [5]
+ //! [4]
m_volumeItem->setSliceFrameGaps(QVector3D(0.01f, 0.02f, 0.01f));
m_volumeItem->setSliceFrameThicknesses(QVector3D(0.0025f, 0.005f, 0.0025f));
m_volumeItem->setSliceFrameWidths(QVector3D(0.0025f, 0.005f, 0.0025f));
m_volumeItem->setDrawSliceFrames(false);
- //! [5]
+ //! [4]
handleSlicingChanges();
- //! [3]
+ //! [5]
m_graph->addCustomItem(m_volumeItem);
- //! [3]
+ //! [5]
m_timer.start(0);
} else {
@@ -297,13 +245,13 @@ void VolumetricModifier::adjustSliceX(int value)
if (m_sliceIndexX == m_volumeItem->textureWidth())
m_sliceIndexX--;
if (m_volumeItem->sliceIndexX() != -1)
- //! [7]
+ //! [6]
m_volumeItem->setSliceIndexX(m_sliceIndexX);
- //! [7]
- //! [9]
+ //! [6]
+ //! [8]
m_sliceLabelX->setPixmap(
QPixmap::fromImage(m_volumeItem->renderSlice(Qt::XAxis, m_sliceIndexX)));
- //! [9]
+ //! [8]
}
}
@@ -459,7 +407,7 @@ void VolumetricModifier::setPreserveOpacity(bool enabled)
void VolumetricModifier::setTransparentGround(bool enabled)
{
if (m_volumeItem) {
- //! [12]
+ //! [11]
int newAlpha = enabled ? terrainTransparency : 255;
for (int i = aboveWaterGroundColorsMin; i < underWaterGroundColorsMax; i++) {
QRgb oldColor1 = m_colorTable1.at(i);
@@ -471,7 +419,7 @@ void VolumetricModifier::setTransparentGround(bool enabled)
m_volumeItem->setColorTable(m_colorTable1);
else
m_volumeItem->setColorTable(m_colorTable2);
- //! [12]
+ //! [11]
adjustSliceX(m_sliceSliderX->value());
adjustSliceY(m_sliceSliderY->value());
adjustSliceZ(m_sliceSliderZ->value());
@@ -481,9 +429,9 @@ void VolumetricModifier::setTransparentGround(bool enabled)
void VolumetricModifier::setUseHighDefShader(bool enabled)
{
if (m_volumeItem) {
- //! [13]
+ //! [12]
m_volumeItem->setUseHighDefShader(enabled);
- //! [13]
+ //! [12]
}
}
@@ -495,9 +443,9 @@ void VolumetricModifier::adjustAlphaMultiplier(int value)
mult = float(value - 99) / 2.0f;
else
mult = float(value) / float(500 - value * 4);
- //! [11]
+ //! [9]
m_volumeItem->setAlphaMultiplier(mult);
- //! [11]
+ //! [9]
QString labelFormat = QStringLiteral("Alpha multiplier: %1");
m_alphaMultiplierLabel->setText(labelFormat.arg(
QString::number(m_volumeItem->alphaMultiplier(), 'f', 3)));
@@ -652,8 +600,6 @@ int VolumetricModifier::excavateMineShaft(int textureSize, int startIndex, int c
dataIndex += (textureSize * textureSize / 2) * shaftSize;
}
}
-
-
}
return endIndex;
}
@@ -662,7 +608,7 @@ void VolumetricModifier::excavateMineBlock(int textureSize, int dataIndex, int s
QList<uchar> *textureData)
{
for (int k = 0; k < size; k++) {
- int curIndex = dataIndex + (k * textureSize * textureSize / 2);
+ int curIndex = 0;
for (int l = 0; l < size; l++) {
curIndex = dataIndex + (k * textureSize * textureSize / 2)
+ (l * textureSize);
@@ -671,7 +617,6 @@ void VolumetricModifier::excavateMineBlock(int textureSize, int dataIndex, int s
(*textureData)[curIndex] = mineShaftColorIndex;
curIndex++;
}
-
}
}
}
@@ -681,9 +626,9 @@ void VolumetricModifier::handleSlicingChanges()
if (m_volumeItem) {
if (m_slicingX || m_slicingY || m_slicingZ) {
// Only show slices of selected dimensions
- //! [8]
+ //! [7]
m_volumeItem->setDrawSlices(true);
- //! [8]
+ //! [7]
m_volumeItem->setSliceIndexX(m_slicingX ? m_sliceIndexX : -1);
m_volumeItem->setSliceIndexY(m_slicingY ? m_sliceIndexY : -1);
m_volumeItem->setSliceIndexZ(m_slicingZ ? m_sliceIndexZ : -1);
diff --git a/examples/datavisualization/volumetric/volumetric.h b/examples/datavisualization/volumetric/volumetric.h
index f76884d6..68bbb0dc 100644
--- a/examples/datavisualization/volumetric/volumetric.h
+++ b/examples/datavisualization/volumetric/volumetric.h
@@ -1,44 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VOLUMETRICMODIFIER_H
#define VOLUMETRICMODIFIER_H
#include <QtDataVisualization/q3dscatter.h>
#include <QtDataVisualization/qcustom3dvolume.h>
-#include <QtCore/QTimer>
-#include <QtGui/QRgb>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QRadioButton>
-
-using namespace QtDataVisualization;
+#include <QtCore/qtimer.h>
+#include <QtGui/qrgb.h>
+#include <QtWidgets/qlabel.h>
+#include <QtWidgets/qslider.h>
+#include <QtWidgets/qradiobutton.h>
class VolumetricModifier : public QObject
{
@@ -85,39 +57,39 @@ private:
void excavateMineBlock(int textureSize, int dataIndex, int size, QList<uchar> *textureData);
void handleSlicingChanges();
- Q3DScatter *m_graph;
- QCustom3DVolume *m_volumeItem;
- int m_sliceIndexX;
- int m_sliceIndexY;
- int m_sliceIndexZ;
- bool m_slicingX;
- bool m_slicingY;
- bool m_slicingZ;
- QLabel *m_fpsLabel;
- QRadioButton *m_mediumDetailRB;
- QRadioButton *m_highDetailRB;
- QList<uchar> *m_lowDetailData;
- QList<uchar> *m_mediumDetailData;
- QList<uchar> *m_highDetailData;
+ Q3DScatter *m_graph = nullptr;
+ QCustom3DVolume *m_volumeItem = nullptr;
+ int m_sliceIndexX = 0;
+ int m_sliceIndexY = 0;
+ int m_sliceIndexZ = 0;
+ bool m_slicingX = false;
+ bool m_slicingY = false;
+ bool m_slicingZ = false;
+ QLabel *m_fpsLabel = nullptr;
+ QRadioButton *m_mediumDetailRB = nullptr;
+ QRadioButton *m_highDetailRB = nullptr;
+ QList<uchar> *m_lowDetailData = nullptr;
+ QList<uchar> *m_mediumDetailData = nullptr;
+ QList<uchar> *m_highDetailData = nullptr;
+ int m_mediumDetailIndex = 0;
+ int m_highDetailIndex = 0;
+ int m_mediumDetailShaftIndex = 0;
+ int m_highDetailShaftIndex = 0;
+ QSlider *m_sliceSliderX = nullptr;
+ QSlider *m_sliceSliderY = nullptr;
+ QSlider *m_sliceSliderZ = nullptr;
+ QList<QRgb> m_colorTable1 = {};
+ QList<QRgb> m_colorTable2 = {};
+ bool m_usingPrimaryTable = true;
+ QLabel *m_sliceLabelX = nullptr;
+ QLabel *m_sliceLabelY = nullptr;
+ QLabel *m_sliceLabelZ = nullptr;
+ QLabel *m_alphaMultiplierLabel = nullptr;
+ QList<uchar> m_magmaLayer = {};
+ QList<uchar> m_waterLayer = {};
+ QList<uchar> m_groundLayer = {};
+ QList<QPair<QVector3D, QVector3D>> m_mineShaftArray = {};
QTimer m_timer;
- int m_mediumDetailIndex;
- int m_highDetailIndex;
- int m_mediumDetailShaftIndex;
- int m_highDetailShaftIndex;
- QSlider *m_sliceSliderX;
- QSlider *m_sliceSliderY;
- QSlider *m_sliceSliderZ;
- QList<QRgb> m_colorTable1;
- QList<QRgb> m_colorTable2;
- bool m_usingPrimaryTable;
- QLabel *m_sliceLabelX;
- QLabel *m_sliceLabelY;
- QLabel *m_sliceLabelZ;
- QLabel *m_alphaMultiplierLabel;
- QList<uchar> m_magmaLayer;
- QList<uchar> m_waterLayer;
- QList<uchar> m_groundLayer;
- QList<QPair<QVector3D, QVector3D>> m_mineShaftArray;
};
#endif
diff --git a/licenseRule.json b/licenseRule.json
new file mode 100644
index 00000000..6d75da27
--- /dev/null
+++ b/licenseRule.json
@@ -0,0 +1,89 @@
+[
+ {
+ "comment" : ["file_pattern_ending: strings matched against the end of a file name.",
+ "location keys: regular expression matched against the beginning of",
+ "the file path (relative to the git submodule root).",
+ "spdx: list of SPDX-License-Expression's allowed in the matching files.",
+ "-------------------------------------------------------",
+ "Files with the following endings are Build System licensed,",
+ "unless they are examples",
+ "Files with other endings can also be build system files"
+ ],
+ "file_pattern_ending" : ["CMakeLists.txt", ".cmake", ".pro", ".pri", ".prf",
+ "configure", "configure.bat", "cmake.in", "plist.in", "CMakeLists.txt.in"],
+ "location" : {
+ "" : {
+ "comment" : "Default",
+ "file type" : "build system",
+ "spdx" : ["BSD-3-Clause"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedent",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "comments" : ["Files with the following endings are Tool licensed,",
+ "unless they are examples.",
+ "Files with other endings can also be tool files."],
+ "file_pattern_ending" : [".sh", ".py", ".pl", ".bat", ".ps1"],
+ "location" :{
+ "" : {
+ "comment" : "Default",
+ "file type" : "tools and utils",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedent",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "comment" : "Files with the following endings are Documentation licensed.",
+ "file_pattern_ending" : [".qdoc", ".qdocinc" , ".qdocconf", ".txt", "README", "qt_attribution.json"],
+ "location" :{
+ "" : {
+ "comment" : "",
+ "file type" : "documentation",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only"]
+ }
+ }
+ },
+ {
+ "comment" : ["All other files",
+ "The licensing is defined only by the file location in the Qt module repository.",
+ "NO <file_pattern_ending> key for this case!",
+ "This needs to be the last entry of the file."],
+ "location" : {
+ "" : {
+ "comment" : "Default",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "src/" : {
+ "comment" : "Default",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "tests/" : {
+ "comment" : "Default",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Default",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ },
+ "tests/auto/cpptest/common/cpptestutil\\.h" : {
+ "comment" : "",
+ "file type" : "util",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ }
+ }
+ }
+]
diff --git a/qtdatavis3d.pro b/qtdatavis3d.pro
deleted file mode 100644
index 5284069b..00000000
--- a/qtdatavis3d.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-requires(qtHaveModule(widgets))
-
-# We need opengl, minimum es2 or desktop
-requires(contains(QT_CONFIG, opengl))
-requires(!contains(QT_CONFIG, opengles1))
-
-load(qt_parts)
-
-OTHER_FILES += README dist/* .qmake.conf
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 00000000..0bd4f3cb
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(datavisualization)
+if(TARGET Qt::Quick)
+ add_subdirectory(datavisualizationqml)
+endif()
diff --git a/src/datavisualization/CMakeLists.txt b/src/datavisualization/CMakeLists.txt
new file mode 100644
index 00000000..27f82340
--- /dev/null
+++ b/src/datavisualization/CMakeLists.txt
@@ -0,0 +1,430 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_module(DataVisualization
+ TARGET_PRODUCT "Qt Data Visualization (Qt $$QT_VERSION)"
+ TARGET_DESCRIPTION "3D Data Visualization component for Qt."
+ SOURCES
+ axis/qabstract3daxis.cpp axis/qabstract3daxis.h axis/qabstract3daxis_p.h
+ axis/qcategory3daxis.cpp axis/qcategory3daxis.h axis/qcategory3daxis_p.h
+ axis/qlogvalue3daxisformatter.cpp axis/qlogvalue3daxisformatter.h axis/qlogvalue3daxisformatter_p.h
+ axis/qvalue3daxis.cpp axis/qvalue3daxis.h axis/qvalue3daxis_p.h
+ axis/qvalue3daxisformatter.cpp axis/qvalue3daxisformatter.h axis/qvalue3daxisformatter_p.h
+ data/abstractitemmodelhandler.cpp data/abstractitemmodelhandler_p.h
+ data/abstractrenderitem.cpp data/abstractrenderitem_p.h
+ data/baritemmodelhandler.cpp data/baritemmodelhandler_p.h
+ data/barrenderitem.cpp data/barrenderitem_p.h
+ data/customrenderitem.cpp data/customrenderitem_p.h
+ data/labelitem.cpp data/labelitem_p.h
+ data/qabstract3dseries.cpp data/qabstract3dseries.h data/qabstract3dseries_p.h
+ data/qabstractdataproxy.cpp data/qabstractdataproxy.h data/qabstractdataproxy_p.h
+ data/qbar3dseries.cpp data/qbar3dseries.h data/qbar3dseries_p.h
+ data/qbardataitem.cpp data/qbardataitem.h data/qbardataitem_p.h
+ data/qbardataproxy.cpp data/qbardataproxy.h data/qbardataproxy_p.h
+ data/qcustom3ditem.cpp data/qcustom3ditem.h data/qcustom3ditem_p.h
+ data/qcustom3dlabel.cpp data/qcustom3dlabel.h data/qcustom3dlabel_p.h
+ data/qcustom3dvolume.cpp data/qcustom3dvolume.h data/qcustom3dvolume_p.h
+ data/qheightmapsurfacedataproxy.cpp data/qheightmapsurfacedataproxy.h data/qheightmapsurfacedataproxy_p.h
+ data/qitemmodelbardataproxy.cpp data/qitemmodelbardataproxy.h data/qitemmodelbardataproxy_p.h
+ data/qitemmodelscatterdataproxy.cpp data/qitemmodelscatterdataproxy.h data/qitemmodelscatterdataproxy_p.h
+ data/qitemmodelsurfacedataproxy.cpp data/qitemmodelsurfacedataproxy.h data/qitemmodelsurfacedataproxy_p.h
+ data/qscatter3dseries.cpp data/qscatter3dseries.h data/qscatter3dseries_p.h
+ data/qscatterdataitem.cpp data/qscatterdataitem.h data/qscatterdataitem_p.h
+ data/qscatterdataproxy.cpp data/qscatterdataproxy.h data/qscatterdataproxy_p.h
+ data/qsurface3dseries.cpp data/qsurface3dseries.h data/qsurface3dseries_p.h
+ data/qsurfacedataitem.cpp data/qsurfacedataitem.h data/qsurfacedataitem_p.h
+ data/qsurfacedataproxy.cpp data/qsurfacedataproxy.h data/qsurfacedataproxy_p.h
+ data/scatteritemmodelhandler.cpp data/scatteritemmodelhandler_p.h
+ data/scatterrenderitem.cpp data/scatterrenderitem_p.h
+ data/surfaceitemmodelhandler.cpp data/surfaceitemmodelhandler_p.h
+ engine/abstractdeclarativeinterface.cpp engine/abstractdeclarativeinterface_p.h
+ engine/abstract3dcontroller.cpp engine/abstract3dcontroller_p.h
+ engine/abstract3drenderer.cpp engine/abstract3drenderer_p.h
+ engine/axisrendercache.cpp engine/axisrendercache_p.h
+ engine/bars3dcontroller.cpp engine/bars3dcontroller_p.h
+ engine/bars3drenderer.cpp engine/bars3drenderer_p.h
+ engine/barseriesrendercache.cpp engine/barseriesrendercache_p.h
+ engine/drawer.cpp engine/drawer_p.h
+ engine/q3dbars.cpp engine/q3dbars.h engine/q3dbars_p.h
+ engine/q3dcamera.cpp engine/q3dcamera.h engine/q3dcamera_p.h
+ engine/q3dlight.cpp engine/q3dlight.h engine/q3dlight_p.h
+ engine/q3dobject.cpp engine/q3dobject.h engine/q3dobject_p.h
+ engine/q3dscatter.cpp engine/q3dscatter.h engine/q3dscatter_p.h
+ engine/q3dscene.cpp engine/q3dscene.h engine/q3dscene_p.h
+ engine/q3dsurface.cpp engine/q3dsurface.h engine/q3dsurface_p.h
+ engine/qabstract3dgraph.cpp engine/qabstract3dgraph.h engine/qabstract3dgraph_p.h
+ engine/scatter3dcontroller.cpp engine/scatter3dcontroller_p.h
+ engine/scatter3drenderer.cpp engine/scatter3drenderer_p.h
+ engine/scatterseriesrendercache.cpp engine/scatterseriesrendercache_p.h
+ engine/selectionpointer.cpp engine/selectionpointer_p.h
+ engine/seriesrendercache.cpp engine/seriesrendercache_p.h
+ engine/surface3dcontroller.cpp engine/surface3dcontroller_p.h
+ engine/surface3drenderer.cpp engine/surface3drenderer_p.h
+ engine/surfaceseriesrendercache.cpp engine/surfaceseriesrendercache_p.h
+ global/datavisualizationglobal_p.h
+ global/qdatavisualizationglobal.h
+ input/q3dinputhandler.cpp input/q3dinputhandler.h input/q3dinputhandler_p.h
+ input/qabstract3dinputhandler.cpp input/qabstract3dinputhandler.h input/qabstract3dinputhandler_p.h
+ input/qtouch3dinputhandler.cpp input/qtouch3dinputhandler.h input/qtouch3dinputhandler_p.h
+ theme/q3dtheme.cpp theme/q3dtheme.h theme/q3dtheme_p.h
+ theme/thememanager.cpp theme/thememanager_p.h
+ utils/abstractobjecthelper.cpp utils/abstractobjecthelper_p.h
+ utils/camerahelper.cpp utils/camerahelper_p.h
+ utils/meshloader.cpp utils/meshloader_p.h
+ utils/objecthelper.cpp utils/objecthelper_p.h
+ utils/qutils.h
+ utils/scatterobjectbufferhelper.cpp utils/scatterobjectbufferhelper_p.h
+ utils/scatterpointbufferhelper.cpp utils/scatterpointbufferhelper_p.h
+ utils/shaderhelper.cpp utils/shaderhelper_p.h
+ utils/surfaceobject.cpp utils/surfaceobject_p.h
+ utils/texturehelper.cpp utils/texturehelper_p.h
+ utils/utils.cpp utils/utils_p.h
+ utils/vertexindexer.cpp utils/vertexindexer_p.h
+ NO_PCH_SOURCES
+ # undef QT_NO_FOREACH:
+ engine/abstract3dcontroller.cpp
+ engine/abstract3drenderer.cpp
+ engine/axisrendercache.cpp
+ engine/bars3dcontroller.cpp
+ engine/bars3drenderer.cpp
+ engine/q3dscatter.cpp
+ engine/q3dsurface.cpp
+ engine/scatter3dcontroller.cpp
+ engine/scatter3drenderer.cpp
+ engine/surface3dcontroller.cpp
+ engine/surface3drenderer.cpp
+ # end undef QT_NO_FOREACH
+ INCLUDE_DIRECTORIES
+ axis
+ data
+ engine
+ global
+ input
+ theme
+ utils
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ GENERATE_CPP_EXPORTS
+)
+
+set_source_files_properties("engine/meshes/arrowFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "arrow"
+)
+set_source_files_properties("engine/meshes/arrowSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "arrowSmooth"
+)
+set_source_files_properties("engine/meshes/background.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "background"
+)
+set_source_files_properties("engine/meshes/backgroundNoFloor.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "backgroundNoFloor"
+)
+set_source_files_properties("engine/meshes/barFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "bevelbarFull"
+)
+set_source_files_properties("engine/meshes/barFilledSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "bevelbarSmoothFull"
+)
+set_source_files_properties("engine/meshes/barFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "bevelbar"
+)
+set_source_files_properties("engine/meshes/barSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "bevelbarSmooth"
+)
+set_source_files_properties("engine/meshes/coneFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "coneFull"
+)
+set_source_files_properties("engine/meshes/coneFilledSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "coneSmoothFull"
+)
+set_source_files_properties("engine/meshes/coneFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "cone"
+)
+set_source_files_properties("engine/meshes/coneSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "coneSmooth"
+)
+set_source_files_properties("engine/meshes/cubeFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "barFull"
+)
+set_source_files_properties("engine/meshes/cubeFilledSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "barSmoothFull"
+)
+set_source_files_properties("engine/meshes/cubeFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "bar"
+)
+set_source_files_properties("engine/meshes/cubeSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "barSmooth"
+)
+set_source_files_properties("engine/meshes/cylinderFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "cylinderFull"
+)
+set_source_files_properties("engine/meshes/cylinderFilledSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "cylinderSmoothFull"
+)
+set_source_files_properties("engine/meshes/cylinderFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "cylinder"
+)
+set_source_files_properties("engine/meshes/cylinderSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "cylinderSmooth"
+)
+set_source_files_properties("engine/meshes/minimalFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "minimal"
+)
+set_source_files_properties("engine/meshes/minimalSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "minimalSmooth"
+)
+set_source_files_properties("engine/meshes/plane.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "plane"
+)
+set_source_files_properties("engine/meshes/pyramidFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "pyramidFull"
+)
+set_source_files_properties("engine/meshes/pyramidFilledSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "pyramidSmoothFull"
+)
+set_source_files_properties("engine/meshes/pyramidFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "pyramid"
+)
+set_source_files_properties("engine/meshes/pyramidSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "pyramidSmooth"
+)
+set_source_files_properties("engine/meshes/sphere.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "sphere"
+)
+set_source_files_properties("engine/meshes/sphereSmooth.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "sphereSmooth"
+)
+set(mesh_resource_files
+ "engine/meshes/arrowFlat.obj"
+ "engine/meshes/arrowSmooth.obj"
+ "engine/meshes/background.obj"
+ "engine/meshes/backgroundNoFloor.obj"
+ "engine/meshes/barFilledFlat.obj"
+ "engine/meshes/barFilledSmooth.obj"
+ "engine/meshes/barFlat.obj"
+ "engine/meshes/barSmooth.obj"
+ "engine/meshes/coneFilledFlat.obj"
+ "engine/meshes/coneFilledSmooth.obj"
+ "engine/meshes/coneFlat.obj"
+ "engine/meshes/coneSmooth.obj"
+ "engine/meshes/cubeFilledFlat.obj"
+ "engine/meshes/cubeFilledSmooth.obj"
+ "engine/meshes/cubeFlat.obj"
+ "engine/meshes/cubeSmooth.obj"
+ "engine/meshes/cylinderFilledFlat.obj"
+ "engine/meshes/cylinderFilledSmooth.obj"
+ "engine/meshes/cylinderFlat.obj"
+ "engine/meshes/cylinderSmooth.obj"
+ "engine/meshes/minimalFlat.obj"
+ "engine/meshes/minimalSmooth.obj"
+ "engine/meshes/plane.obj"
+ "engine/meshes/pyramidFilledFlat.obj"
+ "engine/meshes/pyramidFilledSmooth.obj"
+ "engine/meshes/pyramidFlat.obj"
+ "engine/meshes/pyramidSmooth.obj"
+ "engine/meshes/sphere.obj"
+ "engine/meshes/sphereSmooth.obj"
+)
+
+set_source_files_properties("engine/shaders/3dsliceframes.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragment3DSliceFrames"
+)
+set_source_files_properties("engine/shaders/colorOnY.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentColorOnY"
+)
+set_source_files_properties("engine/shaders/colorOnY_ES2.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentColorOnYES2"
+)
+set_source_files_properties("engine/shaders/default.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragment"
+)
+set_source_files_properties("engine/shaders/default.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertex"
+)
+set_source_files_properties("engine/shaders/defaultNoMatrices.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexNoMatrices"
+)
+set_source_files_properties("engine/shaders/default_ES2.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentES2"
+)
+set_source_files_properties("engine/shaders/depth.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentDepth"
+)
+set_source_files_properties("engine/shaders/depth.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexDepth"
+)
+set_source_files_properties("engine/shaders/label.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentLabel"
+)
+set_source_files_properties("engine/shaders/label.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexLabel"
+)
+set_source_files_properties("engine/shaders/plainColor.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentPlainColor"
+)
+set_source_files_properties("engine/shaders/plainColor.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexPlainColor"
+)
+set_source_files_properties("engine/shaders/point_ES2.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexPointES2"
+)
+set_source_files_properties("engine/shaders/point_ES2_UV.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexPointES2_UV"
+)
+set_source_files_properties("engine/shaders/position.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexPosition"
+)
+set_source_files_properties("engine/shaders/positionmap.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentPositionMap"
+)
+set_source_files_properties("engine/shaders/shadow.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentShadow"
+)
+set_source_files_properties("engine/shaders/shadow.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexShadow"
+)
+set_source_files_properties("engine/shaders/shadowNoMatrices.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexShadowNoMatrices"
+)
+set_source_files_properties("engine/shaders/shadowNoTex.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentShadowNoTex"
+)
+set_source_files_properties("engine/shaders/shadowNoTexColorOnY.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentShadowNoTexColorOnY"
+)
+set_source_files_properties("engine/shaders/surface.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurface"
+)
+set_source_files_properties("engine/shaders/surfaceFlat.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurfaceFlat"
+)
+set_source_files_properties("engine/shaders/surfaceFlat.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexSurfaceFlat"
+)
+set_source_files_properties("engine/shaders/surfaceShadowFlat.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurfaceShadowFlat"
+)
+set_source_files_properties("engine/shaders/surfaceShadowFlat.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexSurfaceShadowFlat"
+)
+set_source_files_properties("engine/shaders/surfaceShadowNoTex.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurfaceShadowNoTex"
+)
+set_source_files_properties("engine/shaders/surfaceTexturedFlat.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurfaceTexturedFlat"
+)
+set_source_files_properties("engine/shaders/surfaceTexturedShadow.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexturedSurfaceShadow"
+)
+set_source_files_properties("engine/shaders/surfaceTexturedShadowFlat.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexturedSurfaceShadowFlat"
+)
+set_source_files_properties("engine/shaders/surface_ES2.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentSurfaceES2"
+)
+set_source_files_properties("engine/shaders/texture.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexture"
+)
+set_source_files_properties("engine/shaders/texture.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexTexture"
+)
+set_source_files_properties("engine/shaders/texture3d.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexture3D"
+)
+set_source_files_properties("engine/shaders/texture3d.vert"
+ PROPERTIES QT_RESOURCE_ALIAS "vertexTexture3D"
+)
+set_source_files_properties("engine/shaders/texture3dlowdef.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexture3DLowDef"
+)
+set_source_files_properties("engine/shaders/texture3dslice.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTexture3DSlice"
+)
+set_source_files_properties("engine/shaders/texture_ES2.frag"
+ PROPERTIES QT_RESOURCE_ALIAS "fragmentTextureES2"
+)
+set(shader_resource_files
+ "engine/shaders/3dsliceframes.frag"
+ "engine/shaders/colorOnY.frag"
+ "engine/shaders/colorOnY_ES2.frag"
+ "engine/shaders/default.frag"
+ "engine/shaders/default.vert"
+ "engine/shaders/defaultNoMatrices.vert"
+ "engine/shaders/default_ES2.frag"
+ "engine/shaders/depth.frag"
+ "engine/shaders/depth.vert"
+ "engine/shaders/label.frag"
+ "engine/shaders/label.vert"
+ "engine/shaders/plainColor.frag"
+ "engine/shaders/plainColor.vert"
+ "engine/shaders/point_ES2.vert"
+ "engine/shaders/point_ES2_UV.vert"
+ "engine/shaders/position.vert"
+ "engine/shaders/positionmap.frag"
+ "engine/shaders/shadow.frag"
+ "engine/shaders/shadow.vert"
+ "engine/shaders/shadowNoMatrices.vert"
+ "engine/shaders/shadowNoTex.frag"
+ "engine/shaders/shadowNoTexColorOnY.frag"
+ "engine/shaders/surface.frag"
+ "engine/shaders/surfaceFlat.frag"
+ "engine/shaders/surfaceFlat.vert"
+ "engine/shaders/surfaceShadowFlat.frag"
+ "engine/shaders/surfaceShadowFlat.vert"
+ "engine/shaders/surfaceShadowNoTex.frag"
+ "engine/shaders/surfaceTexturedFlat.frag"
+ "engine/shaders/surfaceTexturedShadow.frag"
+ "engine/shaders/surfaceTexturedShadowFlat.frag"
+ "engine/shaders/surface_ES2.frag"
+ "engine/shaders/texture.frag"
+ "engine/shaders/texture.vert"
+ "engine/shaders/texture3d.frag"
+ "engine/shaders/texture3d.vert"
+ "engine/shaders/texture3dlowdef.frag"
+ "engine/shaders/texture3dslice.frag"
+ "engine/shaders/texture_ES2.frag"
+)
+
+qt_internal_add_resource(DataVisualization "datavisualizationshaders"
+ PREFIX
+ "/shaders"
+ BASE
+ "engine/shaders"
+ FILES
+ ${shader_resource_files}
+)
+
+qt_internal_add_resource(DataVisualization "datavisualizationmeshes"
+ PREFIX
+ "/defaultMeshes"
+ BASE
+ "engine/meshes"
+ FILES
+ ${mesh_resource_files}
+)
+
+qt_internal_extend_target(DataVisualization CONDITION MACOS
+ LIBRARIES
+ Qt::GuiPrivate
+ PUBLIC_LIBRARIES
+ Qt::Gui
+ PRIVATE_MODULE_INTERFACE
+ Qt::GuiPrivate
+)
+
+qt_internal_extend_target(DataVisualization CONDITION MINGW
+ NO_UNITY_BUILD_SOURCES
+ data/qbardataitem.cpp
+ data/qscatterdataitem.cpp
+ data/qsurfacedataitem.cpp
+ # MinGW triggers `-Werror=maybe-uninitialized` on d_ptr while
+ # proper checks are in place and d_ptr is initialized in
+ # operator=()
+)
+
+qt_internal_add_docs(DataVisualization
+ doc/qtdatavis3d.qdocconf
+)
+
diff --git a/src/datavisualization/axis/axis.pri b/src/datavisualization/axis/axis.pri
deleted file mode 100644
index 4c142c91..00000000
--- a/src/datavisualization/axis/axis.pri
+++ /dev/null
@@ -1,20 +0,0 @@
-HEADERS += \
- $$PWD/qabstract3daxis.h \
- $$PWD/qabstract3daxis_p.h \
- $$PWD/qvalue3daxis.h \
- $$PWD/qvalue3daxis_p.h \
- $$PWD/qcategory3daxis.h \
- $$PWD/qcategory3daxis_p.h \
- $$PWD/qvalue3daxisformatter.h \
- $$PWD/qvalue3daxisformatter_p.h \
- $$PWD/qlogvalue3daxisformatter.h \
- $$PWD/qlogvalue3daxisformatter_p.h
-
-SOURCES += \
- $$PWD/qabstract3daxis.cpp \
- $$PWD/qvalue3daxis.cpp \
- $$PWD/qcategory3daxis.cpp \
- $$PWD/qvalue3daxisformatter.cpp \
- $$PWD/qlogvalue3daxisformatter.cpp
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/axis/qabstract3daxis.cpp b/src/datavisualization/axis/qabstract3daxis.cpp
index 56b87c98..62bbb2a3 100644
--- a/src/datavisualization/axis/qabstract3daxis.cpp
+++ b/src/datavisualization/axis/qabstract3daxis.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qabstract3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QAbstract3DAxis
@@ -574,4 +548,4 @@ void QAbstract3DAxisPrivate::setMax(float max)
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/axis/qabstract3daxis.h b/src/datavisualization/axis/qabstract3daxis.h
index fca8810e..3449397f 100644
--- a/src/datavisualization/axis/qabstract3daxis.h
+++ b/src/datavisualization/axis/qabstract3daxis.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QABSTRACT3DAXIS_H
#define QABSTRACT3DAXIS_H
@@ -35,11 +9,11 @@
#include <QtCore/QScopedPointer>
#include <QtCore/QStringList>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DAxisPrivate;
-class QT_DATAVISUALIZATION_EXPORT QAbstract3DAxis : public QObject
+class Q_DATAVISUALIZATION_EXPORT QAbstract3DAxis : public QObject
{
Q_OBJECT
Q_ENUMS(AxisOrientation)
@@ -51,9 +25,9 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DAxis : public QObject
Q_PROPERTY(float min READ min WRITE setMin NOTIFY minChanged)
Q_PROPERTY(float max READ max WRITE setMax NOTIFY maxChanged)
Q_PROPERTY(bool autoAdjustRange READ isAutoAdjustRange WRITE setAutoAdjustRange NOTIFY autoAdjustRangeChanged)
- Q_PROPERTY(float labelAutoRotation READ labelAutoRotation WRITE setLabelAutoRotation NOTIFY labelAutoRotationChanged REVISION 1)
- Q_PROPERTY(bool titleVisible READ isTitleVisible WRITE setTitleVisible NOTIFY titleVisibilityChanged REVISION 1)
- Q_PROPERTY(bool titleFixed READ isTitleFixed WRITE setTitleFixed NOTIFY titleFixedChanged REVISION 1)
+ Q_PROPERTY(float labelAutoRotation READ labelAutoRotation WRITE setLabelAutoRotation NOTIFY labelAutoRotationChanged REVISION(1, 1))
+ Q_PROPERTY(bool titleVisible READ isTitleVisible WRITE setTitleVisible NOTIFY titleVisibilityChanged REVISION(1, 1))
+ Q_PROPERTY(bool titleFixed READ isTitleFixed WRITE setTitleFixed NOTIFY titleFixedChanged REVISION(1, 1))
public:
enum AxisOrientation {
@@ -112,9 +86,9 @@ Q_SIGNALS:
void maxChanged(float value);
void rangeChanged(float min, float max);
void autoAdjustRangeChanged(bool autoAdjust);
- Q_REVISION(1) void labelAutoRotationChanged(float angle);
- Q_REVISION(1) void titleVisibilityChanged(bool visible);
- Q_REVISION(1) void titleFixedChanged(bool fixed);
+ Q_REVISION(1, 1) void labelAutoRotationChanged(float angle);
+ Q_REVISION(1, 1) void titleVisibilityChanged(bool visible);
+ Q_REVISION(1, 1) void titleFixedChanged(bool fixed);
protected:
QScopedPointer<QAbstract3DAxisPrivate> d_ptr;
@@ -128,6 +102,6 @@ private:
friend class QSurfaceDataProxyPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qabstract3daxis_p.h b/src/datavisualization/axis/qabstract3daxis_p.h
index 418fa449..4b258edf 100644
--- a/src/datavisualization/axis/qabstract3daxis_p.h
+++ b/src/datavisualization/axis/qabstract3daxis_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qabstract3daxis.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DAxisPrivate : public QObject
{
@@ -88,6 +62,6 @@ protected:
friend class QSurfaceDataProxyPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qcategory3daxis.cpp b/src/datavisualization/axis/qcategory3daxis.cpp
index 17bfe490..a8cdec4d 100644
--- a/src/datavisualization/axis/qcategory3daxis.cpp
+++ b/src/datavisualization/axis/qcategory3daxis.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qcategory3daxis_p.h"
#include "bars3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QCategory3DAxis
@@ -171,4 +145,4 @@ QCategory3DAxis *QCategory3DAxisPrivate::qptr()
return static_cast<QCategory3DAxis *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/axis/qcategory3daxis.h b/src/datavisualization/axis/qcategory3daxis.h
index f1bffa17..5497c39b 100644
--- a/src/datavisualization/axis/qcategory3daxis.h
+++ b/src/datavisualization/axis/qcategory3daxis.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QCATEGORY3DAXIS_H
#define QCATEGORY3DAXIS_H
#include <QtDataVisualization/qabstract3daxis.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCategory3DAxisPrivate;
-class QT_DATAVISUALIZATION_EXPORT QCategory3DAxis : public QAbstract3DAxis
+class Q_DATAVISUALIZATION_EXPORT QCategory3DAxis : public QAbstract3DAxis
{
Q_OBJECT
Q_PROPERTY(QStringList labels READ labels WRITE setLabels NOTIFY labelsChanged)
@@ -59,6 +33,6 @@ private:
friend class Bars3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qcategory3daxis_p.h b/src/datavisualization/axis/qcategory3daxis_p.h
index 2b2f2bd9..c717af96 100644
--- a/src/datavisualization/axis/qcategory3daxis_p.h
+++ b/src/datavisualization/axis/qcategory3daxis_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qcategory3daxis.h"
#include "qabstract3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCategory3DAxisPrivate : public QAbstract3DAxisPrivate
{
@@ -56,9 +30,9 @@ public:
void setDataLabels(const QStringList &labels);
protected:
- virtual bool allowZero();
- virtual bool allowNegatives();
- virtual bool allowMinMaxSame();
+ bool allowZero() override;
+ bool allowNegatives() override;
+ bool allowMinMaxSame() override;
private:
QCategory3DAxis *qptr();
@@ -67,6 +41,6 @@ private:
friend class QCategory3DAxis;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qlogvalue3daxisformatter.cpp b/src/datavisualization/axis/qlogvalue3daxisformatter.cpp
index 77ea37c1..adb485ce 100644
--- a/src/datavisualization/axis/qlogvalue3daxisformatter.cpp
+++ b/src/datavisualization/axis/qlogvalue3daxisformatter.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qlogvalue3daxisformatter_p.h"
#include "qvalue3daxis_p.h"
#include <QtCore/qmath.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QLogValue3DAxisFormatter
@@ -452,4 +426,4 @@ QLogValue3DAxisFormatter *QLogValue3DAxisFormatterPrivate::qptr()
return static_cast<QLogValue3DAxisFormatter *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/axis/qlogvalue3daxisformatter.h b/src/datavisualization/axis/qlogvalue3daxisformatter.h
index b8b5a6a7..1f4fc70a 100644
--- a/src/datavisualization/axis/qlogvalue3daxisformatter.h
+++ b/src/datavisualization/axis/qlogvalue3daxisformatter.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QLOGVALUE3DAXISFORMATTER_H
#define QLOGVALUE3DAXISFORMATTER_H
#include <QtDataVisualization/qvalue3daxisformatter.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QLogValue3DAxisFormatterPrivate;
-class QT_DATAVISUALIZATION_EXPORT QLogValue3DAxisFormatter : public QValue3DAxisFormatter
+class Q_DATAVISUALIZATION_EXPORT QLogValue3DAxisFormatter : public QValue3DAxisFormatter
{
Q_OBJECT
@@ -63,11 +37,11 @@ Q_SIGNALS:
void showEdgeLabelsChanged(bool enabled);
protected:
- virtual QValue3DAxisFormatter *createNewInstance() const;
- virtual void recalculate();
- virtual float positionAt(float value) const;
- virtual float valueAt(float position) const;
- virtual void populateCopy(QValue3DAxisFormatter &copy) const;
+ QValue3DAxisFormatter *createNewInstance() const override;
+ void recalculate() override;
+ float positionAt(float value) const override;
+ float valueAt(float position) const override;
+ void populateCopy(QValue3DAxisFormatter &copy) const override;
QLogValue3DAxisFormatterPrivate *dptr();
const QLogValue3DAxisFormatterPrivate *dptrc() const;
@@ -78,6 +52,6 @@ private:
friend class QLogValue3DAxisFormatterPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qlogvalue3daxisformatter_p.h b/src/datavisualization/axis/qlogvalue3daxisformatter_p.h
index 65b7844c..b1a28be5 100644
--- a/src/datavisualization/axis/qlogvalue3daxisformatter_p.h
+++ b/src/datavisualization/axis/qlogvalue3daxisformatter_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "qlogvalue3daxisformatter.h"
#include "qvalue3daxisformatter_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QLogValue3DAxisFormatterPrivate : public QValue3DAxisFormatterPrivate
{
@@ -77,6 +51,6 @@ private:
friend class QLogValue3DAxisFormatter;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qvalue3daxis.cpp b/src/datavisualization/axis/qvalue3daxis.cpp
index f0a72ed4..1358c92b 100644
--- a/src/datavisualization/axis/qvalue3daxis.cpp
+++ b/src/datavisualization/axis/qvalue3daxis.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qvalue3daxis_p.h"
#include "qvalue3daxisformatter_p.h"
#include "abstract3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QValue3DAxis
@@ -375,4 +349,4 @@ QValue3DAxis *QValue3DAxisPrivate::qptr()
return static_cast<QValue3DAxis *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/axis/qvalue3daxis.h b/src/datavisualization/axis/qvalue3daxis.h
index 9cb28f70..87662847 100644
--- a/src/datavisualization/axis/qvalue3daxis.h
+++ b/src/datavisualization/axis/qvalue3daxis.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QVALUE3DAXIS_H
#define QVALUE3DAXIS_H
@@ -33,18 +7,18 @@
#include <QtDataVisualization/qabstract3daxis.h>
#include <QtDataVisualization/qvalue3daxisformatter.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QValue3DAxisPrivate;
-class QT_DATAVISUALIZATION_EXPORT QValue3DAxis : public QAbstract3DAxis
+class Q_DATAVISUALIZATION_EXPORT QValue3DAxis : public QAbstract3DAxis
{
Q_OBJECT
Q_PROPERTY(int segmentCount READ segmentCount WRITE setSegmentCount NOTIFY segmentCountChanged)
Q_PROPERTY(int subSegmentCount READ subSegmentCount WRITE setSubSegmentCount NOTIFY subSegmentCountChanged)
Q_PROPERTY(QString labelFormat READ labelFormat WRITE setLabelFormat NOTIFY labelFormatChanged)
- Q_PROPERTY(QValue3DAxisFormatter* formatter READ formatter WRITE setFormatter NOTIFY formatterChanged REVISION 1)
- Q_PROPERTY(bool reversed READ reversed WRITE setReversed NOTIFY reversedChanged REVISION 1)
+ Q_PROPERTY(QValue3DAxisFormatter* formatter READ formatter WRITE setFormatter NOTIFY formatterChanged REVISION(1, 1))
+ Q_PROPERTY(bool reversed READ reversed WRITE setReversed NOTIFY reversedChanged REVISION(1, 1))
public:
explicit QValue3DAxis(QObject *parent = nullptr);
@@ -69,8 +43,8 @@ Q_SIGNALS:
void segmentCountChanged(int count);
void subSegmentCountChanged(int count);
void labelFormatChanged(const QString &format);
- Q_REVISION(1) void formatterChanged(QValue3DAxisFormatter *formatter);
- Q_REVISION(1) void reversedChanged(bool enable);
+ Q_REVISION(1, 1) void formatterChanged(QValue3DAxisFormatter *formatter);
+ Q_REVISION(1, 1) void reversedChanged(bool enable);
protected:
QValue3DAxisPrivate *dptr();
@@ -85,6 +59,6 @@ private:
friend class QValue3DAxisFormatterPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qvalue3daxis_p.h b/src/datavisualization/axis/qvalue3daxis_p.h
index 277ffef4..ab9095e3 100644
--- a/src/datavisualization/axis/qvalue3daxis_p.h
+++ b/src/datavisualization/axis/qvalue3daxis_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qvalue3daxis.h"
#include "qabstract3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QValue3DAxisPrivate : public QAbstract3DAxisPrivate
{
@@ -53,9 +27,9 @@ public:
QValue3DAxisPrivate(QValue3DAxis *q);
virtual ~QValue3DAxisPrivate();
- virtual void setRange(float min, float max, bool suppressWarnings = false);
- virtual void setMin(float min);
- virtual void setMax (float max);
+ void setRange(float min, float max, bool suppressWarnings = false) override;
+ void setMin(float min) override;
+ void setMax (float max) override;
void emitLabelsChanged();
@@ -63,11 +37,11 @@ Q_SIGNALS:
void formatterDirty();
protected:
- virtual void updateLabels();
+ void updateLabels() override;
- virtual bool allowZero();
- virtual bool allowNegatives();
- virtual bool allowMinMaxSame();
+ bool allowZero() override;
+ bool allowNegatives() override;
+ bool allowMinMaxSame() override;
int m_segmentCount;
int m_subSegmentCount;
@@ -83,6 +57,6 @@ private:
friend class Abstract3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qvalue3daxisformatter.cpp b/src/datavisualization/axis/qvalue3daxisformatter.cpp
index 68a73a1d..db210059 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter.cpp
+++ b/src/datavisualization/axis/qvalue3daxisformatter.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qvalue3daxisformatter_p.h"
#include "qvalue3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QValue3DAxisFormatter
@@ -468,4 +442,4 @@ void QValue3DAxisFormatterPrivate::markDirtyNoLabelChange()
markDirty(false);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/axis/qvalue3daxisformatter.h b/src/datavisualization/axis/qvalue3daxisformatter.h
index e4efd14e..e55483ce 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter.h
+++ b/src/datavisualization/axis/qvalue3daxisformatter.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QVALUE3DAXISFORMATTER_H
#define QVALUE3DAXISFORMATTER_H
@@ -37,12 +11,12 @@
#include <QtCore/QScopedPointer>
#include <QtCore/QStringList>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QValue3DAxisFormatterPrivate;
class QValue3DAxis;
-class QT_DATAVISUALIZATION_EXPORT QValue3DAxisFormatter : public QObject
+class Q_DATAVISUALIZATION_EXPORT QValue3DAxisFormatter : public QObject
{
Q_OBJECT
protected:
@@ -96,6 +70,6 @@ private:
friend class QSurface3DSeriesPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/axis/qvalue3daxisformatter_p.h b/src/datavisualization/axis/qvalue3daxisformatter_p.h
index d6abdb1b..301d6014 100644
--- a/src/datavisualization/axis/qvalue3daxisformatter_p.h
+++ b/src/datavisualization/axis/qvalue3daxisformatter_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,7 +19,7 @@
#include "utils_p.h"
#include <QtCore/QLocale>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QValue3DAxis;
@@ -105,6 +79,6 @@ protected:
friend class QValue3DAxisFormatter;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/configure.cmake b/src/datavisualization/configure.cmake
new file mode 100644
index 00000000..a7d05099
--- /dev/null
+++ b/src/datavisualization/configure.cmake
@@ -0,0 +1,7 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_extra_definition("QT_VERSION_STR" "\"${PROJECT_VERSION}\"" PUBLIC)
+qt_extra_definition("QT_VERSION_MAJOR" ${PROJECT_VERSION_MAJOR} PUBLIC)
+qt_extra_definition("QT_VERSION_MINOR" ${PROJECT_VERSION_MINOR} PUBLIC)
+qt_extra_definition("QT_VERSION_PATCH" ${PROJECT_VERSION_PATCH} PUBLIC)
diff --git a/src/datavisualization/data/abstractitemmodelhandler.cpp b/src/datavisualization/data/abstractitemmodelhandler.cpp
index 703a337f..99d983be 100644
--- a/src/datavisualization/data/abstractitemmodelhandler.cpp
+++ b/src/datavisualization/data/abstractitemmodelhandler.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "abstractitemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
AbstractItemModelHandler::AbstractItemModelHandler(QObject *parent)
: QObject(parent),
@@ -237,4 +211,4 @@ void AbstractItemModelHandler::handlePendingResolve()
m_fullReset = false;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/abstractitemmodelhandler_p.h b/src/datavisualization/data/abstractitemmodelhandler_p.h
index 62a78103..64e61838 100644
--- a/src/datavisualization/data/abstractitemmodelhandler_p.h
+++ b/src/datavisualization/data/abstractitemmodelhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,7 +19,7 @@
#include <QtCore/QPointer>
#include <QtCore/QTimer>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class AbstractItemModelHandler : public QObject
{
@@ -91,6 +65,8 @@ private:
Q_DISABLE_COPY(AbstractItemModelHandler)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+static constexpr int noRoleIndex = -1;
+
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/abstractrenderitem.cpp b/src/datavisualization/data/abstractrenderitem.cpp
index 8a932e3f..e3811fd1 100644
--- a/src/datavisualization/data/abstractrenderitem.cpp
+++ b/src/datavisualization/data/abstractrenderitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "abstractrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
AbstractRenderItem::AbstractRenderItem()
{
@@ -45,4 +19,4 @@ AbstractRenderItem::~AbstractRenderItem()
{
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/abstractrenderitem_p.h b/src/datavisualization/data/abstractrenderitem_p.h
index 28755d61..765e0ba7 100644
--- a/src/datavisualization/data/abstractrenderitem_p.h
+++ b/src/datavisualization/data/abstractrenderitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,19 +14,20 @@
#ifndef ABSTRACTRENDERITEM_P_H
#define ABSTRACTRENDERITEM_P_H
-#include "datavisualizationglobal_p.h"
-#include "labelitem_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/labelitem_p.h>
#include <QtGui/QVector3D>
#include <QtGui/QQuaternion>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class AbstractRenderItem
{
public:
AbstractRenderItem();
AbstractRenderItem(const AbstractRenderItem &other);
+ AbstractRenderItem &operator=(const AbstractRenderItem &other) = default;
virtual ~AbstractRenderItem();
// Position in 3D scene
@@ -75,6 +50,6 @@ protected:
friend class QAbstractDataItem;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/baritemmodelhandler.cpp b/src/datavisualization/data/baritemmodelhandler.cpp
index 5a2d92cd..4a8c8faa 100644
--- a/src/datavisualization/data/baritemmodelhandler.cpp
+++ b/src/datavisualization/data/baritemmodelhandler.cpp
@@ -1,37 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "baritemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-static const int noRoleIndex = -1;
+QT_BEGIN_NAMESPACE
BarItemModelHandler::BarItemModelHandler(QItemModelBarDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
@@ -108,18 +80,18 @@ void BarItemModelHandler::resolveModel()
// Value and rotation patterns can be reused on single item changes,
// so store them to member variables.
- QRegExp rowPattern(m_proxy->rowRolePattern());
- QRegExp colPattern(m_proxy->columnRolePattern());
+ QRegularExpression rowPattern(m_proxy->rowRolePattern());
+ QRegularExpression colPattern(m_proxy->columnRolePattern());
m_valuePattern = m_proxy->valueRolePattern();
m_rotationPattern = m_proxy->rotationRolePattern();
QString rowReplace = m_proxy->rowRoleReplace();
QString colReplace = m_proxy->columnRoleReplace();
m_valueReplace = m_proxy->valueRoleReplace();
m_rotationReplace = m_proxy->rotationRoleReplace();
- bool haveRowPattern = !rowPattern.isEmpty() && rowPattern.isValid();
- bool haveColPattern = !colPattern.isEmpty() && colPattern.isValid();
- m_haveValuePattern = !m_valuePattern.isEmpty() && m_valuePattern.isValid();
- m_haveRotationPattern = !m_rotationPattern.isEmpty() && m_rotationPattern.isValid();
+ bool haveRowPattern = !rowPattern.namedCaptureGroups().isEmpty() && rowPattern.isValid();
+ bool haveColPattern = !colPattern.namedCaptureGroups().isEmpty() && colPattern.isValid();
+ m_haveValuePattern = !m_valuePattern.namedCaptureGroups().isEmpty() && m_valuePattern.isValid();
+ m_haveRotationPattern = !m_rotationPattern.namedCaptureGroups().isEmpty() && m_rotationPattern.isValid();
QStringList rowLabels;
QStringList columnLabels;
@@ -299,4 +271,4 @@ void BarItemModelHandler::resolveModel()
m_proxy->resetArray(m_proxyArray, rowLabels, columnLabels);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/baritemmodelhandler_p.h b/src/datavisualization/data/baritemmodelhandler_p.h
index 20126bcc..98e0d51b 100644
--- a/src/datavisualization/data/baritemmodelhandler_p.h
+++ b/src/datavisualization/data/baritemmodelhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "abstractitemmodelhandler_p.h"
#include "qitemmodelbardataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class BarItemModelHandler : public AbstractItemModelHandler
{
@@ -53,25 +27,25 @@ public:
virtual ~BarItemModelHandler();
public Q_SLOTS:
- virtual void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
- const QList<int> &roles = QList<int>());
+ void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
+ const QList<int> &roles = QList<int>()) override;
protected:
- void virtual resolveModel();
+ void resolveModel() override;
QItemModelBarDataProxy *m_proxy; // Not owned
QBarDataArray *m_proxyArray; // Not owned
int m_columnCount;
int m_valueRole;
int m_rotationRole;
- QRegExp m_valuePattern;
- QRegExp m_rotationPattern;
+ QRegularExpression m_valuePattern;
+ QRegularExpression m_rotationPattern;
QString m_valueReplace;
QString m_rotationReplace;
bool m_haveValuePattern;
bool m_haveRotationPattern;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/barrenderitem.cpp b/src/datavisualization/data/barrenderitem.cpp
index 23e3f13c..43d2de5a 100644
--- a/src/datavisualization/data/barrenderitem.cpp
+++ b/src/datavisualization/data/barrenderitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "barrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
BarRenderItem::BarRenderItem()
: AbstractRenderItem(),
@@ -99,4 +73,4 @@ const QString &BarRenderSliceItem::sliceLabel() const
return m_sliceLabel;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/barrenderitem_p.h b/src/datavisualization/data/barrenderitem_p.h
index 29147722..a83d07e6 100644
--- a/src/datavisualization/data/barrenderitem_p.h
+++ b/src/datavisualization/data/barrenderitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -42,13 +16,14 @@
#include "abstractrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class BarRenderItem : public AbstractRenderItem
{
public:
BarRenderItem();
BarRenderItem(const BarRenderItem &other);
+ BarRenderItem &operator=(const BarRenderItem &) = default;
virtual ~BarRenderItem();
// Position relative to data window (for bar label generation)
@@ -76,6 +51,7 @@ class BarRenderSliceItem : public BarRenderItem
public:
BarRenderSliceItem();
BarRenderSliceItem(const BarRenderSliceItem &other);
+ BarRenderSliceItem &operator=(const BarRenderSliceItem &other) = default;
virtual ~BarRenderSliceItem();
void setItem(const BarRenderItem &renderItem);
@@ -96,6 +72,6 @@ protected:
typedef QList<BarRenderItem> BarRenderItemRow;
typedef QList<BarRenderItemRow> BarRenderItemArray;
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/customrenderitem.cpp b/src/datavisualization/data/customrenderitem.cpp
index ac998fba..9873bcf5 100644
--- a/src/datavisualization/data/customrenderitem.cpp
+++ b/src/datavisualization/data/customrenderitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "customrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
CustomRenderItem::CustomRenderItem()
: AbstractRenderItem(),
@@ -68,9 +42,10 @@ CustomRenderItem::~CustomRenderItem()
ObjectHelper::releaseObjectHelper(m_renderer, m_object);
}
-void CustomRenderItem::setMesh(const QString &meshFile)
+bool CustomRenderItem::setMesh(const QString &meshFile)
{
ObjectHelper::resetObjectHelper(m_renderer, m_object, meshFile);
+ return m_object ? true : false;
}
void CustomRenderItem::setColorTable(const QList<QRgb> &colors)
@@ -116,4 +91,4 @@ void CustomRenderItem::setSliceFrameColor(const QColor &color)
float(1.0f)); // Alpha not supported for frames
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/customrenderitem_p.h b/src/datavisualization/data/customrenderitem_p.h
index 3ee423cb..abc62247 100644
--- a/src/datavisualization/data/customrenderitem_p.h
+++ b/src/datavisualization/data/customrenderitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -46,7 +20,7 @@
#include <QtGui/QImage>
#include <QtGui/QColor>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCustom3DItem;
class Abstract3DRenderer;
@@ -59,7 +33,7 @@ public:
inline void setTexture(GLuint texture) { m_texture = texture; }
inline GLuint texture() const { return m_texture; }
- void setMesh(const QString &meshFile);
+ bool setMesh(const QString &meshFile);
inline ObjectHelper *mesh() const { return m_object; }
inline void setScaling(const QVector3D &scaling) { m_scaling = scaling; }
inline const QVector3D &scaling() const { return m_scaling; }
@@ -198,6 +172,6 @@ private:
};
typedef QHash<QCustom3DItem *, CustomRenderItem *> CustomRenderItemArray;
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/data.pri b/src/datavisualization/data/data.pri
deleted file mode 100644
index e2bbd6eb..00000000
--- a/src/datavisualization/data/data.pri
+++ /dev/null
@@ -1,77 +0,0 @@
-HEADERS += \
- $$PWD/labelitem_p.h \
- $$PWD/qabstractdataproxy.h \
- $$PWD/qabstractdataproxy_p.h \
- $$PWD/qbardataproxy.h \
- $$PWD/qbardataproxy_p.h \
- $$PWD/abstractrenderitem_p.h \
- $$PWD/barrenderitem_p.h \
- $$PWD/qbardataitem.h \
- $$PWD/qbardataitem_p.h \
- $$PWD/qitemmodelbardataproxy_p.h \
- $$PWD/qitemmodelbardataproxy.h \
- $$PWD/scatterrenderitem_p.h \
- $$PWD/qscatterdataitem.h \
- $$PWD/qscatterdataitem_p.h \
- $$PWD/qscatterdataproxy.h \
- $$PWD/qscatterdataproxy_p.h \
- $$PWD/qitemmodelscatterdataproxy.h \
- $$PWD/qitemmodelscatterdataproxy_p.h \
- $$PWD/abstractitemmodelhandler_p.h \
- $$PWD/baritemmodelhandler_p.h \
- $$PWD/scatteritemmodelhandler_p.h \
- $$PWD/qsurfacedataproxy.h \
- $$PWD/qsurfacedataproxy_p.h \
- $$PWD/qheightmapsurfacedataproxy.h \
- $$PWD/qheightmapsurfacedataproxy_p.h \
- $$PWD/qitemmodelsurfacedataproxy.h \
- $$PWD/qitemmodelsurfacedataproxy_p.h \
- $$PWD/surfaceitemmodelhandler_p.h \
- $$PWD/qsurfacedataitem.h \
- $$PWD/qsurfacedataitem_p.h \
- $$PWD/qabstract3dseries.h \
- $$PWD/qabstract3dseries_p.h \
- $$PWD/qbar3dseries.h \
- $$PWD/qbar3dseries_p.h \
- $$PWD/qscatter3dseries.h \
- $$PWD/qscatter3dseries_p.h \
- $$PWD/qsurface3dseries.h \
- $$PWD/qsurface3dseries_p.h \
- $$PWD/customrenderitem_p.h \
- $$PWD/qcustom3ditem.h \
- $$PWD/qcustom3ditem_p.h \
- $$PWD/qcustom3dlabel.h \
- $$PWD/qcustom3dlabel_p.h \
- $$PWD/qcustom3dvolume.h \
- $$PWD/qcustom3dvolume_p.h
-
-SOURCES += \
- $$PWD/labelitem.cpp \
- $$PWD/qabstractdataproxy.cpp \
- $$PWD/qbardataproxy.cpp \
- $$PWD/abstractrenderitem.cpp \
- $$PWD/barrenderitem.cpp \
- $$PWD/qbardataitem.cpp \
- $$PWD/qitemmodelbardataproxy.cpp \
- $$PWD/scatterrenderitem.cpp \
- $$PWD/qscatterdataitem.cpp \
- $$PWD/qscatterdataproxy.cpp \
- $$PWD/qitemmodelscatterdataproxy.cpp \
- $$PWD/abstractitemmodelhandler.cpp \
- $$PWD/baritemmodelhandler.cpp \
- $$PWD/scatteritemmodelhandler.cpp \
- $$PWD/qsurfacedataproxy.cpp \
- $$PWD/qheightmapsurfacedataproxy.cpp \
- $$PWD/qitemmodelsurfacedataproxy.cpp \
- $$PWD/surfaceitemmodelhandler.cpp \
- $$PWD/qsurfacedataitem.cpp \
- $$PWD/qabstract3dseries.cpp \
- $$PWD/qbar3dseries.cpp \
- $$PWD/qscatter3dseries.cpp \
- $$PWD/qsurface3dseries.cpp \
- $$PWD/customrenderitem.cpp \
- $$PWD/qcustom3ditem.cpp \
- $$PWD/qcustom3dlabel.cpp \
- $$PWD/qcustom3dvolume.cpp
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/data/labelitem.cpp b/src/datavisualization/data/labelitem.cpp
index 9fa2e6b5..f8e1600b 100644
--- a/src/datavisualization/data/labelitem.cpp
+++ b/src/datavisualization/data/labelitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "labelitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
LabelItem::LabelItem()
: m_size(QSize(0, 0)),
@@ -71,4 +45,4 @@ void LabelItem::clear()
m_size = QSize(0, 0);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/labelitem_p.h b/src/datavisualization/data/labelitem_p.h
index 788dffde..760cdbfa 100644
--- a/src/datavisualization/data/labelitem_p.h
+++ b/src/datavisualization/data/labelitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef LABELITEM_P_H
#define LABELITEM_P_H
-#include "datavisualizationglobal_p.h"
+#include <private/datavisualizationglobal_p.h>
#include <QtCore/QSize>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class LabelItem
{
@@ -64,6 +38,6 @@ private:
GLuint m_textureId;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
index 42579f62..0a8613c0 100644
--- a/src/datavisualization/data/qabstract3dseries.cpp
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qabstract3dseries_p.h"
#include "qabstractdataproxy_p.h"
#include "abstract3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QAbstract3DSeries
@@ -903,4 +877,4 @@ void QAbstract3DSeriesPrivate::setItemLabelVisible(bool visible)
m_changeTracker.itemLabelVisibilityChanged = true;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h
index 80cb52c3..781eabc5 100644
--- a/src/datavisualization/data/qabstract3dseries.h
+++ b/src/datavisualization/data/qabstract3dseries.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QABSTRACT3DSERIES_H
#define QABSTRACT3DSERIES_H
@@ -37,11 +11,11 @@
#include <QtGui/QLinearGradient>
#include <QtGui/QQuaternion>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DSeriesPrivate;
-class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
+class Q_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
{
Q_OBJECT
Q_ENUMS(SeriesType)
@@ -53,7 +27,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
Q_PROPERTY(bool meshSmooth READ isMeshSmooth WRITE setMeshSmooth NOTIFY meshSmoothChanged)
Q_PROPERTY(QQuaternion meshRotation READ meshRotation WRITE setMeshRotation NOTIFY meshRotationChanged)
Q_PROPERTY(QString userDefinedMesh READ userDefinedMesh WRITE setUserDefinedMesh NOTIFY userDefinedMeshChanged)
- Q_PROPERTY(QtDataVisualization::Q3DTheme::ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
+ Q_PROPERTY(Q3DTheme::ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
Q_PROPERTY(QColor baseColor READ baseColor WRITE setBaseColor NOTIFY baseColorChanged)
Q_PROPERTY(QLinearGradient baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged)
Q_PROPERTY(QColor singleHighlightColor READ singleHighlightColor WRITE setSingleHighlightColor NOTIFY singleHighlightColorChanged)
@@ -61,8 +35,8 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
Q_PROPERTY(QColor multiHighlightColor READ multiHighlightColor WRITE setMultiHighlightColor NOTIFY multiHighlightColorChanged)
Q_PROPERTY(QLinearGradient multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QString itemLabel READ itemLabel NOTIFY itemLabelChanged REVISION 1)
- Q_PROPERTY(bool itemLabelVisible READ isItemLabelVisible WRITE setItemLabelVisible NOTIFY itemLabelVisibilityChanged REVISION 1)
+ Q_PROPERTY(QString itemLabel READ itemLabel NOTIFY itemLabelChanged REVISION(1, 1))
+ Q_PROPERTY(bool itemLabelVisible READ isItemLabelVisible WRITE setItemLabelVisible NOTIFY itemLabelVisibilityChanged REVISION(1, 1))
public:
enum SeriesType {
@@ -151,8 +125,8 @@ Q_SIGNALS:
void multiHighlightColorChanged(const QColor &color);
void multiHighlightGradientChanged(const QLinearGradient &gradient);
void nameChanged(const QString &name);
- Q_REVISION(1) void itemLabelChanged(const QString &label);
- Q_REVISION(1) void itemLabelVisibilityChanged(bool visible);
+ Q_REVISION(1, 1) void itemLabelChanged(const QString &label);
+ Q_REVISION(1, 1) void itemLabelVisibilityChanged(bool visible);
protected:
QScopedPointer<QAbstract3DSeriesPrivate> d_ptr;
@@ -171,6 +145,6 @@ private:
friend class Abstract3DRenderer;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
index 0762386f..f5c2a95f 100644
--- a/src/datavisualization/data/qabstract3dseries_p.h
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qabstract3dseries.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstractDataProxy;
class Abstract3DController;
@@ -168,6 +142,6 @@ public:
bool m_itemLabelVisible;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qabstractdataproxy.cpp b/src/datavisualization/data/qabstractdataproxy.cpp
index a9703e02..3d80f101 100644
--- a/src/datavisualization/data/qabstractdataproxy.cpp
+++ b/src/datavisualization/data/qabstractdataproxy.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qabstractdataproxy_p.h"
#include "qabstract3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QAbstractDataProxy
@@ -126,4 +100,4 @@ void QAbstractDataProxyPrivate::setSeries(QAbstract3DSeries *series)
m_series = series;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstractdataproxy.h b/src/datavisualization/data/qabstractdataproxy.h
index d0260684..4cf68ea1 100644
--- a/src/datavisualization/data/qabstractdataproxy.h
+++ b/src/datavisualization/data/qabstractdataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QABSTRACTDATAPROXY_H
#define QABSTRACTDATAPROXY_H
@@ -34,11 +8,11 @@
#include <QtCore/QObject>
#include <QtCore/QScopedPointer>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstractDataProxyPrivate;
-class QT_DATAVISUALIZATION_EXPORT QAbstractDataProxy : public QObject
+class Q_DATAVISUALIZATION_EXPORT QAbstractDataProxy : public QObject
{
Q_OBJECT
Q_ENUMS(DataType)
@@ -69,6 +43,6 @@ private:
friend class QAbstract3DSeriesPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qabstractdataproxy_p.h b/src/datavisualization/data/qabstractdataproxy_p.h
index abe1f4ce..ceb3c30c 100644
--- a/src/datavisualization/data/qabstractdataproxy_p.h
+++ b/src/datavisualization/data/qabstractdataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qabstractdataproxy.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DSeries;
@@ -66,6 +40,6 @@ private:
friend class QAbstractDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
index 54b973e8..770bf831 100644
--- a/src/datavisualization/data/qbar3dseries.cpp
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qbar3dseries_p.h"
#include "bars3dcontroller_p.h"
#include <QtCore/qmath.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QBar3DSeries
@@ -147,6 +121,18 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*/
/*!
+ * \qmlproperty list<ThemeColor> Bar3DSeries::rowColors
+ * \since 6.3
+ * This property can be used to draw the rows of the series in different colors.
+ * The \l{Theme3D::colorStyle}{Theme3D.colorStyle} must be set to
+ * \c ColorStyleUniform to use this property.
+ * \note If the property is set and the theme is changed,
+ * the rowColors list is not cleared automatically.
+ *
+ * \sa Q3DTheme::ColorStyleUniform
+ */
+
+/*!
* Constructsa bar 3D series with the parent \a parent.
*/
QBar3DSeries::QBar3DSeries(QObject *parent) :
@@ -282,6 +268,27 @@ float QBar3DSeries::meshAngle() const
}
/*!
+ * \property QBar3DSeries::rowColors
+ * \since 6.3
+ *
+ * \brief The list of row colors in the series.
+ *
+ * This property can be used to color
+ * the rows of the series in different colors.
+ * The Q3DTheme::ColorStyle must be set to
+ * Q3DTheme::ColorStyleUniform to use this property.
+ *
+ * \sa Q3DTheme::ColorStyleUniform
+ */
+void QBar3DSeries::setRowColors(const QList<QColor> &colors)
+{
+ dptr()->setRowColors(colors);
+}
+QList<QColor> QBar3DSeries::rowColors() const
+{
+ return dptrc()->m_rowColors;
+}
+/*!
* \internal
*/
QBar3DSeriesPrivate *QBar3DSeries::dptr()
@@ -355,6 +362,8 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon
&Bars3DController::handleDataColumnLabelsChanged);
QObject::connect(qptr(), &QBar3DSeries::dataProxyChanged, controller,
&Bars3DController::handleArrayReset);
+ QObject::connect(qptr(), &QBar3DSeries::rowColorsChanged, controller,
+ &Bars3DController::handleRowColorsChanged);
}
}
@@ -432,4 +441,12 @@ void QBar3DSeriesPrivate::connectSignals()
&QBar3DSeriesPrivate::handleMeshRotationChanged);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+void QBar3DSeriesPrivate::setRowColors(const QList<QColor> &colors)
+{
+ if (m_rowColors != colors) {
+ m_rowColors = colors;
+ emit qptr()->rowColorsChanged(m_rowColors);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h
index 07a98ad5..0ca508e7 100644
--- a/src/datavisualization/data/qbar3dseries.h
+++ b/src/datavisualization/data/qbar3dseries.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QBAR3DSERIES_H
#define QBAR3DSERIES_H
@@ -34,16 +8,17 @@
#include <QtDataVisualization/qbardataproxy.h>
#include <QtCore/QPoint>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBar3DSeriesPrivate;
-class QT_DATAVISUALIZATION_EXPORT QBar3DSeries : public QAbstract3DSeries
+class Q_DATAVISUALIZATION_EXPORT QBar3DSeries : public QAbstract3DSeries
{
Q_OBJECT
Q_PROPERTY(QBarDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
Q_PROPERTY(QPoint selectedBar READ selectedBar WRITE setSelectedBar NOTIFY selectedBarChanged)
Q_PROPERTY(float meshAngle READ meshAngle WRITE setMeshAngle NOTIFY meshAngleChanged)
+ Q_PROPERTY(QList<QColor> rowColors READ rowColors WRITE setRowColors NOTIFY rowColorsChanged REVISION(6, 3))
public:
explicit QBar3DSeries(QObject *parent = nullptr);
@@ -60,10 +35,14 @@ public:
void setMeshAngle(float angle);
float meshAngle() const;
+ QList<QColor> rowColors() const;
+ void setRowColors(const QList<QColor> &colors);
+
Q_SIGNALS:
void dataProxyChanged(QBarDataProxy *proxy);
void selectedBarChanged(const QPoint &position);
void meshAngleChanged(float angle);
+ Q_REVISION(6, 3) void rowColorsChanged(const QList<QColor> &rowcolors);
protected:
QBar3DSeriesPrivate *dptr();
@@ -75,6 +54,6 @@ private:
friend class Bars3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbar3dseries_p.h b/src/datavisualization/data/qbar3dseries_p.h
index ba11a739..acf31c25 100644
--- a/src/datavisualization/data/qbar3dseries_p.h
+++ b/src/datavisualization/data/qbar3dseries_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qbar3dseries.h"
#include "qabstract3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBar3DSeriesPrivate : public QAbstract3DSeriesPrivate
{
@@ -52,9 +26,9 @@ public:
QBar3DSeriesPrivate(QBar3DSeries *q);
virtual ~QBar3DSeriesPrivate();
- virtual void setDataProxy(QAbstractDataProxy *proxy);
- virtual void connectControllerAndProxy(Abstract3DController *newController);
- virtual void createItemLabel();
+ void setDataProxy(QAbstractDataProxy *proxy) override;
+ void connectControllerAndProxy(Abstract3DController *newController) override;
+ void createItemLabel() override;
void handleMeshRotationChanged(const QQuaternion &rotation);
@@ -62,15 +36,19 @@ public:
void connectSignals();
+ void setRowColors(const QList<QColor> &colors);
+
private:
QBar3DSeries *qptr();
QPoint m_selectedBar;
+ QList<QColor> m_rowColors;
+
private:
friend class QBar3DSeries;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbardataitem.cpp b/src/datavisualization/data/qbardataitem.cpp
index 5827cf42..7406a6b8 100644
--- a/src/datavisualization/data/qbardataitem.cpp
+++ b/src/datavisualization/data/qbardataitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qbardataitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QBarDataItem
@@ -140,4 +114,4 @@ QBarDataItemPrivate::~QBarDataItemPrivate()
{
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qbardataitem.h b/src/datavisualization/data/qbardataitem.h
index a8eef517..0e1a271e 100644
--- a/src/datavisualization/data/qbardataitem.h
+++ b/src/datavisualization/data/qbardataitem.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QBARDATAITEM_H
#define QBARDATAITEM_H
#include <QtDataVisualization/qdatavisualizationglobal.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBarDataItemPrivate;
-class QT_DATAVISUALIZATION_EXPORT QBarDataItem
+class Q_DATAVISUALIZATION_EXPORT QBarDataItem
{
public:
QBarDataItem();
@@ -62,6 +36,6 @@ private:
float m_angle;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbardataitem_p.h b/src/datavisualization/data/qbardataitem_p.h
index 11dad9bf..45d1a3eb 100644
--- a/src/datavisualization/data/qbardataitem_p.h
+++ b/src/datavisualization/data/qbardataitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qbardataitem.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBarDataItemPrivate
{
@@ -52,6 +26,6 @@ public:
virtual ~QBarDataItemPrivate();
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbardataproxy.cpp b/src/datavisualization/data/qbardataproxy.cpp
index c5d33535..49cda8cd 100644
--- a/src/datavisualization/data/qbardataproxy.cpp
+++ b/src/datavisualization/data/qbardataproxy.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qbardataproxy_p.h"
#include "qbar3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QBarDataProxy
@@ -787,4 +761,4 @@ void QBarDataProxyPrivate::setSeries(QAbstract3DSeries *series)
emit qptr()->seriesChanged(barSeries);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qbardataproxy.h b/src/datavisualization/data/qbardataproxy.h
index 155e5794..34a540b0 100644
--- a/src/datavisualization/data/qbardataproxy.h
+++ b/src/datavisualization/data/qbardataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QBARDATAPROXY_H
#define QBARDATAPROXY_H
@@ -37,7 +11,7 @@
Q_MOC_INCLUDE(<QtDataVisualization/qbar3dseries.h>)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBarDataProxyPrivate;
class QBar3DSeries;
@@ -45,7 +19,7 @@ class QBar3DSeries;
typedef QList<QBarDataItem> QBarDataRow;
typedef QList<QBarDataRow *> QBarDataArray;
-class QT_DATAVISUALIZATION_EXPORT QBarDataProxy : public QAbstractDataProxy
+class Q_DATAVISUALIZATION_EXPORT QBarDataProxy : public QAbstractDataProxy
{
Q_OBJECT
@@ -119,6 +93,6 @@ private:
friend class Bars3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qbardataproxy_p.h b/src/datavisualization/data/qbardataproxy_p.h
index 04d9dc1d..08898c42 100644
--- a/src/datavisualization/data/qbardataproxy_p.h
+++ b/src/datavisualization/data/qbardataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qbardataproxy.h"
#include "qabstractdataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QBarDataProxyPrivate : public QAbstractDataProxyPrivate
{
@@ -66,7 +40,7 @@ public:
QPair<GLfloat, GLfloat> limitValues(int startRow, int startColumn, int rowCount,
int columnCount) const;
- virtual void setSeries(QAbstract3DSeries *series);
+ void setSeries(QAbstract3DSeries *series) override;
private:
QBarDataProxy *qptr();
@@ -82,6 +56,6 @@ private:
friend class QBarDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3ditem.cpp b/src/datavisualization/data/qcustom3ditem.cpp
index 11df7750..a657823c 100644
--- a/src/datavisualization/data/qcustom3ditem.cpp
+++ b/src/datavisualization/data/qcustom3ditem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qcustom3ditem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QCustom3DItem
@@ -58,7 +32,9 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
/*! \qmlproperty string Custom3DItem::meshFile
*
* The item mesh file name. The item in the file must be in Wavefront OBJ format and include
- * vertices, normals, and UVs. It also needs to be in triangles.
+ * vertices, normals, and UVs. It also needs to be in triangles. If the file is missing either
+ * normals or UVs, loading will fail with an error message to the console output and the item will
+ * not be rendered.
*/
/*! \qmlproperty string Custom3DItem::textureFile
@@ -203,6 +179,9 @@ QCustom3DItem::~QCustom3DItem()
*
* The item in the file must be in Wavefront OBJ format and include
* vertices, normals, and UVs. It also needs to be in triangles.
+ * If the file is missing either normals or UVs, loading will fail
+ * with an error message to the console output and the item will
+ * not be rendered.
*/
void QCustom3DItem::setMeshFile(const QString &meshFile)
{
@@ -537,4 +516,4 @@ void QCustom3DItemPrivate::resetDirtyBits()
m_dirtyBits.shadowCastingDirty = false;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qcustom3ditem.h b/src/datavisualization/data/qcustom3ditem.h
index 0fbc1926..52eb3899 100644
--- a/src/datavisualization/data/qcustom3ditem.h
+++ b/src/datavisualization/data/qcustom3ditem.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QCUSTOM3DITEM_H
#define QCUSTOM3DITEM_H
@@ -34,12 +8,13 @@
#include <QtGui/QImage>
#include <QtGui/QVector3D>
#include <QtGui/QQuaternion>
+#include <QtCore/QObject>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCustom3DItemPrivate;
-class QT_DATAVISUALIZATION_EXPORT QCustom3DItem : public QObject
+class Q_DATAVISUALIZATION_EXPORT QCustom3DItem : public QObject
{
Q_OBJECT
Q_PROPERTY(QString meshFile READ meshFile WRITE setMeshFile NOTIFY meshFileChanged)
@@ -50,7 +25,7 @@ class QT_DATAVISUALIZATION_EXPORT QCustom3DItem : public QObject
Q_PROPERTY(QQuaternion rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
Q_PROPERTY(bool shadowCasting READ isShadowCasting WRITE setShadowCasting NOTIFY shadowCastingChanged)
- Q_PROPERTY(bool scalingAbsolute READ isScalingAbsolute WRITE setScalingAbsolute NOTIFY scalingAbsoluteChanged REVISION 1)
+ Q_PROPERTY(bool scalingAbsolute READ isScalingAbsolute WRITE setScalingAbsolute NOTIFY scalingAbsoluteChanged REVISION(1, 2))
public:
explicit QCustom3DItem(QObject *parent = nullptr);
@@ -99,7 +74,7 @@ Q_SIGNALS:
void rotationChanged(const QQuaternion &rotation);
void visibleChanged(bool visible);
void shadowCastingChanged(bool shadowCasting);
- Q_REVISION(1) void scalingAbsoluteChanged(bool scalingAbsolute);
+ Q_REVISION(1, 2) void scalingAbsoluteChanged(bool scalingAbsolute);
protected:
QCustom3DItem(QCustom3DItemPrivate *d, QObject *parent = nullptr);
@@ -113,6 +88,6 @@ private:
friend class Abstract3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3ditem_p.h b/src/datavisualization/data/qcustom3ditem_p.h
index d99db35a..75d0f5d3 100644
--- a/src/datavisualization/data/qcustom3ditem_p.h
+++ b/src/datavisualization/data/qcustom3ditem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qcustom3ditem.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
struct QCustomItemDirtyBitField {
bool textureDirty : 1;
@@ -106,6 +80,6 @@ private:
friend class QCustom3DItem;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3dlabel.cpp b/src/datavisualization/data/qcustom3dlabel.cpp
index 5cc0a0e4..4a440ab9 100644
--- a/src/datavisualization/data/qcustom3dlabel.cpp
+++ b/src/datavisualization/data/qcustom3dlabel.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qcustom3dlabel_p.h"
#include "utils_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QCustom3DLabel
@@ -382,4 +356,4 @@ void QCustom3DLabelPrivate::handleTextureChange()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qcustom3dlabel.h b/src/datavisualization/data/qcustom3dlabel.h
index fdfcb9f9..3ee72e04 100644
--- a/src/datavisualization/data/qcustom3dlabel.h
+++ b/src/datavisualization/data/qcustom3dlabel.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QCUSTOMLABELITEM_H
#define QCUSTOMLABELITEM_H
@@ -37,11 +11,11 @@
#include <QtGui/QFont>
#include <QtGui/QColor>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCustom3DLabelPrivate;
-class QT_DATAVISUALIZATION_EXPORT QCustom3DLabel : public QCustom3DItem
+class Q_DATAVISUALIZATION_EXPORT QCustom3DLabel : public QCustom3DItem
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
@@ -99,6 +73,6 @@ private:
friend class Abstract3DRenderer;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3dlabel_p.h b/src/datavisualization/data/qcustom3dlabel_p.h
index c0608ec4..7637974c 100644
--- a/src/datavisualization/data/qcustom3dlabel_p.h
+++ b/src/datavisualization/data/qcustom3dlabel_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qcustom3dlabel.h"
#include "qcustom3ditem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCustom3DLabelPrivate : public QCustom3DItemPrivate
{
@@ -79,6 +53,6 @@ private:
friend class QCustom3DLabel;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3dvolume.cpp b/src/datavisualization/data/qcustom3dvolume.cpp
index 8f524c2b..3357bf43 100644
--- a/src/datavisualization/data/qcustom3dvolume.cpp
+++ b/src/datavisualization/data/qcustom3dvolume.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qcustom3dvolume_p.h"
#include "utils_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QCustom3DVolume
@@ -1338,4 +1312,4 @@ QCustom3DVolume *QCustom3DVolumePrivate::qptr()
return static_cast<QCustom3DVolume *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qcustom3dvolume.h b/src/datavisualization/data/qcustom3dvolume.h
index 6967c608..764cebac 100644
--- a/src/datavisualization/data/qcustom3dvolume.h
+++ b/src/datavisualization/data/qcustom3dvolume.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QCUSTOM3DVOLUME_H
#define QCUSTOM3DVOLUME_H
@@ -35,11 +9,11 @@
#include <QtGui/QColor>
#include <QtGui/QImage>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QCustom3DVolumePrivate;
-class QT_DATAVISUALIZATION_EXPORT QCustom3DVolume : public QCustom3DItem
+class Q_DATAVISUALIZATION_EXPORT QCustom3DVolume : public QCustom3DItem
{
Q_OBJECT
Q_PROPERTY(int textureWidth READ textureWidth WRITE setTextureWidth NOTIFY textureWidthChanged)
@@ -154,6 +128,6 @@ private:
friend class Abstract3DRenderer;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qcustom3dvolume_p.h b/src/datavisualization/data/qcustom3dvolume_p.h
index e12b706d..0cd785fb 100644
--- a/src/datavisualization/data/qcustom3dvolume_p.h
+++ b/src/datavisualization/data/qcustom3dvolume_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qcustom3dvolume.h"
#include "qcustom3ditem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
struct QCustomVolumeDirtyBitField {
bool textureDimensionsDirty : 1;
@@ -114,6 +88,6 @@ private:
friend class QCustom3DVolume;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qheightmapsurfacedataproxy.cpp b/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
index 1d762f88..4dee6d23 100644
--- a/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qheightmapsurfacedataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
// Default ranges correspond value axis defaults
const float defaultMinValue = 0.0f;
@@ -127,6 +101,32 @@ const float defaultMaxValue = 10.0f;
*/
/*!
+ * \qmlproperty real HeightMapSurfaceDataProxy::minYValue
+ * \since 6.3
+ *
+ * The minimum Y value for the generated surface points. Defaults to \c{0.0}.
+ * When setting this property the corresponding maximum value is adjusted if necessary,
+ * to ensure that the range remains valid.
+ */
+
+/*!
+ * \qmlproperty real HeightMapSurfaceDataProxy::maxYValue
+ * \since 6.3
+ *
+ * The maximum Y value for the generated surface points. Defaults to \c{10.0}.
+ * When setting this property the corresponding minimum value is adjusted if necessary,
+ * to ensure that the range remains valid.
+ */
+
+/*!
+ * \qmlproperty real HeightMapSurfaceDataProxy::autoScaleY
+ * \since 6.3
+ *
+ * Scale height values to Y-axis. Defaults to \c{false}. When this property is set to \c{true},
+ * the height values are scaled to fit on the Y-axis between \c{minYValue} and \c{maxYValue}.
+ */
+
+/*!
* Constructs QHeightMapSurfaceDataProxy with the given \a parent.
*/
QHeightMapSurfaceDataProxy::QHeightMapSurfaceDataProxy(QObject *parent) :
@@ -328,6 +328,75 @@ float QHeightMapSurfaceDataProxy::maxZValue() const
}
/*!
+ * \property QHeightMapSurfaceDataProxy::minYValue
+ * \since 6.3
+ *
+ * \brief The minimum Y value for the generated surface points.
+ *
+ * Defaults to \c{0.0}.
+ *
+ * When setting this property the corresponding maximum value is adjusted if necessary,
+ * to ensure that the range remains valid.
+ *
+ * \sa autoScaleY
+ */
+void QHeightMapSurfaceDataProxy::setMinYValue(float min)
+{
+ dptr()->setMinYValue(min);
+}
+
+float QHeightMapSurfaceDataProxy::minYValue() const
+{
+ return dptrc()->m_minYValue;
+}
+
+/*!
+ * \property QHeightMapSurfaceDataProxy::maxYValue
+ * \since 6.3
+ *
+ * \brief The maximum Y value for the generated surface points.
+ *
+ * Defaults to \c{10.0}.
+ *
+ * When setting this property the corresponding minimum value is adjusted if necessary,
+ * to ensure that the range remains valid.
+ *
+ * \sa autoScaleY
+ */
+void QHeightMapSurfaceDataProxy::setMaxYValue(float max)
+{
+ dptr()->setMaxYValue(max);
+}
+
+float QHeightMapSurfaceDataProxy::maxYValue() const
+{
+ return dptrc()->m_maxYValue;
+}
+
+/*!
+ * \property QHeightMapSurfaceDataProxy::autoScaleY
+ * \since 6.3
+ *
+ * \brief Scale height values to Y-axis.
+ *
+ * Defaults to \c{false}.
+ *
+ * When this property is set to \c{true},
+ * the height values are scaled to fit on the Y-axis between minYValue and maxYValue.
+ *
+ * \sa minYValue, maxYValue
+ */
+void QHeightMapSurfaceDataProxy::setAutoScaleY(bool enabled)
+{
+ dptr()->setAutoScaleY(enabled);
+}
+
+bool QHeightMapSurfaceDataProxy::autoScaleY() const
+{
+ return dptrc()->m_autoScaleY;
+}
+
+/*!
* \internal
*/
QHeightMapSurfaceDataProxyPrivate *QHeightMapSurfaceDataProxy::dptr()
@@ -350,7 +419,10 @@ QHeightMapSurfaceDataProxyPrivate::QHeightMapSurfaceDataProxyPrivate(QHeightMapS
m_minXValue(defaultMinValue),
m_maxXValue(defaultMaxValue),
m_minZValue(defaultMinValue),
- m_maxZValue(defaultMaxValue)
+ m_maxZValue(defaultMaxValue),
+ m_minYValue(defaultMinValue),
+ m_maxYValue(defaultMaxValue),
+ m_autoScaleY(false)
{
m_resolveTimer.setSingleShot(true);
QObject::connect(&m_resolveTimer, &QTimer::timeout,
@@ -505,20 +577,89 @@ void QHeightMapSurfaceDataProxyPrivate::setMaxZValue(float max)
}
}
+void QHeightMapSurfaceDataProxyPrivate::setMinYValue(float min)
+{
+ if (m_minYValue != min) {
+ bool maxChanged = false;
+ if (min >= m_maxYValue) {
+ float oldMax = m_maxYValue;
+ m_maxYValue = min + 1.0f;
+ qWarning() << "Warning: Tried to set minimum Y to equal or larger than maximum Y for"
+ " value range. Maximum automatically adjusted to a valid one:"
+ << oldMax << "-->" << m_maxYValue;
+ maxChanged = true;
+ }
+ m_minYValue = min;
+ emit qptr()->minYValueChanged(m_minYValue);
+ if (maxChanged)
+ emit qptr()->maxYValueChanged(m_maxYValue);
+
+ if (!m_resolveTimer.isActive())
+ m_resolveTimer.start(0);
+ }
+}
+
+void QHeightMapSurfaceDataProxyPrivate::setMaxYValue(float max)
+{
+ if (m_maxYValue != max) {
+ bool minChanged = false;
+ if (max <= m_minYValue) {
+ float oldMin = m_minYValue;
+ m_minYValue = max - 1.0f;
+ qWarning() << "Warning: Tried to set maximum Y to equal or smaller than minimum Y for"
+ " value range. Minimum automatically adjusted to a valid one:"
+ << oldMin << "-->" << m_minYValue;
+ minChanged = true;
+ }
+ m_maxYValue = max;
+ emit qptr()->maxYValueChanged(m_maxYValue);
+ if (minChanged)
+ emit qptr()->minYValueChanged(m_minYValue);
+
+ if (!m_resolveTimer.isActive())
+ m_resolveTimer.start(0);
+ }
+}
+
+void QHeightMapSurfaceDataProxyPrivate::setAutoScaleY(bool enabled)
+{
+ if (enabled != m_autoScaleY) {
+ m_autoScaleY = enabled;
+ emit qptr()->autoScaleYChanged(m_autoScaleY);
+
+ if (!m_resolveTimer.isActive())
+ m_resolveTimer.start(0);
+ }
+}
+
void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
{
QImage heightImage = m_heightMap;
+ int bytesInChannel = 1;
+ float yMul = 1.0f / UINT8_MAX;
+
+ bool is16bit = (heightImage.format() == QImage::Format_RGBX64
+ || heightImage.format() == QImage::Format_RGBA64
+ || heightImage.format() == QImage::Format_RGBA64_Premultiplied
+ || heightImage.format() == QImage::Format_Grayscale16);
// Convert to RGB32 to be sure we're reading the right bytes
- if (heightImage.format() != QImage::Format_RGB32)
+ if (is16bit) {
+ if (heightImage.format() != QImage::Format_RGBX64)
+ heightImage = heightImage.convertToFormat(QImage::Format_RGBX64);
+
+ bytesInChannel = 2;
+ yMul = 1.0f / UINT16_MAX;
+ } else if (heightImage.format() != QImage::Format_RGB32) {
heightImage = heightImage.convertToFormat(QImage::Format_RGB32);
+ }
uchar *bits = heightImage.bits();
int imageHeight = heightImage.height();
int imageWidth = heightImage.width();
- int bitCount = imageWidth * 4 * (imageHeight - 1);
- int widthBits = imageWidth * 4;
+ int bitCount = imageWidth * 4 * (imageHeight - 1) * bytesInChannel;
+ int widthBits = imageWidth * 4 * bytesInChannel;
float height = 0;
// Do not recreate array if dimensions have not changed
@@ -531,7 +672,7 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
dataArray->append(newProxyRow);
}
}
-
+ yMul *= m_maxYValue - m_minYValue;
float xMul = (m_maxXValue - m_minXValue) / float(imageWidth - 1);
float zMul = (m_maxZValue - m_minZValue) / float(imageHeight - 1);
@@ -541,7 +682,6 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
// getting rendered.
int lastRow = imageHeight - 1;
int lastCol = imageWidth - 1;
-
if (heightImage.isGrayscale()) {
// Grayscale, it's enough to read Red byte
for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) {
@@ -552,13 +692,21 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
else
zVal = (float(i) * zMul) + m_minZValue;
int j = 0;
- for (; j < lastCol; j++)
+ float yVal = 0;
+ uchar *pixelptr;
+ for (; j < lastCol; j++) {
+ pixelptr = (uchar *)(bits + bitCount + (j * 4 * bytesInChannel));
+ if (!m_autoScaleY)
+ yVal = *pixelptr;
+ else
+ yVal = float(*pixelptr) * yMul + m_minYValue;
newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue,
- float(bits[bitCount + (j * 4)]),
- zVal));
+ yVal,
+ zVal));
+ }
newRow[j].setPosition(QVector3D(m_maxXValue,
- float(bits[bitCount + (j * 4)]),
- zVal));
+ yVal,
+ zVal));
}
} else {
// Not grayscale, we'll need to calculate height from RGB
@@ -570,22 +718,30 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
else
zVal = (float(i) * zMul) + m_minZValue;
int j = 0;
- int nextpixel = 0;
+ float yVal = 0;
for (; j < lastCol; j++) {
- nextpixel = j * 4;
- height = (float(bits[bitCount + nextpixel])
- + float(bits[1 + bitCount + nextpixel])
- + float(bits[2 + bitCount + nextpixel]));
+ int nextpixel = j * 4 * bytesInChannel;
+ uchar *pixelptr = (uchar *)(bits + bitCount + nextpixel);
+ if (is16bit) {
+ height = float(*((ushort *)pixelptr))
+ + float(*(((ushort *)pixelptr) + 1))
+ + float(*(((ushort *)pixelptr) + 2));
+ } else {
+ height = (float(*pixelptr)
+ + float(*(pixelptr + 1))
+ + float(*(pixelptr + 2)));
+ }
+ if (!m_autoScaleY)
+ yVal = height / 3.0f;
+ else
+ yVal = (height / 3.0f * yMul) + m_minYValue;
+
newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue,
- height / 3.0f,
+ yVal,
zVal));
}
- nextpixel = j * 4;
- height = (float(bits[bitCount + nextpixel])
- + float(bits[1 + bitCount + nextpixel])
- + float(bits[2 + bitCount + nextpixel]));
newRow[j].setPosition(QVector3D(m_maxXValue,
- height / 3.0f,
+ yVal,
zVal));
}
}
@@ -594,4 +750,4 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
emit qptr()->heightMapChanged(m_heightMap);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qheightmapsurfacedataproxy.h b/src/datavisualization/data/qheightmapsurfacedataproxy.h
index 4d815851..c11304f6 100644
--- a/src/datavisualization/data/qheightmapsurfacedataproxy.h
+++ b/src/datavisualization/data/qheightmapsurfacedataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QHEIGHTMAPSURFACEDATAPROXY_H
#define QHEIGHTMAPSURFACEDATAPROXY_H
@@ -34,11 +8,11 @@
#include <QtGui/QImage>
#include <QtCore/QString>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QHeightMapSurfaceDataProxyPrivate;
-class QT_DATAVISUALIZATION_EXPORT QHeightMapSurfaceDataProxy : public QSurfaceDataProxy
+class Q_DATAVISUALIZATION_EXPORT QHeightMapSurfaceDataProxy : public QSurfaceDataProxy
{
Q_OBJECT
@@ -48,6 +22,9 @@ class QT_DATAVISUALIZATION_EXPORT QHeightMapSurfaceDataProxy : public QSurfaceDa
Q_PROPERTY(float maxXValue READ maxXValue WRITE setMaxXValue NOTIFY maxXValueChanged)
Q_PROPERTY(float minZValue READ minZValue WRITE setMinZValue NOTIFY minZValueChanged)
Q_PROPERTY(float maxZValue READ maxZValue WRITE setMaxZValue NOTIFY maxZValueChanged)
+ Q_PROPERTY(float minYValue READ minYValue WRITE setMinYValue NOTIFY minYValueChanged REVISION(6, 3))
+ Q_PROPERTY(float maxYValue READ maxYValue WRITE setMaxYValue NOTIFY maxYValueChanged REVISION(6, 3))
+ Q_PROPERTY(bool autoScaleY READ autoScaleY WRITE setAutoScaleY NOTIFY autoScaleYChanged REVISION(6, 3))
public:
explicit QHeightMapSurfaceDataProxy(QObject *parent = nullptr);
@@ -69,6 +46,12 @@ public:
float minZValue() const;
void setMaxZValue(float max);
float maxZValue() const;
+ void setMinYValue(float min);
+ float minYValue() const;
+ void setMaxYValue(float max);
+ float maxYValue() const;
+ void setAutoScaleY(bool enabled);
+ bool autoScaleY() const;
Q_SIGNALS:
void heightMapChanged(const QImage &image);
@@ -77,6 +60,9 @@ Q_SIGNALS:
void maxXValueChanged(float value);
void minZValueChanged(float value);
void maxZValueChanged(float value);
+ Q_REVISION(6, 3) void minYValueChanged(float value);
+ Q_REVISION(6, 3) void maxYValueChanged(float value);
+ Q_REVISION(6, 3) void autoScaleYChanged(bool enabled);
protected:
explicit QHeightMapSurfaceDataProxy(QHeightMapSurfaceDataProxyPrivate *d, QObject *parent = nullptr);
@@ -89,6 +75,6 @@ private:
friend class Surface3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qheightmapsurfacedataproxy_p.h b/src/datavisualization/data/qheightmapsurfacedataproxy_p.h
index 12219dd3..a6bd613c 100644
--- a/src/datavisualization/data/qheightmapsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qheightmapsurfacedataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "qsurfacedataproxy_p.h"
#include <QtCore/QTimer>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QHeightMapSurfaceDataProxyPrivate : public QSurfaceDataProxyPrivate
{
@@ -59,6 +33,9 @@ public:
void setMaxXValue(float max);
void setMinZValue(float min);
void setMaxZValue(float max);
+ void setMinYValue(float min);
+ void setMaxYValue(float max);
+ void setAutoScaleY(bool enabled);
private:
QHeightMapSurfaceDataProxy *qptr();
void handlePendingResolve();
@@ -71,10 +48,13 @@ private:
float m_maxXValue;
float m_minZValue;
float m_maxZValue;
+ float m_minYValue;
+ float m_maxYValue;
+ bool m_autoScaleY;
friend class QHeightMapSurfaceDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelbardataproxy.cpp b/src/datavisualization/data/qitemmodelbardataproxy.cpp
index f87016e1..74e23cc9 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelbardataproxy.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qitemmodelbardataproxy_p.h"
#include "baritemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QItemModelBarDataProxy
@@ -76,12 +50,12 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* If the fields of the model do not contain the data in the exact format you need, you can specify
* a search pattern regular expression and a replace rule for each role to get the value in a
* format you need. For more information how the replace using regular expressions works, see
- * QString::replace(const QRegExp &rx, const QString &after) function documentation. Note that
+ * QString::replace(const QRegularExpression &rx, const QString &after) function documentation. Note that
* using regular expressions has an impact on the performance, so it's more efficient to utilize
* item models where doing search and replace is not necessary to get the desired values.
*
* For example about using the search patterns in conjunction with the roles, see
- * \l{Qt Quick 2 Bars Example}.
+ * \l{Simple Bar Graph} example.
*
* \sa {Qt Data Visualization Data Handling}
*/
@@ -215,7 +189,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty string ItemModelBarDataProxy::rowRoleReplace
* This property defines the replace content to be used in conjunction with rowRolePattern.
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rowRole, rowRolePattern
@@ -225,7 +199,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty string ItemModelBarDataProxy::columnRoleReplace
* This property defines the replace content to be used in conjunction with columnRolePattern.
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa columnRole, columnRolePattern
@@ -235,7 +209,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty string ItemModelBarDataProxy::valueRoleReplace
* This property defines the replace content to be used in conjunction with valueRolePattern.
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa valueRole, valueRolePattern
@@ -245,7 +219,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty string ItemModelBarDataProxy::rotationRoleReplace
* This property defines the replace content to be used in conjunction with rotationRolePattern.
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rotationRole, rotationRolePattern
@@ -669,7 +643,7 @@ int QItemModelBarDataProxy::columnCategoryIndex(const QString &category)
*
* \sa rowRole, rowRoleReplace
*/
-void QItemModelBarDataProxy::setRowRolePattern(const QRegExp &pattern)
+void QItemModelBarDataProxy::setRowRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_rowRolePattern != pattern) {
dptr()->m_rowRolePattern = pattern;
@@ -677,7 +651,7 @@ void QItemModelBarDataProxy::setRowRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelBarDataProxy::rowRolePattern() const
+QRegularExpression QItemModelBarDataProxy::rowRolePattern() const
{
return dptrc()->m_rowRolePattern;
}
@@ -695,7 +669,7 @@ QRegExp QItemModelBarDataProxy::rowRolePattern() const
*
* \sa columnRole, columnRoleReplace
*/
-void QItemModelBarDataProxy::setColumnRolePattern(const QRegExp &pattern)
+void QItemModelBarDataProxy::setColumnRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_columnRolePattern != pattern) {
dptr()->m_columnRolePattern = pattern;
@@ -703,7 +677,7 @@ void QItemModelBarDataProxy::setColumnRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelBarDataProxy::columnRolePattern() const
+QRegularExpression QItemModelBarDataProxy::columnRolePattern() const
{
return dptrc()->m_columnRolePattern;
}
@@ -719,7 +693,7 @@ QRegExp QItemModelBarDataProxy::columnRolePattern() const
*
* \sa valueRole, valueRoleReplace
*/
-void QItemModelBarDataProxy::setValueRolePattern(const QRegExp &pattern)
+void QItemModelBarDataProxy::setValueRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_valueRolePattern != pattern) {
dptr()->m_valueRolePattern = pattern;
@@ -727,7 +701,7 @@ void QItemModelBarDataProxy::setValueRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelBarDataProxy::valueRolePattern() const
+QRegularExpression QItemModelBarDataProxy::valueRolePattern() const
{
return dptrc()->m_valueRolePattern;
}
@@ -743,7 +717,7 @@ QRegExp QItemModelBarDataProxy::valueRolePattern() const
*
* \sa rotationRole, rotationRoleReplace
*/
-void QItemModelBarDataProxy::setRotationRolePattern(const QRegExp &pattern)
+void QItemModelBarDataProxy::setRotationRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_rotationRolePattern != pattern) {
dptr()->m_rotationRolePattern = pattern;
@@ -751,7 +725,7 @@ void QItemModelBarDataProxy::setRotationRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelBarDataProxy::rotationRolePattern() const
+QRegularExpression QItemModelBarDataProxy::rotationRolePattern() const
{
return dptrc()->m_rotationRolePattern;
}
@@ -762,7 +736,7 @@ QRegExp QItemModelBarDataProxy::rotationRolePattern() const
* \brief The replace content to be used in conjunction with rowRolePattern.
*
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rowRole, rowRolePattern
@@ -786,7 +760,7 @@ QString QItemModelBarDataProxy::rowRoleReplace() const
* \brief The replace content to be used in conjunction with columnRolePattern.
*
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa columnRole, columnRolePattern
@@ -810,7 +784,7 @@ QString QItemModelBarDataProxy::columnRoleReplace() const
* \brief The replace content to be used in conjunction with valueRolePattern.
*
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa valueRole, valueRolePattern
@@ -835,7 +809,7 @@ QString QItemModelBarDataProxy::valueRoleReplace() const
* rotationRolePattern.
*
* Defaults to empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rotationRole, rotationRolePattern
@@ -959,4 +933,4 @@ void QItemModelBarDataProxyPrivate::connectItemModelHandler()
m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelbardataproxy.h b/src/datavisualization/data/qitemmodelbardataproxy.h
index 2dfa0753..1b372a3c 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy.h
+++ b/src/datavisualization/data/qitemmodelbardataproxy.h
@@ -1,44 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QITEMMODELBARDATAPROXY_H
#define QITEMMODELBARDATAPROXY_H
#include <QtDataVisualization/qbardataproxy.h>
#include <QtCore/QAbstractItemModel>
-#include <QtCore/QRegExp>
+#include <QtCore/QRegularExpression>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QItemModelBarDataProxyPrivate;
-class QT_DATAVISUALIZATION_EXPORT QItemModelBarDataProxy : public QBarDataProxy
+class Q_DATAVISUALIZATION_EXPORT QItemModelBarDataProxy : public QBarDataProxy
{
Q_OBJECT
Q_ENUMS(MultiMatchBehavior)
@@ -52,15 +26,15 @@ class QT_DATAVISUALIZATION_EXPORT QItemModelBarDataProxy : public QBarDataProxy
Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories NOTIFY useModelCategoriesChanged)
Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories NOTIFY autoRowCategoriesChanged)
Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories NOTIFY autoColumnCategoriesChanged)
- Q_PROPERTY(QRegExp rowRolePattern READ rowRolePattern WRITE setRowRolePattern NOTIFY rowRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp columnRolePattern READ columnRolePattern WRITE setColumnRolePattern NOTIFY columnRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp valueRolePattern READ valueRolePattern WRITE setValueRolePattern NOTIFY valueRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp rotationRolePattern READ rotationRolePattern WRITE setRotationRolePattern NOTIFY rotationRolePatternChanged REVISION 1)
- Q_PROPERTY(QString rowRoleReplace READ rowRoleReplace WRITE setRowRoleReplace NOTIFY rowRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString columnRoleReplace READ columnRoleReplace WRITE setColumnRoleReplace NOTIFY columnRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString valueRoleReplace READ valueRoleReplace WRITE setValueRoleReplace NOTIFY valueRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString rotationRoleReplace READ rotationRoleReplace WRITE setRotationRoleReplace NOTIFY rotationRoleReplaceChanged REVISION 1)
- Q_PROPERTY(MultiMatchBehavior multiMatchBehavior READ multiMatchBehavior WRITE setMultiMatchBehavior NOTIFY multiMatchBehaviorChanged REVISION 1)
+ Q_PROPERTY(QRegularExpression rowRolePattern READ rowRolePattern WRITE setRowRolePattern NOTIFY rowRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression columnRolePattern READ columnRolePattern WRITE setColumnRolePattern NOTIFY columnRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression valueRolePattern READ valueRolePattern WRITE setValueRolePattern NOTIFY valueRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression rotationRolePattern READ rotationRolePattern WRITE setRotationRolePattern NOTIFY rotationRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QString rowRoleReplace READ rowRoleReplace WRITE setRowRoleReplace NOTIFY rowRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString columnRoleReplace READ columnRoleReplace WRITE setColumnRoleReplace NOTIFY columnRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString valueRoleReplace READ valueRoleReplace WRITE setValueRoleReplace NOTIFY valueRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString rotationRoleReplace READ rotationRoleReplace WRITE setRotationRoleReplace NOTIFY rotationRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(MultiMatchBehavior multiMatchBehavior READ multiMatchBehavior WRITE setMultiMatchBehavior NOTIFY multiMatchBehaviorChanged REVISION(1, 1))
public:
enum MultiMatchBehavior {
@@ -122,14 +96,14 @@ public:
Q_INVOKABLE int rowCategoryIndex(const QString& category);
Q_INVOKABLE int columnCategoryIndex(const QString& category);
- void setRowRolePattern(const QRegExp &pattern);
- QRegExp rowRolePattern() const;
- void setColumnRolePattern(const QRegExp &pattern);
- QRegExp columnRolePattern() const;
- void setValueRolePattern(const QRegExp &pattern);
- QRegExp valueRolePattern() const;
- void setRotationRolePattern(const QRegExp &pattern);
- QRegExp rotationRolePattern() const;
+ void setRowRolePattern(const QRegularExpression &pattern);
+ QRegularExpression rowRolePattern() const;
+ void setColumnRolePattern(const QRegularExpression &pattern);
+ QRegularExpression columnRolePattern() const;
+ void setValueRolePattern(const QRegularExpression &pattern);
+ QRegularExpression valueRolePattern() const;
+ void setRotationRolePattern(const QRegularExpression &pattern);
+ QRegularExpression rotationRolePattern() const;
void setRowRoleReplace(const QString &replace);
QString rowRoleReplace() const;
@@ -154,15 +128,15 @@ Q_SIGNALS:
void useModelCategoriesChanged(bool enable);
void autoRowCategoriesChanged(bool enable);
void autoColumnCategoriesChanged(bool enable);
- Q_REVISION(1) void rowRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void columnRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void valueRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void rotationRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void rowRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void columnRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void valueRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void rotationRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void multiMatchBehaviorChanged(MultiMatchBehavior behavior);
+ Q_REVISION(1, 1) void rowRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void columnRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void valueRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void rotationRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void rowRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void columnRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void valueRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void rotationRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void multiMatchBehaviorChanged(MultiMatchBehavior behavior);
protected:
QItemModelBarDataProxyPrivate *dptr();
@@ -174,6 +148,6 @@ private:
friend class BarItemModelHandler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelbardataproxy_p.h b/src/datavisualization/data/qitemmodelbardataproxy_p.h
index a4eefbcd..cea4eb30 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelbardataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qitemmodelbardataproxy.h"
#include "qbardataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class BarItemModelHandler;
@@ -74,10 +48,10 @@ private:
bool m_autoRowCategories;
bool m_autoColumnCategories;
- QRegExp m_rowRolePattern;
- QRegExp m_columnRolePattern;
- QRegExp m_valueRolePattern;
- QRegExp m_rotationRolePattern;
+ QRegularExpression m_rowRolePattern;
+ QRegularExpression m_columnRolePattern;
+ QRegularExpression m_valueRolePattern;
+ QRegularExpression m_rotationRolePattern;
QString m_rowRoleReplace;
QString m_columnRoleReplace;
@@ -90,6 +64,6 @@ private:
friend class QItemModelBarDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
index 58180e69..63392cc0 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qitemmodelscatterdataproxy_p.h"
#include "scatteritemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QItemModelScatterDataProxy
@@ -59,12 +33,12 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* If the fields of the model do not contain the data in the exact format you need, you can specify
* a search pattern regular expression and a replace rule for each role to get the value in a
* format you need. For more information how the replace using regular expressions works, see
- * QString::replace(const QRegExp &rx, const QString &after) function documentation. Note that
+ * QString::replace(const QRegularExpression &rx, const QString &after) function documentation. Note that
* using regular expressions has an impact on the performance, so it's more efficient to utilize
* item models where doing search and replace is not necessary to get the desired values.
*
* For example about using the search patterns in conjunction with the roles, see
- * ItemModelBarDataProxy usage in \l{Qt Quick 2 Bars Example}.
+ * ItemModelBarDataProxy usage in \l{Simple Bar Graph} example.
*
* \sa {Qt Data Visualization Data Handling}
*/
@@ -170,7 +144,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*
* This property defines the replace content to be used in conjunction with xPosRolePattern.
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa xPosRole, xPosRolePattern
@@ -181,7 +155,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*
* This property defines the replace content to be used in conjunction with yPosRolePattern.
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa yPosRole, yPosRolePattern
@@ -192,7 +166,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*
* This property defines the replace content to be used in conjunction with zPosRolePattern.
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa zPosRole, zPosRolePattern
@@ -202,7 +176,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty string ItemModelScatterDataProxy::rotationRoleReplace
* This property defines the replace content to be used in conjunction with rotationRolePattern.
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rotationRole, rotationRolePattern
@@ -386,7 +360,7 @@ QString QItemModelScatterDataProxy::rotationRole() const
*
* \sa xPosRole, xPosRoleReplace
*/
-void QItemModelScatterDataProxy::setXPosRolePattern(const QRegExp &pattern)
+void QItemModelScatterDataProxy::setXPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_xPosRolePattern != pattern) {
dptr()->m_xPosRolePattern = pattern;
@@ -394,7 +368,7 @@ void QItemModelScatterDataProxy::setXPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelScatterDataProxy::xPosRolePattern() const
+QRegularExpression QItemModelScatterDataProxy::xPosRolePattern() const
{
return dptrc()->m_xPosRolePattern;
}
@@ -410,7 +384,7 @@ QRegExp QItemModelScatterDataProxy::xPosRolePattern() const
*
* \sa yPosRole, yPosRoleReplace
*/
-void QItemModelScatterDataProxy::setYPosRolePattern(const QRegExp &pattern)
+void QItemModelScatterDataProxy::setYPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_yPosRolePattern != pattern) {
dptr()->m_yPosRolePattern = pattern;
@@ -418,7 +392,7 @@ void QItemModelScatterDataProxy::setYPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelScatterDataProxy::yPosRolePattern() const
+QRegularExpression QItemModelScatterDataProxy::yPosRolePattern() const
{
return dptrc()->m_yPosRolePattern;
}
@@ -434,7 +408,7 @@ QRegExp QItemModelScatterDataProxy::yPosRolePattern() const
*
* \sa zPosRole, zPosRoleReplace
*/
-void QItemModelScatterDataProxy::setZPosRolePattern(const QRegExp &pattern)
+void QItemModelScatterDataProxy::setZPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_zPosRolePattern != pattern) {
dptr()->m_zPosRolePattern = pattern;
@@ -442,7 +416,7 @@ void QItemModelScatterDataProxy::setZPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelScatterDataProxy::zPosRolePattern() const
+QRegularExpression QItemModelScatterDataProxy::zPosRolePattern() const
{
return dptrc()->m_zPosRolePattern;
}
@@ -458,7 +432,7 @@ QRegExp QItemModelScatterDataProxy::zPosRolePattern() const
*
* \sa rotationRole, rotationRoleReplace
*/
-void QItemModelScatterDataProxy::setRotationRolePattern(const QRegExp &pattern)
+void QItemModelScatterDataProxy::setRotationRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_rotationRolePattern != pattern) {
dptr()->m_rotationRolePattern = pattern;
@@ -466,7 +440,7 @@ void QItemModelScatterDataProxy::setRotationRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelScatterDataProxy::rotationRolePattern() const
+QRegularExpression QItemModelScatterDataProxy::rotationRolePattern() const
{
return dptrc()->m_rotationRolePattern;
}
@@ -478,7 +452,7 @@ QRegExp QItemModelScatterDataProxy::rotationRolePattern() const
* pattern.
*
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa xPosRole, xPosRolePattern
@@ -503,7 +477,7 @@ QString QItemModelScatterDataProxy::xPosRoleReplace() const
* pattern.
*
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa yPosRole, yPosRolePattern
@@ -528,7 +502,7 @@ QString QItemModelScatterDataProxy::yPosRoleReplace() const
* pattern.
*
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa zPosRole, zPosRolePattern
@@ -553,7 +527,7 @@ QString QItemModelScatterDataProxy::zPosRoleReplace() const
* pattern.
*
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rotationRole, rotationRolePattern
@@ -647,4 +621,4 @@ void QItemModelScatterDataProxyPrivate::connectItemModelHandler()
m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy.h b/src/datavisualization/data/qitemmodelscatterdataproxy.h
index 9a85c4aa..3e4d41f3 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy.h
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QITEMMODELSCATTERDATAPROXY_H
#define QITEMMODELSCATTERDATAPROXY_H
@@ -33,13 +7,13 @@
#include <QtDataVisualization/qscatterdataproxy.h>
#include <QtCore/QAbstractItemModel>
#include <QtCore/QString>
-#include <QtCore/QRegExp>
+#include <QtCore/QRegularExpression>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QItemModelScatterDataProxyPrivate;
-class QT_DATAVISUALIZATION_EXPORT QItemModelScatterDataProxy : public QScatterDataProxy
+class Q_DATAVISUALIZATION_EXPORT QItemModelScatterDataProxy : public QScatterDataProxy
{
Q_OBJECT
Q_PROPERTY(QAbstractItemModel* itemModel READ itemModel WRITE setItemModel NOTIFY itemModelChanged)
@@ -47,14 +21,14 @@ class QT_DATAVISUALIZATION_EXPORT QItemModelScatterDataProxy : public QScatterDa
Q_PROPERTY(QString yPosRole READ yPosRole WRITE setYPosRole NOTIFY yPosRoleChanged)
Q_PROPERTY(QString zPosRole READ zPosRole WRITE setZPosRole NOTIFY zPosRoleChanged)
Q_PROPERTY(QString rotationRole READ rotationRole WRITE setRotationRole NOTIFY rotationRoleChanged)
- Q_PROPERTY(QRegExp xPosRolePattern READ xPosRolePattern WRITE setXPosRolePattern NOTIFY xPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp yPosRolePattern READ yPosRolePattern WRITE setYPosRolePattern NOTIFY yPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp zPosRolePattern READ zPosRolePattern WRITE setZPosRolePattern NOTIFY zPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp rotationRolePattern READ rotationRolePattern WRITE setRotationRolePattern NOTIFY rotationRolePatternChanged REVISION 1)
- Q_PROPERTY(QString xPosRoleReplace READ xPosRoleReplace WRITE setXPosRoleReplace NOTIFY xPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString yPosRoleReplace READ yPosRoleReplace WRITE setYPosRoleReplace NOTIFY yPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString zPosRoleReplace READ zPosRoleReplace WRITE setZPosRoleReplace NOTIFY zPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString rotationRoleReplace READ rotationRoleReplace WRITE setRotationRoleReplace NOTIFY rotationRoleReplaceChanged REVISION 1)
+ Q_PROPERTY(QRegularExpression xPosRolePattern READ xPosRolePattern WRITE setXPosRolePattern NOTIFY xPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression yPosRolePattern READ yPosRolePattern WRITE setYPosRolePattern NOTIFY yPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression zPosRolePattern READ zPosRolePattern WRITE setZPosRolePattern NOTIFY zPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression rotationRolePattern READ rotationRolePattern WRITE setRotationRolePattern NOTIFY rotationRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QString xPosRoleReplace READ xPosRoleReplace WRITE setXPosRoleReplace NOTIFY xPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString yPosRoleReplace READ yPosRoleReplace WRITE setYPosRoleReplace NOTIFY yPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString zPosRoleReplace READ zPosRoleReplace WRITE setZPosRoleReplace NOTIFY zPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString rotationRoleReplace READ rotationRoleReplace WRITE setRotationRoleReplace NOTIFY rotationRoleReplaceChanged REVISION(1, 1))
public:
explicit QItemModelScatterDataProxy(QObject *parent = nullptr);
@@ -83,14 +57,14 @@ public:
void remap(const QString &xPosRole, const QString &yPosRole, const QString &zPosRole,
const QString &rotationRole);
- void setXPosRolePattern(const QRegExp &pattern);
- QRegExp xPosRolePattern() const;
- void setYPosRolePattern(const QRegExp &pattern);
- QRegExp yPosRolePattern() const;
- void setZPosRolePattern(const QRegExp &pattern);
- QRegExp zPosRolePattern() const;
- void setRotationRolePattern(const QRegExp &pattern);
- QRegExp rotationRolePattern() const;
+ void setXPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression xPosRolePattern() const;
+ void setYPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression yPosRolePattern() const;
+ void setZPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression zPosRolePattern() const;
+ void setRotationRolePattern(const QRegularExpression &pattern);
+ QRegularExpression rotationRolePattern() const;
void setXPosRoleReplace(const QString &replace);
QString xPosRoleReplace() const;
@@ -107,14 +81,14 @@ Q_SIGNALS:
void yPosRoleChanged(const QString &role);
void zPosRoleChanged(const QString &role);
void rotationRoleChanged(const QString &role);
- Q_REVISION(1) void xPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void yPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void zPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void rotationRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void rotationRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void xPosRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void yPosRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void zPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void xPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void yPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void zPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void rotationRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void rotationRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void xPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void yPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void zPosRoleReplaceChanged(const QString &replace);
protected:
QItemModelScatterDataProxyPrivate *dptr();
@@ -126,6 +100,6 @@ private:
friend class ScatterItemModelHandler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy_p.h b/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
index a8d3c0e6..2559a321 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qitemmodelscatterdataproxy.h"
#include "qscatterdataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterItemModelHandler;
@@ -65,10 +39,10 @@ private:
QString m_zPosRole;
QString m_rotationRole;
- QRegExp m_xPosRolePattern;
- QRegExp m_yPosRolePattern;
- QRegExp m_zPosRolePattern;
- QRegExp m_rotationRolePattern;
+ QRegularExpression m_xPosRolePattern;
+ QRegularExpression m_yPosRolePattern;
+ QRegularExpression m_zPosRolePattern;
+ QRegularExpression m_rotationRolePattern;
QString m_xPosRoleReplace;
QString m_yPosRoleReplace;
@@ -79,6 +53,6 @@ private:
friend class QItemModelScatterDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
index 47230326..75fe3691 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qitemmodelsurfacedataproxy_p.h"
#include "surfaceitemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QItemModelSurfaceDataProxy
@@ -82,12 +56,12 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* If the fields of the model do not contain the data in the exact format you need, you can specify
* a search pattern regular expression and a replace rule for each role to get the value in a
* format you need. For more information how the replace using regular expressions works, see
- * QString::replace(const QRegExp &rx, const QString &after) function documentation. Note that
+ * QString::replace(const QRegularExpression &rx, const QString &after) function documentation. Note that
* using regular expressions has an impact on the performance, so it's more efficient to utilize
* item models where doing search and replace is not necessary to get the desired values.
*
* For example about using the search patterns in conjunction with the roles, see
- * ItemModelBarDataProxy usage in \l{Qt Quick 2 Bars Example}.
+ * ItemModelBarDataProxy usage in \l{Simple Bar Graph} example.
*
* \sa {Qt Data Visualization Data Handling}
*/
@@ -251,7 +225,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The replace content to be used in conjunction with rowRolePattern.
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rowRole, rowRolePattern
@@ -263,7 +237,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The replace content to be used in conjunction with columnRolePattern.
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa columnRole, columnRolePattern
@@ -275,7 +249,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The replace content to be used in conjunction with xPosRolePattern.
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa xPosRole, xPosRolePattern
@@ -287,7 +261,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The replace content to be used in conjunction with yPosRolePattern.
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa yPosRole, yPosRolePattern
@@ -299,7 +273,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The replace content to be used in conjunction with zPosRolePattern.
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa zPosRole, zPosRolePattern
@@ -770,7 +744,7 @@ int QItemModelSurfaceDataProxy::columnCategoryIndex(const QString &category)
*
* \sa rowRole, rowRoleReplace
*/
-void QItemModelSurfaceDataProxy::setRowRolePattern(const QRegExp &pattern)
+void QItemModelSurfaceDataProxy::setRowRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_rowRolePattern != pattern) {
dptr()->m_rowRolePattern = pattern;
@@ -778,7 +752,7 @@ void QItemModelSurfaceDataProxy::setRowRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelSurfaceDataProxy::rowRolePattern() const
+QRegularExpression QItemModelSurfaceDataProxy::rowRolePattern() const
{
return dptrc()->m_rowRolePattern;
}
@@ -795,7 +769,7 @@ QRegExp QItemModelSurfaceDataProxy::rowRolePattern() const
*
* \sa columnRole, columnRoleReplace
*/
-void QItemModelSurfaceDataProxy::setColumnRolePattern(const QRegExp &pattern)
+void QItemModelSurfaceDataProxy::setColumnRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_columnRolePattern != pattern) {
dptr()->m_columnRolePattern = pattern;
@@ -803,7 +777,7 @@ void QItemModelSurfaceDataProxy::setColumnRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelSurfaceDataProxy::columnRolePattern() const
+QRegularExpression QItemModelSurfaceDataProxy::columnRolePattern() const
{
return dptrc()->m_columnRolePattern;
}
@@ -820,7 +794,7 @@ QRegExp QItemModelSurfaceDataProxy::columnRolePattern() const
*
* \sa xPosRole, xPosRoleReplace
*/
-void QItemModelSurfaceDataProxy::setXPosRolePattern(const QRegExp &pattern)
+void QItemModelSurfaceDataProxy::setXPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_xPosRolePattern != pattern) {
dptr()->m_xPosRolePattern = pattern;
@@ -828,7 +802,7 @@ void QItemModelSurfaceDataProxy::setXPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelSurfaceDataProxy::xPosRolePattern() const
+QRegularExpression QItemModelSurfaceDataProxy::xPosRolePattern() const
{
return dptrc()->m_xPosRolePattern;
}
@@ -845,7 +819,7 @@ QRegExp QItemModelSurfaceDataProxy::xPosRolePattern() const
*
* \sa yPosRole, yPosRoleReplace
*/
-void QItemModelSurfaceDataProxy::setYPosRolePattern(const QRegExp &pattern)
+void QItemModelSurfaceDataProxy::setYPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_yPosRolePattern != pattern) {
dptr()->m_yPosRolePattern = pattern;
@@ -853,7 +827,7 @@ void QItemModelSurfaceDataProxy::setYPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelSurfaceDataProxy::yPosRolePattern() const
+QRegularExpression QItemModelSurfaceDataProxy::yPosRolePattern() const
{
return dptrc()->m_yPosRolePattern;
}
@@ -870,7 +844,7 @@ QRegExp QItemModelSurfaceDataProxy::yPosRolePattern() const
*
* \sa zPosRole, zPosRoleReplace
*/
-void QItemModelSurfaceDataProxy::setZPosRolePattern(const QRegExp &pattern)
+void QItemModelSurfaceDataProxy::setZPosRolePattern(const QRegularExpression &pattern)
{
if (dptr()->m_zPosRolePattern != pattern) {
dptr()->m_zPosRolePattern = pattern;
@@ -878,7 +852,7 @@ void QItemModelSurfaceDataProxy::setZPosRolePattern(const QRegExp &pattern)
}
}
-QRegExp QItemModelSurfaceDataProxy::zPosRolePattern() const
+QRegularExpression QItemModelSurfaceDataProxy::zPosRolePattern() const
{
return dptrc()->m_zPosRolePattern;
}
@@ -890,7 +864,7 @@ QRegExp QItemModelSurfaceDataProxy::zPosRolePattern() const
* pattern.
*
* Defaults to an empty string. For more information on how the search and replace using regular
- * expressions works, see QString::replace(const QRegExp &rx, const QString &after)
+ * expressions works, see QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa rowRole, rowRolePattern
@@ -916,7 +890,7 @@ QString QItemModelSurfaceDataProxy::rowRoleReplace() const
*
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa columnRole, columnRolePattern
@@ -942,7 +916,7 @@ QString QItemModelSurfaceDataProxy::columnRoleReplace() const
*
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa xPosRole, xPosRolePattern
@@ -968,7 +942,7 @@ QString QItemModelSurfaceDataProxy::xPosRoleReplace() const
*
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa yPosRole, yPosRolePattern
@@ -994,7 +968,7 @@ QString QItemModelSurfaceDataProxy::yPosRoleReplace() const
*
* Defaults to an empty string. For more information on how the search and
* replace using regular expressions works, see the
- * QString::replace(const QRegExp &rx, const QString &after)
+ * QString::replace(const QRegularExpression &rx, const QString &after)
* function documentation.
*
* \sa zPosRole, zPosRolePattern
@@ -1124,4 +1098,4 @@ void QItemModelSurfaceDataProxyPrivate::connectItemModelHandler()
m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy.h b/src/datavisualization/data/qitemmodelsurfacedataproxy.h
index ec94c1f0..2d90f146 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy.h
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QITEMMODELSURFACEDATAPROXY_H
#define QITEMMODELSURFACEDATAPROXY_H
@@ -33,13 +7,13 @@
#include <QtDataVisualization/qsurfacedataproxy.h>
#include <QtCore/QAbstractItemModel>
#include <QtCore/QStringList>
-#include <QtCore/QRegExp>
+#include <QtCore/QRegularExpression>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QItemModelSurfaceDataProxyPrivate;
-class QT_DATAVISUALIZATION_EXPORT QItemModelSurfaceDataProxy : public QSurfaceDataProxy
+class Q_DATAVISUALIZATION_EXPORT QItemModelSurfaceDataProxy : public QSurfaceDataProxy
{
Q_OBJECT
Q_ENUMS(MultiMatchBehavior)
@@ -54,17 +28,17 @@ class QT_DATAVISUALIZATION_EXPORT QItemModelSurfaceDataProxy : public QSurfaceDa
Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories NOTIFY useModelCategoriesChanged)
Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories NOTIFY autoRowCategoriesChanged)
Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories NOTIFY autoColumnCategoriesChanged)
- Q_PROPERTY(QRegExp rowRolePattern READ rowRolePattern WRITE setRowRolePattern NOTIFY rowRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp columnRolePattern READ columnRolePattern WRITE setColumnRolePattern NOTIFY columnRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp xPosRolePattern READ xPosRolePattern WRITE setXPosRolePattern NOTIFY xPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp yPosRolePattern READ yPosRolePattern WRITE setYPosRolePattern NOTIFY yPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QRegExp zPosRolePattern READ zPosRolePattern WRITE setZPosRolePattern NOTIFY zPosRolePatternChanged REVISION 1)
- Q_PROPERTY(QString rowRoleReplace READ rowRoleReplace WRITE setRowRoleReplace NOTIFY rowRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString columnRoleReplace READ columnRoleReplace WRITE setColumnRoleReplace NOTIFY columnRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString xPosRoleReplace READ xPosRoleReplace WRITE setXPosRoleReplace NOTIFY xPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString yPosRoleReplace READ yPosRoleReplace WRITE setYPosRoleReplace NOTIFY yPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(QString zPosRoleReplace READ zPosRoleReplace WRITE setZPosRoleReplace NOTIFY zPosRoleReplaceChanged REVISION 1)
- Q_PROPERTY(MultiMatchBehavior multiMatchBehavior READ multiMatchBehavior WRITE setMultiMatchBehavior NOTIFY multiMatchBehaviorChanged REVISION 1)
+ Q_PROPERTY(QRegularExpression rowRolePattern READ rowRolePattern WRITE setRowRolePattern NOTIFY rowRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression columnRolePattern READ columnRolePattern WRITE setColumnRolePattern NOTIFY columnRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression xPosRolePattern READ xPosRolePattern WRITE setXPosRolePattern NOTIFY xPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression yPosRolePattern READ yPosRolePattern WRITE setYPosRolePattern NOTIFY yPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QRegularExpression zPosRolePattern READ zPosRolePattern WRITE setZPosRolePattern NOTIFY zPosRolePatternChanged REVISION(1, 1))
+ Q_PROPERTY(QString rowRoleReplace READ rowRoleReplace WRITE setRowRoleReplace NOTIFY rowRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString columnRoleReplace READ columnRoleReplace WRITE setColumnRoleReplace NOTIFY columnRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString xPosRoleReplace READ xPosRoleReplace WRITE setXPosRoleReplace NOTIFY xPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString yPosRoleReplace READ yPosRoleReplace WRITE setYPosRoleReplace NOTIFY yPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(QString zPosRoleReplace READ zPosRoleReplace WRITE setZPosRoleReplace NOTIFY zPosRoleReplaceChanged REVISION(1, 1))
+ Q_PROPERTY(MultiMatchBehavior multiMatchBehavior READ multiMatchBehavior WRITE setMultiMatchBehavior NOTIFY multiMatchBehaviorChanged REVISION(1, 1))
public:
enum MultiMatchBehavior {
@@ -132,16 +106,16 @@ public:
Q_INVOKABLE int rowCategoryIndex(const QString& category);
Q_INVOKABLE int columnCategoryIndex(const QString& category);
- void setRowRolePattern(const QRegExp &pattern);
- QRegExp rowRolePattern() const;
- void setColumnRolePattern(const QRegExp &pattern);
- QRegExp columnRolePattern() const;
- void setXPosRolePattern(const QRegExp &pattern);
- QRegExp xPosRolePattern() const;
- void setYPosRolePattern(const QRegExp &pattern);
- QRegExp yPosRolePattern() const;
- void setZPosRolePattern(const QRegExp &pattern);
- QRegExp zPosRolePattern() const;
+ void setRowRolePattern(const QRegularExpression &pattern);
+ QRegularExpression rowRolePattern() const;
+ void setColumnRolePattern(const QRegularExpression &pattern);
+ QRegularExpression columnRolePattern() const;
+ void setXPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression xPosRolePattern() const;
+ void setYPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression yPosRolePattern() const;
+ void setZPosRolePattern(const QRegularExpression &pattern);
+ QRegularExpression zPosRolePattern() const;
void setRowRoleReplace(const QString &replace);
QString rowRoleReplace() const;
@@ -169,17 +143,17 @@ Q_SIGNALS:
void useModelCategoriesChanged(bool enable);
void autoRowCategoriesChanged(bool enable);
void autoColumnCategoriesChanged(bool enable);
- Q_REVISION(1) void rowRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void columnRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void xPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void yPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void zPosRolePatternChanged(const QRegExp &pattern);
- Q_REVISION(1) void rowRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void columnRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void xPosRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void yPosRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void zPosRoleReplaceChanged(const QString &replace);
- Q_REVISION(1) void multiMatchBehaviorChanged(MultiMatchBehavior behavior);
+ Q_REVISION(1, 1) void rowRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void columnRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void xPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void yPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void zPosRolePatternChanged(const QRegularExpression &pattern);
+ Q_REVISION(1, 1) void rowRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void columnRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void xPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void yPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void zPosRoleReplaceChanged(const QString &replace);
+ Q_REVISION(1, 1) void multiMatchBehaviorChanged(MultiMatchBehavior behavior);
protected:
QItemModelSurfaceDataProxyPrivate *dptr();
@@ -191,6 +165,6 @@ private:
friend class SurfaceItemModelHandler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h b/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
index 011a5221..a7de381a 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qitemmodelsurfacedataproxy.h"
#include "qsurfacedataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class SurfaceItemModelHandler;
@@ -75,11 +49,11 @@ private:
bool m_autoRowCategories;
bool m_autoColumnCategories;
- QRegExp m_rowRolePattern;
- QRegExp m_columnRolePattern;
- QRegExp m_xPosRolePattern;
- QRegExp m_yPosRolePattern;
- QRegExp m_zPosRolePattern;
+ QRegularExpression m_rowRolePattern;
+ QRegularExpression m_columnRolePattern;
+ QRegularExpression m_xPosRolePattern;
+ QRegularExpression m_yPosRolePattern;
+ QRegularExpression m_zPosRolePattern;
QString m_rowRoleReplace;
QString m_columnRoleReplace;
@@ -93,6 +67,6 @@ private:
friend class QItemModelSurfaceDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp
index 1557a6c3..3e0ea45b 100644
--- a/src/datavisualization/data/qscatter3dseries.cpp
+++ b/src/datavisualization/data/qscatter3dseries.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qscatter3dseries_p.h"
#include "scatter3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QScatter3DSeries
@@ -392,4 +366,4 @@ void QScatter3DSeriesPrivate::setItemSize(float size)
m_controller->markSeriesVisualsDirty();
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatter3dseries.h b/src/datavisualization/data/qscatter3dseries.h
index 0a1f93e9..599dfea4 100644
--- a/src/datavisualization/data/qscatter3dseries.h
+++ b/src/datavisualization/data/qscatter3dseries.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSCATTER3DSERIES_H
#define QSCATTER3DSERIES_H
@@ -33,11 +7,11 @@
#include <QtDataVisualization/qabstract3dseries.h>
#include <QtDataVisualization/qscatterdataproxy.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QScatter3DSeriesPrivate;
-class QT_DATAVISUALIZATION_EXPORT QScatter3DSeries : public QAbstract3DSeries
+class Q_DATAVISUALIZATION_EXPORT QScatter3DSeries : public QAbstract3DSeries
{
Q_OBJECT
Q_PROPERTY(QScatterDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
@@ -75,6 +49,6 @@ private:
friend class Scatter3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h
index c173857e..14f7672d 100644
--- a/src/datavisualization/data/qscatter3dseries_p.h
+++ b/src/datavisualization/data/qscatter3dseries_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qscatter3dseries.h"
#include "qabstract3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QScatter3DSeriesPrivate : public QAbstract3DSeriesPrivate
{
@@ -52,9 +26,9 @@ public:
QScatter3DSeriesPrivate(QScatter3DSeries *q);
virtual ~QScatter3DSeriesPrivate();
- virtual void setDataProxy(QAbstractDataProxy *proxy);
- virtual void connectControllerAndProxy(Abstract3DController *newController);
- virtual void createItemLabel();
+ void setDataProxy(QAbstractDataProxy *proxy) override;
+ void connectControllerAndProxy(Abstract3DController *newController) override;
+ void createItemLabel() override;
void setSelectedItem(int index);
void setItemSize(float size);
@@ -68,6 +42,6 @@ private:
friend class QScatter3DSeries;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatterdataitem.cpp b/src/datavisualization/data/qscatterdataitem.cpp
index 12ea47af..f55b45bf 100644
--- a/src/datavisualization/data/qscatterdataitem.cpp
+++ b/src/datavisualization/data/qscatterdataitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qscatterdataitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QScatterDataItem
@@ -176,4 +150,4 @@ QScatterDataItemPrivate::~QScatterDataItemPrivate()
{
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatterdataitem.h b/src/datavisualization/data/qscatterdataitem.h
index 94be3a48..9ed68de9 100644
--- a/src/datavisualization/data/qscatterdataitem.h
+++ b/src/datavisualization/data/qscatterdataitem.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSCATTERDATAITEM_H
#define QSCATTERDATAITEM_H
@@ -33,11 +7,11 @@
#include <QtDataVisualization/qdatavisualizationglobal.h>
#include <QtGui/QQuaternion>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QScatterDataItemPrivate;
-class QT_DATAVISUALIZATION_EXPORT QScatterDataItem
+class Q_DATAVISUALIZATION_EXPORT QScatterDataItem
{
public:
QScatterDataItem();
@@ -69,6 +43,6 @@ private:
QQuaternion m_rotation;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatterdataitem_p.h b/src/datavisualization/data/qscatterdataitem_p.h
index 7eac8950..a3cf11c5 100644
--- a/src/datavisualization/data/qscatterdataitem_p.h
+++ b/src/datavisualization/data/qscatterdataitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qscatterdataitem.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QScatterDataItemPrivate
{
@@ -52,6 +26,6 @@ public:
virtual ~QScatterDataItemPrivate();
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatterdataproxy.cpp b/src/datavisualization/data/qscatterdataproxy.cpp
index 884d2da9..3e793430 100644
--- a/src/datavisualization/data/qscatterdataproxy.cpp
+++ b/src/datavisualization/data/qscatterdataproxy.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qscatterdataproxy_p.h"
#include "qscatter3dseries_p.h"
#include "qabstract3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QScatterDataProxy
@@ -451,4 +425,4 @@ QScatterDataProxy *QScatterDataProxyPrivate::qptr()
return static_cast<QScatterDataProxy *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatterdataproxy.h b/src/datavisualization/data/qscatterdataproxy.h
index 0a2f73ba..fd22db08 100644
--- a/src/datavisualization/data/qscatterdataproxy.h
+++ b/src/datavisualization/data/qscatterdataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSCATTERDATAPROXY_H
#define QSCATTERDATAPROXY_H
@@ -35,14 +9,14 @@
Q_MOC_INCLUDE(<QtDataVisualization/qscatter3dseries.h>)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QScatterDataProxyPrivate;
class QScatter3DSeries;
typedef QList<QScatterDataItem> QScatterDataArray;
-class QT_DATAVISUALIZATION_EXPORT QScatterDataProxy : public QAbstractDataProxy
+class Q_DATAVISUALIZATION_EXPORT QScatterDataProxy : public QAbstractDataProxy
{
Q_OBJECT
@@ -92,6 +66,6 @@ private:
friend class Scatter3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qscatterdataproxy_p.h b/src/datavisualization/data/qscatterdataproxy_p.h
index 157152b0..8df992d1 100644
--- a/src/datavisualization/data/qscatterdataproxy_p.h
+++ b/src/datavisualization/data/qscatterdataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "qabstractdataproxy_p.h"
#include "qscatterdataitem.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DAxis;
@@ -67,7 +41,7 @@ public:
QAbstract3DAxis *axisY, QAbstract3DAxis *axisZ) const;
bool isValidValue(float axisValue, float value, QAbstract3DAxis *axis) const;
- virtual void setSeries(QAbstract3DSeries *series);
+ void setSeries(QAbstract3DSeries *series) override;
private:
QScatterDataProxy *qptr();
QScatterDataArray *m_dataArray;
@@ -75,6 +49,6 @@ private:
friend class QScatterDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp
index 83d766bd..9ac4a1de 100644
--- a/src/datavisualization/data/qsurface3dseries.cpp
+++ b/src/datavisualization/data/qsurface3dseries.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qsurface3dseries_p.h"
#include "surface3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QSurface3DSeries
@@ -165,6 +139,12 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* file name is set.
*/
+/*!
+ * \qmlproperty color Surface3DSeries::wireframeColor
+ * \since 6.3
+ *
+ * The color used to draw the gridlines of the surface wireframe.
+ */
/*!
* \enum QSurface3DSeries::DrawFlag
@@ -399,6 +379,24 @@ QString QSurface3DSeries::textureFile() const
}
/*!
+ * \property QSurface3DSeries::wireframeColor
+ * \since 6.3
+ *
+ * \brief The color for the surface wireframe.
+ */
+void QSurface3DSeries::setWireframeColor(const QColor &color)
+{
+ if (dptr()->m_wireframeColor != color) {
+ dptr()->setWireframeColor(color);
+ emit wireframeColorChanged(color);
+ }
+}
+
+QColor QSurface3DSeries::wireframeColor() const
+{
+ return dptrc()->m_wireframeColor;
+}
+/*!
* \internal
*/
QSurface3DSeriesPrivate *QSurface3DSeries::dptr()
@@ -420,7 +418,8 @@ QSurface3DSeriesPrivate::QSurface3DSeriesPrivate(QSurface3DSeries *q)
: QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeSurface),
m_selectedPoint(Surface3DController::invalidSelectionPosition()),
m_flatShadingEnabled(true),
- m_drawMode(QSurface3DSeries::DrawSurfaceAndWireframe)
+ m_drawMode(QSurface3DSeries::DrawSurfaceAndWireframe),
+ m_wireframeColor(Qt::black)
{
m_itemLabelFormat = QStringLiteral("@xLabel, @yLabel, @zLabel");
m_mesh = QAbstract3DSeries::MeshSphere;
@@ -553,4 +552,11 @@ void QSurface3DSeriesPrivate::setTexture(const QImage &texture)
static_cast<Surface3DController *>(m_controller)->updateSurfaceTexture(qptr());
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+void QSurface3DSeriesPrivate::setWireframeColor(const QColor &color)
+{
+ m_wireframeColor = color;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurface3dseries.h b/src/datavisualization/data/qsurface3dseries.h
index b0b83ea3..60804e8f 100644
--- a/src/datavisualization/data/qsurface3dseries.h
+++ b/src/datavisualization/data/qsurface3dseries.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSURFACE3DSERIES_H
#define QSURFACE3DSERIES_H
@@ -33,11 +7,11 @@
#include <QtDataVisualization/qabstract3dseries.h>
#include <QtDataVisualization/qsurfacedataproxy.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QSurface3DSeriesPrivate;
-class QT_DATAVISUALIZATION_EXPORT QSurface3DSeries : public QAbstract3DSeries
+class Q_DATAVISUALIZATION_EXPORT QSurface3DSeries : public QAbstract3DSeries
{
Q_OBJECT
Q_FLAGS(DrawFlag DrawFlags)
@@ -48,6 +22,7 @@ class QT_DATAVISUALIZATION_EXPORT QSurface3DSeries : public QAbstract3DSeries
Q_PROPERTY(DrawFlags drawMode READ drawMode WRITE setDrawMode NOTIFY drawModeChanged)
Q_PROPERTY(QImage texture READ texture WRITE setTexture NOTIFY textureChanged)
Q_PROPERTY(QString textureFile READ textureFile WRITE setTextureFile NOTIFY textureFileChanged)
+ Q_PROPERTY(QColor wireframeColor READ wireframeColor WRITE setWireframeColor NOTIFY wireframeColorChanged REVISION(6, 3))
public:
enum DrawFlag {
@@ -55,6 +30,7 @@ public:
DrawSurface = 2,
DrawSurfaceAndWireframe = DrawWireframe | DrawSurface
};
+ Q_ENUM(DrawFlag)
Q_DECLARE_FLAGS(DrawFlags, DrawFlag)
explicit QSurface3DSeries(QObject *parent = nullptr);
@@ -81,6 +57,9 @@ public:
void setTextureFile(const QString &filename);
QString textureFile() const;
+ void setWireframeColor(const QColor &color);
+ QColor wireframeColor() const;
+
Q_SIGNALS:
void dataProxyChanged(QSurfaceDataProxy *proxy);
void selectedPointChanged(const QPoint &position);
@@ -89,6 +68,7 @@ Q_SIGNALS:
void drawModeChanged(QSurface3DSeries::DrawFlags mode);
void textureChanged(const QImage &image);
void textureFileChanged(const QString &filename);
+ Q_REVISION(6, 3) void wireframeColorChanged(const QColor &color);
protected:
explicit QSurface3DSeries(QSurface3DSeriesPrivate *d, QObject *parent = nullptr);
@@ -101,6 +81,8 @@ private:
friend class Surface3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+Q_DECLARE_OPERATORS_FOR_FLAGS(QSurface3DSeries::DrawFlags)
+
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurface3dseries_p.h b/src/datavisualization/data/qsurface3dseries_p.h
index f3519a5a..56008f49 100644
--- a/src/datavisualization/data/qsurface3dseries_p.h
+++ b/src/datavisualization/data/qsurface3dseries_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qsurface3dseries.h"
#include "qabstract3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QSurface3DSeriesPrivate : public QAbstract3DSeriesPrivate
{
@@ -52,14 +26,15 @@ public:
QSurface3DSeriesPrivate(QSurface3DSeries *q);
virtual ~QSurface3DSeriesPrivate();
- virtual void setDataProxy(QAbstractDataProxy *proxy);
- virtual void connectControllerAndProxy(Abstract3DController *newController);
- virtual void createItemLabel();
+ void setDataProxy(QAbstractDataProxy *proxy) override;
+ void connectControllerAndProxy(Abstract3DController *newController) override;
+ void createItemLabel() override;
void setSelectedPoint(const QPoint &position);
void setFlatShadingEnabled(bool enabled);
void setDrawMode(QSurface3DSeries::DrawFlags mode);
void setTexture(const QImage &texture);
+ void setWireframeColor(const QColor &color);
private:
QSurface3DSeries *qptr();
@@ -69,11 +44,12 @@ private:
QSurface3DSeries::DrawFlags m_drawMode;
QImage m_texture;
QString m_textureFile;
+ QColor m_wireframeColor;
private:
friend class QSurface3DSeries;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurfacedataitem.cpp b/src/datavisualization/data/qsurfacedataitem.cpp
index a4aeb18d..5d977c0f 100644
--- a/src/datavisualization/data/qsurfacedataitem.cpp
+++ b/src/datavisualization/data/qsurfacedataitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qsurfacedataitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QSurfaceDataItem
@@ -150,4 +124,4 @@ QSurfaceDataItemPrivate::~QSurfaceDataItemPrivate()
{
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurfacedataitem.h b/src/datavisualization/data/qsurfacedataitem.h
index c4d9f7c8..fce196e7 100644
--- a/src/datavisualization/data/qsurfacedataitem.h
+++ b/src/datavisualization/data/qsurfacedataitem.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSURFACEDATAITEM_H
#define QSURFACEDATAITEM_H
@@ -33,11 +7,11 @@
#include <QtDataVisualization/qdatavisualizationglobal.h>
#include <QtGui/QVector3D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QSurfaceDataItemPrivate;
-class QT_DATAVISUALIZATION_EXPORT QSurfaceDataItem
+class Q_DATAVISUALIZATION_EXPORT QSurfaceDataItem
{
public:
QSurfaceDataItem();
@@ -65,6 +39,6 @@ private:
QVector3D m_position;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurfacedataitem_p.h b/src/datavisualization/data/qsurfacedataitem_p.h
index 18babd90..85b42513 100644
--- a/src/datavisualization/data/qsurfacedataitem_p.h
+++ b/src/datavisualization/data/qsurfacedataitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qsurfacedataitem.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QSurfaceDataItemPrivate
{
@@ -52,6 +26,6 @@ public:
virtual ~QSurfaceDataItemPrivate();
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp
index 50514889..afb91c3f 100644
--- a/src/datavisualization/data/qsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qsurfacedataproxy.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qsurfacedataproxy_p.h"
#include "qsurface3dseries_p.h"
#include "qabstract3daxis_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QSurfaceDataProxy
@@ -475,7 +449,8 @@ void QSurfaceDataProxyPrivate::setItem(int rowIndex, int columnIndex, const QSur
int QSurfaceDataProxyPrivate::addRow(QSurfaceDataRow *row)
{
- Q_ASSERT(m_dataArray->at(0)->size() == row->size());
+ Q_ASSERT(m_dataArray->isEmpty()
+ || m_dataArray->at(0)->size() == row->size());
int currentSize = m_dataArray->size();
m_dataArray->append(row);
return currentSize;
@@ -485,7 +460,8 @@ int QSurfaceDataProxyPrivate::addRows(const QSurfaceDataArray &rows)
{
int currentSize = m_dataArray->size();
for (int i = 0; i < rows.size(); i++) {
- Q_ASSERT(m_dataArray->at(0)->size() == rows.at(i)->size());
+ Q_ASSERT(m_dataArray->isEmpty()
+ || m_dataArray->at(0)->size() == rows.at(i)->size());
m_dataArray->append(rows.at(i));
}
return currentSize;
@@ -494,7 +470,8 @@ int QSurfaceDataProxyPrivate::addRows(const QSurfaceDataArray &rows)
void QSurfaceDataProxyPrivate::insertRow(int rowIndex, QSurfaceDataRow *row)
{
Q_ASSERT(rowIndex >= 0 && rowIndex <= m_dataArray->size());
- Q_ASSERT(m_dataArray->at(0)->size() == row->size());
+ Q_ASSERT(m_dataArray->isEmpty()
+ || m_dataArray->at(0)->size() == row->size());
m_dataArray->insert(rowIndex, row);
}
@@ -503,7 +480,8 @@ void QSurfaceDataProxyPrivate::insertRows(int rowIndex, const QSurfaceDataArray
Q_ASSERT(rowIndex >= 0 && rowIndex <= m_dataArray->size());
for (int i = 0; i < rows.size(); i++) {
- Q_ASSERT(m_dataArray->at(0)->size() == rows.at(i)->size());
+ Q_ASSERT(m_dataArray->isEmpty()
+ || m_dataArray->at(0)->size() == rows.at(i)->size());
m_dataArray->insert(rowIndex++, rows.at(i));
}
}
@@ -548,9 +526,11 @@ void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
float itemValue = m_dataArray->at(i)->at(j).y();
if (qIsNaN(itemValue) || qIsInf(itemValue))
continue;
- if (min > itemValue && isValidValue(itemValue, axisY))
+ if ((min > itemValue || (qIsNaN(min) || qIsInf(min)))
+ && isValidValue(itemValue, axisY)) {
min = itemValue;
- if (max < itemValue)
+ }
+ if (max < itemValue || (qIsNaN(max) || qIsInf(max)))
max = itemValue;
}
}
@@ -565,33 +545,59 @@ void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
float xHigh = m_dataArray->at(0)->last().x();
float zLow = m_dataArray->at(0)->at(0).z();
float zHigh = m_dataArray->last()->at(0).z();
- for (int i = 0; i < columns; i++) {
- float zItemValue = m_dataArray->at(0)->at(i).z();
- if (qIsNaN(zItemValue) || qIsInf(zItemValue))
- continue;
- else if (isValidValue(zItemValue, axisZ))
- zLow = qMin(zLow,zItemValue);
+ for (int i = 0; i < rows; i++) {
+ for (int j = 0; j < columns; j++) {
+ float zItemValue = m_dataArray->at(i)->at(j).z();
+ if (qIsNaN(zItemValue) || qIsInf(zItemValue))
+ continue;
+ else if (isValidValue(zItemValue, axisZ))
+ zLow = qMin(zLow,zItemValue);
+ }
+ if (!qIsNaN(zLow) && !qIsInf(zLow))
+ break;
}
- for (int i = 0; i < columns; i++) {
- float zItemValue = m_dataArray->last()->at(i).z();
- if (qIsNaN(zItemValue) || qIsInf(zItemValue))
- continue;
- else if (isValidValue(zItemValue, axisZ))
- zHigh = qMax(zHigh, zItemValue);
+ for (int i = rows - 1; i >= 0; i--) {
+ for (int j = 0; j < columns; j++) {
+ float zItemValue = m_dataArray->at(i)->at(j).z();
+ if (qIsNaN(zItemValue) || qIsInf(zItemValue))
+ continue;
+ else if (isValidValue(zItemValue, axisZ))
+ {
+ if (!qIsNaN(zHigh) && !qIsInf(zHigh))
+ zHigh = qMax(zHigh, zItemValue);
+ else
+ zHigh = zItemValue;
+ }
+ }
+ if (!qIsNaN(zHigh) && !qIsInf(zHigh))
+ break;
}
- for (int i = 0; i < rows; i++) {
- float xItemValue = m_dataArray->at(i)->at(0).x();
- if (qIsNaN(xItemValue) || qIsInf(xItemValue))
- continue;
- else if (isValidValue(xItemValue, axisX))
- xLow = qMin(xLow, xItemValue);
+ for (int j = 0; j<columns; j++){
+ for (int i = 0; i < rows; i++) {
+ float xItemValue = m_dataArray->at(i)->at(j).x();
+ if (qIsNaN(xItemValue) || qIsInf(xItemValue))
+ continue;
+ else if (isValidValue(xItemValue, axisX))
+ xLow = qMin(xLow, xItemValue);
+ }
+ if (!qIsNaN(xLow) && !qIsInf(xLow))
+ break;
}
- for (int i = 0; i < rows; i++) {
- float xItemValue = m_dataArray->at(i)->last().x();
- if (qIsNaN(xItemValue) || qIsInf(xItemValue))
- continue;
- else if (isValidValue(xItemValue, axisX))
- xHigh = qMax(xHigh, xItemValue);
+ for (int j = columns-1; j >= 0; j--){
+ for (int i = 0; i < rows; i++) {
+ float xItemValue = m_dataArray->at(i)->at(j).x();
+ if (qIsNaN(xItemValue) || qIsInf(xItemValue))
+ continue;
+ else if (isValidValue(xItemValue, axisX))
+ {
+ if (!qIsNaN(xHigh) && !qIsInf(xHigh))
+ xHigh = qMax(xHigh, xItemValue);
+ else
+ xHigh = xItemValue;
+ }
+ }
+ if (!qIsNaN(xHigh) && !qIsInf(xHigh))
+ break;
}
minValues.setX(xLow);
minValues.setZ(zLow);
@@ -634,4 +640,4 @@ void QSurfaceDataProxyPrivate::setSeries(QAbstract3DSeries *series)
emit qptr()->seriesChanged(surfaceSeries);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurfacedataproxy.h b/src/datavisualization/data/qsurfacedataproxy.h
index 9f767ce2..ece1cd61 100644
--- a/src/datavisualization/data/qsurfacedataproxy.h
+++ b/src/datavisualization/data/qsurfacedataproxy.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSURFACEDATAPROXY_H
#define QSURFACEDATAPROXY_H
@@ -35,7 +9,7 @@
Q_MOC_INCLUDE(<QtDataVisualization/qsurface3dseries.h>)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QSurfaceDataProxyPrivate;
class QSurface3DSeries;
@@ -43,7 +17,7 @@ class QSurface3DSeries;
typedef QList<QSurfaceDataItem> QSurfaceDataRow;
typedef QList<QSurfaceDataRow *> QSurfaceDataArray;
-class QT_DATAVISUALIZATION_EXPORT QSurfaceDataProxy : public QAbstractDataProxy
+class Q_DATAVISUALIZATION_EXPORT QSurfaceDataProxy : public QAbstractDataProxy
{
Q_OBJECT
@@ -101,6 +75,6 @@ private:
friend class Surface3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/qsurfacedataproxy_p.h b/src/datavisualization/data/qsurfacedataproxy_p.h
index 80443aec..a17d8eb5 100644
--- a/src/datavisualization/data/qsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qsurfacedataproxy_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qsurfacedataproxy.h"
#include "qabstractdataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DAxis;
@@ -67,7 +41,7 @@ public:
QAbstract3DAxis *axisY, QAbstract3DAxis *axisZ) const;
bool isValidValue(float value, QAbstract3DAxis *axis) const;
- virtual void setSeries(QAbstract3DSeries *series);
+ void setSeries(QAbstract3DSeries *series) override;
protected:
QSurfaceDataArray *m_dataArray;
@@ -80,6 +54,6 @@ private:
friend class QSurfaceDataProxy;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/scatteritemmodelhandler.cpp b/src/datavisualization/data/scatteritemmodelhandler.cpp
index 67b9bb3a..8aa4ba7d 100644
--- a/src/datavisualization/data/scatteritemmodelhandler.cpp
+++ b/src/datavisualization/data/scatteritemmodelhandler.cpp
@@ -1,37 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatteritemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-static const int noRoleIndex = -1;
+QT_BEGIN_NAMESPACE
ScatterItemModelHandler::ScatterItemModelHandler(QItemModelScatterDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
@@ -211,10 +183,10 @@ void ScatterItemModelHandler::resolveModel()
m_yPosReplace = m_proxy->yPosRoleReplace();
m_zPosReplace = m_proxy->zPosRoleReplace();
m_rotationReplace = m_proxy->rotationRoleReplace();
- m_haveXPosPattern = !m_xPosPattern.isEmpty() && m_xPosPattern.isValid();
- m_haveYPosPattern = !m_yPosPattern.isEmpty() && m_yPosPattern.isValid();
- m_haveZPosPattern = !m_zPosPattern.isEmpty() && m_zPosPattern.isValid();
- m_haveRotationPattern = !m_rotationPattern.isEmpty() && m_rotationPattern.isValid();
+ m_haveXPosPattern = !m_xPosPattern.namedCaptureGroups().isEmpty() && m_xPosPattern.isValid();
+ m_haveYPosPattern = !m_yPosPattern.namedCaptureGroups().isEmpty() && m_yPosPattern.isValid();
+ m_haveZPosPattern = !m_zPosPattern.namedCaptureGroups().isEmpty() && m_zPosPattern.isValid();
+ m_haveRotationPattern = !m_rotationPattern.namedCaptureGroups().isEmpty() && m_rotationPattern.isValid();
QHash<int, QByteArray> roleHash = m_itemModel->roleNames();
m_xPosRole = roleHash.key(m_proxy->xPosRole().toLatin1(), noRoleIndex);
@@ -241,4 +213,4 @@ void ScatterItemModelHandler::resolveModel()
m_proxy->resetArray(m_proxyArray);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/scatteritemmodelhandler_p.h b/src/datavisualization/data/scatteritemmodelhandler_p.h
index 8573f675..7eb084c2 100644
--- a/src/datavisualization/data/scatteritemmodelhandler_p.h
+++ b/src/datavisualization/data/scatteritemmodelhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "abstractitemmodelhandler_p.h"
#include "qitemmodelscatterdataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterItemModelHandler : public AbstractItemModelHandler
{
@@ -53,13 +27,13 @@ public:
virtual ~ScatterItemModelHandler();
public Q_SLOTS:
- virtual void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
- const QList<int> &roles = QList<int>());
- virtual void handleRowsInserted(const QModelIndex &parent, int start, int end);
- virtual void handleRowsRemoved(const QModelIndex &parent, int start, int end);
+ void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
+ const QList<int> &roles = QList<int>()) override;
+ void handleRowsInserted(const QModelIndex &parent, int start, int end) override;
+ void handleRowsRemoved(const QModelIndex &parent, int start, int end) override;
protected:
- void virtual resolveModel();
+ void resolveModel() override;
private:
void modelPosToScatterItem(int modelRow, int modelColumn, QScatterDataItem &item);
@@ -70,10 +44,10 @@ private:
int m_yPosRole;
int m_zPosRole;
int m_rotationRole;
- QRegExp m_xPosPattern;
- QRegExp m_yPosPattern;
- QRegExp m_zPosPattern;
- QRegExp m_rotationPattern;
+ QRegularExpression m_xPosPattern;
+ QRegularExpression m_yPosPattern;
+ QRegularExpression m_zPosPattern;
+ QRegularExpression m_rotationPattern;
QString m_xPosReplace;
QString m_yPosReplace;
QString m_zPosReplace;
@@ -84,6 +58,6 @@ private:
bool m_haveRotationPattern;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/scatterrenderitem.cpp b/src/datavisualization/data/scatterrenderitem.cpp
index 61fb85dd..b8c8a4d5 100644
--- a/src/datavisualization/data/scatterrenderitem.cpp
+++ b/src/datavisualization/data/scatterrenderitem.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
ScatterRenderItem::ScatterRenderItem()
: AbstractRenderItem(),
@@ -48,4 +22,4 @@ ScatterRenderItem::~ScatterRenderItem()
{
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/scatterrenderitem_p.h b/src/datavisualization/data/scatterrenderitem_p.h
index 4c0c30a4..8eb1c766 100644
--- a/src/datavisualization/data/scatterrenderitem_p.h
+++ b/src/datavisualization/data/scatterrenderitem_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -42,13 +16,14 @@
#include "abstractrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterRenderItem : public AbstractRenderItem
{
public:
ScatterRenderItem();
ScatterRenderItem(const ScatterRenderItem &other);
+ ScatterRenderItem &operator=(const ScatterRenderItem &) = default;
virtual ~ScatterRenderItem();
inline const QVector3D &position() const { return m_position; }
@@ -67,6 +42,6 @@ protected:
};
typedef QList<ScatterRenderItem> ScatterRenderItemArray;
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp
index 122499be..bdec0308 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler.cpp
+++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp
@@ -1,37 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "surfaceitemmodelhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-static const int noRoleIndex = -1;
+QT_BEGIN_NAMESPACE
SurfaceItemModelHandler::SurfaceItemModelHandler(QItemModelSurfaceDataProxy *proxy, QObject *parent)
: AbstractItemModelHandler(parent),
@@ -123,8 +95,8 @@ void SurfaceItemModelHandler::resolveModel()
}
// Position patterns can be reused on single item changes, so store them to member variables.
- QRegExp rowPattern(m_proxy->rowRolePattern());
- QRegExp colPattern(m_proxy->columnRolePattern());
+ QRegularExpression rowPattern(m_proxy->rowRolePattern());
+ QRegularExpression colPattern(m_proxy->columnRolePattern());
m_xPosPattern = m_proxy->xPosRolePattern();
m_yPosPattern = m_proxy->yPosRolePattern();
m_zPosPattern = m_proxy->zPosRolePattern();
@@ -133,11 +105,11 @@ void SurfaceItemModelHandler::resolveModel()
m_xPosReplace = m_proxy->xPosRoleReplace();
m_yPosReplace = m_proxy->yPosRoleReplace();
m_zPosReplace = m_proxy->zPosRoleReplace();
- bool haveRowPattern = !rowPattern.isEmpty() && rowPattern.isValid();
- bool haveColPattern = !colPattern.isEmpty() && colPattern.isValid();
- m_haveXPosPattern = !m_xPosPattern.isEmpty() && m_xPosPattern.isValid();
- m_haveYPosPattern = !m_yPosPattern.isEmpty() && m_yPosPattern.isValid();
- m_haveZPosPattern = !m_zPosPattern.isEmpty() && m_zPosPattern.isValid();
+ bool haveRowPattern = !rowPattern.namedCaptureGroups().isEmpty() && rowPattern.isValid();
+ bool haveColPattern = !colPattern.namedCaptureGroups().isEmpty() && colPattern.isValid();
+ m_haveXPosPattern = !m_xPosPattern.namedCaptureGroups().isEmpty() && m_xPosPattern.isValid();
+ m_haveYPosPattern = !m_yPosPattern.namedCaptureGroups().isEmpty() && m_yPosPattern.isValid();
+ m_haveZPosPattern = !m_zPosPattern.namedCaptureGroups().isEmpty() && m_zPosPattern.isValid();
QHash<int, QByteArray> roleHash = m_itemModel->roleNames();
@@ -313,12 +285,14 @@ void SurfaceItemModelHandler::resolveModel()
for (int j = 0; j < columnList.size(); j++) {
QVector3D &itemPos = itemValueMap[rowKey][columnList.at(j)];
if (cumulative) {
- if (average) {
- itemPos /= float((*matchCountMap)[rowKey][columnList.at(j)]);
- } else { // cumulativeY
- float divisor = float((*matchCountMap)[rowKey][columnList.at(j)]);
- itemPos.setX(itemPos.x() / divisor);
- itemPos.setZ(itemPos.z() / divisor);
+ float divisor = float((*matchCountMap)[rowKey][columnList.at(j)]);
+ if (divisor) {
+ if (average) {
+ itemPos /= divisor;
+ } else { // cumulativeY
+ itemPos.setX(itemPos.x() / divisor);
+ itemPos.setZ(itemPos.z() / divisor);
+ }
}
}
newProxyRow[j].setPosition(itemPos);
@@ -331,4 +305,4 @@ void SurfaceItemModelHandler::resolveModel()
m_proxy->resetArray(m_proxyArray);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/data/surfaceitemmodelhandler_p.h b/src/datavisualization/data/surfaceitemmodelhandler_p.h
index 6304c822..fc3178b9 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler_p.h
+++ b/src/datavisualization/data/surfaceitemmodelhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "abstractitemmodelhandler_p.h"
#include "qitemmodelsurfacedataproxy_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class SurfaceItemModelHandler : public AbstractItemModelHandler
{
@@ -53,20 +27,20 @@ public:
virtual ~SurfaceItemModelHandler();
public Q_SLOTS:
- virtual void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
- const QList<int> &roles = QList<int>());
+ void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
+ const QList<int> &roles = QList<int>()) override;
protected:
- void virtual resolveModel();
+ void resolveModel() override;
QItemModelSurfaceDataProxy *m_proxy; // Not owned
QSurfaceDataArray *m_proxyArray; // Not owned
int m_xPosRole;
int m_yPosRole;
int m_zPosRole;
- QRegExp m_xPosPattern;
- QRegExp m_yPosPattern;
- QRegExp m_zPosPattern;
+ QRegularExpression m_xPosPattern;
+ QRegularExpression m_yPosPattern;
+ QRegularExpression m_zPosPattern;
QString m_xPosReplace;
QString m_yPosReplace;
QString m_zPosReplace;
@@ -75,6 +49,6 @@ protected:
bool m_haveZPosPattern;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/datavisualization.pro b/src/datavisualization/datavisualization.pro
deleted file mode 100644
index beb1c512..00000000
--- a/src/datavisualization/datavisualization.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-TARGET = QtDataVisualization
-
-QT += core gui opengl
-osx: QT += gui-private
-
-QMAKE_DOCS = $$PWD/doc/qtdatavis3d.qdocconf
-
-QMAKE_TARGET_PRODUCT = "Qt Data Visualization (Qt $$QT_VERSION)"
-QMAKE_TARGET_DESCRIPTION = "3D Data Visualization component for Qt."
-
-include($$PWD/global/global.pri)
-include($$PWD/engine/engine.pri)
-include($$PWD/utils/utils.pri)
-include($$PWD/theme/theme.pri)
-include($$PWD/axis/axis.pri)
-include($$PWD/data/data.pri)
-include($$PWD/input/input.pri)
-
-OTHER_FILES += doc/qtdatavis3d.qdocconf \
- doc/src/* \
- doc/images/* \
- doc/snippets/* \
- global/*.qdoc
-
-load(qt_module)
diff --git a/src/datavisualization/doc/qtdatavis3d.qdocconf b/src/datavisualization/doc/qtdatavis3d.qdocconf
index e8dd6070..952cac3e 100644
--- a/src/datavisualization/doc/qtdatavis3d.qdocconf
+++ b/src/datavisualization/doc/qtdatavis3d.qdocconf
@@ -1,55 +1,49 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtdatavis3d.qdocconf)
-project = QtDataVisualization
+project = QtDataVis3D
description = Qt Data Visualization Reference Documentation
version = $QT_VERSION
buildversion = Qt Data Visualization | Commercial or GPLv3
+moduleheader = QtDataVisualization
+examplesinstallpath = datavisualization
exampledirs += ../../../examples/datavisualization \
snippets
-headerdirs += ..
+{headerdirs,sourcedirs} += ..
+
imagedirs += ../images \
images
-sourcedirs += ..
-examplesinstallpath = datavisualization
-
-depends = qtcore qtgui qtqml qtquick qtmultimedia qtdoc qtwidgets
-
-qhp.projects = QtDataVisualization
-
-qhp.QtDataVisualization.file = qtdatavis3d.qhp
-qhp.QtDataVisualization.namespace = org.qt-project.qtdatavisualization.$QT_VERSION_TAG
-qhp.QtDataVisualization.virtualFolder = qtdatavisualization
-qhp.QtDataVisualization.indexTitle = Qt Data Visualization
-qhp.QtDataVisualization.indexRoot =
-
-qhp.QtDataVisualization.filterAttributes = qtdatavisualization $QT_VERSION qtrefdoc
-qhp.QtDataVisualization.customFilters.Qt.name = QtDataVisualization $QT_VERSION
-qhp.QtDataVisualization.customFilters.Qt.filterAttributes = qtdatavisualization $QT_VERSION
-qhp.QtDataVisualization.subprojects = gettingstarted examples classes types
-qhp.QtDataVisualization.subprojects.gettingstarted.title = Getting Started
-qhp.QtDataVisualization.subprojects.gettingstarted.indexTitle = Qt Data Visualization Getting Started
-qhp.QtDataVisualization.subprojects.gettingstarted.selectors = fake:page
-qhp.QtDataVisualization.subprojects.gettingstarted.sortPages = true
-qhp.QtDataVisualization.subprojects.examples.title = Examples
-qhp.QtDataVisualization.subprojects.examples.indexTitle = Qt Data Visualization Examples
-qhp.QtDataVisualization.subprojects.examples.selectors = fake:example
-qhp.QtDataVisualization.subprojects.examples.sortPages = true
-qhp.QtDataVisualization.subprojects.classes.title = C++ Classes
-qhp.QtDataVisualization.subprojects.classes.indexTitle = Qt Data Visualization C++ Classes
-qhp.QtDataVisualization.subprojects.classes.selectors = class
-qhp.QtDataVisualization.subprojects.classes.sortPages = true
-qhp.QtDataVisualization.subprojects.types.title = QML Types
-qhp.QtDataVisualization.subprojects.types.indexTitle = Qt Data Visualization QML Types
-qhp.QtDataVisualization.subprojects.types.selectors = qmlclass
-qhp.QtDataVisualization.subprojects.types.sortPages = true
+depends = qtcore qtgui qtqml qtquick qtdoc qtcmake qtwidgets
+
+qhp.projects = QtDataVis3D
+
+qhp.QtDataVis3D.file = qtdatavis3d.qhp
+qhp.QtDataVis3D.namespace = org.qt-project.qtdatavisualization.$QT_VERSION_TAG
+qhp.QtDataVis3D.virtualFolder = qtdatavisualization
+qhp.QtDataVis3D.indexTitle = Qt Data Visualization
+qhp.QtDataVis3D.indexRoot =
+
+qhp.QtDataVis3D.subprojects = gettingstarted examples classes types
+qhp.QtDataVis3D.subprojects.gettingstarted.title = Getting Started
+qhp.QtDataVis3D.subprojects.gettingstarted.indexTitle = Qt Data Visualization Getting Started
+qhp.QtDataVis3D.subprojects.gettingstarted.selectors = doc:page
+qhp.QtDataVis3D.subprojects.gettingstarted.sortPages = true
+qhp.QtDataVis3D.subprojects.examples.title = Examples
+qhp.QtDataVis3D.subprojects.examples.indexTitle = Qt Data Visualization Examples
+qhp.QtDataVis3D.subprojects.examples.selectors = doc:example
+qhp.QtDataVis3D.subprojects.examples.sortPages = true
+qhp.QtDataVis3D.subprojects.classes.title = C++ Classes
+qhp.QtDataVis3D.subprojects.classes.indexTitle = Qt Data Visualization C++ Classes
+qhp.QtDataVis3D.subprojects.classes.selectors = class
+qhp.QtDataVis3D.subprojects.classes.sortPages = true
+qhp.QtDataVis3D.subprojects.types.title = QML Types
+qhp.QtDataVis3D.subprojects.types.indexTitle = Qt Data Visualization QML Types
+qhp.QtDataVis3D.subprojects.types.selectors = qmlclass
+qhp.QtDataVis3D.subprojects.types.sortPages = true
navigation.landingpage = Qt Data Visualization
navigation.cppclassespage = Qt Data Visualization C++ Classes
navigation.qmltypespage = Qt Data Visualization QML Types
-
-manifestmeta.highlighted.names = "QtDataVisualization/Bars Example" \
- "QtDataVisualization/Qt Quick 2 Surface Multiseries Example"
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
index 51e32e77..2f10a988 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
@@ -1,39 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [3]
#include <QtDataVisualization>
-using namespace QtDataVisualization;
-
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
//! [4]
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
index ca7de036..5bf508f3 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
@@ -1,39 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [3]
#include <QtDataVisualization>
-using namespace QtDataVisualization;
-
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
//! [0]
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp b/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
index 1d5038d0..3946ede6 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
@@ -1,39 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [5]
#include <QtDataVisualization>
-using namespace QtDataVisualization;
-
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
//! [0]
diff --git a/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp b/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
index 5528be4e..a192976d 100644
--- a/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_q3dtheme.cpp
@@ -1,37 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtDataVisualization/Q3DBars>
#include <QtDataVisualization/Q3DTheme>
-using namespace QtDataVisualization;
-
int main(int argc, char **argv)
{
//! [0]
diff --git a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
index c02c89f4..488d3a6f 100644
--- a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
import QtDataVisualization 1.2
diff --git a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
index 64e7751c..fa4e5178 100644
--- a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
@@ -1,36 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [0]
#include <QtDataVisualization>
-
-using namespace QtDataVisualization;
//! [0]
//! [1]
diff --git a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
index fea49c20..00652a42 100644
--- a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
+++ b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.pro
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#! [0]
QT += datavisualization
diff --git a/src/datavisualization/doc/src/qtdatavisualization-index.qdoc b/src/datavisualization/doc/src/qtdatavisualization-index.qdoc
index 44049bf3..5896b094 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-index.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-index.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Data Visualization
@@ -31,47 +7,39 @@
\brief Provides functionality for 3D visualization.
- Qt Data Visualization module provides a way to visualize data in 3D as bar,
- scatter, and surface graphs. It is especially useful for visualizing depth
- maps and large quantities of rapidly changing data, such as data received
- from multiple sensors. The look and feel of graphs can be customized
- by using themes or by adding custom items and labels to them.
+ The Qt Data Visualization module enables you to visualize data in 3D as
+ bar, scatter, and surface graphs. It's especially useful for visualizing
+ depth maps and large quantities of rapidly changing data, such as data
+ received from multiple sensors. The look and feel of graphs can be
+ customized by using themes or by adding custom items and labels.
- Qt Data Visualization is built on Qt 5 and OpenGL to take advantage of
- hardware acceleration and Qt Quick 2.
+ Qt Data Visualization is built on Qt 6 and OpenGL to take advantage of
+ hardware acceleration and Qt Quick.
- \section1 Getting Started
+ \section1 Using the Module
- To import Qt Data Visualization QML types, add the following import statement to your \c .qml
- file:
+ \section2 QML API
- \qml \QtMinorVersion
- import QtDataVisualization 1.\1
- \endqml
+ \include {module-use.qdocinc} {using the qml api} {QtDataVisualization}
- If you intend to use Qt Data Visualization C++ classes in your application, use the
- following include and using directives:
+ \section2 C++ API
- \snippet doc_src_qtdatavisualization.cpp 0
+ \include {module-use.qdocinc} {using the c++ api}
- \note If you are only using a few classes from this module, we recommend including only those
- specific classes instead of the whole module.
+ \section3 Building with CMake
- To link against the Qt Data Visualization module, add this line to your \c qmake project file:
+ \include {module-use.qdocinc} {building with cmake} {DataVisualization}
- \snippet doc_src_qtdatavisualization.pro 0
+ \section3 Building with qmake
- \section1 Licenses
+ \include {module-use.qdocinc} {building_with_qmake} {datavisualization}
- Qt Data Visualization is available under commercial licenses from \l{The Qt Company}.
- In addition, it is available under the \l{GNU General Public License, version 3}.
- See \l{Qt Licensing} for further details.
-
- \section1 Articles
+ \section1 Articles and Guides
\list
\li \l{Qt Data Visualization Overview}{Overview}
\li \l{Qt Data Visualization Data Handling}{Data Handling}
- \li \l{Qt Data Visualization Interacting with Data}{Interacting with Data}
+ \li \l{Qt Data Visualization Interacting with Data}{Interacting with
+ Data}
\li \l{Qt Data Visualization Known Issues}{Known Issues}
\endlist
@@ -85,4 +53,9 @@
\li \l{Qt Data Visualization C++ Classes}
\li \l{Qt Data Visualization QML Types}
\endlist
+
+ \section1 Licenses and Attributions
+ Qt Data Visualization is available under commercial licenses from \l{The Qt
+ Company}. In addition, it is available under the \l{GNU General Public
+ License, version 3}. See \l{Qt Licensing} for further details.
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc b/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
index f62a1d90..0bf83ec4 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-overview.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Data Visualization Overview
\page qtdatavisualization-overview.html
\brief An overview of the Qt Data Visualization module.
+ \ingroup explanation
The Qt Data Visualization module provides a way to develop rapidly
responding, complex, and dynamic 3D visualization for analytical demanding
@@ -79,8 +56,8 @@
\image q3dbars-minimal.png
- For more information, see \l{How to construct a minimal Q3DBars graph},
- \l {Bars Example}, and \l {Qt Quick 2 Bars Example}.
+ For more information, see \l{How to construct a minimal Q3DBars graph}, and
+ \l {Simple Bar Graph} examples.
\section2 3D Scatter Graphs
@@ -92,8 +69,8 @@
\image q3dscatter-minimal.png
- For more information, see \l{How to construct a minimal Q3DScatter graph},
- \l{Scatter Example}, and \l{Qt Quick 2 Scatter Example}.
+ For more information, see \l{How to construct a minimal Q3DScatter graph}, and
+ \l{Simple Scatter Graph} examples.
\section2 3D Surface Graphs
@@ -105,9 +82,8 @@
\image q3dsurface-minimal.png
- For more information, see \l{How to construct a minimal Q3DSurface graph},
- \l{Surface Example}, \l{Textured Surface Example}, \l{Qt Quick 2 Surface
- Example}, and \l{Qt Quick 2 Surface Multiseries Example}.
+ For more information, see \l{How to construct a minimal Q3DSurface graph}, \l{Graph Gallery},
+ and \l{Surface Graph Gallery} examples.
\section1 Using OpenGL for Rendering Data
@@ -138,7 +114,7 @@
be partially transparent. Therefore, changing the rendering mode is a
question of performance versus quality.
- Qt Quick 2 uses a dedicated scenegraph for data rendering, and is therefore
+ Qt Quick uses a dedicated scenegraph for data rendering, and is therefore
the best choice for data visualization.
\section1 3D Axes
@@ -211,7 +187,7 @@
If a graph displays the data from several data series, some settings can be
specified separately for each series. For example, different gradients can
be specified for different layers of the graph to make it look more
- realistic. For an example, see \l{Qt Quick 2 Surface Multiseries Example}.
+ realistic. For an example, see \l{Surface Graph Gallery}.
\section1 Customizing 3D Scenes
@@ -223,7 +199,7 @@
position follows the camera automatically.
The camera can be customized by specifying its preset position, rotation,
- and zoom level. For an example, see \l{Qt Quick 2 Scatter Example}.
+ and zoom level. For an example, see \l{Simple Scatter Graph}.
\section1 Customizing Items
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index bc3d58f3..c2bb0cc5 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\qmltype AbstractGraph3D
@@ -89,26 +65,19 @@
How the graph will be rendered. Defaults to \c{RenderIndirect}.
\value RenderDirectToBackground
- Indicates that the graph will be rendered directly on the window background.
+ Indicates that the graph will be rendered directly on the window background and QML items are
+ rendered on top of it. Using non-transparent QML item as a background will hide the graph.
Clears the whole window before rendering the graph, including the areas
- outside the graph.
- Since the graphs in this rendering mode are drawn on the window background under other QML
- items, the regular QML window clearing before rendering is suppressed. The graphs handle the clearing
- themselves instead.
- If the surface format of the window supports antialiasing, it will be used (see
+ outside the graph. If the surface format of the window supports antialiasing, it will be used (see
\c {QtDataVisualization::qDefaultSurfaceFormat()}).
This rendering mode offers the best performance at the expense of non-standard QML behavior. For example,
the graphs do not obey the z ordering of QML items and the opacity value has no effect on them.
+
\value RenderDirectToBackground_NoClear
- Similar to \c RenderDirectToBackground mode, except that the graph will not clear the whole
- window before rendering the graph. This mode is better for windows where you have other custom items
- besides the graphs that also draw on the window background. In that case you need to either take care
- of the window clearing yourself or ensure that all areas of the window are fully covered with opaque
- items.
- If one graph in the window uses either of the direct rendering modes, then all other graphs in the
- same window also drawn in direct modes should use the exact same direct rendering mode.
- Otherwise some graphs may not show up, depending on the drawing order of the graphs.
+ \obsolete
+ \note This will work exactly the same way as \c RenderDirectToBackground does in Qt 6
+ as not clearing the window is not supported anymore.
\value RenderIndirect
Indicates the graph will be first rendered to an offscreen surface that
@@ -197,6 +166,12 @@
*/
/*!
+ * \qmlmethod bool AbstractGraph3D::hasSeries(Abstract3DSeries series)
+ * \since 6.3
+ * Returns whether the \a series has already been added to the graph.
+ */
+
+/*!
* \qmlmethod int AbstractGraph3D::addCustomItem(Custom3DItem item)
*
* Adds a Custom3DItem \a item to the graph. Graph takes ownership of the added item.
@@ -309,7 +284,7 @@
* \c selectedElementChanged signal is emitted.
*
* The signal can be used for example for implementing customized input
- * handling, as demonstrated by the \l {Qt Quick 2 Axis Dragging Example}.
+ * handling, as demonstrated by the \l {Axis Handling} example.
*
* \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem(),
* Bars3D::selectedSeries, Scatter3D::selectedSeries, Scene3D::selectionQueryPosition,
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
index efe39238..5116aa3a 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
* \qmltype Bars3D
@@ -33,7 +9,7 @@
* \ingroup datavisualization_qml
* \brief 3D bar graph.
*
- * This type enables developers to render bar graphs in 3D with Qt Quick 2.
+ * This type enables developers to render bar graphs in 3D with Qt Quick.
*
* You will need to import data visualization module to use this type:
*
@@ -43,7 +19,7 @@
*
* \snippet doc_src_qmldatavisualization.cpp 1
*
- * See \l{Qt Quick 2 Bars Example} for more thorough usage example.
+ * See \l{Simple Bar Graph} for more thorough usage example.
*
* \sa Bar3DSeries, ItemModelBarDataProxy, Scatter3D, Surface3D, {Qt Data Visualization C++ Classes}
*/
@@ -108,6 +84,14 @@
*/
/*!
+ * \qmlproperty size Bars3D::barSeriesMargin
+ * \since 6.3
+ *
+ * Margin between series columns in X and Z dimensions. Preset to \c {(0.0, 0.0)} by default.
+ * Sensible values are on the range [0,1).
+ */
+
+/*!
* \qmlproperty Bar3DSeries Bars3D::selectedSeries
* The selected series or \c null. If \l {QAbstract3DGraph::selectionMode}{selectionMode} has
* the \c SelectionMultiSeries flag set, this property holds the series that
@@ -116,7 +100,7 @@
/*!
* \qmlproperty list<Bar3DSeries> Bars3D::seriesList
- * \default
+ * \qmldefault
* The series of the graph.
* By default, this property contains an empty list.
* To set the series, either use the addSeries() function or define them as children of the graph.
@@ -156,11 +140,13 @@
* generate the row or column labels on the axes in cases where the labels are not explicitly set
* to the axes. If the newly added series has specified a selected bar, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ * \sa AbstractGraph3D::hasSeries()
*/
/*!
* \qmlmethod void Bars3D::removeSeries(Bar3DSeries series)
* Remove the \a series from the graph.
+ * \sa AbstractGraph3D::hasSeries()
*/
/*!
@@ -171,4 +157,5 @@
* \note When moving a series to a new \a index that is after its old index,
* the new position in list is calculated as if the series was still in its old
* index, so the final index is actually the \a index decremented by one.
+ * \sa AbstractGraph3D::hasSeries()
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
index ee23ae20..cb8b70d2 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-color.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\qmltype ThemeColor
@@ -41,4 +17,6 @@
The color property describes the color of this ThemeColor.
The default color is black.
+
+ \note Transparency is not supported and will result in undefined behavior.
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
index 53e2b76a..36277944 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-colorgradient.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\qmltype ColorGradientStop
@@ -54,6 +30,8 @@
The default color is black.
+ \note Transparency in a gradient is not supported and will result in undefined behavior.
+
\sa ColorGradient
*/
@@ -80,7 +58,7 @@
/*!
\qmlproperty list<ColorGradientStop> ColorGradient::stops
- \default
+ \qmldefault
This property holds the gradient stops describing the gradient.
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
index 52b6d12e..8e43ea79 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\qmltype Scatter3D
@@ -33,7 +9,7 @@
\ingroup datavisualization_qml
\brief 3D scatter graph.
- This type enables developers to render scatter graphs in 3D with Qt Quick 2.
+ This type enables developers to render scatter graphs in 3D with Qt Quick.
You will need to import data visualization module to use this type:
@@ -43,7 +19,7 @@
\snippet doc_src_qmldatavisualization.cpp 2
- See \l{Qt Quick 2 Scatter Example} for more thorough usage example.
+ See \l{Simple Scatter Graph} for more thorough usage example.
\sa Scatter3DSeries, ScatterDataProxy, Bars3D, Surface3D, {Qt Data Visualization C++ Classes}
*/
@@ -85,7 +61,7 @@
/*!
* \qmlproperty list<Scatter3DSeries> Scatter3D::seriesList
- * \default
+ * \qmldefault
* This property holds the series of the graph.
* By default, this property contains an empty list.
* To set the series, either use the addSeries() method or define them as
@@ -97,9 +73,11 @@
* Adds the \a series to the graph. A graph can contain multiple series, but has only one set of
* axes. If the newly added series has specified a selected item, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ * \sa AbstractGraph3D::hasSeries()
*/
/*!
* \qmlmethod void Scatter3D::removeSeries(Scatter3DSeries series)
* Remove the \a series from the graph.
+ * \sa AbstractGraph3D::hasSeries()
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
index bf90396f..b8f47fd3 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\qmltype Surface3D
@@ -33,7 +9,7 @@
\ingroup datavisualization_qml
\brief Describes the usage of the 3D surface graph.
- This type enables developers to render surface plots in 3D with Qt Quick 2.
+ This type enables developers to render surface plots in 3D with Qt Quick.
You will need to import the data visualization module to use this type:
@@ -43,7 +19,7 @@
\snippet doc_src_qmldatavisualization.cpp 3
- See \l{Qt Quick 2 Surface Example} for more thorough usage example.
+ See \l{Surface Graph Gallery} for more thorough usage example.
\sa Surface3DSeries, ItemModelSurfaceDataProxy, Bars3D, Scatter3D, {Qt Data Visualization C++ Classes}
*/
@@ -83,7 +59,7 @@
/*!
* \qmlproperty list<Surface3DSeries> Surface3D::seriesList
- * \default
+ * \qmldefault
* This property holds the series of the graph.
* By default, this property contains an empty list.
* To set the series, either use the addSeries() function or define them as children of the graph.
@@ -108,9 +84,11 @@
/*!
* \qmlmethod void Surface3D::addSeries(Surface3DSeries series)
* Adds the \a series to the graph.
+ * \sa AbstractGraph3D::hasSeries()
*/
/*!
* \qmlmethod void Surface3D::removeSeries(Surface3DSeries series)
* Removes the \a series from the graph.
+ * \sa AbstractGraph3D::hasSeries()
*/
diff --git a/src/datavisualization/doc/src/qtdatavisualization.qdoc b/src/datavisualization/doc/src/qtdatavisualization.qdoc
index 726db582..5b91c2da 100644
--- a/src/datavisualization/doc/src/qtdatavisualization.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization.qdoc
@@ -1,43 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \namespace QtDataVisualization
- \inmodule QtDataVisualization
- \brief Contains the classes and enumerations in the Qt Data Visualization
- module.
-
- \generatelist{classesbymodule QtDataVisualization}
-*/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\module QtDataVisualization
\title Qt Data Visualization C++ Classes
\ingroup modules
+ \qtcmakepackage DataVisualization
+ \qtvariable datavisualization
\brief C++ classes for the Qt Data Visualization API.
@@ -58,7 +27,6 @@
/*!
\group datavisualization_examples
- \ingroup all-examples
\title Qt Data Visualization Examples
\brief Examples for the Qt Data Visualization.
@@ -68,10 +36,12 @@
\section1 Examples
\annotatedlist qtdatavisualization_examples
+ The following examples show how to use Qt Quick to visualize data:
+ \annotatedlist qtdatavisualization_qmlexamples
*/
/*!
- \page qtdatavisualization_data_handling.html
+ \page qtdatavisualization-data-handling.html
\title Qt Data Visualization Data Handling
\section1 Series
@@ -142,9 +112,9 @@
QHeightMapSurfaceDataProxy is a specialized proxy for generating a surface graph from a
heightmap image. See the QHeightMapSurfaceDataProxy documentation for more information.
- The \l{Custom Proxy Example}{Custom Proxy} example shows how a custom proxy can be created. It
- defines a custom data set based on variant lists and an extension of the basic proxy to resolve
- that data with an associated mapper.
+ The \l{Graph Gallery} example shows how a custom proxy can be created, under the
+ \uicontrol {Bar Graph} tab. It defines a custom data set based on variant lists and an
+ extension of the basic proxy to resolve that data with an associated mapper.
\section1 Dealing with Real-time Data
@@ -174,7 +144,7 @@
*/
/*!
- \page qtdatavisualization_interacting_with_data.html
+ \page qtdatavisualization-interacting-with-data.html
\title Qt Data Visualization Interacting with Data
\section1 Interacting with Data
@@ -192,9 +162,8 @@
the default touch controls, see QTouch3DInputHandler. The default handlers
must be disabled when using customized input handlers.
- The \l{Custom Input Example} illustrates how to use a custom input handler
- to select items upon mouseover instead of mouse click. The information
- below the mouse cursor is displayed as a popup.
+ The \l{Graph Gallery} example, under \uicontrol {Scatter Graph} tab, illustrates how to use
+ a custom input handler to drag an axis label to move the visible part of the data.
In addition to perspective projection, orthographic projection can be used
to create 2D graphs by replacing the default input handler with one that
@@ -221,12 +190,17 @@
*/
/*!
- \page qtdatavisualization_known_issues.html
+ \page qtdatavisualization-known-issues.html
\title Qt Data Visualization Known Issues
\list
+ \li As OpenGL is not necessarily the default rendering backend anymore in Qt 6.x (it is
+ Metal on macOS and Direct3D on Windows, for example), it is necessary to define
+ the rendering backend explicitly either on your environment variables, or in your
+ application main. It can be defined by adding \c {qputenv("QSG_RHI_BACKEND", "opengl");}
+ in the beginning of your main function.
\li Some platforms like Android and WinRT cannot handle multiple native windows properly,
- so only the Qt Quick 2 graphs are available in practice for those platforms.
+ so only the Qt Quick graphs are available in practice for those platforms.
\li Surfaces with non-straight rows and columns do not always render properly.
\li Q3DLight class (and Light3D QML item) are currently not usable for anything.
\li Changing most of Q3DScene properties affecting subviewports currently has no effect.
@@ -240,7 +214,7 @@
*/
/*!
- * \fn QSurfaceFormat QtDataVisualization::qDefaultSurfaceFormat(bool antialias)
+ * \fn QSurfaceFormat qDefaultSurfaceFormat(bool antialias)
* \relates QAbstract3DGraph
*
* This convenience function can be used to create a custom surface format suitable for use by
@@ -258,7 +232,7 @@
*
* // ...
*
- * Q3DBars *graph = new Q3DBars(QtDataVisualization::qDefaultSurfaceFormat(false));
+ * Q3DBars *graph = new Q3DBars(qDefaultSurfaceFormat(false));
* \endcode
*
* For example, enable antialiasing for direct rendering modes on QML application:
@@ -269,7 +243,7 @@
* // ...
*
* QQuickView viewer;
- * viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat());
+ * viewer.setFormat(qDefaultSurfaceFormat(true));
* \endcode
*
* \note Antialiasing is not supported in OpenGL ES2 environments.
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 40cbe88d..f7d7f206 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -1,32 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
+#include "abstractdeclarativeinterface_p.h"
#include "abstract3dcontroller_p.h"
#include "qabstract3daxis_p.h"
#include "qvalue3daxis_p.h"
@@ -41,7 +18,7 @@
#include <QtOpenGL/QOpenGLFramebufferObject>
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scene,
QObject *parent) :
@@ -178,6 +155,11 @@ void Abstract3DController::removeSeries(QAbstract3DSeries *series)
}
}
+bool Abstract3DController::hasSeries(QAbstract3DSeries *series)
+{
+ return m_seriesList.contains(series);
+}
+
QList<QAbstract3DSeries *> Abstract3DController::seriesList()
{
return m_seriesList;
@@ -692,12 +674,16 @@ void Abstract3DController::handleThemeTypeChanged(Q3DTheme::Theme theme)
{
Q_UNUSED(theme);
+ if (!m_qml)
+ return;
+
// Changing theme type is logically equivalent of changing the entire theme
// object, so reset all attached series to the new theme.
-
+ bool force = m_qml->isReady();
Q3DTheme *activeTheme = m_themeManager->activeTheme();
for (int i = 0; i < m_seriesList.size(); i++)
- m_seriesList.at(i)->d_ptr->resetToTheme(*activeTheme, i, true);
+ m_seriesList.at(i)->d_ptr->resetToTheme(*activeTheme, i, force);
+
markSeriesVisualsDirty();
}
@@ -1012,7 +998,7 @@ int Abstract3DController::addCustomItem(QCustom3DItem *item)
item->d_ptr->resetDirtyBits();
m_isCustomDataDirty = true;
emitNeedRender();
- return m_customItems.count() - 1;
+ return m_customItems.size() - 1;
}
void Abstract3DController::deleteCustomItems()
@@ -1539,7 +1525,7 @@ int Abstract3DController::selectedLabelIndex() const
{
int index = m_selectedLabelIndex;
QAbstract3DAxis *axis = selectedAxis();
- if (axis && axis->labels().count() <= index)
+ if (axis && axis->labels().size() <= index)
index = -1;
return index;
}
@@ -1569,7 +1555,7 @@ QAbstract3DAxis *Abstract3DController::selectedAxis() const
int Abstract3DController::selectedCustomItemIndex() const
{
int index = m_selectedCustomItemIndex;
- if (m_customItems.count() <= index)
+ if (m_customItems.size() <= index)
index = -1;
return index;
}
@@ -1608,7 +1594,7 @@ bool Abstract3DController::isOrthoProjection() const
void Abstract3DController::setAspectRatio(qreal ratio)
{
- if (m_aspectRatio != ratio) {
+ if (m_aspectRatio != ratio && ratio > 0) {
m_aspectRatio = ratio;
m_changeTracker.aspectRatioChanged = true;
emit aspectRatioChanged(m_aspectRatio);
@@ -1624,7 +1610,7 @@ qreal Abstract3DController::aspectRatio()
void Abstract3DController::setHorizontalAspectRatio(qreal ratio)
{
- if (m_horizontalAspectRatio != ratio) {
+ if (m_horizontalAspectRatio != ratio && ratio > 0) {
m_horizontalAspectRatio = ratio;
m_changeTracker.horizontalAspectRatioChanged = true;
emit horizontalAspectRatioChanged(m_horizontalAspectRatio);
@@ -1655,7 +1641,7 @@ bool Abstract3DController::reflection() const
void Abstract3DController::setReflectivity(qreal reflectivity)
{
- if (m_reflectivity != reflectivity) {
+ if (m_reflectivity != reflectivity && reflectivity > 0) {
m_reflectivity = reflectivity;
m_changeTracker.reflectivityChanged = true;
emit reflectivityChanged(m_reflectivity);
@@ -1744,4 +1730,4 @@ qreal Abstract3DController::margin() const
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 48a71dd9..5081d37f 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,7 +14,8 @@
#ifndef ABSTRACT3DCONTROLLER_P_H
#define ABSTRACT3DCONTROLLER_P_H
-#include "datavisualizationglobal_p.h"
+#include <private/datavisualizationglobal_p.h>
+
#include "qabstract3daxis.h"
#include "drawer_p.h"
#include "qabstract3dinputhandler.h"
@@ -54,8 +29,10 @@
QT_FORWARD_DECLARE_CLASS(QOpenGLFramebufferObject)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
+class AbstractDeclarativeInterface;
+class AbstractDeclarative;
class Abstract3DRenderer;
class QAbstract3DSeries;
class ThemeManager;
@@ -163,7 +140,7 @@ struct Abstract3DChangeBitField {
}
};
-class QT_DATAVISUALIZATION_EXPORT Abstract3DController : public QObject
+class Q_DATAVISUALIZATION_EXPORT Abstract3DController : public QObject
{
Q_OBJECT
@@ -225,6 +202,7 @@ protected:
qreal m_margin;
QMutex m_renderMutex;
+ AbstractDeclarativeInterface *m_qml = nullptr;
explicit Abstract3DController(QRect initialViewport, Q3DScene *scene, QObject *parent = 0);
@@ -240,6 +218,7 @@ public:
virtual void addSeries(QAbstract3DSeries *series);
virtual void insertSeries(int index, QAbstract3DSeries *series);
virtual void removeSeries(QAbstract3DSeries *series);
+ virtual bool hasSeries(QAbstract3DSeries *series);
QList<QAbstract3DSeries *> seriesList();
virtual void setAxisX(QAbstract3DAxis *axis);
@@ -435,6 +414,6 @@ private:
friend class QAbstract3DGraphPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index ef77dc92..a39a6079 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "abstract3drenderer_p.h"
#include "texturehelper_p.h"
@@ -42,7 +18,7 @@
#include <QtGui/QOffscreenSurface>
#include <QtCore/QThread>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
// Defined in shaderhelper.cpp
extern void discardDebugMsgs(QtMsgType type, const QMessageLogContext &context, const QString &msg);
@@ -118,7 +94,7 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_oldCameraTarget(QVector3D(2000.0f, 2000.0f, 2000.0f)), // Just random invalid target
m_reflectionEnabled(false),
m_reflectivity(0.5),
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
m_funcs_2_1(0),
#endif
m_context(0),
@@ -127,12 +103,12 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
{
initializeOpenGLFunctions();
m_isOpenGLES = Utils::isOpenGLES();
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (!m_isOpenGLES) {
// Discard warnings about deprecated functions
QtMessageHandler handler = qInstallMessageHandler(discardDebugMsgs);
- m_funcs_2_1 = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_1>();
+ m_funcs_2_1 = new QOpenGLFunctions_2_1;
if (m_funcs_2_1)
m_funcs_2_1->initializeOpenGLFunctions();
@@ -192,6 +168,10 @@ Abstract3DRenderer::~Abstract3DRenderer()
m_axisCacheX.clearLabels();
m_axisCacheY.clearLabels();
m_axisCacheZ.clearLabels();
+
+#if !QT_CONFIG(opengles2)
+ delete m_funcs_2_1;
+#endif
}
void Abstract3DRenderer::contextCleanup()
@@ -210,7 +190,7 @@ void Abstract3DRenderer::initializeOpenGL()
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (!m_isOpenGLES) {
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
@@ -745,8 +725,10 @@ void Abstract3DRenderer::updateCustomData(const QList<QCustom3DItem *> &customIt
CustomRenderItem *renderItem = m_customRenderCache.value(item);
if (!renderItem)
renderItem = addCustomItem(item);
- renderItem->setValid(true);
- renderItem->setIndex(i); // always update index, as it must match the custom item index
+ if (renderItem) {
+ renderItem->setValid(true);
+ renderItem->setIndex(i); // always update index, as it must match the custom item index
+ }
}
// Check render item cache and remove items that are not in customItems list anymore
@@ -937,12 +919,27 @@ void Abstract3DRenderer::drawAxisTitleX(const QVector3D &labelRotation,
xRotation = -90.0f - labelRotation.z();
extraRotation = -extraRotation;
}
+ if (m_yFlipped) {
+ alignment = Qt::AlignBottom;
+ extraRotation = -extraRotation;
+ if (m_xFlipped)
+ xRotation = 90.0f + labelRotation.z();
+ else
+ xRotation = 90.0f - labelRotation.z();
+ }
} else {
if (m_xFlipped) {
offsetRotation = -offsetRotation;
xRotation = -90.0f - labelRotation.z();
extraRotation = -extraRotation;
}
+ if (m_yFlipped) {
+ xRotation = 90.0f + labelRotation.z();
+ alignment = Qt::AlignBottom;
+ extraRotation = -extraRotation;
+ if (m_xFlipped)
+ xRotation = 90.0f - labelRotation.z();
+ }
}
}
@@ -1034,6 +1031,11 @@ void Abstract3DRenderer::drawAxisTitleZ(const QVector3D &labelRotation,
yRotation = -yRotation;
}
}
+ if (m_yFlipped) {
+ xRotation = -xRotation;
+ alignment = Qt::AlignBottom;
+ extraRotation = -extraRotation;
+ }
}
float offsetRotation = zRotation;
@@ -1129,7 +1131,10 @@ CustomRenderItem *Abstract3DRenderer::addCustomItem(QCustom3DItem *item)
CustomRenderItem *newItem = new CustomRenderItem();
newItem->setRenderer(this);
newItem->setItemPointer(item); // Store pointer for render item updates
- newItem->setMesh(item->meshFile());
+ if (!newItem->setMesh(item->meshFile())) {
+ delete newItem;
+ return nullptr;
+ }
newItem->setOrigPosition(item->position());
newItem->setOrigScaling(item->scaling());
newItem->setScalingAbsolute(item->isScalingAbsolute());
@@ -1442,7 +1447,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
bool volumeDetected = false;
int loopCount = 0;
while (loopCount < 2) {
- for (QCustom3DItem *customItem : qAsConst(m_customItemDrawOrder)) {
+ for (QCustom3DItem *customItem : std::as_const(m_customItemDrawOrder)) {
CustomRenderItem *item = m_customRenderCache.value(customItem);
// Check that the render item is visible, and skip drawing if not
// Also check if reflected item is on the "wrong" side, and skip drawing if it is
@@ -1633,7 +1638,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
m_drawer->drawObject(shader, item->mesh(), item->texture());
}
}
- } else if (RenderingSelection == state) {
+ } else if (RenderingSelection == state && !volumeDetected) {
// Selection render
shader->setUniformValue(shader->MVP(), MVPMatrix);
QVector4D itemColor = indexToSelectionColor(item->index());
@@ -1991,4 +1996,4 @@ void Abstract3DRenderer::updateCameraViewport()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index affd0d69..560e6d2e 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -41,8 +15,8 @@
#define ABSTRACT3DRENDERER_P_H
#include <QtGui/QOpenGLFunctions>
-#if !defined(QT_OPENGL_ES_2)
-# include <QtGui/QOpenGLFunctions_2_1>
+#if !QT_CONFIG(opengles2)
+# include <QtOpenGL/QOpenGLFunctions_2_1>
#endif
#include "datavisualizationglobal_p.h"
#include "abstract3dcontroller_p.h"
@@ -50,9 +24,11 @@
#include "seriesrendercache_p.h"
#include "customrenderitem_p.h"
+#include <QtCore/qpointer.h>
+
QT_FORWARD_DECLARE_CLASS(QOffscreenSurface)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class TextureHelper;
class Theme;
@@ -333,8 +309,8 @@ protected:
qreal m_reflectivity;
QLocale m_locale;
-#if !defined(QT_OPENGL_ES_2)
- QOpenGLFunctions_2_1 *m_funcs_2_1; // Not owned
+#if !QT_CONFIG(opengles2)
+ QOpenGLFunctions_2_1 *m_funcs_2_1;
#endif
QPointer<QOpenGLContext> m_context; // Not owned
bool m_isOpenGLES;
@@ -343,6 +319,6 @@ private:
friend class Abstract3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/abstractdeclarativeinterface.cpp b/src/datavisualization/engine/abstractdeclarativeinterface.cpp
new file mode 100644
index 00000000..8a8b80fd
--- /dev/null
+++ b/src/datavisualization/engine/abstractdeclarativeinterface.cpp
@@ -0,0 +1,11 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtDataVisualization/private/abstractdeclarativeinterface_p.h>
+
+QT_BEGIN_NAMESPACE
+
+AbstractDeclarativeInterface::~AbstractDeclarativeInterface()
+ = default;
+
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstractdeclarativeinterface_p.h b/src/datavisualization/engine/abstractdeclarativeinterface_p.h
new file mode 100644
index 00000000..8ea01bb1
--- /dev/null
+++ b/src/datavisualization/engine/abstractdeclarativeinterface_p.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef ABSTRACTDECLARATIVEINTERFACE_P_H
+#define ABSTRACTDECLARATIVEINTERFACE_P_H
+
+#include <QtDataVisualization/qdatavisualizationglobal.h>
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+QT_BEGIN_NAMESPACE
+
+class Q_DATAVISUALIZATION_EXPORT AbstractDeclarativeInterface
+{
+protected:
+ ~AbstractDeclarativeInterface();
+public:
+ virtual bool isReady() const = 0;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/engine/axisrendercache.cpp b/src/datavisualization/engine/axisrendercache.cpp
index cdf6c7ac..1218eec2 100644
--- a/src/datavisualization/engine/axisrendercache.cpp
+++ b/src/datavisualization/engine/axisrendercache.cpp
@@ -1,37 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "axisrendercache_p.h"
#include <QtGui/QFontMetrics>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
AxisRenderCache::AxisRenderCache()
: m_type(QAbstract3DAxis::AxisTypeNone),
@@ -208,4 +184,4 @@ int AxisRenderCache::maxLabelWidth(const QStringList &labels) const
return labelWidth;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/axisrendercache_p.h b/src/datavisualization/engine/axisrendercache_p.h
index bf2e3f70..a8913f1d 100644
--- a/src/datavisualization/engine/axisrendercache_p.h
+++ b/src/datavisualization/engine/axisrendercache_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "drawer_p.h"
#include <QtCore/QPointer>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class AxisRenderCache : public QObject
{
@@ -154,6 +128,6 @@ private:
Q_DISABLE_COPY(AxisRenderCache)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index a6bfd080..a307f2f4 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "bars3dcontroller_p.h"
#include "bars3drenderer_p.h"
@@ -37,7 +13,7 @@
#include "q3dtheme_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
Bars3DController::Bars3DController(QRect boundRect, Q3DScene *scene)
: Abstract3DController(boundRect, scene),
@@ -49,6 +25,7 @@ Bars3DController::Bars3DController(QRect boundRect, Q3DScene *scene)
m_barThicknessRatio(1.0f),
m_barSpacing(QSizeF(1.0, 1.0)),
m_floorLevel(0.0f),
+ m_barSeriesMargin(0.0f, 0.0f),
m_renderer(0)
{
// Setting a null axis creates a new default axis according to orientation and graph type.
@@ -108,6 +85,11 @@ void Bars3DController::synchDataToRenderer()
m_changeTracker.floorLevelChanged = false;
}
+ if (m_changeTracker.barSeriesMarginChanged) {
+ m_renderer->updateBarSeriesMargin(m_barSeriesMargin);
+ m_changeTracker.barSeriesMarginChanged = false;
+ }
+
Abstract3DController::synchDataToRenderer();
// Notify changes to renderer
@@ -322,6 +304,11 @@ void Bars3DController::handleDataColumnLabelsChanged()
}
}
+void Bars3DController::handleRowColorsChanged()
+{
+ emitNeedRender();
+}
+
void Bars3DController::handleAxisAutoAdjustRangeChangedInOrientation(
QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust)
{
@@ -510,6 +497,18 @@ QSizeF Bars3DController::barSpacing()
return m_barSpacing;
}
+void Bars3DController::setBarSeriesMargin(const QSizeF &margin)
+{
+ m_barSeriesMargin = margin;
+ m_changeTracker.barSeriesMarginChanged = true;
+ emitNeedRender();
+}
+
+QSizeF Bars3DController::barSeriesMargin()
+{
+ return m_barSeriesMargin;
+}
+
bool Bars3DController::isBarSpecRelative()
{
return m_isBarSpecRelative;
@@ -730,4 +729,4 @@ QAbstract3DAxis *Bars3DController::createDefaultAxis(QAbstract3DAxis::AxisOrient
return defaultAxis;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index 74847ccd..a92db468 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef Q3DBARSCONTROLLER_p_H
#define Q3DBARSCONTROLLER_p_H
-#include "datavisualizationglobal_p.h"
-#include "abstract3dcontroller_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/abstract3dcontroller_p.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Bars3DRenderer;
class QBar3DSeries;
@@ -55,6 +29,7 @@ struct Bars3DChangeBitField {
bool rowsChanged : 1;
bool itemChanged : 1;
bool floorLevelChanged : 1;
+ bool barSeriesMarginChanged : 1;
Bars3DChangeBitField() :
multiSeriesScalingChanged(true),
@@ -62,12 +37,13 @@ struct Bars3DChangeBitField {
selectedBarChanged(true),
rowsChanged(false),
itemChanged(false),
- floorLevelChanged(false)
+ floorLevelChanged(false),
+ barSeriesMarginChanged(false)
{
}
};
-class QT_DATAVISUALIZATION_EXPORT Bars3DController : public Abstract3DController
+class Q_DATAVISUALIZATION_EXPORT Bars3DController : public Abstract3DController
{
Q_OBJECT
@@ -98,6 +74,7 @@ private:
GLfloat m_barThicknessRatio;
QSizeF m_barSpacing;
float m_floorLevel;
+ QSizeF m_barSeriesMargin;
// Rendering
Bars3DRenderer *m_renderer;
@@ -106,8 +83,8 @@ public:
explicit Bars3DController(QRect rect, Q3DScene *scene = 0);
~Bars3DController();
- virtual void initializeOpenGL();
- virtual void synchDataToRenderer();
+ void initializeOpenGL() override;
+ void synchDataToRenderer() override;
void setMultiSeriesScaling(bool uniform);
bool multiSeriesScaling() const;
@@ -118,6 +95,9 @@ public:
void setBarSpecs(GLfloat thicknessRatio = 1.0f,
const QSizeF &spacing = QSizeF(1.0, 1.0),
bool relative = true);
+ void setBarSeriesMargin(const QSizeF &margin);
+ QSizeF barSeriesMargin();
+
GLfloat barThickness();
QSizeF barSpacing();
bool isBarSpecRelative();
@@ -126,29 +106,29 @@ public:
inline QBar3DSeries *selectedSeries() const { return m_selectedBarSeries; }
- void setSelectionMode(QAbstract3DGraph::SelectionFlags mode);
+ void setSelectionMode(QAbstract3DGraph::SelectionFlags mode) override;
void setSelectedBar(const QPoint &position, QBar3DSeries *series, bool enterSlice);
- virtual void clearSelection();
+ void clearSelection() override;
- virtual void handleAxisAutoAdjustRangeChangedInOrientation(
- QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust);
- virtual void handleSeriesVisibilityChangedBySender(QObject *sender);
- virtual void handlePendingClick();
+ void handleAxisAutoAdjustRangeChangedInOrientation(
+ QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust) override;
+ void handleSeriesVisibilityChangedBySender(QObject *sender) override;
+ void handlePendingClick() override;
static QPoint invalidSelectionPosition();
- virtual void setAxisX(QAbstract3DAxis *axis);
- virtual void setAxisZ(QAbstract3DAxis *axis);
+ void setAxisX(QAbstract3DAxis *axis) override;
+ void setAxisZ(QAbstract3DAxis *axis) override;
virtual void setPrimarySeries(QBar3DSeries *series);
virtual QBar3DSeries *primarySeries() const;
- virtual void addSeries(QAbstract3DSeries *series);
- virtual void removeSeries(QAbstract3DSeries *series);
- virtual void insertSeries(int index, QAbstract3DSeries *series);
+ void addSeries(QAbstract3DSeries *series) override;
+ void removeSeries(QAbstract3DSeries *series) override;
+ void insertSeries(int index, QAbstract3DSeries *series) override;
virtual QList<QBar3DSeries *> barSeriesList();
- virtual void handleAxisRangeChangedBySender(QObject *sender);
- virtual void adjustAxisRanges();
+ void handleAxisRangeChangedBySender(QObject *sender) override;
+ void adjustAxisRanges() override;
public Q_SLOTS:
void handleArrayReset();
@@ -159,13 +139,14 @@ public Q_SLOTS:
void handleItemChanged(int rowIndex, int columnIndex);
void handleDataRowLabelsChanged();
void handleDataColumnLabelsChanged();
+ void handleRowColorsChanged();
Q_SIGNALS:
void primarySeriesChanged(QBar3DSeries *series);
void selectedSeriesChanged(QBar3DSeries *series);
protected:
- virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation);
+ QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation) override;
private:
void adjustSelectionPosition(QPoint &pos, const QBar3DSeries *series);
@@ -173,6 +154,6 @@ private:
Q_DISABLE_COPY(Bars3DController)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index bfc0f5c8..8d2d9cce 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "bars3drenderer_p.h"
#include "q3dcamera_p.h"
@@ -40,7 +16,7 @@
// You should see the scene from where the light is
//#define SHOW_DEPTH_TEXTURE_SCENE
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
const bool sliceGridLabels = true;
@@ -49,6 +25,7 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller)
m_cachedIsSlicingActivated(false),
m_cachedRowCount(0),
m_cachedColumnCount(0),
+ m_cachedBarSeriesMargin(0.0f, 0.0f),
m_selectedBar(0),
m_sliceCache(0),
m_sliceTitleItem(0),
@@ -198,7 +175,8 @@ void Bars3DRenderer::updateData()
m_seriesScaleX = 1.0f / float(m_visibleSeriesCount);
m_seriesStep = 1.0f / float(m_visibleSeriesCount);
- m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f) * m_seriesStep;
+ m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f)
+ * (m_seriesStep - (m_seriesStep * m_cachedBarSeriesMargin.width()));
if (m_keepSeriesUniform)
m_seriesScaleZ = m_seriesScaleX;
@@ -1077,7 +1055,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
foreach (SeriesRenderCache *baseCache, m_renderCacheList) {
if (baseCache->isVisible()) {
BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache);
- float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f;
+ float seriesPos = m_seriesStart + m_seriesStep
+ * (cache->visualIndex() - (cache->visualIndex()
+ * m_cachedBarSeriesMargin.width())) + 0.5f;
ObjectHelper *barObj = cache->object();
QQuaternion seriesRotation(cache->meshRotation());
const BarRenderItemArray &renderArray = cache->renderArray();
@@ -1199,7 +1179,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
foreach (SeriesRenderCache *baseCache, m_renderCacheList) {
if (baseCache->isVisible()) {
BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache);
- float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f;
+ float seriesPos = m_seriesStart + m_seriesStep
+ * (cache->visualIndex() - (cache->visualIndex()
+ * m_cachedBarSeriesMargin.width())) + 0.5f;
ObjectHelper *barObj = cache->object();
QQuaternion seriesRotation(cache->meshRotation());
const BarRenderItemArray &renderArray = cache->renderArray();
@@ -1459,7 +1441,9 @@ bool Bars3DRenderer::drawBars(BarRenderItem **selectedBar,
foreach (SeriesRenderCache *baseCache, m_renderCacheList) {
if (baseCache->isVisible()) {
BarSeriesRenderCache *cache = static_cast<BarSeriesRenderCache *>(baseCache);
- float seriesPos = m_seriesStart + m_seriesStep * cache->visualIndex() + 0.5f;
+ float seriesPos = m_seriesStart + m_seriesStep
+ * (cache->visualIndex() - (cache->visualIndex()
+ * m_cachedBarSeriesMargin.width())) + 0.5f;
ObjectHelper *barObj = cache->object();
QQuaternion seriesRotation(cache->meshRotation());
Q3DTheme::ColorStyle colorStyle = cache->colorStyle();
@@ -1620,10 +1604,17 @@ bool Bars3DRenderer::drawBars(BarRenderItem **selectedBar,
}
case Bars3DController::SelectionNone: {
// Current bar is not selected, nor on a row or column
- if (colorStyleIsUniform)
- barColor = baseColor;
- else
+ if (colorStyleIsUniform) {
+ QList<QColor> rowColors = cache->series()->rowColors();
+ if (rowColors.size() == 0) {
+ barColor = baseColor;
+ } else {
+ int rowColorIndex = row % rowColors.size();
+ barColor = Utils::vectorFromColor(rowColors[rowColorIndex]);
+ }
+ } else {
gradientTexture = cache->baseGradientTexture();
+ }
break;
}
}
@@ -2051,10 +2042,14 @@ void Bars3DRenderer::drawLabels(bool drawSelection, const Q3DCamera *activeCamer
glEnable(GL_POLYGON_OFFSET_FILL);
+ // If camera x rotation is 180, side labels face wrong direction
+ float activeCameraXRotation = (activeCamera->xRotation() >= 180.0f) ? -180.0f
+ : activeCamera->xRotation();
+
float labelAutoAngle = m_axisCacheY.labelAutoRotation();
float labelAngleFraction = labelAutoAngle / 90.0f;
float fractionCamY = activeCamera->yRotation() * labelAngleFraction;
- float fractionCamX = activeCamera->xRotation() * labelAngleFraction;
+ float fractionCamX = activeCameraXRotation * labelAngleFraction;
float labelsMaxWidth = 0.0f;
int startIndex;
@@ -2168,7 +2163,7 @@ void Bars3DRenderer::drawLabels(bool drawSelection, const Q3DCamera *activeCamer
labelAutoAngle = m_axisCacheZ.labelAutoRotation();
labelAngleFraction = labelAutoAngle / 90.0f;
fractionCamY = activeCamera->yRotation() * labelAngleFraction;
- fractionCamX = activeCamera->xRotation() * labelAngleFraction;
+ fractionCamX = activeCameraXRotation * labelAngleFraction;
GLfloat labelYAdjustment = 0.005f;
GLfloat colPosValue = m_scaleXWithBackground + labelMargin;
GLfloat rowPosValue = m_scaleZWithBackground + labelMargin;
@@ -2293,7 +2288,7 @@ void Bars3DRenderer::drawLabels(bool drawSelection, const Q3DCamera *activeCamer
labelAutoAngle = m_axisCacheX.labelAutoRotation();
labelAngleFraction = labelAutoAngle / 90.0f;
fractionCamY = activeCamera->yRotation() * labelAngleFraction;
- fractionCamX = activeCamera->xRotation() * labelAngleFraction;
+ fractionCamX = activeCameraXRotation * labelAngleFraction;
alignment = (m_xFlipped != m_zFlipped) ? Qt::AlignLeft : Qt::AlignRight;
if (labelAutoAngle == 0.0f) {
labelRotation = QVector3D(-90.0f, 90.0f, 0.0f);
@@ -2460,6 +2455,13 @@ void Bars3DRenderer::updateBarSpecs(GLfloat thicknessRatio, const QSizeF &spacin
calculateSceneScalingFactors();
}
+void Bars3DRenderer::updateBarSeriesMargin(const QSizeF &margin)
+{
+ m_cachedBarSeriesMargin = margin;
+ calculateSeriesStartPosition();
+ calculateSceneScalingFactors();
+}
+
void Bars3DRenderer::updateAxisRange(QAbstract3DAxis::AxisOrientation orientation, float min,
float max)
{
@@ -2592,6 +2594,10 @@ void Bars3DRenderer::calculateSceneScalingFactors()
m_scaleX = m_cachedBarThickness.width() / m_scaleFactor;
m_scaleZ = m_cachedBarThickness.height() / m_scaleFactor;
+ // Adjust scaling according to margin
+ m_scaleX -= m_scaleX * m_cachedBarSeriesMargin.width();
+ m_scaleZ -= m_scaleZ * m_cachedBarSeriesMargin.height();
+
// Whole graph scale factors
m_xScaleFactor = m_rowWidth / m_scaleFactor;
m_zScaleFactor = m_columnDepth / m_scaleFactor;
@@ -2655,6 +2661,12 @@ void Bars3DRenderer::calculateHeightAdjustment()
}
}
+void Bars3DRenderer::calculateSeriesStartPosition()
+{
+ m_seriesStart = -((float(m_visibleSeriesCount) - 1.0f) / 2.0f)
+ * (m_seriesStep - (m_seriesStep * m_cachedBarSeriesMargin.width()));
+}
+
Bars3DController::SelectionType Bars3DRenderer::isSelected(int row, int bar,
const BarSeriesRenderCache *cache)
{
@@ -2873,4 +2885,4 @@ void Bars3DRenderer::updateMargin(float margin)
calculateSceneScalingFactors();
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 3ca38e39..d6c3c471 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -50,14 +24,14 @@ class QPoint;
class QSizeF;
QT_END_NAMESPACE
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ShaderHelper;
class LabelItem;
class Q3DScene;
class BarSeriesRenderCache;
-class QT_DATAVISUALIZATION_EXPORT Bars3DRenderer : public Abstract3DRenderer
+class Q_DATAVISUALIZATION_EXPORT Bars3DRenderer : public Abstract3DRenderer
{
Q_OBJECT
@@ -68,6 +42,7 @@ private:
bool m_cachedIsSlicingActivated;
int m_cachedRowCount;
int m_cachedColumnCount;
+ QSizeF m_cachedBarSeriesMargin;
// Internal state
BarRenderItem *m_selectedBar; // points to renderitem array
@@ -119,48 +94,49 @@ public:
explicit Bars3DRenderer(Bars3DController *controller);
~Bars3DRenderer();
- void updateData();
- void updateSeries(const QList<QAbstract3DSeries *> &seriesList);
- SeriesRenderCache *createNewCache(QAbstract3DSeries *series);
+ void updateData() override;
+ void updateSeries(const QList<QAbstract3DSeries *> &seriesList) override;
+ SeriesRenderCache *createNewCache(QAbstract3DSeries *series) override;
void updateRows(const QList<Bars3DController::ChangeRow> &rows);
void updateItems(const QList<Bars3DController::ChangeItem> &items);
- void updateScene(Q3DScene *scene);
- void render(GLuint defaultFboHandle = 0);
+ void updateScene(Q3DScene *scene) override;
+ void render(GLuint defaultFboHandle = 0) override;
- QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute);
+ QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute) override;
- void updateAspectRatio(float ratio);
+ void updateAspectRatio(float ratio) override;
void updateFloorLevel(float level);
- void updateMargin(float margin);
+ void updateMargin(float margin) override;
protected:
- void contextCleanup();
- virtual void initializeOpenGL();
- virtual void fixCameraTarget(QVector3D &target);
- virtual void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds);
+ void contextCleanup() override;
+ void initializeOpenGL() override;
+ void fixCameraTarget(QVector3D &target) override;
+ void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds) override;
public Q_SLOTS:
void updateMultiSeriesScaling(bool uniform);
void updateBarSpecs(GLfloat thicknessRatio = 1.0f,
const QSizeF &spacing = QSizeF(1.0, 1.0),
bool relative = true);
+ void updateBarSeriesMargin(const QSizeF &margin);
void updateSlicingActive(bool isSlicing);
void updateSelectedBar(const QPoint &position, QBar3DSeries *series);
inline QPoint clickedPosition() const { return m_clickedPosition; }
void resetClickedStatus();
// Overloaded from abstract renderer
- virtual void updateAxisRange(QAbstract3DAxis::AxisOrientation orientation, float min,
- float max);
- virtual void updateAxisReversed(QAbstract3DAxis::AxisOrientation orientation,
- bool enable);
+ void updateAxisRange(QAbstract3DAxis::AxisOrientation orientation, float min,
+ float max) override;
+ void updateAxisReversed(QAbstract3DAxis::AxisOrientation orientation,
+ bool enable) override;
private:
- virtual void initShaders(const QString &vertexShader, const QString &fragmentShader);
- virtual void initGradientShaders(const QString &vertexShader, const QString &fragmentShader);
- virtual void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality);
- virtual void updateTextures();
- virtual void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh);
+ void initShaders(const QString &vertexShader, const QString &fragmentShader) override;
+ void initGradientShaders(const QString &vertexShader, const QString &fragmentShader) override;
+ void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality) override;
+ void updateTextures() override;
+ void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh) override;
void drawSlicedScene();
void drawScene(GLuint defaultFboHandle);
@@ -180,12 +156,13 @@ private:
void loadBackgroundMesh();
void initSelectionShader();
- void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader);
- void initSelectionBuffer();
+ void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader) override;
+ void initSelectionBuffer() override;
void initDepthShader();
- void updateDepthBuffer();
+ void updateDepthBuffer() override;
void calculateSceneScalingFactors();
void calculateHeightAdjustment();
+ void calculateSeriesStartPosition();
Abstract3DController::SelectionType isSelected(int row, int bar,
const BarSeriesRenderCache *cache);
QPoint selectionColorToArrayPosition(const QVector4D &selectionColor);
@@ -197,6 +174,6 @@ private:
Q_DISABLE_COPY(Bars3DRenderer)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/barseriesrendercache.cpp b/src/datavisualization/engine/barseriesrendercache.cpp
index 65bc7a64..da3655a9 100644
--- a/src/datavisualization/engine/barseriesrendercache.cpp
+++ b/src/datavisualization/engine/barseriesrendercache.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "barseriesrendercache_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
BarSeriesRenderCache::BarSeriesRenderCache(QAbstract3DSeries *series,
Abstract3DRenderer *renderer)
@@ -50,4 +24,4 @@ void BarSeriesRenderCache::cleanup(TextureHelper *texHelper)
SeriesRenderCache::cleanup(texHelper);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/barseriesrendercache_p.h b/src/datavisualization/engine/barseriesrendercache_p.h
index 9b2ae1e1..faf963eb 100644
--- a/src/datavisualization/engine/barseriesrendercache_p.h
+++ b/src/datavisualization/engine/barseriesrendercache_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,7 +19,7 @@
#include "qbar3dseries_p.h"
#include "barrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class BarSeriesRenderCache : public SeriesRenderCache
{
@@ -53,7 +27,7 @@ public:
BarSeriesRenderCache(QAbstract3DSeries *series, Abstract3DRenderer *renderer);
virtual ~BarSeriesRenderCache();
- void cleanup(TextureHelper *texHelper);
+ void cleanup(TextureHelper *texHelper) override;
inline BarRenderItemArray &renderArray() { return m_renderArray; }
inline QBar3DSeries *series() const { return static_cast<QBar3DSeries *>(m_series); }
@@ -67,6 +41,6 @@ protected:
int m_visualIndex; // order of the series is relevant
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp
index 3b873ba4..63028fb4 100644
--- a/src/datavisualization/engine/drawer.cpp
+++ b/src/datavisualization/engine/drawer.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "drawer_p.h"
#include "shaderhelper_p.h"
@@ -44,12 +18,13 @@ class StaticLibInitializer
public:
StaticLibInitializer()
{
- Q_INIT_RESOURCE(engine);
+ Q_INIT_RESOURCE(datavisualizationshaders);
+ Q_INIT_RESOURCE(datavisualizationmeshes);
}
};
StaticLibInitializer staticLibInitializer;
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
// Vertex array buffer for point
const GLfloat point_data[] = {0.0f, 0.0f, 0.0f};
@@ -105,7 +80,7 @@ QFont Drawer::font() const
void Drawer::drawObject(ShaderHelper *shader, AbstractObjectHelper *object, GLuint textureId,
GLuint depthTextureId, GLuint textureId3D)
{
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
Q_UNUSED(textureId3D);
#endif
if (textureId) {
@@ -121,7 +96,7 @@ void Drawer::drawObject(ShaderHelper *shader, AbstractObjectHelper *object, GLui
glBindTexture(GL_TEXTURE_2D, depthTextureId);
shader->setUniformValue(shader->shadow(), 1);
}
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (textureId3D) {
// Activate texture
glActiveTexture(GL_TEXTURE2);
@@ -166,7 +141,7 @@ void Drawer::drawObject(ShaderHelper *shader, AbstractObjectHelper *object, GLui
glDisableVertexAttribArray(shader->posAtt());
// Release textures
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (textureId3D) {
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_3D, 0);
@@ -196,6 +171,10 @@ void Drawer::drawSelectionObject(ShaderHelper *shader, AbstractObjectHelper *obj
void Drawer::drawSurfaceGrid(ShaderHelper *shader, SurfaceObject *object)
{
+ // Get grid line color
+ QVector4D lineColor = Utils::vectorFromColor(object->wireframeColor());
+ shader->setUniformValue(shader->color(), lineColor);
+
// 1st attribute buffer : vertices
glEnableVertexAttribArray(shader->posAtt());
glBindBuffer(GL_ARRAY_BUFFER, object->vertexBuf());
@@ -451,4 +430,4 @@ void Drawer::generateLabelItem(LabelItem &item, const QString &text, int widestL
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/drawer_p.h b/src/datavisualization/engine/drawer_p.h
index 64b84eb2..54881d6d 100644
--- a/src/datavisualization/engine/drawer_p.h
+++ b/src/datavisualization/engine/drawer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,13 +14,14 @@
#ifndef DRAWER_P_H
#define DRAWER_P_H
-#include "datavisualizationglobal_p.h"
-#include "q3dbars.h"
-#include "q3dtheme.h"
-#include "labelitem_p.h"
-#include "abstractrenderitem_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/labelitem_p.h>
+#include <private/abstractrenderitem_p.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+#include <QtDataVisualization/q3dbars.h>
+#include <QtDataVisualization/q3dtheme.h>
+
+QT_BEGIN_NAMESPACE
class ShaderHelper;
class ObjectHelper;
@@ -115,6 +90,6 @@ private:
GLfloat m_scaledFontSize;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/engine.pri b/src/datavisualization/engine/engine.pri
deleted file mode 100644
index 60703e96..00000000
--- a/src/datavisualization/engine/engine.pri
+++ /dev/null
@@ -1,61 +0,0 @@
-HEADERS += $$PWD/qabstract3dgraph_p.h \
- $$PWD/qabstract3dgraph.h \
- $$PWD/q3dbars.h \
- $$PWD/q3dbars_p.h \
- $$PWD/drawer_p.h \
- $$PWD/bars3dcontroller_p.h \
- $$PWD/bars3drenderer_p.h \
- $$PWD/q3dsurface.h \
- $$PWD/q3dsurface_p.h \
- $$PWD/surface3dcontroller_p.h \
- $$PWD/surface3drenderer_p.h \
- $$PWD/abstract3dcontroller_p.h \
- $$PWD/q3dscatter.h \
- $$PWD/q3dscatter_p.h \
- $$PWD/scatter3dcontroller_p.h \
- $$PWD/scatter3drenderer_p.h \
- $$PWD/axisrendercache_p.h \
- $$PWD/seriesrendercache_p.h \
- $$PWD/abstract3drenderer_p.h \
- $$PWD/selectionpointer_p.h \
- $$PWD/q3dcamera.h \
- $$PWD/q3dcamera_p.h \
- $$PWD/q3dscene.h \
- $$PWD/q3dlight.h \
- $$PWD/q3dlight_p.h \
- $$PWD/q3dobject.h \
- $$PWD/q3dobject_p.h \
- $$PWD/q3dscene_p.h \
- $$PWD/surfaceseriesrendercache_p.h \
- $$PWD/barseriesrendercache_p.h \
- $$PWD/scatterseriesrendercache_p.h
-
-SOURCES += $$PWD/qabstract3dgraph.cpp \
- $$PWD/q3dbars.cpp \
- $$PWD/drawer.cpp \
- $$PWD/bars3dcontroller.cpp \
- $$PWD/bars3drenderer.cpp \
- $$PWD/q3dsurface.cpp \
- $$PWD/surface3drenderer.cpp \
- $$PWD/surface3dcontroller.cpp \
- $$PWD/abstract3dcontroller.cpp \
- $$PWD/q3dscatter.cpp \
- $$PWD/scatter3dcontroller.cpp \
- $$PWD/scatter3drenderer.cpp \
- $$PWD/axisrendercache.cpp \
- $$PWD/seriesrendercache.cpp \
- $$PWD/abstract3drenderer.cpp \
- $$PWD/selectionpointer.cpp \
- $$PWD/q3dcamera.cpp \
- $$PWD/q3dlight.cpp \
- $$PWD/q3dobject.cpp \
- $$PWD/q3dscene.cpp \
- $$PWD/surfaceseriesrendercache.cpp \
- $$PWD/barseriesrendercache.cpp \
- $$PWD/scatterseriesrendercache.cpp
-
-RESOURCES += engine/engine.qrc
-
-OTHER_FILES += $$PWD/meshes/* $$PWD/shaders/*
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/engine/engine.qrc b/src/datavisualization/engine/engine.qrc
deleted file mode 100644
index 0ef169c9..00000000
--- a/src/datavisualization/engine/engine.qrc
+++ /dev/null
@@ -1,74 +0,0 @@
-<RCC>
- <qresource prefix="/defaultMeshes">
- <file alias="cone">meshes/coneFlat.obj</file>
- <file alias="coneSmooth">meshes/coneSmooth.obj</file>
- <file alias="pyramid">meshes/pyramidFlat.obj</file>
- <file alias="pyramidSmooth">meshes/pyramidSmooth.obj</file>
- <file alias="bar">meshes/cubeFlat.obj</file>
- <file alias="barSmooth">meshes/cubeSmooth.obj</file>
- <file alias="cylinder">meshes/cylinderFlat.obj</file>
- <file alias="cylinderSmooth">meshes/cylinderSmooth.obj</file>
- <file alias="background">meshes/background.obj</file>
- <file alias="plane">meshes/plane.obj</file>
- <file alias="sphere">meshes/sphere.obj</file>
- <file alias="sphereSmooth">meshes/sphereSmooth.obj</file>
- <file alias="bevelbar">meshes/barFlat.obj</file>
- <file alias="bevelbarSmooth">meshes/barSmooth.obj</file>
- <file alias="coneFull">meshes/coneFilledFlat.obj</file>
- <file alias="coneSmoothFull">meshes/coneFilledSmooth.obj</file>
- <file alias="cylinderFull">meshes/cylinderFilledFlat.obj</file>
- <file alias="cylinderSmoothFull">meshes/cylinderFilledSmooth.obj</file>
- <file alias="pyramidFull">meshes/pyramidFilledFlat.obj</file>
- <file alias="pyramidSmoothFull">meshes/pyramidFilledSmooth.obj</file>
- <file alias="bevelbarFull">meshes/barFilledFlat.obj</file>
- <file alias="bevelbarSmoothFull">meshes/barFilledSmooth.obj</file>
- <file alias="barFull">meshes/cubeFilledFlat.obj</file>
- <file alias="barSmoothFull">meshes/cubeFilledSmooth.obj</file>
- <file alias="backgroundNoFloor">meshes/backgroundNoFloor.obj</file>
- <file alias="minimal">meshes/minimalFlat.obj</file>
- <file alias="minimalSmooth">meshes/minimalSmooth.obj</file>
- <file alias="arrow">meshes/arrowFlat.obj</file>
- <file alias="arrowSmooth">meshes/arrowSmooth.obj</file>
- </qresource>
- <qresource prefix="/shaders">
- <file alias="fragment">shaders/default.frag</file>
- <file alias="vertex">shaders/default.vert</file>
- <file alias="fragmentColorOnY">shaders/colorOnY.frag</file>
- <file alias="fragmentPlainColor">shaders/plainColor.frag</file>
- <file alias="vertexPlainColor">shaders/plainColor.vert</file>
- <file alias="fragmentLabel">shaders/label.frag</file>
- <file alias="vertexLabel">shaders/label.vert</file>
- <file alias="fragmentDepth">shaders/depth.frag</file>
- <file alias="vertexDepth">shaders/depth.vert</file>
- <file alias="fragmentShadow">shaders/shadow.frag</file>
- <file alias="vertexShadow">shaders/shadow.vert</file>
- <file alias="fragmentShadowNoTex">shaders/shadowNoTex.frag</file>
- <file alias="fragmentShadowNoTexColorOnY">shaders/shadowNoTexColorOnY.frag</file>
- <file alias="fragmentColorOnYES2">shaders/colorOnY_ES2.frag</file>
- <file alias="fragmentES2">shaders/default_ES2.frag</file>
- <file alias="fragmentSurface">shaders/surface.frag</file>
- <file alias="vertexSurfaceFlat">shaders/surfaceFlat.vert</file>
- <file alias="fragmentSurfaceFlat">shaders/surfaceFlat.frag</file>
- <file alias="fragmentSurfaceES2">shaders/surface_ES2.frag</file>
- <file alias="vertexPointES2">shaders/point_ES2.vert</file>
- <file alias="fragmentSurfaceShadowNoTex">shaders/surfaceShadowNoTex.frag</file>
- <file alias="fragmentSurfaceShadowFlat">shaders/surfaceShadowFlat.frag</file>
- <file alias="vertexSurfaceShadowFlat">shaders/surfaceShadowFlat.vert</file>
- <file alias="fragmentTexture">shaders/texture.frag</file>
- <file alias="fragmentTextureES2">shaders/texture_ES2.frag</file>
- <file alias="vertexTexture">shaders/texture.vert</file>
- <file alias="fragmentTexturedSurfaceShadowFlat">shaders/surfaceTexturedShadowFlat.frag</file>
- <file alias="fragmentSurfaceTexturedFlat">shaders/surfaceTexturedFlat.frag</file>
- <file alias="fragmentTexture3D">shaders/texture3d.frag</file>
- <file alias="vertexTexture3D">shaders/texture3d.vert</file>
- <file alias="fragmentTexture3DSlice">shaders/texture3dslice.frag</file>
- <file alias="vertexShadowNoMatrices">shaders/shadowNoMatrices.vert</file>
- <file alias="vertexNoMatrices">shaders/defaultNoMatrices.vert</file>
- <file alias="fragmentTexture3DLowDef">shaders/texture3dlowdef.frag</file>
- <file alias="vertexPointES2_UV">shaders/point_ES2_UV.vert</file>
- <file alias="fragment3DSliceFrames">shaders/3dsliceframes.frag</file>
- <file alias="vertexPosition">shaders/position.vert</file>
- <file alias="fragmentPositionMap">shaders/positionmap.frag</file>
- <file alias="fragmentTexturedSurfaceShadow">shaders/surfaceTexturedShadow.frag</file>
- </qresource>
-</RCC>
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index 2f2cf63b..a5204b24 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dbars_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DBars
@@ -88,7 +62,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*
* The scene can be rotated, zoomed into, and a bar can be selected to view its value,
* but no other interaction is included in this minimal code example. You can learn more by
- * familiarizing yourself with the examples provided, like the \l{Bars Example}.
+ * familiarizing yourself with the examples provided, like the \l{Bar Graph}.
*
* \sa Q3DScatter, Q3DSurface, {Qt Data Visualization C++ Classes}
*/
@@ -157,7 +131,7 @@ QBar3DSeries *Q3DBars::primarySeries() const
* to the axes. If the newly added series has specified a selected bar, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
*
- * \sa seriesList(), primarySeries
+ * \sa seriesList(), primarySeries, QAbstract3DGraph::hasSeries()
*/
void Q3DBars::addSeries(QBar3DSeries *series)
{
@@ -166,6 +140,8 @@ void Q3DBars::addSeries(QBar3DSeries *series)
/*!
* Removes the \a series from the graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
void Q3DBars::removeSeries(QBar3DSeries *series)
{
@@ -180,7 +156,7 @@ void Q3DBars::removeSeries(QBar3DSeries *series)
* the new position in list is calculated as if the series was still in its old
* index, so the final index is actually the \a index decremented by one.
*
- * \sa addSeries(), seriesList()
+ * \sa addSeries(), seriesList(), QAbstract3DGraph::hasSeries()
*/
void Q3DBars::insertSeries(int index, QBar3DSeries *series)
{
@@ -189,6 +165,8 @@ void Q3DBars::insertSeries(int index, QBar3DSeries *series)
/*!
* Returns the list of series added to this graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
QList<QBar3DSeries *> Q3DBars::seriesList() const
{
@@ -247,7 +225,7 @@ float Q3DBars::barThickness() const
* Preset to \c {(1.0, 1.0)} by default. Spacing is affected by the
* barSpacingRelative property.
*
- * \sa barSpacingRelative, multiSeriesUniform
+ * \sa barSpacingRelative, multiSeriesUniform, barSeriesMargin
*/
void Q3DBars::setBarSpacing(const QSizeF &spacing)
{
@@ -285,6 +263,31 @@ bool Q3DBars::isBarSpacingRelative() const
}
/*!
+ * \property Q3DBars::barSeriesMargin
+ * \since 6.3
+ *
+ * \brief Margin between series columns in X and Z dimensions.
+ * Sensible values are on the range [0,1).
+ *
+ * Preset to \c {(0.0, 0.0)} by default. This property enables
+ * showing bars from different series side by side, but with space between columns.
+ *
+ * \sa barSpacing
+ */
+void Q3DBars::setBarSeriesMargin(const QSizeF &margin)
+{
+ if (margin != barSeriesMargin()) {
+ dptr()->m_shared->setBarSeriesMargin(margin);
+ emit barSeriesMarginChanged(margin);
+ }
+}
+
+QSizeF Q3DBars::barSeriesMargin() const
+{
+ return dptrc()->m_shared->barSeriesMargin();
+}
+
+/*!
* \property Q3DBars::rowAxis
*
* \brief The axis attached to the active row.
@@ -469,4 +472,4 @@ Q3DBars *Q3DBarsPrivate::qptr()
return static_cast<Q3DBars *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index 6bbe7600..75d9b15f 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DBARS_H
#define Q3DBARS_H
@@ -35,17 +9,18 @@
#include <QtDataVisualization/qcategory3daxis.h>
#include <QtDataVisualization/qbar3dseries.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DBarsPrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph
+class Q_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph
{
Q_OBJECT
Q_PROPERTY(bool multiSeriesUniform READ isMultiSeriesUniform WRITE setMultiSeriesUniform NOTIFY multiSeriesUniformChanged)
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
+ Q_PROPERTY(QSizeF barSeriesMargin READ barSeriesMargin WRITE setBarSeriesMargin NOTIFY barSeriesMarginChanged REVISION(6, 3))
Q_PROPERTY(QCategory3DAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged)
Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged)
Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged)
@@ -76,6 +51,9 @@ public:
void setBarSpacingRelative(bool relative);
bool isBarSpacingRelative() const;
+ void setBarSeriesMargin(const QSizeF &margin);
+ QSizeF barSeriesMargin() const;
+
void setRowAxis(QCategory3DAxis *axis);
QCategory3DAxis *rowAxis() const;
void setColumnAxis(QCategory3DAxis *axis);
@@ -95,6 +73,7 @@ Q_SIGNALS:
void barThicknessChanged(float thicknessRatio);
void barSpacingChanged(const QSizeF &spacing);
void barSpacingRelativeChanged(bool relative);
+ Q_REVISION(6, 3) void barSeriesMarginChanged(const QSizeF &margin);
void rowAxisChanged(QCategory3DAxis *axis);
void columnAxisChanged(QCategory3DAxis *axis);
void valueAxisChanged(QValue3DAxis *axis);
@@ -108,6 +87,6 @@ private:
Q_DISABLE_COPY(Q3DBars)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dbars_p.h b/src/datavisualization/engine/q3dbars_p.h
index de581071..cd2a2ac1 100644
--- a/src/datavisualization/engine/q3dbars_p.h
+++ b/src/datavisualization/engine/q3dbars_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "bars3dcontroller_p.h"
#include "qabstract3dgraph_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DBars;
@@ -54,15 +28,15 @@ public:
Q3DBarsPrivate(Q3DBars *q);
~Q3DBarsPrivate();
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q3DBars *qptr();
Bars3DController *m_shared;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dcamera.cpp b/src/datavisualization/engine/q3dcamera.cpp
index 5b359a4e..69839fdc 100644
--- a/src/datavisualization/engine/q3dcamera.cpp
+++ b/src/datavisualization/engine/q3dcamera.cpp
@@ -1,38 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dcamera_p.h"
#include "utils_p.h"
#include <QtCore/qmath.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DCamera
@@ -939,4 +913,4 @@ QVector3D Q3DCameraPrivate::calculatePositionRelativeToCamera(const QVector3D &r
zPos + relativePosition.z());
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dcamera.h b/src/datavisualization/engine/q3dcamera.h
index 9ef4a1b8..1c59bc13 100644
--- a/src/datavisualization/engine/q3dcamera.h
+++ b/src/datavisualization/engine/q3dcamera.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DCAMERA_H
#define Q3DCAMERA_H
#include <QtDataVisualization/q3dobject.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DCameraPrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DCamera : public Q3DObject
+class Q_DATAVISUALIZATION_EXPORT Q3DCamera : public Q3DObject
{
Q_OBJECT
Q_ENUMS(CameraPreset)
@@ -46,9 +20,9 @@ class QT_DATAVISUALIZATION_EXPORT Q3DCamera : public Q3DObject
Q_PROPERTY(CameraPreset cameraPreset READ cameraPreset WRITE setCameraPreset NOTIFY cameraPresetChanged)
Q_PROPERTY(bool wrapXRotation READ wrapXRotation WRITE setWrapXRotation NOTIFY wrapXRotationChanged)
Q_PROPERTY(bool wrapYRotation READ wrapYRotation WRITE setWrapYRotation NOTIFY wrapYRotationChanged)
- Q_PROPERTY(QVector3D target READ target WRITE setTarget NOTIFY targetChanged REVISION 1)
- Q_PROPERTY(float minZoomLevel READ minZoomLevel WRITE setMinZoomLevel NOTIFY minZoomLevelChanged REVISION 1)
- Q_PROPERTY(float maxZoomLevel READ maxZoomLevel WRITE setMaxZoomLevel NOTIFY maxZoomLevelChanged REVISION 1)
+ Q_PROPERTY(QVector3D target READ target WRITE setTarget NOTIFY targetChanged REVISION(1, 2))
+ Q_PROPERTY(float minZoomLevel READ minZoomLevel WRITE setMinZoomLevel NOTIFY minZoomLevelChanged REVISION(1, 2))
+ Q_PROPERTY(float maxZoomLevel READ maxZoomLevel WRITE setMaxZoomLevel NOTIFY maxZoomLevelChanged REVISION(1, 2))
public:
enum CameraPreset {
@@ -93,7 +67,7 @@ public:
bool wrapYRotation() const;
void setWrapYRotation(bool isEnabled);
- virtual void copyValuesFrom(const Q3DObject &source);
+ void copyValuesFrom(const Q3DObject &source) override;
CameraPreset cameraPreset() const;
void setCameraPreset(CameraPreset preset);
@@ -117,9 +91,9 @@ Q_SIGNALS:
void cameraPresetChanged(Q3DCamera::CameraPreset preset);
void wrapXRotationChanged(bool isEnabled);
void wrapYRotationChanged(bool isEnabled);
- Q_REVISION(1) void targetChanged(const QVector3D &target);
- Q_REVISION(1) void minZoomLevelChanged(float zoomLevel);
- Q_REVISION(1) void maxZoomLevelChanged(float zoomLevel);
+ Q_REVISION(1, 2) void targetChanged(const QVector3D &target);
+ Q_REVISION(1, 2) void minZoomLevelChanged(float zoomLevel);
+ Q_REVISION(1, 2) void maxZoomLevelChanged(float zoomLevel);
private:
QScopedPointer<Q3DCameraPrivate> d_ptr;
@@ -137,6 +111,6 @@ private:
friend class QTouch3DInputHandlerPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dcamera_p.h b/src/datavisualization/engine/q3dcamera_p.h
index 8c45d483..dac62870 100644
--- a/src/datavisualization/engine/q3dcamera_p.h
+++ b/src/datavisualization/engine/q3dcamera_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "q3dcamera.h"
#include <QtGui/QMatrix4x4>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DCamera;
@@ -89,7 +63,7 @@ Q_SIGNALS:
void minYRotationChanged(float rotation);
void maxXRotationChanged(float rotation);
void maxYRotationChanged(float rotation);
- void viewMatrixChanged(QMatrix4x4 viewMatrix);
+ void viewMatrixChanged(const QMatrix4x4 &viewMatrix);
void viewMatrixAutoUpdateChanged(bool enabled);
public:
@@ -123,6 +97,6 @@ public:
friend class QTouch3DInputHandler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dlight.cpp b/src/datavisualization/engine/q3dlight.cpp
index bce35d99..86afbe01 100644
--- a/src/datavisualization/engine/q3dlight.cpp
+++ b/src/datavisualization/engine/q3dlight.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dlight_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DLight
@@ -122,4 +96,4 @@ void Q3DLightPrivate::sync(Q3DLight &other)
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dlight.h b/src/datavisualization/engine/q3dlight.h
index 546ac424..ceae12bf 100644
--- a/src/datavisualization/engine/q3dlight.h
+++ b/src/datavisualization/engine/q3dlight.h
@@ -1,45 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DLIGHT_H
#define Q3DLIGHT_H
#include <QtDataVisualization/q3dobject.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DLightPrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DLight : public Q3DObject
+class Q_DATAVISUALIZATION_EXPORT Q3DLight : public Q3DObject
{
Q_OBJECT
- Q_PROPERTY(bool autoPosition READ isAutoPosition WRITE setAutoPosition NOTIFY autoPositionChanged REVISION 1)
+ Q_PROPERTY(bool autoPosition READ isAutoPosition WRITE setAutoPosition NOTIFY autoPositionChanged REVISION(1, 3))
public:
explicit Q3DLight(QObject *parent = nullptr);
@@ -49,7 +23,7 @@ public:
bool isAutoPosition();
Q_SIGNALS:
- Q_REVISION(1) void autoPositionChanged(bool autoPosition);
+ Q_REVISION(1, 3) void autoPositionChanged(bool autoPosition);
private:
QScopedPointer<Q3DLightPrivate> d_ptr;
@@ -60,6 +34,6 @@ private:
friend class Q3DScenePrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dlight_p.h b/src/datavisualization/engine/q3dlight_p.h
index 6348deb9..6e1e7ff5 100644
--- a/src/datavisualization/engine/q3dlight_p.h
+++ b/src/datavisualization/engine/q3dlight_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "q3dlight.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DScene;
class Q3DLight;
@@ -61,7 +35,7 @@ public:
bool m_automaticLight;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dobject.cpp b/src/datavisualization/engine/q3dobject.cpp
index 099fa2f0..c9e417dd 100644
--- a/src/datavisualization/engine/q3dobject.cpp
+++ b/src/datavisualization/engine/q3dobject.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dobject_p.h"
#include "q3dscene_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
\class Q3DObject
@@ -155,4 +129,4 @@ Q3DObjectPrivate::~Q3DObjectPrivate()
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dobject.h b/src/datavisualization/engine/q3dobject.h
index 812e89cb..875e1955 100644
--- a/src/datavisualization/engine/q3dobject.h
+++ b/src/datavisualization/engine/q3dobject.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DOBJECT_H
#define Q3DOBJECT_H
@@ -36,12 +10,12 @@
Q_MOC_INCLUDE(<QtDataVisualization/q3dscene.h>)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DObjectPrivate;
class Q3DScene;
-class QT_DATAVISUALIZATION_EXPORT Q3DObject : public QObject
+class Q_DATAVISUALIZATION_EXPORT Q3DObject : public QObject
{
Q_OBJECT
Q_PROPERTY(Q3DScene* parentScene READ parentScene)
@@ -73,6 +47,6 @@ private:
friend class Q3DScenePrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dobject_p.h b/src/datavisualization/engine/q3dobject_p.h
index ef1f2371..9eeaaae8 100644
--- a/src/datavisualization/engine/q3dobject_p.h
+++ b/src/datavisualization/engine/q3dobject_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -42,7 +16,7 @@
#include "datavisualizationglobal_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DObject;
class Q3DScene;
@@ -59,6 +33,6 @@ public:
bool m_isDirty;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp
index b16b2513..07c86110 100644
--- a/src/datavisualization/engine/q3dscatter.cpp
+++ b/src/datavisualization/engine/q3dscatter.cpp
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "q3dscatter.h"
#include "q3dscatter_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DScatter
@@ -77,7 +53,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The scene can be rotated, zoomed into, and an item can be selected to view its position,
* but no other interaction is included in this minimal code example.
* You can learn more by familiarizing yourself with the examples provided, like
- * the \l{Scatter Example}.
+ * the \l{Scatter Graph}.
*
* \sa Q3DBars, Q3DSurface, {Qt Data Visualization C++ Classes}
*/
@@ -110,6 +86,8 @@ Q3DScatter::~Q3DScatter()
* Adds the \a series to the graph. A graph can contain multiple series, but has only one set of
* axes. If the newly added series has specified a selected item, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
void Q3DScatter::addSeries(QScatter3DSeries *series)
{
@@ -118,6 +96,8 @@ void Q3DScatter::addSeries(QScatter3DSeries *series)
/*!
* Removes the \a series from the graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
void Q3DScatter::removeSeries(QScatter3DSeries *series)
{
@@ -126,6 +106,8 @@ void Q3DScatter::removeSeries(QScatter3DSeries *series)
/*!
* Returns the list of series added to this graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
QList<QScatter3DSeries *> Q3DScatter::seriesList() const
{
@@ -306,5 +288,5 @@ Q3DScatter *Q3DScatterPrivate::qptr()
return static_cast<Q3DScatter *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h
index 9067ee0f..5396471e 100644
--- a/src/datavisualization/engine/q3dscatter.h
+++ b/src/datavisualization/engine/q3dscatter.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DSCATTER_H
#define Q3DSCATTER_H
@@ -34,11 +8,11 @@
#include <QtDataVisualization/qvalue3daxis.h>
#include <QtDataVisualization/qscatter3dseries.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DScatterPrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DScatter : public QAbstract3DGraph
+class Q_DATAVISUALIZATION_EXPORT Q3DScatter : public QAbstract3DGraph
{
Q_OBJECT
Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged)
@@ -78,6 +52,6 @@ private:
Q_DISABLE_COPY(Q3DScatter)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dscatter_p.h b/src/datavisualization/engine/q3dscatter_p.h
index 748fc2e9..b307a65b 100644
--- a/src/datavisualization/engine/q3dscatter_p.h
+++ b/src/datavisualization/engine/q3dscatter_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "scatter3dcontroller_p.h"
#include "qabstract3dgraph_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DScatter;
@@ -54,15 +28,15 @@ public:
Q3DScatterPrivate(Q3DScatter *q);
~Q3DScatterPrivate();
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q3DScatter *qptr();
Scatter3DController *m_shared;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp
index 75437c9c..143983e7 100644
--- a/src/datavisualization/engine/q3dscene.cpp
+++ b/src/datavisualization/engine/q3dscene.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dscene_p.h"
#include "q3dcamera_p.h"
#include "q3dlight_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DScene
@@ -832,4 +806,4 @@ bool Q3DScenePrivate::isInArea(const QRect &area, int x, int y) const
return ( x >= areaMinX && x <= areaMaxX && y >= areaMinY && y <= areaMaxY );
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h
index de71255d..dd9e68c7 100644
--- a/src/datavisualization/engine/q3dscene.h
+++ b/src/datavisualization/engine/q3dscene.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DSCENE_H
#define Q3DSCENE_H
@@ -36,11 +10,11 @@
#include <QtCore/QObject>
#include <QtCore/QRect>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DScenePrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DScene : public QObject
+class Q_DATAVISUALIZATION_EXPORT Q3DScene : public QObject
{
Q_OBJECT
Q_PROPERTY(QRect viewport READ viewport NOTIFY viewportChanged)
@@ -52,7 +26,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScene : public QObject
Q_PROPERTY(Q3DCamera* activeCamera READ activeCamera WRITE setActiveCamera NOTIFY activeCameraChanged)
Q_PROPERTY(Q3DLight* activeLight READ activeLight WRITE setActiveLight NOTIFY activeLightChanged)
Q_PROPERTY(float devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged)
- Q_PROPERTY(QPoint graphPositionQuery READ graphPositionQuery WRITE setGraphPositionQuery NOTIFY graphPositionQueryChanged REVISION 1)
+ Q_PROPERTY(QPoint graphPositionQuery READ graphPositionQuery WRITE setGraphPositionQuery NOTIFY graphPositionQueryChanged REVISION(1, 2))
public:
explicit Q3DScene(QObject *parent = nullptr);
@@ -100,7 +74,7 @@ Q_SIGNALS:
void activeLightChanged(Q3DLight *light);
void devicePixelRatioChanged(float pixelRatio);
void selectionQueryPositionChanged(const QPoint &position);
- Q_REVISION(1) void graphPositionQueryChanged(const QPoint &position);
+ Q_REVISION(1, 2) void graphPositionQueryChanged(const QPoint &position);
private:
QScopedPointer<Q3DScenePrivate> d_ptr;
@@ -121,6 +95,6 @@ private:
friend class Q3DObject;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dscene_p.h b/src/datavisualization/engine/q3dscene_p.h
index 4056e89d..687606cb 100644
--- a/src/datavisualization/engine/q3dscene_p.h
+++ b/src/datavisualization/engine/q3dscene_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef Q3DSCENE_P_H
#define Q3DSCENE_P_H
-#include "datavisualizationglobal_p.h"
-#include "q3dscene.h"
+#include <private/datavisualizationglobal_p.h>
+#include <QtDataVisualization/q3dscene.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DCamera;
class Q3DLight;
@@ -77,7 +51,7 @@ struct Q3DSceneChangeBitField {
}
};
-class QT_DATAVISUALIZATION_EXPORT Q3DScenePrivate : public QObject
+class Q_DATAVISUALIZATION_EXPORT Q3DScenePrivate : public QObject
{
Q_OBJECT
public:
@@ -133,6 +107,6 @@ public:
QRect m_defaultLargeViewport;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp
index f3fac1c7..2b456814 100644
--- a/src/datavisualization/engine/q3dsurface.cpp
+++ b/src/datavisualization/engine/q3dsurface.cpp
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "q3dsurface.h"
#include "q3dsurface_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DSurface
@@ -91,7 +67,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The scene can be rotated, zoomed into, and a surface point can be selected to view its position,
* but no other interaction is included in this minimal code example.
* You can learn more by familiarizing yourself with the examples provided,
- * like the \l{Surface Example}.
+ * like the \l{Surface Graph}.
*
*
* \sa Q3DBars, Q3DScatter, {Qt Data Visualization C++ Classes}
@@ -127,6 +103,8 @@ Q3DSurface::~Q3DSurface()
* Adds the \a series to the graph. A graph can contain multiple series, but has only one set of
* axes. If the newly added series has specified a selected item, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
void Q3DSurface::addSeries(QSurface3DSeries *series)
{
@@ -135,6 +113,8 @@ void Q3DSurface::addSeries(QSurface3DSeries *series)
/*!
* Removes the \a series from the graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
void Q3DSurface::removeSeries(QSurface3DSeries *series)
{
@@ -143,6 +123,8 @@ void Q3DSurface::removeSeries(QSurface3DSeries *series)
/*!
* Returns the list of series added to this graph.
+ *
+ * \sa QAbstract3DGraph::hasSeries()
*/
QList<QSurface3DSeries *> Q3DSurface::seriesList() const
{
@@ -356,4 +338,4 @@ Q3DSurface *Q3DSurfacePrivate::qptr()
return static_cast<Q3DSurface *>(q_ptr);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h
index 48a27c4f..c6f26972 100644
--- a/src/datavisualization/engine/q3dsurface.h
+++ b/src/datavisualization/engine/q3dsurface.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DSURFACE_H
#define Q3DSURFACE_H
@@ -34,11 +8,11 @@
#include <QtDataVisualization/qvalue3daxis.h>
#include <QtDataVisualization/qsurface3dseries.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DSurfacePrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DSurface : public QAbstract3DGraph
+class Q_DATAVISUALIZATION_EXPORT Q3DSurface : public QAbstract3DGraph
{
Q_OBJECT
Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged)
@@ -83,6 +57,6 @@ private:
Q_DISABLE_COPY(Q3DSurface)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/q3dsurface_p.h b/src/datavisualization/engine/q3dsurface_p.h
index c9c22d63..b70bb643 100644
--- a/src/datavisualization/engine/q3dsurface_p.h
+++ b/src/datavisualization/engine/q3dsurface_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "surface3dcontroller_p.h"
#include "qabstract3dgraph_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DSurface;
@@ -54,15 +28,15 @@ public:
Q3DSurfacePrivate(Q3DSurface *q);
~Q3DSurfacePrivate();
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q3DSurface *qptr();
Surface3DController *m_shared;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index cb972779..3b7eca01 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qabstract3dgraph.h"
#include "qabstract3dgraph_p.h"
@@ -41,11 +15,11 @@
#include <QtGui/QPainter>
#include <QtOpenGL/QOpenGLFramebufferObject>
#include <QtGui/QOffscreenSurface>
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#include <qpa/qplatformnativeinterface.h>
#endif
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QAbstract3DGraph
@@ -60,7 +34,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* Anti-aliasing is turned on by default on C++, except in OpenGL ES2
* environments, where anti-aliasing is not supported by Qt Data Visualization.
* To specify non-default anti-aliasing for a graph, give a custom surface format as
- * a constructor parameter. You can use the convenience function \c QtDataVisualization::qDefaultSurfaceFormat()
+ * a constructor parameter. You can use the convenience function \c qDefaultSurfaceFormat()
* to create the surface format object.
*
* \note QAbstract3DGraph sets window flag \c Qt::FramelessWindowHint on by default. If you want to display
@@ -110,6 +84,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
\value SelectionMultiSeries
Setting this mode means that items for all series at same position are highlighted, instead
of just the selected item. The actual selection in the other series doesn't change.
+ When setting this mode flag, one or more of the basic selection flags (\c {SelectionItem},
+ \c {SelectionRow}, or \c SelectionColumn) must also be set.
Multi-series selection is not supported for Q3DScatter.
*/
@@ -186,7 +162,7 @@ QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFor
// Make sure renderable type is correct
surfaceFormat.setRenderableType(QSurfaceFormat::DefaultRenderableType);
} else {
- surfaceFormat = qDefaultSurfaceFormat();
+ surfaceFormat = qDefaultSurfaceFormat(true);
}
d_ptr->m_context = new QOpenGLContext(this);
@@ -224,7 +200,7 @@ QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFor
d_ptr->renderLater();
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
// Enable touch events for Mac touchpads
typedef void * (*EnableTouch)(QWindow*, bool);
EnableTouch enableTouch =
@@ -436,6 +412,16 @@ void QAbstract3DGraph::clearSelection()
}
/*!
+ * Returns whether the \a series has already been added to the graph.
+ *
+ * \since 6.3
+ */
+bool QAbstract3DGraph::hasSeries(QAbstract3DSeries *series) const
+{
+ return d_ptr->m_visualController->hasSeries(series);
+}
+
+/*!
* Adds a QCustom3DItem \a item to the graph. Graph takes ownership of the added item.
*
* Returns the index to the added item if the add operation was successful, -1
@@ -581,7 +567,7 @@ QCustom3DItem *QAbstract3DGraph::selectedCustomItem() const
* \c selectedElementChanged signal is emitted.
*
* The signal can be used for example for implementing custom input handlers, as
- * demonstrated by the \l {Axis Range Dragging With Labels Example}.
+ * demonstrated in the \l {Graph Gallery} example under \uicontrol {Scatter Graph} tab.
*
* \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem(),
* Q3DBars::selectedSeries(), Q3DScatter::selectedSeries(), Q3DSurface::selectedSeries(),
@@ -656,11 +642,6 @@ qreal QAbstract3DGraph::currentFps() const
*
* \brief Whether orthographic projection is used for displaying the graph.
*
- * If \c {true}, ortographic projection is used to create 2D graphs by replacing
- * the default input handler with one that does not allow rotating the graph and
- * by setting the camera to view the graph
- * directly from the side or from the top. Also, axis labels typically need to be rotated when
- * viewing the graph from the sides.
* Defaults to \c{false}.
* \note Shadows will be disabled when set to \c{true}.
*
@@ -1198,4 +1179,4 @@ QImage QAbstract3DGraphPrivate::renderToImage(int msaaSamples, const QSize &imag
return image;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h
index a59259d1..f3d8ecaa 100644
--- a/src/datavisualization/engine/qabstract3dgraph.h
+++ b/src/datavisualization/engine/qabstract3dgraph.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QABSTRACT3DGRAPH_H
#define QABSTRACT3DGRAPH_H
@@ -38,17 +12,16 @@
#include <QtGui/QOpenGLFunctions>
#include <QtCore/QLocale>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DGraphPrivate;
class QCustom3DItem;
class QAbstract3DAxis;
+class QAbstract3DSeries;
-class QT_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected QOpenGLFunctions
+class Q_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected QOpenGLFunctions
{
Q_OBJECT
- Q_ENUMS(ShadowQuality)
- Q_ENUMS(ElementType)
Q_FLAGS(SelectionFlag SelectionFlags)
Q_FLAGS(OptimizationHint OptimizationHints)
Q_PROPERTY(QAbstract3DInputHandler* activeInputHandler READ activeInputHandler WRITE setActiveInputHandler NOTIFY activeInputHandlerChanged)
@@ -88,6 +61,7 @@ public:
SelectionSlice = 8,
SelectionMultiSeries = 16
};
+ Q_ENUM(SelectionFlag)
Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
enum ShadowQuality {
@@ -99,6 +73,7 @@ public:
ShadowQualitySoftMedium,
ShadowQualitySoftHigh
};
+ Q_ENUM(ShadowQuality)
enum ElementType {
ElementNone = 0,
@@ -108,11 +83,13 @@ public:
ElementAxisZLabel,
ElementCustomItem
};
+ Q_ENUM(ElementType)
enum OptimizationHint {
OptimizationDefault = 0,
OptimizationStatic = 1
};
+ Q_ENUM(OptimizationHint)
Q_DECLARE_FLAGS(OptimizationHints, OptimizationHint)
public:
@@ -141,6 +118,8 @@ public:
void clearSelection();
+ bool hasSeries(QAbstract3DSeries *series) const;
+
int addCustomItem(QCustom3DItem *item);
void removeCustomItems();
void removeCustomItem(QCustom3DItem *item);
@@ -197,17 +176,17 @@ public:
bool hasContext() const;
protected:
- bool event(QEvent *event);
- void resizeEvent(QResizeEvent *event);
- void exposeEvent(QExposeEvent *event);
-
- void mouseDoubleClickEvent(QMouseEvent *event);
- void touchEvent(QTouchEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
+ bool event(QEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void exposeEvent(QExposeEvent *event) override;
+
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void touchEvent(QTouchEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) override;
#endif
Q_SIGNALS:
@@ -241,6 +220,6 @@ private:
Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstract3DGraph::SelectionFlags)
Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstract3DGraph::OptimizationHints)
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/qabstract3dgraph_p.h b/src/datavisualization/engine/qabstract3dgraph_p.h
index 88962a6b..ed86769f 100644
--- a/src/datavisualization/engine/qabstract3dgraph_p.h
+++ b/src/datavisualization/engine/qabstract3dgraph_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -47,7 +21,7 @@ class QOpenGLContext;
class QOffscreenSurface;
QT_END_NAMESPACE
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DGraph;
class Abstract3DController;
@@ -86,6 +60,6 @@ public:
bool m_initialized;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp
index 365617e0..af7bb204 100644
--- a/src/datavisualization/engine/scatter3dcontroller.cpp
+++ b/src/datavisualization/engine/scatter3dcontroller.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "scatter3dcontroller_p.h"
#include "scatter3drenderer_p.h"
@@ -34,7 +10,7 @@
#include "qscatter3dseries_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
static const int insertRemoveRecordReserveSize = 31;
@@ -485,4 +461,4 @@ void Scatter3DController::adjustAxisRanges()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h
index 46acd282..175e4b82 100644
--- a/src/datavisualization/engine/scatter3dcontroller_p.h
+++ b/src/datavisualization/engine/scatter3dcontroller_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef Q3DSCATTERCONTROLLER_p_H
#define Q3DSCATTERCONTROLLER_p_H
-#include "datavisualizationglobal_p.h"
-#include "abstract3dcontroller_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/abstract3dcontroller_p.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Scatter3DRenderer;
class QScatterDataProxy;
@@ -60,7 +34,7 @@ struct Scatter3DChangeBitField {
}
};
-class QT_DATAVISUALIZATION_EXPORT Scatter3DController : public Abstract3DController
+class Q_DATAVISUALIZATION_EXPORT Scatter3DController : public Abstract3DController
{
Q_OBJECT
@@ -107,28 +81,28 @@ public:
explicit Scatter3DController(QRect rect, Q3DScene *scene = 0);
~Scatter3DController();
- virtual void initializeOpenGL();
+ void initializeOpenGL() override;
// Change selection mode
- void setSelectionMode(QAbstract3DGraph::SelectionFlags mode);
+ void setSelectionMode(QAbstract3DGraph::SelectionFlags mode) override;
inline QScatter3DSeries *selectedSeries() const { return m_selectedItemSeries; }
void setSelectedItem(int index, QScatter3DSeries *series);
static inline int invalidSelectionIndex() { return -1; }
- virtual void clearSelection();
+ void clearSelection() override;
- void synchDataToRenderer();
+ void synchDataToRenderer() override;
- virtual void addSeries(QAbstract3DSeries *series);
- virtual void removeSeries(QAbstract3DSeries *series);
+ void addSeries(QAbstract3DSeries *series) override;
+ void removeSeries(QAbstract3DSeries *series) override;
virtual QList<QScatter3DSeries *> scatterSeriesList();
- virtual void handleAxisAutoAdjustRangeChangedInOrientation(
- QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust);
- virtual void handleAxisRangeChangedBySender(QObject *sender);
- virtual void handlePendingClick();
- virtual void adjustAxisRanges();
+ void handleAxisAutoAdjustRangeChangedInOrientation(
+ QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust) override;
+ void handleAxisRangeChangedBySender(QObject *sender) override;
+ void handlePendingClick() override;
+ void adjustAxisRanges() override;
public Q_SLOTS:
void handleArrayReset();
@@ -141,13 +115,13 @@ Q_SIGNALS:
void selectedSeriesChanged(QScatter3DSeries *series);
protected:
- virtual void startRecordingRemovesAndInserts();
+ void startRecordingRemovesAndInserts() override;
private:
Q_DISABLE_COPY(Scatter3DController)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index e999827e..6a224ebd 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "scatter3drenderer_p.h"
#include "q3dcamera_p.h"
@@ -42,7 +18,7 @@
// You should see the scene from where the light is
//#define SHOW_DEPTH_TEXTURE_SCENE
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
const GLfloat defaultMinSize = 0.01f;
const GLfloat defaultMaxSize = 0.1f;
@@ -376,7 +352,7 @@ void Scatter3DRenderer::updateItems(const QList<Scatter3DController::ChangeItem>
const int index = item.index;
if (index >= cache->renderArray().size())
continue; // Items removed from array for same render
- bool oldVisibility;
+ bool oldVisibility = false;
ScatterRenderItem &item = cache->renderArray()[index];
if (optimizationStatic)
oldVisibility = item.isVisible();
@@ -554,7 +530,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
ShaderHelper *pointSelectionShader;
if (!m_isOpenGLES) {
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (m_havePointSeries) {
glEnable(GL_POINT_SMOOTH);
glEnable(GL_PROGRAM_POINT_SIZE);
@@ -751,7 +727,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
float itemSize = cache->itemSize() / itemScaler;
if (itemSize == 0.0f)
itemSize = m_dotSizeScale;
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (drawingPoints && !m_isOpenGLES)
m_funcs_2_1->glPointSize(itemSize * activeCamera->zoomLevel());
#endif
@@ -884,7 +860,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
float itemSize = cache->itemSize() / itemScaler;
if (itemSize == 0.0f)
itemSize = m_dotSizeScale;
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (drawingPoints && !m_isOpenGLES)
m_funcs_2_1->glPointSize(itemSize * activeCamera->zoomLevel());
#endif
@@ -1195,7 +1171,7 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
}
}
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (m_havePointSeries) {
glDisable(GL_POINT_SMOOTH);
glDisable(GL_PROGRAM_POINT_SIZE);
@@ -2528,4 +2504,4 @@ QVector3D Scatter3DRenderer::convertPositionToTranslation(const QVector3D &posit
return QVector3D(xTrans, yTrans, zTrans);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index f0366e0c..c1673e80 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -47,14 +21,14 @@
QT_FORWARD_DECLARE_CLASS(QSizeF)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ShaderHelper;
class Q3DScene;
class ScatterSeriesRenderCache;
class QScatterDataItem;
-class QT_DATAVISUALIZATION_EXPORT Scatter3DRenderer : public Abstract3DRenderer
+class Q_DATAVISUALIZATION_EXPORT Scatter3DRenderer : public Abstract3DRenderer
{
Q_OBJECT
@@ -97,44 +71,44 @@ public:
explicit Scatter3DRenderer(Scatter3DController *controller);
~Scatter3DRenderer();
- void updateData();
- void updateSeries(const QList<QAbstract3DSeries *> &seriesList);
- SeriesRenderCache *createNewCache(QAbstract3DSeries *series);
+ void updateData() override;
+ void updateSeries(const QList<QAbstract3DSeries *> &seriesList) override;
+ SeriesRenderCache *createNewCache(QAbstract3DSeries *series) override;
void updateItems(const QList<Scatter3DController::ChangeItem> &items);
- void updateScene(Q3DScene *scene);
+ void updateScene(Q3DScene *scene) override;
void updateAxisLabels(QAbstract3DAxis::AxisOrientation orientation,
- const QStringList &labels);
+ const QStringList &labels) override;
void updateAxisTitleVisibility(QAbstract3DAxis::AxisOrientation orientation,
- bool visible);
- void updateOptimizationHint(QAbstract3DGraph::OptimizationHints hint);
- void updateMargin(float margin);
+ bool visible) override;
+ void updateOptimizationHint(QAbstract3DGraph::OptimizationHints hint) override;
+ void updateMargin(float margin) override;
- QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute);
+ QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute) override;
inline int clickedIndex() const { return m_clickedIndex; }
void resetClickedStatus();
- void render(GLuint defaultFboHandle);
+ void render(GLuint defaultFboHandle) override;
public Q_SLOTS:
void updateSelectedItem(int index, QScatter3DSeries *series);
protected:
- void contextCleanup();
- virtual void initializeOpenGL();
- virtual void fixCameraTarget(QVector3D &target);
- virtual void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds);
+ void contextCleanup() override;
+ void initializeOpenGL() override;
+ void fixCameraTarget(QVector3D &target) override;
+ void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds) override;
private:
- virtual void initShaders(const QString &vertexShader, const QString &fragmentShader);
- virtual void initGradientShaders(const QString &vertexShader, const QString &fragmentShader);
- virtual void initStaticSelectedItemShaders(const QString &vertexShader,
- const QString &fragmentShader,
- const QString &gradientVertexShader,
- const QString &gradientFragmentShader);
- virtual void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality);
- virtual void updateTextures();
- virtual void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh);
+ void initShaders(const QString &vertexShader, const QString &fragmentShader) override;
+ void initGradientShaders(const QString &vertexShader, const QString &fragmentShader) override;
+ void initStaticSelectedItemShaders(const QString &vertexShader,
+ const QString &fragmentShader,
+ const QString &gradientVertexShader,
+ const QString &gradientFragmentShader) override;
+ void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality) override;
+ void updateTextures() override;
+ void fixMeshFileName(QString &fileName, QAbstract3DSeries::Mesh mesh) override;
void drawScene(GLuint defaultFboHandle);
void drawLabels(bool drawSelection, const Q3DCamera *activeCamera,
@@ -142,11 +116,11 @@ private:
void loadBackgroundMesh();
void initSelectionShader();
- void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader);
+ void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader) override;
void initStaticPointShaders(const QString &vertexShader, const QString &fragmentShader);
- void initSelectionBuffer();
+ void initSelectionBuffer() override;
void initDepthShader();
- void updateDepthBuffer();
+ void updateDepthBuffer() override;
void initPointShader();
void calculateTranslation(ScatterRenderItem &item);
void calculateSceneScalingFactors();
@@ -158,6 +132,6 @@ private:
Q_DISABLE_COPY(Scatter3DRenderer)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/scatterseriesrendercache.cpp b/src/datavisualization/engine/scatterseriesrendercache.cpp
index ba511f6c..2447076e 100644
--- a/src/datavisualization/engine/scatterseriesrendercache.cpp
+++ b/src/datavisualization/engine/scatterseriesrendercache.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterseriesrendercache_p.h"
#include "scatterobjectbufferhelper_p.h"
#include "scatterpointbufferhelper_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
ScatterSeriesRenderCache::ScatterSeriesRenderCache(QAbstract3DSeries *series,
Abstract3DRenderer *renderer)
@@ -60,4 +34,4 @@ void ScatterSeriesRenderCache::cleanup(TextureHelper *texHelper)
SeriesRenderCache::cleanup(texHelper);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/scatterseriesrendercache_p.h b/src/datavisualization/engine/scatterseriesrendercache_p.h
index 8f858d0f..f19909af 100644
--- a/src/datavisualization/engine/scatterseriesrendercache_p.h
+++ b/src/datavisualization/engine/scatterseriesrendercache_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,7 +19,7 @@
#include "qscatter3dseries_p.h"
#include "scatterrenderitem_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterObjectBufferHelper;
class ScatterPointBufferHelper;
@@ -56,7 +30,7 @@ public:
ScatterSeriesRenderCache(QAbstract3DSeries *series, Abstract3DRenderer *renderer);
virtual ~ScatterSeriesRenderCache();
- void cleanup(TextureHelper *texHelper);
+ void cleanup(TextureHelper *texHelper) override;
inline ScatterRenderItemArray &renderArray() { return m_renderArray; }
inline QScatter3DSeries *series() const { return static_cast<QScatter3DSeries *>(m_series); }
@@ -93,6 +67,6 @@ protected:
bool m_visibilityChanged; // Used to detect if full buffer change needed
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/selectionpointer.cpp b/src/datavisualization/engine/selectionpointer.cpp
index be4a52a9..d78171e3 100644
--- a/src/datavisualization/engine/selectionpointer.cpp
+++ b/src/datavisualization/engine/selectionpointer.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "selectionpointer_p.h"
#include "shaderhelper_p.h"
@@ -34,9 +8,9 @@
#include "q3dcamera_p.h"
#include "utils_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
-const GLfloat sliceUnits = 2.5;
+const GLfloat spSliceUnits = 2.5;
SelectionPointer::SelectionPointer(Drawer *drawer)
: QObject(0),
@@ -94,7 +68,7 @@ void SelectionPointer::renderSelectionPointer(GLuint defaultFboHandle, bool useO
QMatrix4x4 projectionMatrix;
GLfloat viewPortRatio = (GLfloat)m_mainViewPort.width() / (GLfloat)m_mainViewPort.height();
if (m_cachedIsSlicingActivated) {
- GLfloat sliceUnitsScaled = sliceUnits / m_autoScaleAdjustment;
+ GLfloat sliceUnitsScaled = spSliceUnits / m_autoScaleAdjustment;
viewMatrix.lookAt(QVector3D(0.0f, 0.0f, 1.0f), zeroVector, upVector);
projectionMatrix.ortho(-sliceUnitsScaled * viewPortRatio, sliceUnitsScaled * viewPortRatio,
-sliceUnitsScaled, sliceUnitsScaled,
@@ -164,7 +138,7 @@ void SelectionPointer::renderSelectionLabel(GLuint defaultFboHandle, bool useOrt
QMatrix4x4 projectionMatrix;
GLfloat viewPortRatio = (GLfloat)m_mainViewPort.width() / (GLfloat)m_mainViewPort.height();
if (m_cachedIsSlicingActivated) {
- GLfloat sliceUnitsScaled = sliceUnits / m_autoScaleAdjustment;
+ GLfloat sliceUnitsScaled = spSliceUnits / m_autoScaleAdjustment;
viewMatrix.lookAt(QVector3D(0.0f, 0.0f, 1.0f), zeroVector, upVector);
projectionMatrix.ortho(-sliceUnitsScaled * viewPortRatio, sliceUnitsScaled * viewPortRatio,
-sliceUnitsScaled, sliceUnitsScaled,
@@ -305,4 +279,4 @@ void SelectionPointer::initShaders()
m_pointShader->initialize();
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/selectionpointer_p.h b/src/datavisualization/engine/selectionpointer_p.h
index 0ba9b53a..42041b9e 100644
--- a/src/datavisualization/engine/selectionpointer_p.h
+++ b/src/datavisualization/engine/selectionpointer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "surface3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ShaderHelper;
class ObjectHelper;
@@ -95,6 +69,6 @@ private:
QQuaternion m_rotation;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index 29c7a633..4794f605 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -1,38 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "seriesrendercache_p.h"
#include "abstract3drenderer_p.h"
#include "texturehelper_p.h"
#include "utils_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
const QString smoothString(QStringLiteral("Smooth"));
@@ -206,4 +180,4 @@ void SeriesRenderCache::cleanup(TextureHelper *texHelper)
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h
index c0932a4c..6f430a91 100644
--- a/src/datavisualization/engine/seriesrendercache_p.h
+++ b/src/datavisualization/engine/seriesrendercache_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qabstract3dseries_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Abstract3DRenderer;
class ObjectHelper;
@@ -110,7 +84,7 @@ protected:
bool m_staticObjectUVDirty;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index ba845ac1..13b32666 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "surface3dcontroller_p.h"
#include "surface3drenderer_p.h"
@@ -34,7 +10,7 @@
#include "qsurface3dseries_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
Surface3DController::Surface3DController(QRect rect, Q3DScene *scene)
: Abstract3DController(rect, scene),
@@ -602,4 +578,4 @@ void Surface3DController::adjustAxisRanges()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h
index 8cbfeb60..3d9276d8 100644
--- a/src/datavisualization/engine/surface3dcontroller_p.h
+++ b/src/datavisualization/engine/surface3dcontroller_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef SURFACE3DCONTROLLER_P_H
#define SURFACE3DCONTROLLER_P_H
-#include "abstract3dcontroller_p.h"
-#include "datavisualizationglobal_p.h"
+#include <private/abstract3dcontroller_p.h>
+#include <private/datavisualizationglobal_p.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Surface3DRenderer;
class QSurface3DSeries;
@@ -65,7 +39,7 @@ struct Surface3DChangeBitField {
}
};
-class QT_DATAVISUALIZATION_EXPORT Surface3DController : public Abstract3DController
+class Q_DATAVISUALIZATION_EXPORT Surface3DController : public Abstract3DController
{
Q_OBJECT
@@ -95,27 +69,27 @@ public:
explicit Surface3DController(QRect rect, Q3DScene *scene = 0);
~Surface3DController();
- virtual void initializeOpenGL();
- virtual void synchDataToRenderer();
+ void initializeOpenGL() override;
+ void synchDataToRenderer() override;
- void setSelectionMode(QAbstract3DGraph::SelectionFlags mode);
+ void setSelectionMode(QAbstract3DGraph::SelectionFlags mode) override;
void setSelectedPoint(const QPoint &position, QSurface3DSeries *series, bool enterSlice);
- virtual void clearSelection();
+ void clearSelection() override;
inline QSurface3DSeries *selectedSeries() const { return m_selectedSeries; }
- virtual void handleAxisAutoAdjustRangeChangedInOrientation(
- QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust);
- virtual void handleAxisRangeChangedBySender(QObject *sender);
- virtual void handleSeriesVisibilityChangedBySender(QObject *sender);
- virtual void handlePendingClick();
- virtual void adjustAxisRanges();
+ void handleAxisAutoAdjustRangeChangedInOrientation(
+ QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust) override;
+ void handleAxisRangeChangedBySender(QObject *sender) override;
+ void handleSeriesVisibilityChangedBySender(QObject *sender) override;
+ void handlePendingClick() override;
+ void adjustAxisRanges() override;
static QPoint invalidSelectionPosition();
bool isFlatShadingSupported();
- virtual void addSeries(QAbstract3DSeries *series);
- virtual void removeSeries(QAbstract3DSeries *series);
+ void addSeries(QAbstract3DSeries *series) override;
+ void removeSeries(QAbstract3DSeries *series) override;
virtual QList<QSurface3DSeries *> surfaceSeriesList();
void setFlipHorizontalGrid(bool flip);
@@ -141,6 +115,6 @@ private:
Q_DISABLE_COPY(Surface3DController)
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index ea4f23e7..cffed56d 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "surface3drenderer_p.h"
#include "q3dcamera_p.h"
@@ -37,7 +13,7 @@
static const int ID_TO_RGBA_MASK = 0xff;
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
//#define SHOW_DEPTH_TEXTURE_SCENE
@@ -3062,4 +3038,4 @@ void Surface3DRenderer::updateMargin(float margin)
calculateSceneScalingFactors();
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index d527f248..e60abbc0 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,12 +19,12 @@
#include "abstract3drenderer_p.h"
#include "surfaceseriesrendercache_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ShaderHelper;
class Q3DScene;
-class QT_DATAVISUALIZATION_EXPORT Surface3DRenderer : public Abstract3DRenderer
+class Q_DATAVISUALIZATION_EXPORT Surface3DRenderer : public Abstract3DRenderer
{
Q_OBJECT
@@ -92,34 +66,34 @@ public:
explicit Surface3DRenderer(Surface3DController *controller);
~Surface3DRenderer();
- void updateData();
- void updateSeries(const QList<QAbstract3DSeries *> &seriesList);
+ void updateData() override;
+ void updateSeries(const QList<QAbstract3DSeries *> &seriesList) override;
void updateSurfaceTextures(QList<QSurface3DSeries *> seriesList);
- SeriesRenderCache *createNewCache(QAbstract3DSeries *series);
- void cleanCache(SeriesRenderCache *cache);
- void updateSelectionMode(QAbstract3DGraph::SelectionFlags mode);
+ SeriesRenderCache *createNewCache(QAbstract3DSeries *series) override;
+ void cleanCache(SeriesRenderCache *cache) override;
+ void updateSelectionMode(QAbstract3DGraph::SelectionFlags mode) override;
void updateRows(const QList<Surface3DController::ChangeRow> &rows);
void updateItems(const QList<Surface3DController::ChangeItem> &points);
- void updateScene(Q3DScene *scene);
+ void updateScene(Q3DScene *scene) override;
void updateSlicingActive(bool isSlicing);
void updateSelectedPoint(const QPoint &position, QSurface3DSeries *series);
void updateFlipHorizontalGrid(bool flip);
inline QPoint clickedPosition() const { return m_clickedPosition; }
void resetClickedStatus();
- QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute);
+ QVector3D convertPositionToTranslation(const QVector3D &position, bool isAbsolute) override;
void updateAxisLabels(QAbstract3DAxis::AxisOrientation orientation,
- const QStringList &labels);
+ const QStringList &labels) override;
void updateAxisTitleVisibility(QAbstract3DAxis::AxisOrientation orientation,
- bool visible);
- void updateMargin(float margin);
+ bool visible) override;
+ void updateMargin(float margin) override;
- void render(GLuint defaultFboHandle = 0);
+ void render(GLuint defaultFboHandle = 0) override;
protected:
- void contextCleanup();
- void initializeOpenGL();
- virtual void fixCameraTarget(QVector3D &target);
- virtual void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds);
+ void contextCleanup() override;
+ void initializeOpenGL() override;
+ virtual void fixCameraTarget(QVector3D &target) override;
+ virtual void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds) override;
Q_SIGNALS:
void flatShadingSupportedChanged(bool supported);
@@ -132,9 +106,9 @@ private:
void findMatchingRow(float z, int &sample, int direction, QSurfaceDataArray &dataArray);
void findMatchingColumn(float x, int &sample, int direction, QSurfaceDataArray &dataArray);
void updateSliceObject(SurfaceSeriesRenderCache *cache, const QPoint &point);
- void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality);
- void updateTextures();
- void initShaders(const QString &vertexShader, const QString &fragmentShader);
+ void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality) override;
+ void updateTextures() override;
+ void initShaders(const QString &vertexShader, const QString &fragmentShader) override;
QRect calculateSampleRect(const QSurfaceDataArray &array);
void loadBackgroundMesh();
@@ -144,10 +118,10 @@ private:
const QMatrix4x4 &viewMatrix, const QMatrix4x4 &projectionMatrix);
void calculateSceneScalingFactors();
- void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader);
+ void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader) override;
void initSelectionShaders();
void initSurfaceShaders();
- void initSelectionBuffer();
+ void initSelectionBuffer() override;
void initDepthShader();
void updateSelectionTextures();
void createSelectionTexture(SurfaceSeriesRenderCache *cache, uint &lastSelectionId);
@@ -156,7 +130,7 @@ private:
void surfacePointSelected(const QPoint &point);
void updateSelectionPoint(SurfaceSeriesRenderCache *cache, const QPoint &point, bool label);
QPoint selectionIdToSurfacePoint(uint id);
- void updateDepthBuffer();
+ void updateDepthBuffer() override;
void emitSelectedPointChanged(QPoint position);
Q_DISABLE_COPY(Surface3DRenderer)
@@ -164,6 +138,6 @@ private:
friend class SurfaceObject;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/engine/surfaceseriesrendercache.cpp b/src/datavisualization/engine/surfaceseriesrendercache.cpp
index 3d2b7363..94b92ff5 100644
--- a/src/datavisualization/engine/surfaceseriesrendercache.cpp
+++ b/src/datavisualization/engine/surfaceseriesrendercache.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "surfaceseriesrendercache_p.h"
#include "surface3drenderer_p.h"
#include "texturehelper_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
SurfaceSeriesRenderCache::SurfaceSeriesRenderCache(QAbstract3DSeries *series,
Surface3DRenderer *renderer)
@@ -66,6 +40,10 @@ void SurfaceSeriesRenderCache::populate(bool newSeries)
QSurface3DSeries::DrawFlags drawMode = series()->drawMode();
m_surfaceVisible = drawMode.testFlag(QSurface3DSeries::DrawSurface);
m_surfaceGridVisible = drawMode.testFlag(QSurface3DSeries::DrawWireframe);
+ QColor lineColor = series()->wireframeColor();
+ m_surfaceObj->setLineColor(lineColor);
+ m_sliceSurfaceObj->setLineColor(lineColor);
+
if (m_flatChangeAllowed && m_surfaceFlatShading != series()->isFlatShadingEnabled()) {
m_surfaceFlatShading = series()->isFlatShadingEnabled();
m_flatStatusDirty = true;
@@ -95,4 +73,4 @@ void SurfaceSeriesRenderCache::cleanup(TextureHelper *texHelper)
SeriesRenderCache::cleanup(texHelper);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/engine/surfaceseriesrendercache_p.h b/src/datavisualization/engine/surfaceseriesrendercache_p.h
index 4d435cd5..f61e6ad3 100644
--- a/src/datavisualization/engine/surfaceseriesrendercache_p.h
+++ b/src/datavisualization/engine/surfaceseriesrendercache_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -48,7 +22,7 @@
#include <QtGui/QMatrix4x4>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Surface3DRenderer;
@@ -58,8 +32,8 @@ public:
SurfaceSeriesRenderCache(QAbstract3DSeries *series, Surface3DRenderer *renderer);
virtual ~SurfaceSeriesRenderCache();
- virtual void populate(bool newSeries);
- virtual void cleanup(TextureHelper *texHelper);
+ void populate(bool newSeries) override;
+ void cleanup(TextureHelper *texHelper) override;
inline bool surfaceVisible() const { return m_surfaceVisible; }
inline bool surfaceGridVisible() const { return m_surfaceGridVisible; }
@@ -121,6 +95,6 @@ protected:
GLuint m_surfaceTexture;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/global/datavisualizationglobal_p.h b/src/datavisualization/global/datavisualizationglobal_p.h
index 6d71255e..ff3e1f94 100644
--- a/src/datavisualization/global/datavisualizationglobal_p.h
+++ b/src/datavisualization/global/datavisualizationglobal_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -42,11 +16,12 @@
#include "qdatavisualizationglobal.h"
#include <QtGui/QOpenGLFunctions>
+#include <QtOpenGL/QOpenGLFramebufferObject>
#include <QtGui/QVector3D>
#include <QtGui/QQuaternion>
#include <QtCore/QDebug>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
// Constants used in several files
// Distance from camera to origin
@@ -83,6 +58,6 @@ static const GLfloat uniformTextureWidth = 2.0f;
static const GLfloat labelMargin = 0.05f;
static const GLfloat gridLineWidth = 0.005f;
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/global/global.pri b/src/datavisualization/global/global.pri
deleted file mode 100644
index a43ffb20..00000000
--- a/src/datavisualization/global/global.pri
+++ /dev/null
@@ -1,5 +0,0 @@
-HEADERS += \
- $$PWD/qdatavisualizationglobal.h \
- $$PWD/datavisualizationglobal_p.h
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/global/qdatavisualizationglobal.h b/src/datavisualization/global/qdatavisualizationglobal.h
index 1755ba21..5a67d1c1 100644
--- a/src/datavisualization/global/qdatavisualizationglobal.h
+++ b/src/datavisualization/global/qdatavisualizationglobal.h
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QDATAVISUALIZATIONGLOBAL_H
#define QDATAVISUALIZATIONGLOBAL_H
#include <QtCore/qglobal.h>
+#include <QtDataVisualization/qtdatavisualizationexports.h>
+
+QT_BEGIN_NAMESPACE
#define QT_DATAVISUALIZATION_VERSION_STR QT_VERSION_STR
/*
@@ -42,22 +19,6 @@
*/
#define QT_DATAVISUALIZATION_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
-#ifndef QT_STATIC
-# if defined(QT_BUILD_DATAVISUALIZATION_LIB)
-# define QT_DATAVISUALIZATION_EXPORT Q_DECL_EXPORT
-# else
-# define QT_DATAVISUALIZATION_EXPORT Q_DECL_IMPORT
-# endif
-#else
-# define QT_DATAVISUALIZATION_EXPORT
-#endif
-
-#ifndef Q_CLANG_QDOC
-#define QT_BEGIN_NAMESPACE_DATAVISUALIZATION namespace QtDataVisualization {
-#define QT_END_NAMESPACE_DATAVISUALIZATION }
-#else /* Let documentation be generated with the standard Qt namespace */
-#define QT_BEGIN_NAMESPACE_DATAVISUALIZATION QT_BEGIN_NAMESPACE
-#define QT_END_NAMESPACE_DATAVISUALIZATION QT_END_NAMESPACE
-#endif // Q_CLANG_QDOC
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/input.pri b/src/datavisualization/input/input.pri
deleted file mode 100644
index f6b9fd6a..00000000
--- a/src/datavisualization/input/input.pri
+++ /dev/null
@@ -1,14 +0,0 @@
-HEADERS += \
- $$PWD/qabstract3dinputhandler.h \
- $$PWD/q3dinputhandler.h \
- $$PWD/qtouch3dinputhandler.h \
- $$PWD/qabstract3dinputhandler_p.h \
- $$PWD/q3dinputhandler_p.h \
- $$PWD/qtouch3dinputhandler_p.h
-
-SOURCES += \
- $$PWD/qabstract3dinputhandler.cpp \
- $$PWD/q3dinputhandler.cpp \
- $$PWD/qtouch3dinputhandler.cpp
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/input/q3dinputhandler.cpp b/src/datavisualization/input/q3dinputhandler.cpp
index 3d5dd059..f62aaf70 100644
--- a/src/datavisualization/input/q3dinputhandler.cpp
+++ b/src/datavisualization/input/q3dinputhandler.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "datavisualizationglobal_p.h"
#include "q3dinputhandler_p.h"
#include "abstract3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
static const int halfSizeZoomLevel = 50;
static const int oneToOneZoomLevel = 100;
@@ -42,7 +16,7 @@ static const int nearZoomRangeDivider = 12;
static const int midZoomRangeDivider = 60;
static const int farZoomRangeDivider = 120;
-static const float rotationSpeed = 100.0f;
+[[maybe_unused]] static const float rotationSpeed = 100.0f;
/*!
* \class Q3DInputHandler
@@ -435,4 +409,4 @@ void Q3DInputHandlerPrivate::handleQueriedGraphPositionChange()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/input/q3dinputhandler.h b/src/datavisualization/input/q3dinputhandler.h
index df3d5cb6..be977385 100644
--- a/src/datavisualization/input/q3dinputhandler.h
+++ b/src/datavisualization/input/q3dinputhandler.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DINPUTHANDLER_H
#define Q3DINPUTHANDLER_H
#include <QtDataVisualization/qabstract3dinputhandler.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DInputHandlerPrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DInputHandler : public QAbstract3DInputHandler
+class Q_DATAVISUALIZATION_EXPORT Q3DInputHandler : public QAbstract3DInputHandler
{
Q_OBJECT
Q_PROPERTY(bool rotationEnabled READ isRotationEnabled WRITE setRotationEnabled NOTIFY rotationEnabledChanged)
@@ -58,11 +32,11 @@ public:
bool isZoomAtTargetEnabled() const;
// Input event listeners
- virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
+ void mousePressEvent(QMouseEvent *event, const QPoint &mousePos) override;
+ void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) override;
+ void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) override;
#if QT_CONFIG(wheelevent)
- virtual void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) override;
#endif
Q_SIGNALS:
@@ -77,6 +51,6 @@ private:
QScopedPointer<Q3DInputHandlerPrivate> d_ptr;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/q3dinputhandler_p.h b/src/datavisualization/input/q3dinputhandler_p.h
index 248bd594..b9244fb8 100644
--- a/src/datavisualization/input/q3dinputhandler_p.h
+++ b/src/datavisualization/input/q3dinputhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "qabstract3dinputhandler_p.h"
#include "q3dinputhandler.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Abstract3DController;
@@ -77,6 +51,6 @@ protected:
friend class Q3DInputHandler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/qabstract3dinputhandler.cpp b/src/datavisualization/input/qabstract3dinputhandler.cpp
index 2809bee3..bb19e7f9 100644
--- a/src/datavisualization/input/qabstract3dinputhandler.cpp
+++ b/src/datavisualization/input/qabstract3dinputhandler.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qabstract3dinputhandler_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class QAbstract3DInputHandler
@@ -259,4 +233,4 @@ QAbstract3DInputHandlerPrivate::~QAbstract3DInputHandlerPrivate()
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/input/qabstract3dinputhandler.h b/src/datavisualization/input/qabstract3dinputhandler.h
index 21cabc47..8ef40600 100644
--- a/src/datavisualization/input/qabstract3dinputhandler.h
+++ b/src/datavisualization/input/qabstract3dinputhandler.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QABSTRACT3DINPUTHANDLER_H
#define QABSTRACT3DINPUTHANDLER_H
@@ -38,11 +12,11 @@
#include <QtGui/QMouseEvent>
#include <QtGui/QTouchEvent>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DInputHandlerPrivate;
-class QT_DATAVISUALIZATION_EXPORT QAbstract3DInputHandler : public QObject
+class Q_DATAVISUALIZATION_EXPORT QAbstract3DInputHandler : public QObject
{
Q_OBJECT
Q_ENUMS(InputView)
@@ -101,6 +75,6 @@ private:
friend class QTouch3DInputHandlerPrivate;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/qabstract3dinputhandler_p.h b/src/datavisualization/input/qabstract3dinputhandler_p.h
index ee43fb37..3c664871 100644
--- a/src/datavisualization/input/qabstract3dinputhandler_p.h
+++ b/src/datavisualization/input/qabstract3dinputhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "qabstract3dinputhandler.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DInputHandler;
class Q3DScene;
@@ -77,6 +51,6 @@ private:
friend class Abstract3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/qtouch3dinputhandler.cpp b/src/datavisualization/input/qtouch3dinputhandler.cpp
index 7d5d5d15..35b79a9f 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.cpp
+++ b/src/datavisualization/input/qtouch3dinputhandler.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qtouch3dinputhandler_p.h"
#include <QtCore/QTimer>
#include <QtCore/qmath.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
static const float maxTapAndHoldJitter = 20.0f;
static const int maxPinchJitter = 10;
@@ -41,7 +15,7 @@ static const int maxSelectionJitter = 10;
static const int maxSelectionJitter = 5;
#endif
static const int tapAndHoldTime = 250;
-static const float rotationSpeed = 200.0f;
+static const float t3ihRotationSpeed = 200.0f;
static const float touchZoomDrift = 0.02f;
/*!
@@ -119,15 +93,15 @@ QTouch3DInputHandler::~QTouch3DInputHandler()
void QTouch3DInputHandler::touchEvent(QTouchEvent *event)
{
QList<QTouchEvent::TouchPoint> points;
- points = event->touchPoints();
+ points = event->points();
- if (!scene()->isSlicingActive() && points.count() == 2) {
+ if (!scene()->isSlicingActive() && points.size() == 2) {
d_ptr->m_holdTimer->stop();
- QPointF distance = points.at(0).pos() - points.at(1).pos();
- QPoint midPoint = ((points.at(0).pos() + points.at(1).pos()) / 2.0).toPoint();
+ QPointF distance = points.at(0).position() - points.at(1).position();
+ QPoint midPoint = ((points.at(0).position() + points.at(1).position()) / 2.0).toPoint();
d_ptr->handlePinchZoom(distance.manhattanLength(), midPoint);
- } else if (points.count() == 1) {
- QPointF pointerPos = points.at(0).pos();
+ } else if (points.size() == 1) {
+ QPointF pointerPos = points.at(0).position();
if (event->type() == QEvent::TouchBegin) {
// Flush input state
d_ptr->m_inputState = QAbstract3DInputHandlerPrivate::InputStateNone;
@@ -265,9 +239,9 @@ void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position)
float yRotation = camera->yRotation();
QPointF inputPos = q_ptr->inputPosition();
float mouseMoveX = float(inputPos.x() - position.x())
- / (scene->viewport().width() / rotationSpeed);
+ / (scene->viewport().width() / t3ihRotationSpeed);
float mouseMoveY = float(inputPos.y() - position.y())
- / (scene->viewport().height() / rotationSpeed);
+ / (scene->viewport().height() / t3ihRotationSpeed);
xRotation -= mouseMoveX;
yRotation -= mouseMoveY;
camera->setXRotation(xRotation);
@@ -278,4 +252,4 @@ void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position)
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/input/qtouch3dinputhandler.h b/src/datavisualization/input/qtouch3dinputhandler.h
index 468cd67f..ba7c5ba4 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.h
+++ b/src/datavisualization/input/qtouch3dinputhandler.h
@@ -1,42 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QTOUCH3DINPUTHANDLER_H
#define QTOUCH3DINPUTHANDLER_H
#include <QtDataVisualization/q3dinputhandler.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QTouch3DInputHandlerPrivate;
-class QT_DATAVISUALIZATION_EXPORT QTouch3DInputHandler : public Q3DInputHandler
+class Q_DATAVISUALIZATION_EXPORT QTouch3DInputHandler : public Q3DInputHandler
{
Q_OBJECT
@@ -45,7 +19,7 @@ public:
virtual ~QTouch3DInputHandler();
// Input event listeners
- virtual void touchEvent(QTouchEvent *event);
+ void touchEvent(QTouchEvent *event) override;
private:
Q_DISABLE_COPY(QTouch3DInputHandler)
@@ -53,6 +27,6 @@ private:
QScopedPointer<QTouch3DInputHandlerPrivate> d_ptr;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/input/qtouch3dinputhandler_p.h b/src/datavisualization/input/qtouch3dinputhandler_p.h
index 940c7653..fbfe0e10 100644
--- a/src/datavisualization/input/qtouch3dinputhandler_p.h
+++ b/src/datavisualization/input/qtouch3dinputhandler_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QTOUCH3DINPUTHANDLER_P_H
#define QTOUCH3DINPUTHANDLER_P_H
@@ -45,7 +19,7 @@
QT_FORWARD_DECLARE_CLASS(QTimer)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class QAbstract3DInputHandler;
@@ -71,6 +45,6 @@ public:
QPointF m_touchHoldPos;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/theme/q3dtheme.cpp b/src/datavisualization/theme/q3dtheme.cpp
index 46a7a5c3..0b56210b 100644
--- a/src/datavisualization/theme/q3dtheme.cpp
+++ b/src/datavisualization/theme/q3dtheme.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "q3dtheme_p.h"
#include "thememanager_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
/*!
* \class Q3DTheme
@@ -335,6 +309,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \qmlproperty color Theme3D::gridLineColor
*
* The color of the grid lines.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -343,6 +319,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The highlight color for a selected object. Used if
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionItem flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -352,6 +330,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionRow or \c AbstractGraph3D.SelectionColumn
* flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -380,6 +360,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* The highlight gradient for a selected object. Used if
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionItem flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -389,6 +371,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
* \l{AbstractGraph3D::selectionMode}{selectionMode}
* has the \c AbstractGraph3D.SelectionRow or \c AbstractGraph3D.SelectionColumn
* flag set.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
/*!
@@ -632,6 +616,8 @@ QColor Q3DTheme::labelBackgroundColor() const
* \property Q3DTheme::gridLineColor
*
* \brief The color of the grid lines.
+ *
+ * \note Transparency is not supported and will result in undefined behavior.
*/
void Q3DTheme::setGridLineColor(const QColor &color)
{
@@ -1022,11 +1008,13 @@ Q3DTheme::ColorStyle Q3DTheme::colorStyle() const
*/
void Q3DTheme::setType(Theme themeType)
{
- d_ptr->m_dirtyBits.themeIdDirty = true;
- if (d_ptr->m_themeId != themeType) {
- d_ptr->m_themeId = themeType;
- ThemeManager::setPredefinedPropertiesToTheme(this, themeType);
- emit typeChanged(themeType);
+ if (themeType >= ThemeQt && themeType <= ThemeUserDefined) {
+ d_ptr->m_dirtyBits.themeIdDirty = true;
+ if (d_ptr->m_themeId != themeType) {
+ d_ptr->m_themeId = themeType;
+ ThemeManager::setPredefinedPropertiesToTheme(this, themeType);
+ emit typeChanged(themeType);
+ }
}
}
@@ -1203,4 +1191,4 @@ bool Q3DThemePrivate::sync(Q3DThemePrivate &other)
return updateDrawer;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/theme/q3dtheme.h b/src/datavisualization/theme/q3dtheme.h
index e0a49631..5087d854 100644
--- a/src/datavisualization/theme/q3dtheme.h
+++ b/src/datavisualization/theme/q3dtheme.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef Q3DTHEME_H
#define Q3DTHEME_H
@@ -36,11 +10,11 @@
#include <QtGui/QFont>
#include <QtGui/QColor>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Q3DThemePrivate;
-class QT_DATAVISUALIZATION_EXPORT Q3DTheme : public QObject
+class Q_DATAVISUALIZATION_EXPORT Q3DTheme : public QObject
{
Q_OBJECT
Q_ENUMS(ColorStyle)
@@ -76,7 +50,7 @@ public:
};
enum Theme {
- ThemeQt,
+ ThemeQt = 0,
ThemePrimaryColors,
ThemeDigia,
ThemeStoneMoss,
@@ -197,6 +171,6 @@ private:
friend class Abstract3DController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/theme/q3dtheme_p.h b/src/datavisualization/theme/q3dtheme_p.h
index 6061fd38..ae054faf 100644
--- a/src/datavisualization/theme/q3dtheme_p.h
+++ b/src/datavisualization/theme/q3dtheme_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,10 @@
#ifndef Q3DTHEME_P_H
#define Q3DTHEME_P_H
-#include "datavisualizationglobal_p.h"
+#include <private/datavisualizationglobal_p.h>
#include "q3dtheme.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
struct Q3DThemeDirtyBitField {
bool baseColorDirty : 1;
@@ -96,7 +70,7 @@ struct Q3DThemeDirtyBitField {
}
};
-class QT_DATAVISUALIZATION_EXPORT Q3DThemePrivate : public QObject
+class Q_DATAVISUALIZATION_EXPORT Q3DThemePrivate : public QObject
{
Q_OBJECT
public:
@@ -155,6 +129,6 @@ protected:
Q3DTheme *q_ptr;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/theme/theme.pri b/src/datavisualization/theme/theme.pri
deleted file mode 100644
index cf7b434c..00000000
--- a/src/datavisualization/theme/theme.pri
+++ /dev/null
@@ -1,10 +0,0 @@
-HEADERS += \
- $$PWD/q3dtheme.h \
- $$PWD/q3dtheme_p.h \
- $$PWD/thememanager_p.h
-
-SOURCES += \
- $$PWD/q3dtheme.cpp \
- $$PWD/thememanager.cpp
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/theme/thememanager.cpp b/src/datavisualization/theme/thememanager.cpp
index 01c7c10b..8dfd6a72 100644
--- a/src/datavisualization/theme/thememanager.cpp
+++ b/src/datavisualization/theme/thememanager.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "thememanager_p.h"
#include "q3dtheme_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
const float defaultBuiltInColorLevel = 0.7f; // for built-in gradient themes
const float defaultColorLevel = 0.5f; // for built-in uniform themes
@@ -101,7 +75,8 @@ void ThemeManager::setActiveTheme(Q3DTheme *theme)
m_activeTheme = theme;
// Reset all bits to dirty for sync
- m_activeTheme->d_ptr->resetDirtyBits();
+ if (theme->d_ptr->isForcePredefinedType())
+ m_activeTheme->d_ptr->resetDirtyBits();
// Connect signals from new one
connectThemeSignals();
@@ -601,4 +576,4 @@ void ThemeManager::setColorStyle(Q3DTheme *theme, Q3DTheme::ColorStyle style)
theme->setColorStyle(style);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/theme/thememanager_p.h b/src/datavisualization/theme/thememanager_p.h
index 2e0be5f0..ea28bd1f 100644
--- a/src/datavisualization/theme/thememanager_p.h
+++ b/src/datavisualization/theme/thememanager_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "abstract3dcontroller_p.h"
#include "q3dtheme.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ThemeManager : public QObject
{
@@ -92,6 +66,6 @@ private:
Abstract3DController *m_controller;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/abstractobjecthelper.cpp b/src/datavisualization/utils/abstractobjecthelper.cpp
index db0318ce..a99bdfac 100644
--- a/src/datavisualization/utils/abstractobjecthelper.cpp
+++ b/src/datavisualization/utils/abstractobjecthelper.cpp
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "abstractobjecthelper_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
AbstractObjectHelper::AbstractObjectHelper()
: m_vertexbuffer(0),
@@ -85,4 +59,4 @@ GLuint AbstractObjectHelper::indexCount()
return m_indexCount;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/abstractobjecthelper_p.h b/src/datavisualization/utils/abstractobjecthelper_p.h
index cb03b156..918db4e4 100644
--- a/src/datavisualization/utils/abstractobjecthelper_p.h
+++ b/src/datavisualization/utils/abstractobjecthelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -42,7 +16,7 @@
#include "datavisualizationglobal_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class AbstractObjectHelper: protected QOpenGLFunctions
{
@@ -67,6 +41,6 @@ public:
GLboolean m_meshDataLoaded;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/camerahelper.cpp b/src/datavisualization/utils/camerahelper.cpp
index 38091b49..1a8c8823 100644
--- a/src/datavisualization/utils/camerahelper.cpp
+++ b/src/datavisualization/utils/camerahelper.cpp
@@ -1,38 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "camerahelper_p.h"
#include <QtCore/qmath.h>
#include <QtGui/QMatrix4x4>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
CameraHelper::CameraHelper(QObject *parent) :
QObject(parent),
@@ -265,4 +239,4 @@ void CameraHelper::setCameraPreset(Q3DCamera::CameraPreset preset)
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/camerahelper_p.h b/src/datavisualization/utils/camerahelper_p.h
index fd28e3e6..88c556b3 100644
--- a/src/datavisualization/utils/camerahelper_p.h
+++ b/src/datavisualization/utils/camerahelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -48,7 +22,7 @@ class QMatrix4x4;
class QPoint;
QT_END_NAMESPACE
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class CameraHelper : public QObject
{
@@ -95,6 +69,6 @@ public:
void setCameraPreset(Q3DCamera::CameraPreset preset);
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/meshloader.cpp b/src/datavisualization/utils/meshloader.cpp
index 2069b444..dc21b0f6 100644
--- a/src/datavisualization/utils/meshloader.cpp
+++ b/src/datavisualization/utils/meshloader.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "meshloader_p.h"
@@ -34,7 +8,7 @@
#include <QtCore/QList>
#include <QtGui/QVector2D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
QString slashTag = QStringLiteral("/");
@@ -81,6 +55,10 @@ bool MeshLoader::loadOBJ(const QString &path, QList<QVector3D> &out_vertices,
QStringList set1 = lineContents.at(1).split(slashTag);
QStringList set2 = lineContents.at(2).split(slashTag);
QStringList set3 = lineContents.at(3).split(slashTag);
+ if (set1.size() < 3 || set2.size() < 3 || set3.size() < 3) {
+ qWarning("The file being loaded is missing UVs and/or normals");
+ return false;
+ }
vertexIndex[0] = set1.at(0).toUInt();
vertexIndex[1] = set2.at(0).toUInt();
vertexIndex[2] = set3.at(0).toUInt();
@@ -123,4 +101,4 @@ bool MeshLoader::loadOBJ(const QString &path, QList<QVector3D> &out_vertices,
return true;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/meshloader_p.h b/src/datavisualization/utils/meshloader_p.h
index e8f60ffc..cbd4036b 100644
--- a/src/datavisualization/utils/meshloader_p.h
+++ b/src/datavisualization/utils/meshloader_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include <QtGui/QVector2D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class MeshLoader
{
@@ -52,6 +26,6 @@ class MeshLoader
QList<QVector2D> &out_uvs, QList<QVector3D> &out_normals);
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/objecthelper.cpp b/src/datavisualization/utils/objecthelper.cpp
index 410a22d7..6053b255 100644
--- a/src/datavisualization/utils/objecthelper.cpp
+++ b/src/datavisualization/utils/objecthelper.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "meshloader_p.h"
#include "vertexindexer_p.h"
#include "objecthelper_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
ObjectHelper::ObjectHelper(const QString &objectFile)
: m_objectFile(objectFile)
@@ -113,10 +87,19 @@ ObjectHelper *ObjectHelper::getObjectHelper(const Abstract3DRenderer *cacheId,
objRef = new ObjectHelperRef;
objRef->refCount = 0;
objRef->obj = new ObjectHelper(objectFile);
- objectTable->insert(objectFile, objRef);
+ if (objRef->obj->m_meshDataLoaded) {
+ objectTable->insert(objectFile, objRef);
+ } else {
+ delete objRef->obj;
+ delete objRef;
+ objRef = nullptr;
+ }
+ }
+ if (objRef) {
+ objRef->refCount++;
+ return objRef->obj;
}
- objRef->refCount++;
- return objRef->obj;
+ return nullptr;
}
void ObjectHelper::load()
@@ -140,41 +123,44 @@ void ObjectHelper::load()
QList<QVector2D> uvs;
QList<QVector3D> normals;
bool loadOk = MeshLoader::loadOBJ(m_objectFile, vertices, uvs, normals);
- if (!loadOk)
- qFatal("loading failed");
-
- // Index vertices
- VertexIndexer::indexVBO(vertices, uvs, normals, m_indices, m_indexedVertices, m_indexedUVs,
- m_indexedNormals);
-
- m_indexCount = m_indices.size();
-
- glGenBuffers(1, &m_vertexbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
- glBufferData(GL_ARRAY_BUFFER, m_indexedVertices.size() * sizeof(QVector3D),
- &m_indexedVertices.at(0),
- GL_STATIC_DRAW);
- glGenBuffers(1, &m_normalbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer);
- glBufferData(GL_ARRAY_BUFFER, m_indexedNormals.size() * sizeof(QVector3D),
- &m_indexedNormals.at(0),
- GL_STATIC_DRAW);
-
- glGenBuffers(1, &m_uvbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
- glBufferData(GL_ARRAY_BUFFER, m_indexedUVs.size() * sizeof(QVector2D),
- &m_indexedUVs.at(0), GL_STATIC_DRAW);
-
- glGenBuffers(1, &m_elementbuffer);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indices.size() * sizeof(GLuint),
- &m_indices.at(0), GL_STATIC_DRAW);
-
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
-
- m_meshDataLoaded = true;
+ if (!loadOk) {
+ qCritical() << "Loading" << m_objectFile << "failed";
+ m_meshDataLoaded = false;
+ } else {
+ // Index vertices
+ VertexIndexer::indexVBO(vertices, uvs, normals, m_indices, m_indexedVertices, m_indexedUVs,
+ m_indexedNormals);
+
+ m_indexCount = m_indices.size();
+
+ glGenBuffers(1, &m_vertexbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
+ glBufferData(GL_ARRAY_BUFFER, m_indexedVertices.size() * sizeof(QVector3D),
+ &m_indexedVertices.at(0),
+ GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_normalbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer);
+ glBufferData(GL_ARRAY_BUFFER, m_indexedNormals.size() * sizeof(QVector3D),
+ &m_indexedNormals.at(0),
+ GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_uvbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
+ glBufferData(GL_ARRAY_BUFFER, m_indexedUVs.size() * sizeof(QVector2D),
+ &m_indexedUVs.at(0), GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_elementbuffer);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indices.size() * sizeof(GLuint),
+ &m_indices.at(0), GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+
+ m_meshDataLoaded = true;
+ }
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/objecthelper_p.h b/src/datavisualization/utils/objecthelper_p.h
index d1c2ea78..1ac0feb0 100644
--- a/src/datavisualization/utils/objecthelper_p.h
+++ b/src/datavisualization/utils/objecthelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,7 +17,7 @@
#include "datavisualizationglobal_p.h"
#include "abstractobjecthelper_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Abstract3DRenderer;
@@ -76,6 +50,6 @@ private:
QList<QVector3D> m_indexedNormals;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/qutils.h b/src/datavisualization/utils/qutils.h
index b7001652..6b58a977 100644
--- a/src/datavisualization/utils/qutils.h
+++ b/src/datavisualization/utils/qutils.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QUTILS_H
#define QUTILS_H
@@ -36,11 +10,9 @@
#include <QtGui/QOffscreenSurface>
#include <QtCore/QCoreApplication>
-namespace QtDataVisualization {
+QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
-static inline QSurfaceFormat qDefaultSurfaceFormat(bool antialias = true) Q_DECL_UNUSED;
-#endif
+[[maybe_unused]]
static inline QSurfaceFormat qDefaultSurfaceFormat(bool antialias)
{
bool isES = false;
@@ -65,7 +37,7 @@ static inline QSurfaceFormat qDefaultSurfaceFormat(bool antialias)
ctx->makeCurrent(dummySurface);
}
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
isES = true;
#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0))
isES = false;
@@ -111,6 +83,6 @@ static inline QSurfaceFormat qDefaultSurfaceFormat(bool antialias)
return surfaceFormat;
}
-}
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
index 8e06617b..0a04d038 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterobjectbufferhelper_p.h"
#include "objecthelper_p.h"
@@ -33,9 +7,9 @@
#include <QtGui/QMatrix4x4>
#include <QtCore/qmath.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
-const GLfloat itemScaler = 3.0f;
+const GLfloat ScatterObjectBufferHelper::itemScaler = 3.0f;
ScatterObjectBufferHelper::ScatterObjectBufferHelper()
: m_scaleY(0.0f)
@@ -48,7 +22,6 @@ ScatterObjectBufferHelper::~ScatterObjectBufferHelper()
void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal dotScale)
{
- m_meshDataLoaded = false;
m_indexCount = 0;
ObjectHelper *dotObj = cache->object();
@@ -71,6 +44,7 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
m_uvbuffer = 0;
m_normalbuffer = 0;
m_elementbuffer = 0;
+ m_meshDataLoaded = false;
}
// Index vertices
@@ -78,10 +52,10 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
const QList<QVector3D> indexed_vertices = dotObj->indexedvertices();
const QList<QVector2D> indexed_uvs = dotObj->indexedUVs();
const QList<QVector3D> indexed_normals = dotObj->indexedNormals();
- const int indicesCount = indices.count();
- const int verticeCount = indexed_vertices.count();
- const int uvsCount = indexed_uvs.count();
- const int normalsCount = indexed_normals.count();
+ const int indicesCount = indices.size();
+ const int verticeCount = indexed_vertices.size();
+ const int uvsCount = indexed_uvs.size();
+ const int normalsCount = indexed_normals.size();
float itemSize = cache->itemSize() / itemScaler;
if (itemSize == 0.0f)
@@ -98,7 +72,7 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
QList<QVector3D> scaled_vertices;
scaled_vertices.resize(verticeCount);
for (int i = 0; i < verticeCount; i++)
- scaled_vertices[i] = indexed_vertices[i] * modelMatrix;
+ scaled_vertices[i] = (QVector4D(indexed_vertices[i]) * modelMatrix).toVector3D();
QList<GLuint> buffered_indices;
QList<QVector3D> buffered_vertices;
@@ -141,9 +115,11 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
modelMatrix = matrix.transposed(); // Because of row-column major difference
for (int j = 0; j < verticeCount; j++) {
- buffered_vertices[j + offset] = indexed_vertices[j] * modelMatrix
+ buffered_vertices[j + offset]
+ = (QVector4D(indexed_vertices[j]) * modelMatrix).toVector3D()
+ item.translation();
- buffered_normals[j + offset] = indexed_normals[j] * itModelMatrix;
+ buffered_normals[j + offset]
+ = (QVector4D(indexed_normals[j]) * itModelMatrix).toVector3D();
}
}
@@ -196,7 +172,7 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal
void ScatterObjectBufferHelper::updateUVs(ScatterSeriesRenderCache *cache)
{
ObjectHelper *dotObj = cache->object();
- const int uvsCount = dotObj->indexedUVs().count();
+ const int uvsCount = dotObj->indexedUVs().size();
const ScatterRenderItemArray &renderArray = cache->renderArray();
const bool updateAll = (cache->updateIndices().size() == 0);
const int updateSize = updateAll ? renderArray.size() : cache->updateIndices().size();
@@ -237,7 +213,7 @@ uint ScatterObjectBufferHelper::createRangeGradientUVs(ScatterSeriesRenderCache
QList<QVector2D> &buffered_uvs)
{
ObjectHelper *dotObj = cache->object();
- const int uvsCount = dotObj->indexedUVs().count();
+ const int uvsCount = dotObj->indexedUVs().size();
const ScatterRenderItemArray &renderArray = cache->renderArray();
const bool updateAll = (cache->updateIndices().size() == 0);
const int updateSize = updateAll ? renderArray.size() : cache->updateIndices().size();
@@ -280,7 +256,7 @@ uint ScatterObjectBufferHelper::createObjectGradientUVs(ScatterSeriesRenderCache
const QList<QVector3D> &indexed_vertices)
{
ObjectHelper *dotObj = cache->object();
- const int uvsCount = dotObj->indexedUVs().count();
+ const int uvsCount = dotObj->indexedUVs().size();
const ScatterRenderItemArray &renderArray = cache->renderArray();
const uint renderArraySize = renderArray.size();
@@ -317,7 +293,7 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
// Index vertices
const QList<QVector3D> indexed_vertices = dotObj->indexedvertices();
- int verticeCount = indexed_vertices.count();
+ int verticeCount = indexed_vertices.size();
float itemSize = cache->itemSize() / itemScaler;
if (itemSize == 0.0f)
@@ -334,7 +310,7 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
QList<QVector3D> scaled_vertices;
scaled_vertices.resize(verticeCount);
for (int i = 0; i < verticeCount; i++)
- scaled_vertices[i] = indexed_vertices[i] * modelMatrix;
+ scaled_vertices[i] = (QVector4D(indexed_vertices[i]) * modelMatrix).toVector3D();
QList<QVector3D> buffered_vertices;
buffered_vertices.resize(verticeCount * updateSize);
@@ -356,9 +332,11 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
modelMatrix = matrix.transposed();
modelMatrix.scale(modelScaler);
- for (int j = 0; j < verticeCount; j++)
- buffered_vertices[j + offset] = indexed_vertices[j] * modelMatrix
+ for (int j = 0; j < verticeCount; j++) {
+ buffered_vertices[j + offset]
+ = (QVector4D(indexed_vertices[j]) * modelMatrix).toVector3D()
+ item.translation();
+ }
}
itemCount++;
}
@@ -386,4 +364,4 @@ void ScatterObjectBufferHelper::update(ScatterSeriesRenderCache *cache, qreal do
m_meshDataLoaded = true;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/scatterobjectbufferhelper_p.h b/src/datavisualization/utils/scatterobjectbufferhelper_p.h
index fac5e922..5328e029 100644
--- a/src/datavisualization/utils/scatterobjectbufferhelper_p.h
+++ b/src/datavisualization/utils/scatterobjectbufferhelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "abstractobjecthelper_p.h"
#include "scatterseriesrendercache_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterObjectBufferHelper : public AbstractObjectHelper
{
@@ -63,8 +37,9 @@ private:
const QList<QVector3D> &indexed_vertices);
float m_scaleY;
+ static const GLfloat itemScaler;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/scatterpointbufferhelper.cpp b/src/datavisualization/utils/scatterpointbufferhelper.cpp
index d3621423..ccb5dd13 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper.cpp
+++ b/src/datavisualization/utils/scatterpointbufferhelper.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterpointbufferhelper_p.h"
#include <QtGui/QVector2D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
const QVector3D hiddenPos(-1000.0f, -1000.0f, -1000.0f);
@@ -97,6 +71,7 @@ void ScatterPointBufferHelper::load(ScatterSeriesRenderCache *cache)
m_bufferedPoints.clear();
m_pointbuffer = 0;
m_uvbuffer = 0;
+ m_meshDataLoaded = false;
}
bool itemsVisible = false;
@@ -215,4 +190,4 @@ void ScatterPointBufferHelper::createRangeGradientUVs(ScatterSeriesRenderCache *
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/scatterpointbufferhelper_p.h b/src/datavisualization/utils/scatterpointbufferhelper_p.h
index d1e8f5b0..ff19a36e 100644
--- a/src/datavisualization/utils/scatterpointbufferhelper_p.h
+++ b/src/datavisualization/utils/scatterpointbufferhelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
#include "abstractobjecthelper_p.h"
#include "scatterseriesrendercache_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ScatterPointBufferHelper : public AbstractObjectHelper
{
@@ -73,6 +47,6 @@ private:
float m_scaleY;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/shaderhelper.cpp b/src/datavisualization/utils/shaderhelper.cpp
index ba029be2..7de9592d 100644
--- a/src/datavisualization/utils/shaderhelper.cpp
+++ b/src/datavisualization/utils/shaderhelper.cpp
@@ -1,37 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "shaderhelper_p.h"
#include <QtOpenGL/QOpenGLShader>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
void discardDebugMsgs(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
@@ -113,7 +87,12 @@ void ShaderHelper::initialize()
qFatal("Compiling Vertex shader failed");
if (!m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, m_fragmentShaderFile))
qFatal("Compiling Fragment shader failed");
- m_program->link();
+
+ if (!m_program->link()) {
+ qWarning() << "Unable to link shader program:" <<
+ m_vertexShaderFile << m_fragmentShaderFile;
+ return;
+ }
m_positionAttr = m_program->attributeLocation("vertexPosition_mdl");
m_normalAttr = m_program->attributeLocation("vertexNormal_mdl");
@@ -416,4 +395,4 @@ GLint ShaderHelper::normalAtt()
return m_normalAttr;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/shaderhelper_p.h b/src/datavisualization/utils/shaderhelper_p.h
index c4e4a717..93f861b2 100644
--- a/src/datavisualization/utils/shaderhelper_p.h
+++ b/src/datavisualization/utils/shaderhelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class ShaderHelper
{
@@ -146,6 +120,6 @@ class ShaderHelper
GLboolean m_initialized;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/surfaceobject.cpp b/src/datavisualization/utils/surfaceobject.cpp
index 96a75422..30635e6c 100644
--- a/src/datavisualization/utils/surfaceobject.cpp
+++ b/src/datavisualization/utils/surfaceobject.cpp
@@ -1,38 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "surfaceobject_p.h"
#include "surface3drenderer_p.h"
#include <QtGui/QVector2D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
SurfaceObject::SurfaceObject(Surface3DRenderer *renderer)
: m_axisCacheX(renderer->m_axisCacheX),
@@ -870,7 +844,8 @@ void SurfaceObject::getNormalizedVertex(const QSurfaceDataItem &data, QVector3D
}
float normalizedY = m_axisCacheY.positionAt(data.y());
m_minY = qMin(normalizedY, m_minY);
- m_maxY = qMax(normalizedY, m_maxY);
+ if (!qIsNaN(normalizedY) && !qIsInf(normalizedY))
+ m_maxY = qMax(normalizedY, m_maxY);
vertex.setX(normalizedX);
vertex.setY(normalizedY);
vertex.setZ(normalizedZ);
@@ -992,4 +967,4 @@ QVector3D SurfaceObject::normal(const QVector3D &a, const QVector3D &b, const QV
return normal;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/surfaceobject_p.h b/src/datavisualization/utils/surfaceobject_p.h
index 532f7692..7a2b7241 100644
--- a/src/datavisualization/utils/surfaceobject_p.h
+++ b/src/datavisualization/utils/surfaceobject_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,13 +14,13 @@
#ifndef SURFACEOBJECT_P_H
#define SURFACEOBJECT_P_H
-#include "datavisualizationglobal_p.h"
#include "abstractobjecthelper_p.h"
#include "qsurfacedataproxy.h"
#include <QtCore/QRect>
+#include <QtGui/QColor>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Surface3DRenderer;
class AxisRenderCache;
@@ -88,13 +62,15 @@ public:
void createCoarseGridlineIndices(int x, int y, int endX, int endY);
void uploadBuffers();
GLuint gridElementBuf();
- GLuint uvBuf();
+ GLuint uvBuf() override;
GLuint gridIndexCount();
QVector3D vertexAt(int column, int row);
void clear();
float minYValue() const { return m_minY; }
float maxYValue() const { return m_maxY; }
inline void activateSurfaceTexture(bool value) { m_returnTextureBuffer = value; }
+ inline void setLineColor(const QColor &color) { m_wireframeColor = color; }
+ inline const QColor &wireframeColor() const { return m_wireframeColor; }
private:
void createCoarseIndices(GLint *indices, int &p, int row, int upperRow, int j);
@@ -129,8 +105,9 @@ private:
bool m_returnTextureBuffer = false;
SurfaceObject::DataDimensions m_dataDimension;
SurfaceObject::DataDimensions m_oldDataDimension = DataDimensions(-1);
+ QColor m_wireframeColor;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/texturehelper.cpp b/src/datavisualization/utils/texturehelper.cpp
index 0e66459c..c892014a 100644
--- a/src/datavisualization/utils/texturehelper.cpp
+++ b/src/datavisualization/utils/texturehelper.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "texturehelper_p.h"
#include "utils_p.h"
@@ -34,7 +8,7 @@
#include <QtGui/QPainter>
#include <QtCore/QTime>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
// Defined in shaderhelper.cpp
extern void discardDebugMsgs(QtMsgType type, const QMessageLogContext &context, const QString &msg);
@@ -42,13 +16,12 @@ extern void discardDebugMsgs(QtMsgType type, const QMessageLogContext &context,
TextureHelper::TextureHelper()
{
initializeOpenGLFunctions();
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (!Utils::isOpenGLES()) {
// Discard warnings about deprecated functions
QtMessageHandler handler = qInstallMessageHandler(discardDebugMsgs);
- m_openGlFunctions_2_1 =
- QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_1>();
+ m_openGlFunctions_2_1 = new QOpenGLFunctions_2_1;
if (m_openGlFunctions_2_1)
m_openGlFunctions_2_1->initializeOpenGLFunctions();
@@ -63,6 +36,9 @@ TextureHelper::TextureHelper()
TextureHelper::~TextureHelper()
{
+#if !QT_CONFIG(opengles2)
+ delete m_openGlFunctions_2_1;
+#endif
}
GLuint TextureHelper::create2DTexture(const QImage &image, bool useTrilinearFiltering,
@@ -115,7 +91,7 @@ GLuint TextureHelper::create3DTexture(const QList<uchar> *data, int width, int h
return 0;
GLuint textureId = 0;
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
Q_UNUSED(dataFormat);
Q_UNUSED(data);
#else
@@ -290,7 +266,7 @@ GLuint TextureHelper::createGradientTexture(const QLinearGradient &gradient)
GLuint TextureHelper::createDepthTexture(const QSize &size, GLuint textureSize)
{
GLuint depthtextureid = 0;
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
Q_UNUSED(size);
Q_UNUSED(textureSize);
#else
@@ -316,7 +292,7 @@ GLuint TextureHelper::createDepthTextureFrameBuffer(const QSize &size, GLuint &f
GLuint textureSize)
{
GLuint depthtextureid = createDepthTexture(size, textureSize);
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
Q_UNUSED(frameBuffer);
#else
if (!Utils::isOpenGLES()) {
@@ -328,7 +304,7 @@ GLuint TextureHelper::createDepthTextureFrameBuffer(const QSize &size, GLuint &f
// Attach texture to depth attachment
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthtextureid, 0);
- m_openGlFunctions_2_1->glDrawBuffer(GL_NONE);
+ m_openGlFunctions_2_1->glDrawBuffers(0, GL_NONE);
m_openGlFunctions_2_1->glReadBuffer(GL_NONE);
// Verify that the frame buffer is complete
@@ -402,7 +378,7 @@ void TextureHelper::convertToGLFormatHelper(QImage &dstImage, const QImage &srcI
const uint *p = (const uint*) srcImage.scanLine(srcImage.height() - 1);
uint *q = (uint*) dstImage.scanLine(0);
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (texture_format == GL_BGRA) {
#else
if (texture_format == GL_BGRA8_EXT) {
@@ -457,7 +433,7 @@ void TextureHelper::convertToGLFormatHelper(QImage &dstImage, const QImage &srcI
QRgb TextureHelper::qt_gl_convertToGLFormatHelper(QRgb src_pixel, GLenum texture_format)
{
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
if (texture_format == GL_BGRA) {
#else
if (texture_format == GL_BGRA8_EXT) {
@@ -481,4 +457,4 @@ QRgb TextureHelper::qt_gl_convertToGLFormatHelper(QRgb src_pixel, GLenum texture
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/texturehelper_p.h b/src/datavisualization/utils/texturehelper_p.h
index fac32a42..f9baa272 100644
--- a/src/datavisualization/utils/texturehelper_p.h
+++ b/src/datavisualization/utils/texturehelper_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -43,12 +17,12 @@
#include "datavisualizationglobal_p.h"
#include <QtGui/QRgb>
#include <QtGui/QLinearGradient>
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
// 3D Textures are not supported by ES set
-# include <QtGui/QOpenGLFunctions_2_1>
+# include <QtOpenGL/QOpenGLFunctions_2_1>
#endif
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class TextureHelper : protected QOpenGLFunctions
{
@@ -77,8 +51,8 @@ class TextureHelper : protected QOpenGLFunctions
void convertToGLFormatHelper(QImage &dstImage, const QImage &srcImage, GLenum texture_format);
QRgb qt_gl_convertToGLFormatHelper(QRgb src_pixel, GLenum texture_format);
-#if !defined(QT_OPENGL_ES_2)
- QOpenGLFunctions_2_1 *m_openGlFunctions_2_1; // Not owned
+#if !QT_CONFIG(opengles2)
+ QOpenGLFunctions_2_1 *m_openGlFunctions_2_1 = nullptr;
#endif
friend class Bars3DRenderer;
friend class Surface3DRenderer;
@@ -86,6 +60,6 @@ class TextureHelper : protected QOpenGLFunctions
friend class Abstract3DRenderer;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp
index e80058db..3470c44d 100644
--- a/src/datavisualization/utils/utils.cpp
+++ b/src/datavisualization/utils/utils.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "utils_p.h"
@@ -33,8 +7,10 @@
#include <QtGui/QOpenGLContext>
#include <QtGui/QOffscreenSurface>
#include <QtCore/QCoreApplication>
+#include <QtCore/QRegularExpression>
+#include <QLocale>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
#define NUM_IN_POWER(y, x) for (;y<x;y<<=1)
#define MIN_POWER 2
@@ -217,24 +193,28 @@ QImage Utils::getGradientImage(QLinearGradient &gradient)
Utils::ParamType Utils::preParseFormat(const QString &format, QString &preStr, QString &postStr,
int &precision, char &formatSpec)
{
- static QRegExp formatMatcher(QStringLiteral("^([^%]*)%([\\-\\+#\\s\\d\\.lhjztL]*)([dicuoxfegXFEG])(.*)$"));
- static QRegExp precisionMatcher(QStringLiteral("\\.(\\d+)"));
+ static QRegularExpression formatMatcher(QStringLiteral("^([^%]*)%([\\-\\+#\\s\\d\\.lhjztL]*)([dicuoxfegXFEG])(.*)$"));
+ static QRegularExpression precisionMatcher(QStringLiteral("\\.(\\d+)"));
Utils::ParamType retVal;
- if (formatMatcher.indexIn(format, 0) != -1) {
- preStr = formatMatcher.cap(1);
+ QRegularExpressionMatch formatMatch = formatMatcher.match(format, 0);
+
+ if (formatMatch.hasMatch()) {
+ preStr = formatMatch.captured(1);
// Six and 'g' are defaults in Qt API
precision = 6;
- if (!formatMatcher.cap(2).isEmpty()) {
- if (precisionMatcher.indexIn(formatMatcher.cap(2), 0) != -1)
- precision = precisionMatcher.cap(1).toInt();
+ if (!formatMatch.captured(2).isEmpty()) {
+ QRegularExpressionMatch precisionMatch = precisionMatcher.match(formatMatch.captured(2),
+ 0);
+ if (precisionMatch.hasMatch())
+ precision = precisionMatch.captured(1).toInt();
}
- if (formatMatcher.cap(3).isEmpty())
+ if (formatMatch.captured(3).isEmpty())
formatSpec = 'g';
else
- formatSpec = formatMatcher.cap(3).at(0).toLatin1();
- postStr = formatMatcher.cap(4);
+ formatSpec = formatMatch.captured(3).at(0).toLatin1();
+ postStr = formatMatch.captured(4);
retVal = mapFormatCharToParamType(formatSpec);
} else {
retVal = ParamTypeUnknown;
@@ -350,7 +330,7 @@ void Utils::resolveStatics()
ctx->makeCurrent(dummySurface);
}
-#if defined(QT_OPENGL_ES_2)
+#if QT_CONFIG(opengles2)
isES = true;
#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0))
isES = false;
@@ -383,4 +363,4 @@ void Utils::resolveStatics()
staticsResolved = true;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/utils.pri b/src/datavisualization/utils/utils.pri
deleted file mode 100644
index 904407b8..00000000
--- a/src/datavisualization/utils/utils.pri
+++ /dev/null
@@ -1,26 +0,0 @@
-HEADERS += $$PWD/meshloader_p.h \
- $$PWD/vertexindexer_p.h \
- $$PWD/camerahelper_p.h \
- $$PWD/shaderhelper_p.h \
- $$PWD/objecthelper_p.h \
- $$PWD/texturehelper_p.h \
- $$PWD/utils_p.h \
- $$PWD/abstractobjecthelper_p.h \
- $$PWD/surfaceobject_p.h \
- $$PWD/qutils.h \
- $$PWD/scatterobjectbufferhelper_p.h \
- $$PWD/scatterpointbufferhelper_p.h
-
-SOURCES += $$PWD/meshloader.cpp \
- $$PWD/vertexindexer.cpp \
- $$PWD/camerahelper.cpp \
- $$PWD/shaderhelper.cpp \
- $$PWD/objecthelper.cpp \
- $$PWD/texturehelper.cpp \
- $$PWD/utils.cpp \
- $$PWD/abstractobjecthelper.cpp \
- $$PWD/surfaceobject.cpp \
- $$PWD/scatterobjectbufferhelper.cpp \
- $$PWD/scatterpointbufferhelper.cpp
-
-INCLUDEPATH += $$PWD
diff --git a/src/datavisualization/utils/utils_p.h b/src/datavisualization/utils/utils_p.h
index 08f036c8..06c98407 100644
--- a/src/datavisualization/utils/utils_p.h
+++ b/src/datavisualization/utils/utils_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -44,7 +18,7 @@
QT_FORWARD_DECLARE_CLASS(QLinearGradient)
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Utils
{
@@ -87,6 +61,6 @@ private:
static ParamType mapFormatCharToParamType(char formatSpec);
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualization/utils/vertexindexer.cpp b/src/datavisualization/utils/vertexindexer.cpp
index 5b770366..65316c63 100644
--- a/src/datavisualization/utils/vertexindexer.cpp
+++ b/src/datavisualization/utils/vertexindexer.cpp
@@ -1,37 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "vertexindexer_p.h"
#include <QtCore/qmath.h>
+#include <QtCore/qmap.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
int unique_vertices = 0;
@@ -78,4 +53,4 @@ void VertexIndexer::indexVBO(const QList<QVector3D> &in_vertices, const QList<QV
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualization/utils/vertexindexer_p.h b/src/datavisualization/utils/vertexindexer_p.h
index 42a48465..e7f0f775 100644
--- a/src/datavisualization/utils/vertexindexer_p.h
+++ b/src/datavisualization/utils/vertexindexer_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -45,7 +19,7 @@
#include <QtCore/QList>
#include <QtGui/QVector2D>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class VertexIndexer
{
@@ -70,6 +44,6 @@ private:
GLuint &result);
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml/CMakeLists.txt b/src/datavisualizationqml/CMakeLists.txt
new file mode 100644
index 00000000..110a5ef0
--- /dev/null
+++ b/src/datavisualizationqml/CMakeLists.txt
@@ -0,0 +1,66 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(qml_files
+ "designer/Bars3DSpecifics.qml"
+ "designer/Scatter3DSpecifics.qml"
+ "designer/Surface3DSpecifics.qml"
+ "designer/default/Bars3D.qml"
+ "designer/default/Scatter3D.qml"
+ "designer/default/Surface3D.qml"
+)
+
+set(resources
+ "designer/qtdatavisualization.metainfo"
+ "designer/images/bars3d-icon.png"
+ "designer/images/bars3d-icon16.png"
+ "designer/images/scatter3d-icon.png"
+ "designer/images/scatter3d-icon16.png"
+ "designer/images/surface3d-icon.png"
+ "designer/images/surface3d-icon16.png"
+)
+
+set_source_files_properties(${qml_files} PROPERTIES
+ QT_QML_SKIP_QMLDIR_ENTRY TRUE
+)
+
+qt_internal_add_qml_module(DataVisualizationQml
+ URI "QtDataVisualization"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 1
+ DEPENDENCIES
+ QtQuick
+ SOURCES
+ abstractdeclarative.cpp abstractdeclarative_p.h
+ colorgradient.cpp colorgradient_p.h
+ declarativebars.cpp declarativebars_p.h
+ declarativecolor.cpp declarativecolor_p.h
+ declarativerendernode.cpp declarativerendernode_p.h
+ declarativescatter.cpp declarativescatter_p.h
+ declarativescene.cpp declarativescene_p.h
+ declarativeseries.cpp declarativeseries_p.h
+ declarativesurface.cpp declarativesurface_p.h
+ declarativetheme.cpp declarativetheme_p.h
+ enumtostringmap.cpp enumtostringmap_p.h
+ foreigntypes_p.h
+ glstatestore.cpp glstatestore_p.h
+ NO_PCH_SOURCES
+ declarativetheme.cpp # undef QT_NO_FOREACH
+ QML_FILES
+ ${qml_files}
+ RESOURCES
+ ${resources}
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::OpenGL
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualizationPrivate
+ NO_GENERATE_CPP_EXPORTS
+)
+
+qt_internal_extend_target(DataVisualizationQml CONDITION MACOS
+ PUBLIC_LIBRARIES
+ Qt::GuiPrivate
+)
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml/abstractdeclarative.cpp
index 5a1edbc7..af19d46f 100644
--- a/src/datavisualizationqml2/abstractdeclarative.cpp
+++ b/src/datavisualizationqml/abstractdeclarative.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "abstractdeclarative_p.h"
#include "declarativetheme_p.h"
@@ -34,7 +8,7 @@
#if defined(Q_OS_IOS)
#include <QtCore/QTimer>
#endif
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#include <qpa/qplatformnativeinterface.h>
#endif
@@ -44,14 +18,13 @@
#include "glstatestore_p.h"
#endif
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
-static QList<const QQuickWindow *> clearList;
static QHash<AbstractDeclarative *, QQuickWindow *> graphWindowList;
-static QHash<QQuickWindow *, bool> windowClearList;
AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) :
QQuickItem(parent),
+ AbstractDeclarativeInterface(),
m_controller(0),
m_contextWindow(0),
m_renderMode(RenderIndirect),
@@ -68,8 +41,11 @@ AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) :
connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged);
// Set contents to false in case we are in qml designer to make component look nice
- m_runningInDesigner = QGuiApplication::applicationDisplayName() == "Qml2Puppet";
+ m_runningInDesigner = QGuiApplication::applicationDisplayName() == QLatin1String("Qml2Puppet");
setFlag(ItemHasContents, !m_runningInDesigner);
+
+ // Accept touchevents
+ setAcceptTouchEvents(true);
}
AbstractDeclarative::~AbstractDeclarative()
@@ -88,8 +64,11 @@ AbstractDeclarative::~AbstractDeclarative()
void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mode)
{
- if (mode == m_renderMode)
+ if (mode == m_renderMode
+ || mode <= AbstractDeclarative::RenderingMode::RenderDirectToBackground
+ || mode >= AbstractDeclarative::RenderingMode::RenderIndirect) {
return;
+ }
RenderingMode previousMode = m_renderMode;
@@ -106,7 +85,7 @@ void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mo
update();
setFlag(ItemHasContents, false);
if (win) {
- QObject::connect(win, &QQuickWindow::beforeRendering, this,
+ QObject::connect(win, &QQuickWindow::beforeRenderPassRecording, this,
&AbstractDeclarative::render, Qt::DirectConnection);
checkWindowList(win);
setAntialiasing(m_windowSamples > 0);
@@ -120,7 +99,7 @@ void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mo
setFlag(ItemHasContents, !m_runningInDesigner);
update();
if (win) {
- QObject::disconnect(win, &QQuickWindow::beforeRendering, this,
+ QObject::disconnect(win, &QQuickWindow::beforeRenderPassRecording, this,
&AbstractDeclarative::render);
checkWindowList(win);
}
@@ -184,6 +163,11 @@ void AbstractDeclarative::clearSelection()
m_controller->clearSelection();
}
+bool AbstractDeclarative::hasSeries(QAbstract3DSeries *series)
+{
+ return m_controller->hasSeries(series);
+}
+
void AbstractDeclarative::setSelectionMode(SelectionFlags mode)
{
int intmode = int(mode);
@@ -272,13 +256,13 @@ void AbstractDeclarative::appendCustomItemFunc(QQmlListProperty<QCustom3DItem> *
decl->addCustomItem(item);
}
-int AbstractDeclarative::countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list)
+qsizetype AbstractDeclarative::countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list)
{
return reinterpret_cast<AbstractDeclarative *>(list->data)->m_controller->m_customItems.size();
}
QCustom3DItem *AbstractDeclarative::atCustomItemFunc(QQmlListProperty<QCustom3DItem> *list,
- int index)
+ qsizetype index)
{
return reinterpret_cast<AbstractDeclarative *>(list->data)->m_controller->m_customItems.at(index);
}
@@ -293,6 +277,7 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller)
{
Q_ASSERT(controller);
m_controller = controller;
+ m_controller->m_qml = this;
if (!m_controller->isOpenGLES())
m_samples = 4;
@@ -406,9 +391,6 @@ void AbstractDeclarative::doneOpenGLContext(QQuickWindow *window)
void AbstractDeclarative::synchDataToRenderer()
{
- if (m_renderMode == RenderDirectToBackground && clearList.size())
- clearList.clear();
-
QQuickWindow *win = window();
activateOpenGLContext(win);
m_controller->synchDataToRenderer();
@@ -443,11 +425,10 @@ void AbstractDeclarative::setMsaaSamples(int samples)
void AbstractDeclarative::handleWindowChanged(QQuickWindow *window)
{
checkWindowList(window);
-
if (!window)
return;
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
bool previousVisibility = window->isVisible();
// Enable touch events for Mac touchpads
window->setVisible(true);
@@ -472,7 +453,7 @@ void AbstractDeclarative::handleWindowChanged(QQuickWindow *window)
if (m_renderMode == RenderDirectToBackground_NoClear
|| m_renderMode == RenderDirectToBackground) {
- connect(window, &QQuickWindow::beforeRendering, this, &AbstractDeclarative::render,
+ connect(window, &QQuickWindow::beforeRenderPassRecording, this, &AbstractDeclarative::render,
Qt::DirectConnection);
setAntialiasing(m_windowSamples > 0);
if (m_windowSamples != oldWindowSamples)
@@ -491,9 +472,9 @@ void AbstractDeclarative::handleWindowChanged(QQuickWindow *window)
#endif
}
-void AbstractDeclarative::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+void AbstractDeclarative::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
{
- QQuickItem::geometryChanged(newGeometry, oldGeometry);
+ QQuickItem::geometryChange(newGeometry, oldGeometry);
m_cachedGeometry = newGeometry;
@@ -579,16 +560,12 @@ void AbstractDeclarative::render()
// Clear the background once per window as that is not done by default
QQuickWindow *win = window();
+ win->beginExternalCommands();
activateOpenGLContext(win);
+
QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions();
- if (m_renderMode == RenderDirectToBackground && !clearList.contains(win)) {
- clearList.append(win);
- QColor clearColor = win->color();
- funcs->glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), 1.0f);
- funcs->glClear(GL_COLOR_BUFFER_BIT);
- }
- if (isVisible()) {
+ if (funcs && isVisible()) {
funcs->glDepthMask(GL_TRUE);
funcs->glEnable(GL_DEPTH_TEST);
funcs->glDepthFunc(GL_LESS);
@@ -600,7 +577,9 @@ void AbstractDeclarative::render()
funcs->glEnable(GL_BLEND);
}
+
doneOpenGLContext(win);
+ win->endExternalCommands();
}
QAbstract3DInputHandler* AbstractDeclarative::inputHandler() const
@@ -652,7 +631,6 @@ void AbstractDeclarative::wheelEvent(QWheelEvent *event)
void AbstractDeclarative::checkWindowList(QQuickWindow *window)
{
QQuickWindow *oldWindow = graphWindowList.value(this);
-
graphWindowList[this] = window;
if (oldWindow != window && oldWindow) {
@@ -660,7 +638,7 @@ void AbstractDeclarative::checkWindowList(QQuickWindow *window)
&AbstractDeclarative::windowDestroyed);
QObject::disconnect(oldWindow, &QQuickWindow::beforeSynchronizing, this,
&AbstractDeclarative::synchDataToRenderer);
- QObject::disconnect(oldWindow, &QQuickWindow::beforeRendering, this,
+ QObject::disconnect(oldWindow, &QQuickWindow::beforeRenderPassRecording, this,
&AbstractDeclarative::render);
if (!m_controller.isNull()) {
QObject::disconnect(m_controller.data(), &Abstract3DController::needRender,
@@ -669,34 +647,18 @@ void AbstractDeclarative::checkWindowList(QQuickWindow *window)
}
QList<QQuickWindow *> windowList;
-
- foreach (AbstractDeclarative *graph, graphWindowList.keys()) {
+ const auto graphs = graphWindowList.keys();
+ for (AbstractDeclarative *graph : graphs) {
if (graph->m_renderMode == RenderDirectToBackground
|| graph->m_renderMode == RenderDirectToBackground_NoClear) {
windowList.append(graphWindowList.value(graph));
}
}
- if (oldWindow && !windowList.contains(oldWindow)
- && windowClearList.contains(oldWindow)) {
- // Return window clear value
- oldWindow->setClearBeforeRendering(windowClearList.value(oldWindow));
- windowClearList.remove(oldWindow);
- }
-
if (!window) {
graphWindowList.remove(this);
return;
}
-
- if ((m_renderMode == RenderDirectToBackground
- || m_renderMode == RenderDirectToBackground_NoClear)
- && !windowClearList.contains(window)) {
- // Save old clear value
- windowClearList[window] = window->clearBeforeRendering();
- // Disable clearing of the window as we render underneath
- window->setClearBeforeRendering(false);
- }
}
void AbstractDeclarative::setMeasureFps(bool enable)
@@ -834,8 +796,6 @@ void AbstractDeclarative::windowDestroyed(QObject *obj)
if (win == oldWindow)
graphWindowList.remove(this);
-
- windowClearList.remove(win);
}
void AbstractDeclarative::destroyContext()
@@ -855,4 +815,4 @@ void AbstractDeclarative::destroyContext()
}
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml/abstractdeclarative_p.h
index 18cca6e2..090738c5 100644
--- a/src/datavisualizationqml2/abstractdeclarative_p.h
+++ b/src/datavisualizationqml/abstractdeclarative_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,10 +14,12 @@
#ifndef ABSTRACTDECLARATIVE_P_H
#define ABSTRACTDECLARATIVE_P_H
-#include "datavisualizationglobal_p.h"
-#include "abstract3dcontroller_p.h"
#include "declarativescene_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/abstract3dcontroller_p.h>
+#include <QtDataVisualization/private/abstractdeclarativeinterface_p.h>
+
#include <QtQuick/QQuickItem>
#include <QtCore/QPointer>
#include <QtCore/QThread>
@@ -52,16 +28,11 @@
class GLStateStore;
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
-class AbstractDeclarative : public QQuickItem
+class AbstractDeclarative : public QQuickItem, public AbstractDeclarativeInterface
{
Q_OBJECT
- Q_ENUMS(ShadowQuality)
- Q_ENUMS(RenderingMode)
- Q_ENUMS(ElementType)
- Q_FLAGS(SelectionFlag SelectionFlags)
- Q_FLAGS(OptimizationHint OptimizationHints)
Q_PROPERTY(SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged)
Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged)
Q_PROPERTY(bool shadowsSupported READ shadowsSupported NOTIFY shadowsSupportedChanged)
@@ -70,21 +41,25 @@ class AbstractDeclarative : public QQuickItem
Q_PROPERTY(QAbstract3DInputHandler* inputHandler READ inputHandler WRITE setInputHandler NOTIFY inputHandlerChanged)
Q_PROPERTY(Q3DTheme* theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(RenderingMode renderingMode READ renderingMode WRITE setRenderingMode NOTIFY renderingModeChanged)
- Q_PROPERTY(bool measureFps READ measureFps WRITE setMeasureFps NOTIFY measureFpsChanged REVISION 1)
- Q_PROPERTY(qreal currentFps READ currentFps NOTIFY currentFpsChanged REVISION 1)
- Q_PROPERTY(QQmlListProperty<QCustom3DItem> customItemList READ customItemList REVISION 1)
- Q_PROPERTY(bool orthoProjection READ isOrthoProjection WRITE setOrthoProjection NOTIFY orthoProjectionChanged REVISION 1)
- Q_PROPERTY(ElementType selectedElement READ selectedElement NOTIFY selectedElementChanged REVISION 1)
- Q_PROPERTY(qreal aspectRatio READ aspectRatio WRITE setAspectRatio NOTIFY aspectRatioChanged REVISION 1)
- Q_PROPERTY(OptimizationHints optimizationHints READ optimizationHints WRITE setOptimizationHints NOTIFY optimizationHintsChanged REVISION 1)
- Q_PROPERTY(bool polar READ isPolar WRITE setPolar NOTIFY polarChanged REVISION 2)
- Q_PROPERTY(float radialLabelOffset READ radialLabelOffset WRITE setRadialLabelOffset NOTIFY radialLabelOffsetChanged REVISION 2)
- Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged REVISION 2)
- Q_PROPERTY(bool reflection READ isReflection WRITE setReflection NOTIFY reflectionChanged REVISION 2)
- Q_PROPERTY(qreal reflectivity READ reflectivity WRITE setReflectivity NOTIFY reflectivityChanged REVISION 2)
- Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged REVISION 2)
- Q_PROPERTY(QVector3D queriedGraphPosition READ queriedGraphPosition NOTIFY queriedGraphPositionChanged REVISION 2)
- Q_PROPERTY(qreal margin READ margin WRITE setMargin NOTIFY marginChanged REVISION 2)
+ Q_PROPERTY(bool measureFps READ measureFps WRITE setMeasureFps NOTIFY measureFpsChanged REVISION(1, 1))
+ Q_PROPERTY(qreal currentFps READ currentFps NOTIFY currentFpsChanged REVISION(1, 1))
+ Q_PROPERTY(QQmlListProperty<QCustom3DItem> customItemList READ customItemList REVISION(1, 1))
+ Q_PROPERTY(bool orthoProjection READ isOrthoProjection WRITE setOrthoProjection NOTIFY orthoProjectionChanged REVISION(1, 1))
+ Q_PROPERTY(ElementType selectedElement READ selectedElement NOTIFY selectedElementChanged REVISION(1, 1))
+ Q_PROPERTY(qreal aspectRatio READ aspectRatio WRITE setAspectRatio NOTIFY aspectRatioChanged REVISION(1, 1))
+ Q_PROPERTY(OptimizationHints optimizationHints READ optimizationHints WRITE setOptimizationHints NOTIFY optimizationHintsChanged REVISION(1, 1))
+ Q_PROPERTY(bool polar READ isPolar WRITE setPolar NOTIFY polarChanged REVISION(1, 2))
+ Q_PROPERTY(float radialLabelOffset READ radialLabelOffset WRITE setRadialLabelOffset NOTIFY radialLabelOffsetChanged REVISION(1, 2))
+ Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged REVISION(1, 2))
+ Q_PROPERTY(bool reflection READ isReflection WRITE setReflection NOTIFY reflectionChanged REVISION(1, 2))
+ Q_PROPERTY(qreal reflectivity READ reflectivity WRITE setReflectivity NOTIFY reflectivityChanged REVISION(1, 2))
+ Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged REVISION(1, 2))
+ Q_PROPERTY(QVector3D queriedGraphPosition READ queriedGraphPosition NOTIFY queriedGraphPositionChanged REVISION(1, 2))
+ Q_PROPERTY(qreal margin READ margin WRITE setMargin NOTIFY marginChanged REVISION(1, 2))
+
+ QML_NAMED_ELEMENT(AbstractGraph3D)
+ QML_ADDED_IN_VERSION(1, 0)
+ QML_UNCREATABLE("Trying to create uncreatable: AbstractGraph3D.")
public:
enum SelectionFlag {
@@ -132,6 +107,14 @@ public:
};
Q_DECLARE_FLAGS(OptimizationHints, OptimizationHint)
+ Q_ENUM(ShadowQuality)
+ Q_ENUM(RenderingMode)
+ Q_ENUM(ElementType)
+ Q_ENUM(SelectionFlag)
+ Q_ENUM(OptimizationHint)
+ Q_FLAGS(SelectionFlag SelectionFlags)
+ Q_FLAGS(OptimizationHint OptimizationHints)
+
public:
explicit AbstractDeclarative(QQuickItem *parent = 0);
virtual ~AbstractDeclarative();
@@ -162,26 +145,28 @@ public:
Q_INVOKABLE virtual void clearSelection();
- Q_REVISION(1) Q_INVOKABLE virtual int addCustomItem(QCustom3DItem *item);
- Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItems();
- Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItem(QCustom3DItem *item);
- Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItemAt(const QVector3D &position);
- Q_REVISION(1) Q_INVOKABLE virtual void releaseCustomItem(QCustom3DItem *item);
+ Q_REVISION(6, 3) Q_INVOKABLE virtual bool hasSeries(QAbstract3DSeries *series);
- Q_REVISION(1) Q_INVOKABLE virtual int selectedLabelIndex() const;
- Q_REVISION(1) Q_INVOKABLE virtual QAbstract3DAxis *selectedAxis() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int addCustomItem(QCustom3DItem *item);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItems();
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItem(QCustom3DItem *item);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItemAt(const QVector3D &position);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void releaseCustomItem(QCustom3DItem *item);
- Q_REVISION(1) Q_INVOKABLE virtual int selectedCustomItemIndex() const;
- Q_REVISION(1) Q_INVOKABLE virtual QCustom3DItem *selectedCustomItem() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int selectedLabelIndex() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual QAbstract3DAxis *selectedAxis() const;
+
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int selectedCustomItemIndex() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual QCustom3DItem *selectedCustomItem() const;
QQmlListProperty<QCustom3DItem> customItemList();
static void appendCustomItemFunc(QQmlListProperty<QCustom3DItem> *list,
QCustom3DItem *item);
- static int countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list);
- static QCustom3DItem *atCustomItemFunc(QQmlListProperty<QCustom3DItem> *list, int index);
+ static qsizetype countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list);
+ static QCustom3DItem *atCustomItemFunc(QQmlListProperty<QCustom3DItem> *list, qsizetype index);
static void clearCustomItemFunc(QQmlListProperty<QCustom3DItem> *list);
- virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+ void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
void setSharedController(Abstract3DController *controller);
// Used to synch up data model from controller to renderer while main thread is locked
@@ -231,6 +216,8 @@ public:
QMutex *mutex() { return &m_mutex; }
+ bool isReady() const override { return isComponentComplete(); }
+
public Q_SLOTS:
virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0;
virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0;
@@ -239,22 +226,22 @@ public Q_SLOTS:
void destroyContext();
protected:
- virtual void mouseDoubleClickEvent(QMouseEvent *event);
- virtual void touchEvent(QTouchEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void touchEvent(QTouchEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
#if QT_CONFIG(wheelevent)
- virtual void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) override;
#endif
virtual void handleWindowChanged(QQuickWindow *win);
- virtual void itemChange(ItemChange change, const ItemChangeData &value);
+ void itemChange(ItemChange change, const ItemChangeData &value) override;
virtual void updateWindowParameters();
virtual void handleSelectionModeChange(QAbstract3DGraph::SelectionFlags mode);
virtual void handleShadowQualityChange(QAbstract3DGraph::ShadowQuality quality);
virtual void handleSelectedElementChange(QAbstract3DGraph::ElementType type);
virtual void handleOptimizationHintChange(QAbstract3DGraph::OptimizationHints hints);
- virtual QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *);
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
Q_SIGNALS:
void selectionModeChanged(AbstractDeclarative::SelectionFlags mode);
@@ -265,20 +252,20 @@ Q_SIGNALS:
void inputHandlerChanged(QAbstract3DInputHandler *inputHandler);
void themeChanged(Q3DTheme *theme);
void renderingModeChanged(AbstractDeclarative::RenderingMode mode);
- Q_REVISION(1) void measureFpsChanged(bool enabled);
- Q_REVISION(1) void currentFpsChanged(qreal fps);
- Q_REVISION(1) void selectedElementChanged(AbstractDeclarative::ElementType type);
- Q_REVISION(1) void orthoProjectionChanged(bool enabled);
- Q_REVISION(1) void aspectRatioChanged(qreal ratio);
- Q_REVISION(1) void optimizationHintsChanged(AbstractDeclarative::OptimizationHints hints);
- Q_REVISION(2) void polarChanged(bool enabled);
- Q_REVISION(2) void radialLabelOffsetChanged(float offset);
- Q_REVISION(2) void horizontalAspectRatioChanged(qreal ratio);
- Q_REVISION(2) void reflectionChanged(bool enabled);
- Q_REVISION(2) void reflectivityChanged(qreal reflectivity);
- Q_REVISION(2) void localeChanged(const QLocale &locale);
- Q_REVISION(2) void queriedGraphPositionChanged(const QVector3D &data);
- Q_REVISION(2) void marginChanged(qreal margin);
+ Q_REVISION(1, 1) void measureFpsChanged(bool enabled);
+ Q_REVISION(1, 1) void currentFpsChanged(qreal fps);
+ Q_REVISION(1, 1) void selectedElementChanged(AbstractDeclarative::ElementType type);
+ Q_REVISION(1, 1) void orthoProjectionChanged(bool enabled);
+ Q_REVISION(1, 1) void aspectRatioChanged(qreal ratio);
+ Q_REVISION(1, 1) void optimizationHintsChanged(AbstractDeclarative::OptimizationHints hints);
+ Q_REVISION(1, 2) void polarChanged(bool enabled);
+ Q_REVISION(1, 2) void radialLabelOffsetChanged(float offset);
+ Q_REVISION(1, 2) void horizontalAspectRatioChanged(qreal ratio);
+ Q_REVISION(1, 2) void reflectionChanged(bool enabled);
+ Q_REVISION(1, 2) void reflectivityChanged(qreal reflectivity);
+ Q_REVISION(1, 2) void localeChanged(const QLocale &locale);
+ Q_REVISION(1, 2) void queriedGraphPositionChanged(const QVector3D &data);
+ Q_REVISION(1, 2) void marginChanged(qreal margin);
protected:
QSharedPointer<QMutex> m_nodeMutex;
@@ -305,6 +292,6 @@ private:
Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::SelectionFlags)
Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::OptimizationHints)
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml/colorgradient.cpp b/src/datavisualizationqml/colorgradient.cpp
new file mode 100644
index 00000000..c00c43aa
--- /dev/null
+++ b/src/datavisualizationqml/colorgradient.cpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "colorgradient_p.h"
+
+QT_BEGIN_NAMESPACE
+
+ColorGradientStop::ColorGradientStop(QObject *parent)
+ : QObject(parent)
+{
+}
+
+qreal ColorGradientStop::position() const
+{
+ return m_position;
+}
+
+void ColorGradientStop::setPosition(qreal position)
+{
+ m_position = position;
+ updateGradient();
+ emit positionChanged(position);
+}
+
+QColor ColorGradientStop::color() const
+{
+ return m_color;
+}
+
+void ColorGradientStop::setColor(const QColor &color)
+{
+ m_color = color;
+ updateGradient();
+ emit colorChanged(color);
+}
+
+void ColorGradientStop::updateGradient()
+{
+ if (ColorGradient *grad = qobject_cast<ColorGradient*>(parent()))
+ grad->doUpdate();
+}
+
+ColorGradient::ColorGradient(QObject *parent)
+: QObject(parent)
+{
+}
+
+ColorGradient::~ColorGradient()
+{
+}
+
+QQmlListProperty<ColorGradientStop> ColorGradient::stops()
+{
+ return QQmlListProperty<ColorGradientStop>(this, &m_stops);
+}
+
+void ColorGradient::doUpdate()
+{
+ emit updated();
+}
+
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml/colorgradient_p.h b/src/datavisualizationqml/colorgradient_p.h
new file mode 100644
index 00000000..5e5d0e51
--- /dev/null
+++ b/src/datavisualizationqml/colorgradient_p.h
@@ -0,0 +1,79 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef COLORGRADIENT_P_H
+#define COLORGRADIENT_P_H
+
+#include <private/datavisualizationglobal_p.h>
+#include <QtGui/QColor>
+#include <QtQml/qqml.h>
+
+QT_BEGIN_NAMESPACE
+
+class ColorGradientStop : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(qreal position READ position WRITE setPosition NOTIFY positionChanged)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
+
+ QML_ELEMENT
+ QML_ADDED_IN_VERSION(1, 0)
+
+public:
+ ColorGradientStop(QObject *parent = 0);
+
+ qreal position() const;
+ void setPosition(qreal position);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+Q_SIGNALS:
+ void positionChanged(qreal position);
+ void colorChanged(const QColor &color);
+
+private:
+ void updateGradient();
+
+private:
+ qreal m_position;
+ QColor m_color;
+};
+
+class ColorGradient : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QQmlListProperty<ColorGradientStop> stops READ stops)
+ Q_CLASSINFO("DefaultProperty", "stops")
+
+ QML_ELEMENT
+ QML_ADDED_IN_VERSION(1, 0)
+
+public:
+ ColorGradient(QObject *parent = 0);
+ ~ColorGradient();
+
+ QQmlListProperty<ColorGradientStop> stops();
+
+ void doUpdate();
+ QList<ColorGradientStop *> m_stops;
+
+Q_SIGNALS:
+ void updated();
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml/declarativebars.cpp
index ca1d3f60..1cba987a 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml/declarativebars.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "declarativebars_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
DeclarativeBars::DeclarativeBars(QQuickItem *parent)
: AbstractDeclarative(parent),
@@ -112,7 +86,7 @@ float DeclarativeBars::barThickness() const
return m_barsController->barThickness();
}
-void DeclarativeBars::setBarSpacing(QSizeF spacing)
+void DeclarativeBars::setBarSpacing(const QSizeF &spacing)
{
if (spacing != barSpacing()) {
m_barsController->setBarSpecs(GLfloat(barThickness()), spacing, isBarSpacingRelative());
@@ -138,6 +112,19 @@ bool DeclarativeBars::isBarSpacingRelative() const
return m_barsController->isBarSpecRelative();
}
+void DeclarativeBars::setBarSeriesMargin(const QSizeF &margin)
+{
+ if (margin != barSeriesMargin()) {
+ m_barsController->setBarSeriesMargin(margin);
+ emit barSeriesMarginChanged(barSeriesMargin());
+ }
+}
+
+QSizeF DeclarativeBars::barSeriesMargin() const
+{
+ return m_barsController->barSeriesMargin();
+}
+
QBar3DSeries *DeclarativeBars::selectedSeries() const
{
return m_barsController->selectedSeries();
@@ -170,12 +157,12 @@ void DeclarativeBars::appendSeriesFunc(QQmlListProperty<QBar3DSeries> *list, QBa
reinterpret_cast<DeclarativeBars *>(list->data)->addSeries(series);
}
-int DeclarativeBars::countSeriesFunc(QQmlListProperty<QBar3DSeries> *list)
+qsizetype DeclarativeBars::countSeriesFunc(QQmlListProperty<QBar3DSeries> *list)
{
return reinterpret_cast<DeclarativeBars *>(list->data)->m_barsController->barSeriesList().size();
}
-QBar3DSeries *DeclarativeBars::atSeriesFunc(QQmlListProperty<QBar3DSeries> *list, int index)
+QBar3DSeries *DeclarativeBars::atSeriesFunc(QQmlListProperty<QBar3DSeries> *list, qsizetype index)
{
return reinterpret_cast<DeclarativeBars *>(list->data)->m_barsController->barSeriesList().at(index);
}
@@ -230,4 +217,4 @@ void DeclarativeBars::handleAxisZChanged(QAbstract3DAxis *axis)
emit rowAxisChanged(static_cast<QCategory3DAxis *>(axis));
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml/declarativebars_p.h
index 2fe6a602..82653ab2 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml/declarativebars_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,12 +14,12 @@
#ifndef DECLARATIVEBARS_P_H
#define DECLARATIVEBARS_P_H
-#include "datavisualizationglobal_p.h"
#include "abstractdeclarative_p.h"
-#include "bars3dcontroller_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+#include <private/datavisualizationglobal_p.h>
+#include <private/bars3dcontroller_p.h>
+QT_BEGIN_NAMESPACE
class DeclarativeBars : public AbstractDeclarative
{
Q_OBJECT
@@ -56,12 +30,16 @@ class DeclarativeBars : public AbstractDeclarative
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
+ Q_PROPERTY(QSizeF barSeriesMargin READ barSeriesMargin WRITE setBarSeriesMargin NOTIFY barSeriesMarginChanged REVISION(6, 3))
Q_PROPERTY(QQmlListProperty<QBar3DSeries> seriesList READ seriesList)
Q_PROPERTY(QBar3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged)
Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged)
- Q_PROPERTY(float floorLevel READ floorLevel WRITE setFloorLevel NOTIFY floorLevelChanged REVISION 1)
+ Q_PROPERTY(float floorLevel READ floorLevel WRITE setFloorLevel NOTIFY floorLevelChanged REVISION(1, 2))
Q_CLASSINFO("DefaultProperty", "seriesList")
+ QML_NAMED_ELEMENT(Bars3D)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
explicit DeclarativeBars(QQuickItem *parent = 0);
~DeclarativeBars();
@@ -79,16 +57,19 @@ public:
void setBarThickness(float thicknessRatio);
float barThickness() const;
- void setBarSpacing(QSizeF spacing);
+ void setBarSpacing(const QSizeF &spacing);
QSizeF barSpacing() const;
void setBarSpacingRelative(bool relative);
bool isBarSpacingRelative() const;
+ void setBarSeriesMargin(const QSizeF &margin);
+ QSizeF barSeriesMargin() const;
+
QQmlListProperty<QBar3DSeries> seriesList();
static void appendSeriesFunc(QQmlListProperty<QBar3DSeries> *list, QBar3DSeries *series);
- static int countSeriesFunc(QQmlListProperty<QBar3DSeries> *list);
- static QBar3DSeries *atSeriesFunc(QQmlListProperty<QBar3DSeries> *list, int index);
+ static qsizetype countSeriesFunc(QQmlListProperty<QBar3DSeries> *list);
+ static QBar3DSeries *atSeriesFunc(QQmlListProperty<QBar3DSeries> *list, qsizetype index);
static void clearSeriesFunc(QQmlListProperty<QBar3DSeries> *list);
Q_INVOKABLE void addSeries(QBar3DSeries *series);
Q_INVOKABLE void removeSeries(QBar3DSeries *series);
@@ -101,9 +82,9 @@ public:
float floorLevel() const;
public Q_SLOTS:
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q_SIGNALS:
void rowAxisChanged(QCategory3DAxis *axis);
@@ -111,17 +92,18 @@ Q_SIGNALS:
void columnAxisChanged(QCategory3DAxis *axis);
void multiSeriesUniformChanged(bool uniform);
void barThicknessChanged(float thicknessRatio);
- void barSpacingChanged(QSizeF spacing);
+ void barSpacingChanged(const QSizeF &spacing);
void barSpacingRelativeChanged(bool relative);
- void meshFileNameChanged(QString filename);
+ Q_REVISION(6, 3) void barSeriesMarginChanged(const QSizeF &margin);
+ void meshFileNameChanged(const QString &filename);
void primarySeriesChanged(QBar3DSeries *series);
void selectedSeriesChanged(QBar3DSeries *series);
- Q_REVISION(1) void floorLevelChanged(float level);
+ Q_REVISION(1, 2) void floorLevelChanged(float level);
private:
Bars3DController *m_barsController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml/declarativecolor.cpp b/src/datavisualizationqml/declarativecolor.cpp
new file mode 100644
index 00000000..979c3f1e
--- /dev/null
+++ b/src/datavisualizationqml/declarativecolor.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "declarativecolor_p.h"
+
+QT_BEGIN_NAMESPACE
+
+DeclarativeColor::DeclarativeColor(QObject *parent)
+ : QObject(parent)
+{
+}
+
+void DeclarativeColor::setColor(const QColor &color)
+{
+ if (m_color != color) {
+ m_color = color;
+ emit colorChanged(color);
+ }
+}
+
+QColor DeclarativeColor::color() const
+{
+ return m_color;
+}
+
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml/declarativecolor_p.h b/src/datavisualizationqml/declarativecolor_p.h
new file mode 100644
index 00000000..426d674d
--- /dev/null
+++ b/src/datavisualizationqml/declarativecolor_p.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef DECLARATIVECOLOR_P_H
+#define DECLARATIVECOLOR_P_H
+
+#include <private/datavisualizationglobal_p.h>
+#include <QtGui/QColor>
+#include <QtQml/qqml.h>
+
+QT_BEGIN_NAMESPACE
+
+class DeclarativeColor : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
+
+ QML_NAMED_ELEMENT(ThemeColor)
+ QML_ADDED_IN_VERSION(1, 0)
+
+public:
+ DeclarativeColor(QObject *parent = 0);
+
+ void setColor(const QColor &color);
+ QColor color() const;
+
+Q_SIGNALS:
+ void colorChanged(const QColor &color);
+
+private:
+ QColor m_color;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualizationqml2/declarativerendernode.cpp b/src/datavisualizationqml/declarativerendernode.cpp
index a5eb027e..5a9f466c 100644
--- a/src/datavisualizationqml2/declarativerendernode.cpp
+++ b/src/datavisualizationqml/declarativerendernode.cpp
@@ -1,38 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "declarativerendernode_p.h"
#include "abstractdeclarative_p.h"
#include <QtOpenGL/QOpenGLFramebufferObject>
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
DeclarativeRenderNode::DeclarativeRenderNode(AbstractDeclarative *declarative,
const QSharedPointer<QMutex> &nodeMutex)
@@ -114,9 +88,7 @@ void DeclarativeRenderNode::updateFBO()
delete m_texture;
const uint id = m_fbo->texture();
- m_texture =
- m_window->createTextureFromNativeObject(QQuickWindow::NativeObjectTexture,
- &id, 0 /* nativeLayout */, m_size);
+ m_texture = QNativeInterface::QSGOpenGLTexture::fromNative(id, m_window, m_size);
m_material.setTexture(m_texture);
m_materialO.setTexture(m_texture);
@@ -182,4 +154,4 @@ void DeclarativeRenderNode::handleControllerDestroyed()
m_controller = 0;
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativerendernode_p.h b/src/datavisualizationqml/declarativerendernode_p.h
index 08da5163..2f6d22ec 100644
--- a/src/datavisualizationqml2/declarativerendernode_p.h
+++ b/src/datavisualizationqml/declarativerendernode_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,7 +14,7 @@
#ifndef DECLARATIVERENDERNODE_P_H
#define DECLARATIVERENDERNODE_P_H
-#include "datavisualizationglobal_p.h"
+#include <private/datavisualizationglobal_p.h>
#include <QtQuick/QSGGeometryNode>
#include <QtQuick/QSGTextureMaterial>
@@ -49,7 +23,7 @@
#include <QtCore/QSharedPointer>
#include <QtCore/QObject>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class Abstract3DController;
class AbstractDeclarative;
@@ -72,7 +46,7 @@ public:
void setQuickWindow(QQuickWindow *window);
void setSamples(int samples);
- void preprocess();
+ void preprocess() override;
public Q_SLOTS:
void handleControllerDestroyed();
@@ -97,6 +71,6 @@ private:
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml/declarativescatter.cpp
index 29e56a79..1e3795a0 100644
--- a/src/datavisualizationqml2/declarativescatter.cpp
+++ b/src/datavisualizationqml/declarativescatter.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "declarativescatter_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
DeclarativeScatter::DeclarativeScatter(QQuickItem *parent)
: AbstractDeclarative(parent),
@@ -103,12 +77,13 @@ void DeclarativeScatter::appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *li
reinterpret_cast<DeclarativeScatter *>(list->data)->addSeries(series);
}
-int DeclarativeScatter::countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list)
+qsizetype DeclarativeScatter::countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list)
{
return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().size();
}
-QScatter3DSeries *DeclarativeScatter::atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, int index)
+QScatter3DSeries *DeclarativeScatter::atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list,
+ qsizetype index)
{
return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().at(index);
}
@@ -148,4 +123,4 @@ void DeclarativeScatter::handleAxisZChanged(QAbstract3DAxis *axis)
emit axisZChanged(static_cast<QValue3DAxis *>(axis));
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml/declarativescatter_p.h
index f164a482..4b020b76 100644
--- a/src/datavisualizationqml2/declarativescatter_p.h
+++ b/src/datavisualizationqml/declarativescatter_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,12 +14,13 @@
#ifndef DECLARATIVESCATTER_P_H
#define DECLARATIVESCATTER_P_H
-#include "datavisualizationglobal_p.h"
#include "abstractdeclarative_p.h"
-#include "scatter3dcontroller_p.h"
#include "qscatter3dseries.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+#include <private/datavisualizationglobal_p.h>
+#include <private/scatter3dcontroller_p.h>
+
+QT_BEGIN_NAMESPACE
class DeclarativeScatter : public AbstractDeclarative
{
@@ -57,6 +32,9 @@ class DeclarativeScatter : public AbstractDeclarative
Q_PROPERTY(QQmlListProperty<QScatter3DSeries> seriesList READ seriesList)
Q_CLASSINFO("DefaultProperty", "seriesList")
+ QML_NAMED_ELEMENT(Scatter3D)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
explicit DeclarativeScatter(QQuickItem *parent = 0);
~DeclarativeScatter();
@@ -70,8 +48,8 @@ public:
QQmlListProperty<QScatter3DSeries> seriesList();
static void appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, QScatter3DSeries *series);
- static int countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);
- static QScatter3DSeries *atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, int index);
+ static qsizetype countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);
+ static QScatter3DSeries *atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, qsizetype index);
static void clearSeriesFunc(QQmlListProperty<QScatter3DSeries> *list);
Q_INVOKABLE void addSeries(QScatter3DSeries *series);
Q_INVOKABLE void removeSeries(QScatter3DSeries *series);
@@ -79,9 +57,9 @@ public:
QScatter3DSeries *selectedSeries() const;
public Q_SLOTS:
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q_SIGNALS:
void axisXChanged(QValue3DAxis *axis);
@@ -93,6 +71,6 @@ protected:
Scatter3DController *m_scatterController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml/declarativescene.cpp b/src/datavisualizationqml/declarativescene.cpp
new file mode 100644
index 00000000..75508994
--- /dev/null
+++ b/src/datavisualizationqml/declarativescene.cpp
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "declarativescene_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Declarative3DScene::Declarative3DScene(QObject *parent)
+ : Q3DScene(parent)
+{
+ QObject::connect(this, &Q3DScene::selectionQueryPositionChanged, this,
+ &Declarative3DScene::selectionQueryPositionChanged);
+}
+
+Declarative3DScene::~Declarative3DScene()
+{
+}
+
+void Declarative3DScene::setSelectionQueryPosition(const QPointF &point)
+{
+ Q3DScene::setSelectionQueryPosition(point.toPoint());
+}
+
+QPointF Declarative3DScene::selectionQueryPosition() const
+{
+ return QPointF(Q3DScene::selectionQueryPosition());
+}
+
+QPoint Declarative3DScene::invalidSelectionPoint() const
+{
+ return Q3DScene::invalidSelectionPoint();
+}
+
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml/declarativescene_p.h b/src/datavisualizationqml/declarativescene_p.h
new file mode 100644
index 00000000..ba38b5e8
--- /dev/null
+++ b/src/datavisualizationqml/declarativescene_p.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef DECLARATIVESCENE_P_H
+#define DECLARATIVESCENE_P_H
+
+#include <QtQml/qqml.h>
+#include <private/datavisualizationglobal_p.h>
+#include <QtDataVisualization/q3dscene.h>
+
+QT_BEGIN_NAMESPACE
+
+class Declarative3DScene : public Q3DScene
+{
+ Q_OBJECT
+ // This property is overloaded to use QPointF instead of QPoint to work around qml bug
+ // where Qt.point(0, 0) can't be assigned due to error "Cannot assign QPointF to QPoint".
+ Q_PROPERTY(QPointF selectionQueryPosition READ selectionQueryPosition WRITE setSelectionQueryPosition NOTIFY selectionQueryPositionChanged)
+ // This is static method in parent class, overload as constant property for qml.
+ Q_PROPERTY(QPoint invalidSelectionPoint READ invalidSelectionPoint CONSTANT)
+
+ QML_NAMED_ELEMENT(Scene3D)
+ QML_ADDED_IN_VERSION(1, 0)
+ QML_UNCREATABLE("Trying to create uncreatable: Scene3D.")
+
+public:
+ Declarative3DScene(QObject *parent = 0);
+ virtual ~Declarative3DScene();
+
+ void setSelectionQueryPosition(const QPointF &point);
+ QPointF selectionQueryPosition() const;
+ QPoint invalidSelectionPoint() const;
+
+Q_SIGNALS:
+ void selectionQueryPositionChanged(const QPointF &position);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualizationqml2/declarativeseries.cpp b/src/datavisualizationqml/declarativeseries.cpp
index 119c960a..65c2cc76 100644
--- a/src/datavisualizationqml2/declarativeseries.cpp
+++ b/src/datavisualizationqml/declarativeseries.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "declarativeseries_p.h"
#include <QtCore/QMetaMethod>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
static void setSeriesGradient(QAbstract3DSeries *series, const ColorGradient &gradient,
GradientType type)
@@ -103,7 +77,8 @@ DeclarativeBar3DSeries::DeclarativeBar3DSeries(QObject *parent)
: QBar3DSeries(parent),
m_baseGradient(0),
m_singleHighlightGradient(0),
- m_multiHighlightGradient(0)
+ m_multiHighlightGradient(0),
+ m_dummyColors(false)
{
QObject::connect(this, &QBar3DSeries::selectedBarChanged, this,
&DeclarativeBar3DSeries::selectedBarChanged);
@@ -171,6 +146,37 @@ ColorGradient *DeclarativeBar3DSeries::multiHighlightGradient() const
return m_multiHighlightGradient;
}
+QQmlListProperty<DeclarativeColor> DeclarativeBar3DSeries::rowColors()
+{
+ return QQmlListProperty<DeclarativeColor>(this, this,
+ &DeclarativeBar3DSeries::appendRowColorsFunc,
+ &DeclarativeBar3DSeries::countRowColorsFunc,
+ &DeclarativeBar3DSeries::atRowColorsFunc,
+ &DeclarativeBar3DSeries::clearRowColorsFunc);
+}
+
+void DeclarativeBar3DSeries::appendRowColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+ DeclarativeColor *color)
+{
+ reinterpret_cast<DeclarativeBar3DSeries *>(list->data)->addColor(color);
+}
+
+qsizetype DeclarativeBar3DSeries::countRowColorsFunc(QQmlListProperty<DeclarativeColor> *list)
+{
+ return reinterpret_cast<DeclarativeBar3DSeries *>(list->data)->colorList().size();
+}
+
+DeclarativeColor *DeclarativeBar3DSeries::atRowColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+ qsizetype index)
+{
+ return reinterpret_cast<DeclarativeBar3DSeries *>(list->data)->colorList().at(index);
+}
+
+void DeclarativeBar3DSeries::clearRowColorsFunc(QQmlListProperty<DeclarativeColor> *list)
+{
+ reinterpret_cast<DeclarativeBar3DSeries *>(list->data)->clearColors();
+}
+
void DeclarativeBar3DSeries::handleBaseGradientUpdate()
{
if (m_baseGradient)
@@ -189,6 +195,73 @@ void DeclarativeBar3DSeries::handleMultiHighlightGradientUpdate()
setSeriesGradient(this, *m_multiHighlightGradient, GradientTypeMulti);
}
+void DeclarativeBar3DSeries::handleRowColorUpdate()
+{
+ int colorCount = m_rowColors.size();
+ int changed = 0;
+
+ DeclarativeColor *color = qobject_cast<DeclarativeColor*>(QObject::sender());
+ for (int i = 0; i < colorCount; i++) {
+ if (color == m_rowColors.at(i)) {
+ changed = i;
+ break;
+ }
+ }
+ QList<QColor> list = QBar3DSeries::rowColors();
+ list[changed] = m_rowColors.at(changed)->color();
+ QBar3DSeries::setRowColors(list);
+}
+
+void DeclarativeBar3DSeries::addColor(DeclarativeColor *color)
+{
+ if (!color) {
+ qWarning("Color is invalid, use ThemeColor");
+ return;
+ }
+ clearDummyColors();
+ m_rowColors.append(color);
+ connect(color, &DeclarativeColor::colorChanged, this,
+ &DeclarativeBar3DSeries::handleRowColorUpdate);
+ QList<QColor> list = QBar3DSeries::rowColors();
+ list.append(color->color());
+ QBar3DSeries::setRowColors(list);
+}
+
+QList<DeclarativeColor *> DeclarativeBar3DSeries::colorList()
+{
+ if (m_rowColors.isEmpty()) {
+ m_dummyColors = true;
+ const QList<QColor> list = QBar3DSeries::rowColors();
+ for (const QColor &item : list) {
+ DeclarativeColor *color = new DeclarativeColor(this);
+ color->setColor(item);
+ m_rowColors.append(color);
+ connect(color, &DeclarativeColor::colorChanged, this,
+ &DeclarativeBar3DSeries::handleRowColorUpdate);
+ }
+ }
+ return m_rowColors;
+}
+
+void DeclarativeBar3DSeries::clearColors()
+{
+ clearDummyColors();
+ for (const auto color : std::as_const(m_rowColors))
+ disconnect(color, 0, this, 0);
+
+ m_rowColors.clear();
+ QBar3DSeries::setRowColors(QList<QColor>());
+}
+
+void DeclarativeBar3DSeries::clearDummyColors()
+{
+ if (m_dummyColors) {
+ qDeleteAll(m_rowColors);
+ m_rowColors.clear();
+ m_dummyColors = false;
+ }
+}
+
DeclarativeScatter3DSeries::DeclarativeScatter3DSeries(QObject *parent)
: QScatter3DSeries(parent),
m_baseGradient(0),
@@ -359,4 +432,4 @@ void DeclarativeSurface3DSeries::handleMultiHighlightGradientUpdate()
setSeriesGradient(this, *m_multiHighlightGradient, GradientTypeMulti);
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativeseries_p.h b/src/datavisualizationqml/declarativeseries_p.h
index 3c070006..13b1eda3 100644
--- a/src/datavisualizationqml2/declarativeseries_p.h
+++ b/src/datavisualizationqml/declarativeseries_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,14 +14,16 @@
#ifndef DECLARATIVESERIES_P_H
#define DECLARATIVESERIES_P_H
-#include "datavisualizationglobal_p.h"
#include "qbar3dseries.h"
#include "qscatter3dseries.h"
#include "qsurface3dseries.h"
#include "colorgradient_p.h"
-#include <QtQml/QQmlListProperty>
+#include "declarativecolor_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+#include <private/datavisualizationglobal_p.h>
+#include <QtQml/qqml.h>
+
+QT_BEGIN_NAMESPACE
enum GradientType {
GradientTypeBase,
@@ -67,8 +43,12 @@ class DeclarativeBar3DSeries : public QBar3DSeries
Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged)
Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
+ Q_PROPERTY(QQmlListProperty<DeclarativeColor> rowColors READ rowColors REVISION(6, 3))
Q_CLASSINFO("DefaultProperty", "seriesChildren")
+ QML_NAMED_ELEMENT(Bar3DSeries)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
DeclarativeBar3DSeries(QObject *parent = 0);
virtual ~DeclarativeBar3DSeries();
@@ -87,13 +67,22 @@ public:
void setMultiHighlightGradient(ColorGradient *gradient);
ColorGradient *multiHighlightGradient() const;
+ QQmlListProperty<DeclarativeColor> rowColors();
+ static void appendRowColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+ DeclarativeColor *color);
+ static qsizetype countRowColorsFunc(QQmlListProperty<DeclarativeColor> *list);
+ static DeclarativeColor *atRowColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+ qsizetype index);
+ static void clearRowColorsFunc(QQmlListProperty<DeclarativeColor> *list);
+
public Q_SLOTS:
void handleBaseGradientUpdate();
void handleSingleHighlightGradientUpdate();
void handleMultiHighlightGradientUpdate();
+ void handleRowColorUpdate();
Q_SIGNALS:
- void selectedBarChanged(QPointF position);
+ void selectedBarChanged(const QPointF &position);
void baseGradientChanged(ColorGradient *gradient);
void singleHighlightGradientChanged(ColorGradient *gradient);
void multiHighlightGradientChanged(ColorGradient *gradient);
@@ -102,6 +91,14 @@ private:
ColorGradient *m_baseGradient; // Not owned
ColorGradient *m_singleHighlightGradient; // Not owned
ColorGradient *m_multiHighlightGradient; // Not owned
+
+ QList<DeclarativeColor *> m_rowColors;
+ bool m_dummyColors;
+
+ void addColor(DeclarativeColor *color);
+ QList<DeclarativeColor *> colorList();
+ void clearColors();
+ void clearDummyColors();
};
class DeclarativeScatter3DSeries : public QScatter3DSeries
@@ -115,6 +112,9 @@ class DeclarativeScatter3DSeries : public QScatter3DSeries
Q_PROPERTY(int invalidSelectionIndex READ invalidSelectionIndex CONSTANT)
Q_CLASSINFO("DefaultProperty", "seriesChildren")
+ QML_NAMED_ELEMENT(Scatter3DSeries)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
DeclarativeScatter3DSeries(QObject *parent = 0);
virtual ~DeclarativeScatter3DSeries();
@@ -161,6 +161,9 @@ class DeclarativeSurface3DSeries : public QSurface3DSeries
Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
Q_CLASSINFO("DefaultProperty", "seriesChildren")
+ QML_NAMED_ELEMENT(Surface3DSeries)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
DeclarativeSurface3DSeries(QObject *parent = 0);
virtual ~DeclarativeSurface3DSeries();
@@ -185,7 +188,7 @@ public Q_SLOTS:
void handleMultiHighlightGradientUpdate();
Q_SIGNALS:
- void selectedPointChanged(QPointF position);
+ void selectedPointChanged(const QPointF &position);
void baseGradientChanged(ColorGradient *gradient);
void singleHighlightGradientChanged(ColorGradient *gradient);
void multiHighlightGradientChanged(ColorGradient *gradient);
@@ -196,6 +199,6 @@ private:
ColorGradient *m_multiHighlightGradient; // Not owned
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml/declarativesurface.cpp
index 2e210246..cff80e98 100644
--- a/src/datavisualizationqml2/declarativesurface.cpp
+++ b/src/datavisualizationqml/declarativesurface.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "declarativesurface_p.h"
#include <QtCore/QMutexLocker>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
DeclarativeSurface::DeclarativeSurface(QQuickItem *parent)
: AbstractDeclarative(parent),
@@ -115,12 +89,13 @@ void DeclarativeSurface::appendSeriesFunc(QQmlListProperty<QSurface3DSeries> *li
reinterpret_cast<DeclarativeSurface *>(list->data)->addSeries(series);
}
-int DeclarativeSurface::countSeriesFunc(QQmlListProperty<QSurface3DSeries> *list)
+qsizetype DeclarativeSurface::countSeriesFunc(QQmlListProperty<QSurface3DSeries> *list)
{
return reinterpret_cast<DeclarativeSurface *>(list->data)->m_surfaceController->surfaceSeriesList().size();
}
-QSurface3DSeries *DeclarativeSurface::atSeriesFunc(QQmlListProperty<QSurface3DSeries> *list, int index)
+QSurface3DSeries *DeclarativeSurface::atSeriesFunc(QQmlListProperty<QSurface3DSeries> *list,
+ qsizetype index)
{
return reinterpret_cast<DeclarativeSurface *>(list->data)->m_surfaceController->surfaceSeriesList().at(index);
}
@@ -160,4 +135,4 @@ void DeclarativeSurface::handleAxisZChanged(QAbstract3DAxis *axis)
emit axisZChanged(static_cast<QValue3DAxis *>(axis));
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml/declarativesurface_p.h
index d78f20c0..4634834a 100644
--- a/src/datavisualizationqml2/declarativesurface_p.h
+++ b/src/datavisualizationqml/declarativesurface_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,12 +14,13 @@
#ifndef DECLARATIVESURFACE_P_H
#define DECLARATIVESURFACE_P_H
-#include "datavisualizationglobal_p.h"
#include "abstractdeclarative_p.h"
-#include "surface3dcontroller_p.h"
#include "qsurface3dseries.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+#include <private/datavisualizationglobal_p.h>
+#include <private/surface3dcontroller_p.h>
+
+QT_BEGIN_NAMESPACE
class DeclarativeSurface : public AbstractDeclarative
{
@@ -55,9 +30,12 @@ class DeclarativeSurface : public AbstractDeclarative
Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged)
Q_PROPERTY(QSurface3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged)
Q_PROPERTY(QQmlListProperty<QSurface3DSeries> seriesList READ seriesList)
- Q_PROPERTY(bool flipHorizontalGrid READ flipHorizontalGrid WRITE setFlipHorizontalGrid NOTIFY flipHorizontalGridChanged REVISION 1)
+ Q_PROPERTY(bool flipHorizontalGrid READ flipHorizontalGrid WRITE setFlipHorizontalGrid NOTIFY flipHorizontalGridChanged REVISION(1, 2))
Q_CLASSINFO("DefaultProperty", "seriesList")
+ QML_NAMED_ELEMENT(Surface3D)
+ QML_ADDED_IN_VERSION(1, 0)
+
public:
explicit DeclarativeSurface(QQuickItem *parent = 0);
~DeclarativeSurface();
@@ -71,8 +49,8 @@ public:
QQmlListProperty<QSurface3DSeries> seriesList();
static void appendSeriesFunc(QQmlListProperty<QSurface3DSeries> *list, QSurface3DSeries *series);
- static int countSeriesFunc(QQmlListProperty<QSurface3DSeries> *list);
- static QSurface3DSeries *atSeriesFunc(QQmlListProperty<QSurface3DSeries> *list, int index);
+ static qsizetype countSeriesFunc(QQmlListProperty<QSurface3DSeries> *list);
+ static QSurface3DSeries *atSeriesFunc(QQmlListProperty<QSurface3DSeries> *list, qsizetype index);
static void clearSeriesFunc(QQmlListProperty<QSurface3DSeries> *list);
Q_INVOKABLE void addSeries(QSurface3DSeries *series);
Q_INVOKABLE void removeSeries(QSurface3DSeries *series);
@@ -82,21 +60,21 @@ public:
bool flipHorizontalGrid() const;
public Q_SLOTS:
- void handleAxisXChanged(QAbstract3DAxis *axis);
- void handleAxisYChanged(QAbstract3DAxis *axis);
- void handleAxisZChanged(QAbstract3DAxis *axis);
+ void handleAxisXChanged(QAbstract3DAxis *axis) override;
+ void handleAxisYChanged(QAbstract3DAxis *axis) override;
+ void handleAxisZChanged(QAbstract3DAxis *axis) override;
Q_SIGNALS:
void axisXChanged(QValue3DAxis *axis);
void axisYChanged(QValue3DAxis *axis);
void axisZChanged(QValue3DAxis *axis);
void selectedSeriesChanged(QSurface3DSeries *series);
- Q_REVISION(1) void flipHorizontalGridChanged(bool flip);
+ Q_REVISION(1, 2) void flipHorizontalGridChanged(bool flip);
private:
Surface3DController *m_surfaceController;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml2/declarativetheme.cpp b/src/datavisualizationqml/declarativetheme.cpp
index c3d283bf..02f3becc 100644
--- a/src/datavisualizationqml2/declarativetheme.cpp
+++ b/src/datavisualizationqml/declarativetheme.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "declarativetheme_p.h"
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
DeclarativeTheme3D::DeclarativeTheme3D(QObject *parent)
: Q3DTheme(parent),
@@ -362,13 +338,13 @@ void DeclarativeTheme3D::appendBaseColorsFunc(QQmlListProperty<DeclarativeColor>
reinterpret_cast<DeclarativeTheme3D *>(list->data)->addColor(color);
}
-int DeclarativeTheme3D::countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list)
+qsizetype DeclarativeTheme3D::countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list)
{
return reinterpret_cast<DeclarativeTheme3D *>(list->data)->colorList().size();
}
DeclarativeColor *DeclarativeTheme3D::atBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list,
- int index)
+ qsizetype index)
{
return reinterpret_cast<DeclarativeTheme3D *>(list->data)->colorList().at(index);
}
@@ -393,13 +369,13 @@ void DeclarativeTheme3D::appendBaseGradientsFunc(QQmlListProperty<ColorGradient>
reinterpret_cast<DeclarativeTheme3D *>(list->data)->addGradient(gradient);
}
-int DeclarativeTheme3D::countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list)
+qsizetype DeclarativeTheme3D::countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list)
{
return reinterpret_cast<DeclarativeTheme3D *>(list->data)->gradientList().size();
}
ColorGradient *DeclarativeTheme3D::atBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
- int index)
+ qsizetype index)
{
return reinterpret_cast<DeclarativeTheme3D *>(list->data)->gradientList().at(index);
}
@@ -409,4 +385,4 @@ void DeclarativeTheme3D::clearBaseGradientsFunc(QQmlListProperty<ColorGradient>
reinterpret_cast<DeclarativeTheme3D *>(list->data)->clearGradients();
}
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativetheme_p.h b/src/datavisualizationqml/declarativetheme_p.h
index 6934cbd6..8bc2f049 100644
--- a/src/datavisualizationqml2/declarativetheme_p.h
+++ b/src/datavisualizationqml/declarativetheme_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -40,14 +14,16 @@
#ifndef DECLARATIVETHEME_P_H
#define DECLARATIVETHEME_P_H
-#include "datavisualizationglobal_p.h"
+#include <private/datavisualizationglobal_p.h>
+#include <private/q3dtheme_p.h>
+
#include "declarativecolor_p.h"
#include "colorgradient_p.h"
-#include "q3dtheme_p.h"
-#include <QtQml/QQmlParserStatus>
+#include <QtQml/qqml.h>
+#include <QtQml/qqmlparserstatus.h>
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
+QT_BEGIN_NAMESPACE
class DeclarativeTheme3D : public Q3DTheme, public QQmlParserStatus
{
@@ -59,6 +35,8 @@ class DeclarativeTheme3D : public Q3DTheme, public QQmlParserStatus
Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
Q_CLASSINFO("DefaultProperty", "themeChildren")
+ QML_NAMED_ELEMENT(Theme3D)
+ QML_ADDED_IN_VERSION(1, 0)
public:
DeclarativeTheme3D(QObject *parent = 0);
@@ -70,15 +48,17 @@ public:
QQmlListProperty<DeclarativeColor> baseColors();
static void appendBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list,
DeclarativeColor *color);
- static int countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list);
- static DeclarativeColor *atBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list, int index);
+ static qsizetype countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list);
+ static DeclarativeColor *atBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+ qsizetype index);
static void clearBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list);
QQmlListProperty<ColorGradient> baseGradients();
static void appendBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
ColorGradient *gradient);
- static int countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list);
- static ColorGradient *atBaseGradientsFunc(QQmlListProperty<ColorGradient> *list, int index);
+ static qsizetype countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list);
+ static ColorGradient *atBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
+ qsizetype index);
static void clearBaseGradientsFunc(QQmlListProperty<ColorGradient> *list);
void setSingleHighlightGradient(ColorGradient *gradient);
@@ -88,8 +68,8 @@ public:
ColorGradient *multiHighlightGradient() const;
// From QQmlParserStatus
- virtual void classBegin();
- virtual void componentComplete();
+ void classBegin() override;
+ void componentComplete() override;
Q_SIGNALS:
void singleHighlightGradientChanged(ColorGradient *gradient);
@@ -132,6 +112,6 @@ private:
bool m_dummyColors;
};
-QT_END_NAMESPACE_DATAVISUALIZATION
+QT_END_NAMESPACE
#endif
diff --git a/src/datavisualizationqml2/designer/Bars3DSpecifics.qml b/src/datavisualizationqml/designer/Bars3DSpecifics.qml
index cd1e76b4..d509fd84 100644
--- a/src/datavisualizationqml2/designer/Bars3DSpecifics.qml
+++ b/src/datavisualizationqml/designer/Bars3DSpecifics.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import HelperWidgets 2.0
diff --git a/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml b/src/datavisualizationqml/designer/Scatter3DSpecifics.qml
index b864fb16..ffc79d44 100644
--- a/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml
+++ b/src/datavisualizationqml/designer/Scatter3DSpecifics.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import HelperWidgets 2.0
diff --git a/src/datavisualizationqml2/designer/Surface3DSpecifics.qml b/src/datavisualizationqml/designer/Surface3DSpecifics.qml
index 90c2f763..33ca7d75 100644
--- a/src/datavisualizationqml2/designer/Surface3DSpecifics.qml
+++ b/src/datavisualizationqml/designer/Surface3DSpecifics.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import HelperWidgets 2.0
diff --git a/src/datavisualizationqml/designer/default/Bars3D.qml b/src/datavisualizationqml/designer/default/Bars3D.qml
new file mode 100644
index 00000000..8c56b67c
--- /dev/null
+++ b/src/datavisualizationqml/designer/default/Bars3D.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 2.0
+import QtDataVisualization 1.2
+
+Bars3D {
+ width: 300
+ height: 300
+ Bar3DSeries {
+ ItemModelBarDataProxy {
+ itemModel: ListModel {
+ ListElement{ row: "row 1"; column: "column 1"; value: "1"; }
+ ListElement{ row: "row 1"; column: "column 2"; value: "2"; }
+ ListElement{ row: "row 1"; column: "column 3"; value: "3"; }
+ }
+
+ rowRole: "row"
+ columnRole: "column"
+ valueRole: "value"
+ }
+ }
+}
diff --git a/src/datavisualizationqml/designer/default/Scatter3D.qml b/src/datavisualizationqml/designer/default/Scatter3D.qml
new file mode 100644
index 00000000..5a6cd261
--- /dev/null
+++ b/src/datavisualizationqml/designer/default/Scatter3D.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 2.0
+import QtDataVisualization 1.2
+
+Scatter3D {
+ width: 300
+ height: 300
+ Scatter3DSeries {
+ ItemModelScatterDataProxy {
+ itemModel: ListModel {
+ ListElement{ x: "1"; y: "2"; z: "3"; }
+ ListElement{ x: "2"; y: "3"; z: "4"; }
+ ListElement{ x: "3"; y: "4"; z: "1"; }
+ }
+
+ xPosRole: "x"
+ yPosRole: "y"
+ zPosRole: "z"
+ }
+ }
+}
diff --git a/src/datavisualizationqml/designer/default/Surface3D.qml b/src/datavisualizationqml/designer/default/Surface3D.qml
new file mode 100644
index 00000000..24561890
--- /dev/null
+++ b/src/datavisualizationqml/designer/default/Surface3D.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 2.0
+import QtDataVisualization 1.2
+
+Surface3D {
+ width: 300
+ height: 300
+ Surface3DSeries {
+ ItemModelSurfaceDataProxy {
+ itemModel: ListModel {
+ ListElement{ row: "1"; column: "1"; y: "1"; }
+ ListElement{ row: "1"; column: "2"; y: "2"; }
+ ListElement{ row: "2"; column: "1"; y: "3"; }
+ ListElement{ row: "2"; column: "2"; y: "4"; }
+ }
+
+ rowRole: "row"
+ columnRole: "column"
+ yPosRole: "y"
+ }
+ }
+}
diff --git a/src/datavisualizationqml2/designer/images/bars3d-icon.png b/src/datavisualizationqml/designer/images/bars3d-icon.png
index 7f380789..7f380789 100644
--- a/src/datavisualizationqml2/designer/images/bars3d-icon.png
+++ b/src/datavisualizationqml/designer/images/bars3d-icon.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/images/bars3d-icon16.png b/src/datavisualizationqml/designer/images/bars3d-icon16.png
index e85ff502..e85ff502 100644
--- a/src/datavisualizationqml2/designer/images/bars3d-icon16.png
+++ b/src/datavisualizationqml/designer/images/bars3d-icon16.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/images/scatter3d-icon.png b/src/datavisualizationqml/designer/images/scatter3d-icon.png
index e1ac5c1f..e1ac5c1f 100644
--- a/src/datavisualizationqml2/designer/images/scatter3d-icon.png
+++ b/src/datavisualizationqml/designer/images/scatter3d-icon.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/images/scatter3d-icon16.png b/src/datavisualizationqml/designer/images/scatter3d-icon16.png
index 75b2db18..75b2db18 100644
--- a/src/datavisualizationqml2/designer/images/scatter3d-icon16.png
+++ b/src/datavisualizationqml/designer/images/scatter3d-icon16.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/images/surface3d-icon.png b/src/datavisualizationqml/designer/images/surface3d-icon.png
index 956c675e..956c675e 100644
--- a/src/datavisualizationqml2/designer/images/surface3d-icon.png
+++ b/src/datavisualizationqml/designer/images/surface3d-icon.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/images/surface3d-icon16.png b/src/datavisualizationqml/designer/images/surface3d-icon16.png
index 6caa643e..6caa643e 100644
--- a/src/datavisualizationqml2/designer/images/surface3d-icon16.png
+++ b/src/datavisualizationqml/designer/images/surface3d-icon16.png
Binary files differ
diff --git a/src/datavisualizationqml2/designer/qtdatavisualization.metainfo b/src/datavisualizationqml/designer/qtdatavisualization.metainfo
index 60b2b2c2..60b2b2c2 100644
--- a/src/datavisualizationqml2/designer/qtdatavisualization.metainfo
+++ b/src/datavisualizationqml/designer/qtdatavisualization.metainfo
diff --git a/src/datavisualizationqml2/enumtostringmap.cpp b/src/datavisualizationqml/enumtostringmap.cpp
index d683c0a1..c411f7a9 100644
--- a/src/datavisualizationqml2/enumtostringmap.cpp
+++ b/src/datavisualizationqml/enumtostringmap.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "enumtostringmap_p.h"
@@ -393,7 +367,7 @@ EnumToStringMap::EnumToStringMap() :
m_map[GL_FRAMEBUFFER_UNSUPPORTED] = "FRAMEBUFFER_UNSUPPORTED";
m_map[GL_FRAMEBUFFER_BINDING] = "FRAMEBUFFER_BINDING";
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
m_map[GL_RENDERBUFFER_BINDING] = "RENDERBUFFER_BINDING";
#else
m_map[GL_RENDERBUFFER] = "RENDERBUFFER_BINDING";
diff --git a/src/datavisualizationqml/enumtostringmap_p.h b/src/datavisualizationqml/enumtostringmap_p.h
new file mode 100644
index 00000000..b8be3f18
--- /dev/null
+++ b/src/datavisualizationqml/enumtostringmap_p.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef ENUMTOSTRINGMAP_P_H
+#define ENUMTOSTRINGMAP_P_H
+
+//#define VERBOSE_STATE_STORE
+
+#ifdef VERBOSE_STATE_STORE
+
+#include <QtGui/qopengl.h>
+#include <QMap>
+#include <QString>
+#include <private/qglobal_p.h>
+
+class EnumToStringMap
+{
+public:
+ static EnumToStringMap *newInstance();
+ static void deleteInstance();
+ QString lookUp(const GLuint value) const;
+
+private:
+ EnumToStringMap();
+ QMap<int, QString> m_map;
+ QString m_unknown;
+};
+#endif
+#endif
diff --git a/src/datavisualizationqml/foreigntypes_p.h b/src/datavisualizationqml/foreigntypes_p.h
new file mode 100644
index 00000000..0b92d862
--- /dev/null
+++ b/src/datavisualizationqml/foreigntypes_p.h
@@ -0,0 +1,122 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef FOREIGNTYPES_P_H
+#define FOREIGNTYPES_P_H
+
+#include <QtQml/qqml.h>
+
+#include <QtCore/qabstractitemmodel.h>
+
+#include <QtDataVisualization/q3dcamera.h>
+#include <QtDataVisualization/q3dinputhandler.h>
+#include <QtDataVisualization/q3dlight.h>
+#include <QtDataVisualization/q3dobject.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dtheme.h>
+#include <QtDataVisualization/qabstract3daxis.h>
+#include <QtDataVisualization/qabstract3dinputhandler.h>
+#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtDataVisualization/qabstractdataproxy.h>
+#include <QtDataVisualization/qbar3dseries.h>
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtDataVisualization/qcategory3daxis.h>
+#include <QtDataVisualization/qcustom3ditem.h>
+#include <QtDataVisualization/qcustom3dlabel.h>
+#include <QtDataVisualization/qcustom3dvolume.h>
+#include <QtDataVisualization/qheightmapsurfacedataproxy.h>
+#include <QtDataVisualization/qitemmodelbardataproxy.h>
+#include <QtDataVisualization/qitemmodelscatterdataproxy.h>
+#include <QtDataVisualization/qitemmodelsurfacedataproxy.h>
+#include <QtDataVisualization/qlogvalue3daxisformatter.h>
+#include <QtDataVisualization/qscatter3dseries.h>
+#include <QtDataVisualization/qscatterdataproxy.h>
+#include <QtDataVisualization/qsurface3dseries.h>
+#include <QtDataVisualization/qsurfacedataproxy.h>
+#include <QtDataVisualization/qtouch3dinputhandler.h>
+#include <QtDataVisualization/qvalue3daxis.h>
+#include <QtDataVisualization/qvalue3daxisformatter.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+#define DEFINE_FOREIGN_BASE_ATTRIBUTES(type, name, minor) \
+ Q_GADGET \
+ QML_NAMED_ELEMENT(name) \
+ QML_FOREIGN(type) \
+ QML_ADDED_IN_VERSION(1, minor) \
+
+#define DEFINE_FOREIGN_UNCREATABLE_TYPE(type, name) \
+ struct type##DataVisForeign \
+ { \
+ DEFINE_FOREIGN_BASE_ATTRIBUTES(type, name, 0) \
+ QML_UNCREATABLE("Trying to create uncreatable: " #name ".") \
+ };
+
+#define DEFINE_FOREIGN_CREATABLE_TYPE(type, name, minor) \
+ struct type##DataVisForeign \
+ { \
+ DEFINE_FOREIGN_BASE_ATTRIBUTES(type, name, minor) \
+ };
+
+#define DEFINE_FOREIGN_REPLACED_TYPE(type, name, better) \
+ struct type##DataVisForeign \
+ { \
+ DEFINE_FOREIGN_BASE_ATTRIBUTES(type, name, 0) \
+ QML_UNCREATABLE("Trying to create uncreatable: " #name ", use " #better " instead.") \
+ };
+
+struct Q3DSceneForeign
+{
+ Q_GADGET
+ QML_ANONYMOUS
+ QML_ADDED_IN_VERSION(1, 0)
+ QML_FOREIGN(Q3DScene)
+};
+
+DEFINE_FOREIGN_CREATABLE_TYPE(Q3DCamera, Camera3D, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(Q3DLight, Light3D, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QCategory3DAxis, CategoryAxis3D, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QHeightMapSurfaceDataProxy, HeightMapSurfaceDataProxy, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QItemModelBarDataProxy, ItemModelBarDataProxy, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QItemModelScatterDataProxy, ItemModelScatterDataProxy, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QItemModelSurfaceDataProxy, ItemModelSurfaceDataProxy, 0)
+DEFINE_FOREIGN_CREATABLE_TYPE(QValue3DAxis, ValueAxis3D, 0)
+
+DEFINE_FOREIGN_CREATABLE_TYPE(QCustom3DItem, Custom3DItem, 1)
+DEFINE_FOREIGN_CREATABLE_TYPE(QCustom3DLabel, Custom3DLabel, 1)
+DEFINE_FOREIGN_CREATABLE_TYPE(QLogValue3DAxisFormatter, LogValueAxis3DFormatter, 1)
+DEFINE_FOREIGN_CREATABLE_TYPE(QValue3DAxisFormatter, ValueAxis3DFormatter, 1)
+
+DEFINE_FOREIGN_CREATABLE_TYPE(Q3DInputHandler, InputHandler3D, 2)
+DEFINE_FOREIGN_CREATABLE_TYPE(QCustom3DVolume, Custom3DVolume, 2)
+DEFINE_FOREIGN_CREATABLE_TYPE(QTouch3DInputHandler, TouchInputHandler3D, 2)
+
+DEFINE_FOREIGN_REPLACED_TYPE(Q3DTheme, Q3DTheme, Theme3D)
+DEFINE_FOREIGN_REPLACED_TYPE(QBar3DSeries, QBar3DSeries, Bar3DSeries)
+DEFINE_FOREIGN_REPLACED_TYPE(QScatter3DSeries, QScatter3DSeries, Scatter3DSeries)
+DEFINE_FOREIGN_REPLACED_TYPE(QSurface3DSeries, QSurface3DSeries, Surface3DSeries)
+
+DEFINE_FOREIGN_UNCREATABLE_TYPE(Q3DObject, Object3D)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QAbstract3DAxis, AbstractAxis3D)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QAbstract3DInputHandler, AbstractInputHandler3D)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QAbstract3DSeries, Abstract3DSeries)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QAbstractDataProxy, AbstractDataProxy)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QAbstractItemModel, AbstractItemModel)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QBarDataProxy, BarDataProxy)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QScatterDataProxy, ScatterDataProxy)
+DEFINE_FOREIGN_UNCREATABLE_TYPE(QSurfaceDataProxy, SurfaceDataProxy)
+
+QT_END_NAMESPACE
+
+#endif // FOREIGNTYPES_P_H
diff --git a/src/datavisualizationqml2/glstatestore.cpp b/src/datavisualizationqml/glstatestore.cpp
index 0d24f3f9..573835a3 100644
--- a/src/datavisualizationqml2/glstatestore.cpp
+++ b/src/datavisualizationqml/glstatestore.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "glstatestore_p.h"
#include <QDebug>
@@ -87,7 +61,7 @@ void GLStateStore::storeGLState()
printCurrentState(true);
#endif
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &m_drawFramebuffer);
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &m_readFramebuffer);
glGetIntegerv(GL_RENDERBUFFER_BINDING, &m_renderbuffer);
@@ -144,7 +118,7 @@ void GLStateStore::printCurrentState(bool in)
if (file->isOpen()) {
QDebug msg(file);
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
GLint drawFramebuffer;
GLint readFramebuffer;
GLint renderbuffer;
@@ -183,7 +157,7 @@ void GLStateStore::printCurrentState(bool in)
GLfloat polygonOffsetUnits;
glGetBooleanv(GL_DEPTH_WRITEMASK, &isDepthWriteEnabled);
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &drawFramebuffer);
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &readFramebuffer);
glGetIntegerv(GL_RENDERBUFFER_BINDING, &renderbuffer);
@@ -226,7 +200,7 @@ void GLStateStore::printCurrentState(bool in)
color.setRgbF(clearColor[0], clearColor[1], clearColor[2]);
color.setAlphaF(clearColor[3]);
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
msg << "---" << endl;
msg << " GL_DRAW_FRAMEBUFFER_BINDING "<< drawFramebuffer << endl;
msg << " GL_READ_FRAMEBUFFER_BINDING "<< readFramebuffer << endl;
@@ -278,7 +252,7 @@ void GLStateStore::printCurrentState(bool in)
void GLStateStore::restoreGLState()
{
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
glBindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_drawFramebuffer);
glBindRenderbuffer(GL_RENDERBUFFER_BINDING, m_renderbuffer);
@@ -353,7 +327,7 @@ void GLStateStore::restoreGLState()
void GLStateStore::initGLDefaultState()
{
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
m_drawFramebuffer = 0;
m_readFramebuffer = 0;
m_renderbuffer = 0;
diff --git a/src/datavisualizationqml2/glstatestore_p.h b/src/datavisualizationqml/glstatestore_p.h
index 830f5e64..b34a4c0d 100644
--- a/src/datavisualizationqml2/glstatestore_p.h
+++ b/src/datavisualizationqml/glstatestore_p.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//
// W A R N I N G
@@ -63,7 +37,7 @@ public:
GLint m_scissorBox[4];
GLboolean m_isScissorTestEnabled;
-#if !defined(QT_OPENGL_ES_2)
+#if !QT_CONFIG(opengles2)
GLint m_drawFramebuffer;
GLint m_readFramebuffer;
GLint m_renderbuffer;
diff --git a/src/datavisualizationqml2/colorgradient.cpp b/src/datavisualizationqml2/colorgradient.cpp
deleted file mode 100644
index edcca2ec..00000000
--- a/src/datavisualizationqml2/colorgradient.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "colorgradient_p.h"
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-ColorGradientStop::ColorGradientStop(QObject *parent)
- : QObject(parent)
-{
-}
-
-qreal ColorGradientStop::position() const
-{
- return m_position;
-}
-
-void ColorGradientStop::setPosition(qreal position)
-{
- m_position = position;
- updateGradient();
- emit positionChanged(position);
-}
-
-QColor ColorGradientStop::color() const
-{
- return m_color;
-}
-
-void ColorGradientStop::setColor(const QColor &color)
-{
- m_color = color;
- updateGradient();
- emit colorChanged(color);
-}
-
-void ColorGradientStop::updateGradient()
-{
- if (ColorGradient *grad = qobject_cast<ColorGradient*>(parent()))
- grad->doUpdate();
-}
-
-ColorGradient::ColorGradient(QObject *parent)
-: QObject(parent)
-{
-}
-
-ColorGradient::~ColorGradient()
-{
-}
-
-QQmlListProperty<ColorGradientStop> ColorGradient::stops()
-{
- return QQmlListProperty<ColorGradientStop>(this, &m_stops);
-}
-
-void ColorGradient::doUpdate()
-{
- emit updated();
-}
-
-QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualizationqml2/colorgradient_p.h b/src/datavisualizationqml2/colorgradient_p.h
deleted file mode 100644
index 6973ac4b..00000000
--- a/src/datavisualizationqml2/colorgradient_p.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the QtDataVisualization API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-
-#ifndef COLORGRADIENT_P_H
-#define COLORGRADIENT_P_H
-
-#include "datavisualizationglobal_p.h"
-#include <QtGui/QColor>
-#include <QtQml/QQmlListProperty>
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-class ColorGradientStop : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal position READ position WRITE setPosition NOTIFY positionChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
-
-public:
- ColorGradientStop(QObject *parent = 0);
-
- qreal position() const;
- void setPosition(qreal position);
-
- QColor color() const;
- void setColor(const QColor &color);
-
-Q_SIGNALS:
- void positionChanged(qreal position);
- void colorChanged(QColor color);
-
-private:
- void updateGradient();
-
-private:
- qreal m_position;
- QColor m_color;
-};
-
-class ColorGradient : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QQmlListProperty<ColorGradientStop> stops READ stops)
- Q_CLASSINFO("DefaultProperty", "stops")
-
-public:
- ColorGradient(QObject *parent = 0);
- ~ColorGradient();
-
- QQmlListProperty<ColorGradientStop> stops();
-
- void doUpdate();
- QList<ColorGradientStop *> m_stops;
-
-Q_SIGNALS:
- void updated();
-};
-
-QT_END_NAMESPACE_DATAVISUALIZATION
-
-#endif
diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro
deleted file mode 100644
index 8f5fcb68..00000000
--- a/src/datavisualizationqml2/datavisualizationqml2.pro
+++ /dev/null
@@ -1,55 +0,0 @@
-TARGET = datavisualizationqml2
-CXX_MODULE = datavisualization
-QT += opengl qml quick datavisualization
-osx: QT += gui-private
-TARGETPATH = QtDataVisualization
-
-include($$PWD/designer/designer.pri)
-
-INCLUDEPATH += ../../include \
- ../../include/QtDataVisualization \
- ../datavisualization/engine \
- ../datavisualization/global \
- ../datavisualization/data \
- ../datavisualization/theme \
- ../datavisualization/axis \
- ../datavisualization/input
-
-SOURCES += \
- datavisualizationqml2_plugin.cpp \
- declarativebars.cpp \
- declarativescatter.cpp \
- declarativesurface.cpp \
- abstractdeclarative.cpp \
- colorgradient.cpp \
- declarativeseries.cpp \
- declarativetheme.cpp \
- declarativecolor.cpp \
- declarativescene.cpp \
- declarativerendernode.cpp \
- glstatestore.cpp \
- enumtostringmap.cpp
-
-HEADERS += \
- datavisualizationqml2_plugin.h \
- declarativebars_p.h \
- declarativescatter_p.h \
- declarativesurface_p.h \
- abstractdeclarative_p.h \
- colorgradient_p.h \
- declarativeseries_p.h \
- declarativetheme_p.h \
- declarativecolor_p.h \
- declarativescene_p.h \
- declarativerendernode_p.h \
- glstatestore_p.h \
- enumtostringmap_p.h
-
-IMPORT_VERSION = 1.$$QT_MINOR_VERSION
-QMAKE_QMLPLUGINDUMP_FLAGS += -defaultplatform
-load(qml_plugin)
-
-win32 {
- QMAKE_TARGET_PRODUCT = "Qt Data Visualization (Qt $$QT_VERSION)"
- QMAKE_TARGET_DESCRIPTION = "3D Data Visualization QML plugin for Qt."
-}
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
deleted file mode 100644
index 5b515a04..00000000
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "datavisualizationqml2_plugin.h"
-
-#include <QtQml>
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-void QtDataVisualizationQml2Plugin::registerTypes(const char *uri)
-{
- // @uri QtDataVisualization
-
- // QtDataVisualization 1.0
-
- qmlRegisterUncreatableType<QAbstractItemModel>(uri, 1, 0, "AbstractItemModel",
- QLatin1String("Trying to create uncreatable: AbstractItemModel."));
- qmlRegisterUncreatableType<QAbstract3DAxis>(uri, 1, 0, "AbstractAxis3D",
- QLatin1String("Trying to create uncreatable: AbstractAxis."));
- qmlRegisterUncreatableType<QAbstractDataProxy>(uri, 1, 0, "AbstractDataProxy",
- QLatin1String("Trying to create uncreatable: AbstractDataProxy."));
- qmlRegisterUncreatableType<QBarDataProxy>(uri, 1, 0, "BarDataProxy",
- QLatin1String("Trying to create uncreatable: BarDataProxy."));
- qmlRegisterUncreatableType<QScatterDataProxy>(uri, 1, 0, "ScatterDataProxy",
- QLatin1String("Trying to create uncreatable: ScatterDataProxy."));
- qmlRegisterUncreatableType<QSurfaceDataProxy>(uri, 1, 0, "SurfaceDataProxy",
- QLatin1String("Trying to create uncreatable: SurfaceDataProxy."));
- qmlRegisterUncreatableType<AbstractDeclarative>(uri, 1, 0, "AbstractGraph3D",
- QLatin1String("Trying to create uncreatable: AbstractGraph3D."));
- qmlRegisterUncreatableType<Declarative3DScene>(uri, 1, 0, "Scene3D",
- QLatin1String("Trying to create uncreatable: Scene3D."));
- qmlRegisterUncreatableType<QAbstract3DSeries>(uri, 1, 0, "Abstract3DSeries",
- QLatin1String("Trying to create uncreatable: Abstract3DSeries."));
- qmlRegisterUncreatableType<QBar3DSeries>(uri, 1, 0, "QBar3DSeries",
- QLatin1String("Trying to create uncreatable: QBar3DSeries, use Bar3DSeries instead."));
- qmlRegisterUncreatableType<QScatter3DSeries>(uri, 1, 0, "QScatter3DSeries",
- QLatin1String("Trying to create uncreatable: QScatter3DSeries, use Scatter3DSeries instead."));
- qmlRegisterUncreatableType<QSurface3DSeries>(uri, 1, 0, "QSurface3DSeries",
- QLatin1String("Trying to create uncreatable: QSurface3DSeries, use Surface3DSeries instead."));
- qmlRegisterUncreatableType<Q3DTheme>(uri, 1, 0, "Q3DTheme",
- QLatin1String("Trying to create uncreatable: Q3DTheme, use Theme3D instead."));
- qmlRegisterUncreatableType<QAbstract3DInputHandler>(uri, 1, 0, "AbstractInputHandler3D",
- QLatin1String("Trying to create uncreatable: AbstractInputHandler3D."));
- qmlRegisterUncreatableType<Q3DObject>(uri, 1, 0, "Object3D",
- QLatin1String("Trying to create uncreatable: Object3D."));
-
- qmlRegisterType<DeclarativeBars>(uri, 1, 0, "Bars3D");
- qmlRegisterType<DeclarativeScatter>(uri, 1, 0, "Scatter3D");
- qmlRegisterType<DeclarativeSurface>(uri, 1, 0, "Surface3D");
-
- qmlRegisterType<QValue3DAxis>(uri, 1, 0, "ValueAxis3D");
- qmlRegisterType<QCategory3DAxis>(uri, 1, 0, "CategoryAxis3D");
-
- qmlRegisterType<Q3DCamera>(uri, 1, 0, "Camera3D");
- qmlRegisterType<Q3DLight>(uri, 1, 0, "Light3D");
-
- qmlRegisterType<QItemModelBarDataProxy>(uri, 1, 0, "ItemModelBarDataProxy");
- qmlRegisterType<QItemModelScatterDataProxy>(uri, 1, 0, "ItemModelScatterDataProxy");
- qmlRegisterType<QItemModelSurfaceDataProxy>(uri, 1, 0, "ItemModelSurfaceDataProxy");
- qmlRegisterType<QHeightMapSurfaceDataProxy>(uri, 1, 0, "HeightMapSurfaceDataProxy");
-
- qmlRegisterType<ColorGradientStop>(uri, 1, 0, "ColorGradientStop");
- qmlRegisterType<ColorGradient>(uri, 1, 0, "ColorGradient");
-
- qmlRegisterType<DeclarativeColor>(uri, 1, 0, "ThemeColor");
- qmlRegisterType<DeclarativeTheme3D>(uri, 1, 0, "Theme3D");
-
- qmlRegisterType<DeclarativeBar3DSeries>(uri, 1, 0, "Bar3DSeries");
- qmlRegisterType<DeclarativeScatter3DSeries>(uri, 1, 0, "Scatter3DSeries");
- qmlRegisterType<DeclarativeSurface3DSeries>(uri, 1, 0, "Surface3DSeries");
-
- qRegisterMetaType<QAbstract3DGraph::ShadowQuality>("QAbstract3DGraph::ShadowQuality");
-
- // QtDataVisualization 1.1
-
- // New revisions
- qmlRegisterUncreatableType<QAbstract3DAxis, 1>(uri, 1, 1, "AbstractAxis3D",
- QLatin1String("Trying to create uncreatable: AbstractAxis."));
- qmlRegisterUncreatableType<QAbstract3DSeries, 1>(uri, 1, 1, "Abstract3DSeries",
- QLatin1String("Trying to create uncreatable: Abstract3DSeries."));
- qmlRegisterUncreatableType<AbstractDeclarative, 1>(uri, 1, 1, "AbstractGraph3D",
- QLatin1String("Trying to create uncreatable: AbstractGraph3D."));
-
- qmlRegisterType<QValue3DAxis, 1>(uri, 1, 1, "ValueAxis3D");
- qmlRegisterType<QItemModelBarDataProxy, 1>(uri, 1, 1, "ItemModelBarDataProxy");
- qmlRegisterType<QItemModelSurfaceDataProxy, 1>(uri, 1, 1, "ItemModelSurfaceDataProxy");
- qmlRegisterType<QItemModelScatterDataProxy, 1>(uri, 1, 1, "ItemModelScatterDataProxy");
-
- // New types
- qmlRegisterType<QValue3DAxisFormatter>(uri, 1, 1, "ValueAxis3DFormatter");
- qmlRegisterType<QLogValue3DAxisFormatter>(uri, 1, 1, "LogValueAxis3DFormatter");
- qmlRegisterType<QCustom3DItem>(uri, 1, 1, "Custom3DItem");
- qmlRegisterType<QCustom3DLabel>(uri, 1, 1, "Custom3DLabel");
-
- // New metatypes
- qRegisterMetaType<QAbstract3DGraph::ElementType>("QAbstract3DGraph::ElementType");
-
- // QtDataVisualization 1.2
-
- // New revisions
- qmlRegisterUncreatableType<AbstractDeclarative, 2>(uri, 1, 2, "AbstractGraph3D",
- QLatin1String("Trying to create uncreatable: AbstractGraph3D."));
- qmlRegisterRevision<Q3DScene, 1>(uri, 1, 2);
- qmlRegisterUncreatableType<Declarative3DScene, 1>(uri, 1, 2, "Scene3D",
- QLatin1String("Trying to create uncreatable: Scene3D."));
- qmlRegisterType<DeclarativeSurface, 1>(uri, 1, 2, "Surface3D");
- qmlRegisterType<Q3DCamera, 1>(uri, 1, 2, "Camera3D");
- qmlRegisterType<QCustom3DItem, 1>(uri, 1, 2, "Custom3DItem");
- qmlRegisterType<DeclarativeBars, 1>(uri, 1, 2, "Bars3D");
-
- // New types
- qmlRegisterType<Q3DInputHandler>(uri, 1, 2, "InputHandler3D");
- qmlRegisterType<QTouch3DInputHandler>(uri, 1, 2, "TouchInputHandler3D");
- qmlRegisterType<QCustom3DVolume>(uri, 1, 2, "Custom3DVolume");
-
- // QtDataVisualization 1.3
-
- // New revisions
- qmlRegisterType<Q3DLight, 1>(uri, 1, 3, "Light3D");
-
- // The minor version used to be the current Qt 5 minor. For compatibility it is the last
- // Qt 5 release.
- qmlRegisterModule(uri, 1, 15);
-}
-
-QT_END_NAMESPACE_DATAVISUALIZATION
-
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
deleted file mode 100644
index 5bc19b4d..00000000
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef DATAVISUALIZATIONQML2_PLUGIN_H
-#define DATAVISUALIZATIONQML2_PLUGIN_H
-
-#include "datavisualizationglobal_p.h"
-#include "declarativebars_p.h"
-#include "declarativescatter_p.h"
-#include "declarativesurface_p.h"
-#include "qitemmodelbardataproxy.h"
-#include "qitemmodelscatterdataproxy.h"
-#include "qitemmodelsurfacedataproxy.h"
-#include "qheightmapsurfacedataproxy.h"
-#include "qvalue3daxis.h"
-#include "qvalue3daxisformatter.h"
-#include "qlogvalue3daxisformatter.h"
-#include "qcategory3daxis.h"
-#include "q3dobject.h"
-#include "q3dcamera.h"
-#include "q3dscene.h"
-#include "q3dlight.h"
-#include "qabstract3dseries.h"
-#include "qbar3dseries.h"
-#include "qscatter3dseries.h"
-#include "qsurface3dseries.h"
-#include "declarativeseries_p.h"
-#include "q3dtheme.h"
-#include "declarativetheme_p.h"
-#include "q3dinputhandler.h"
-#include "qtouch3dinputhandler.h"
-#include "declarativecolor_p.h"
-#include "declarativescene_p.h"
-#include "qcustom3ditem.h"
-#include "qcustom3dlabel.h"
-#include "qcustom3dvolume.h"
-
-#include <QtQml/QQmlExtensionPlugin>
-
-using namespace QtDataVisualization;
-
-QML_DECLARE_TYPE(AbstractDeclarative)
-QML_DECLARE_TYPE(DeclarativeBars)
-QML_DECLARE_TYPE(DeclarativeScatter)
-QML_DECLARE_TYPE(DeclarativeSurface)
-
-QML_DECLARE_TYPE(QAbstractItemModel)
-
-QML_DECLARE_TYPE(QAbstract3DAxis)
-QML_DECLARE_TYPE(QCategory3DAxis)
-QML_DECLARE_TYPE(QValue3DAxis)
-QML_DECLARE_TYPE(QValue3DAxisFormatter)
-QML_DECLARE_TYPE(QLogValue3DAxisFormatter)
-
-QML_DECLARE_TYPE(Q3DScene)
-QML_DECLARE_TYPE(Declarative3DScene)
-QML_DECLARE_TYPE(Q3DObject)
-QML_DECLARE_TYPE(Q3DCamera)
-QML_DECLARE_TYPE(Q3DLight)
-
-QML_DECLARE_TYPE(QAbstractDataProxy)
-QML_DECLARE_TYPE(QBarDataProxy)
-QML_DECLARE_TYPE(QItemModelBarDataProxy)
-QML_DECLARE_TYPE(QScatterDataProxy)
-QML_DECLARE_TYPE(QItemModelScatterDataProxy)
-QML_DECLARE_TYPE(QSurfaceDataProxy)
-QML_DECLARE_TYPE(QItemModelSurfaceDataProxy)
-QML_DECLARE_TYPE(QHeightMapSurfaceDataProxy)
-
-QML_DECLARE_TYPE(QAbstract3DSeries)
-QML_DECLARE_TYPE(QBar3DSeries)
-QML_DECLARE_TYPE(QScatter3DSeries)
-QML_DECLARE_TYPE(QSurface3DSeries)
-QML_DECLARE_TYPE(DeclarativeBar3DSeries)
-QML_DECLARE_TYPE(DeclarativeScatter3DSeries)
-QML_DECLARE_TYPE(DeclarativeSurface3DSeries)
-
-QML_DECLARE_TYPE(ColorGradientStop)
-QML_DECLARE_TYPE(ColorGradient)
-
-QML_DECLARE_TYPE(DeclarativeColor)
-
-QML_DECLARE_TYPE(Q3DTheme)
-QML_DECLARE_TYPE(DeclarativeTheme3D)
-
-QML_DECLARE_TYPE(QAbstract3DInputHandler)
-QML_DECLARE_TYPE(Q3DInputHandler)
-QML_DECLARE_TYPE(QTouch3DInputHandler)
-
-QML_DECLARE_TYPE(QCustom3DItem)
-QML_DECLARE_TYPE(QCustom3DLabel)
-QML_DECLARE_TYPE(QCustom3DVolume)
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-class QtDataVisualizationQml2Plugin : public QQmlExtensionPlugin
-{
- Q_OBJECT
- Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
-
-public:
- QtDataVisualizationQml2Plugin(QObject *parent = 0) : QQmlExtensionPlugin(parent) { }
- void registerTypes(const char *uri);
-};
-
-QT_END_NAMESPACE_DATAVISUALIZATION
-
-#endif // DATAVISUALIZATIONQML2_PLUGIN_H
-
diff --git a/src/datavisualizationqml2/declarativecolor.cpp b/src/datavisualizationqml2/declarativecolor.cpp
deleted file mode 100644
index 0c0a1f6c..00000000
--- a/src/datavisualizationqml2/declarativecolor.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "declarativecolor_p.h"
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-DeclarativeColor::DeclarativeColor(QObject *parent)
- : QObject(parent)
-{
-}
-
-void DeclarativeColor::setColor(const QColor &color)
-{
- if (m_color != color) {
- m_color = color;
- emit colorChanged(color);
- }
-}
-
-QColor DeclarativeColor::color() const
-{
- return m_color;
-}
-
-QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualizationqml2/declarativecolor_p.h b/src/datavisualizationqml2/declarativecolor_p.h
deleted file mode 100644
index 1ea66530..00000000
--- a/src/datavisualizationqml2/declarativecolor_p.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the QtDataVisualization API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-
-#ifndef DECLARATIVECOLOR_P_H
-#define DECLARATIVECOLOR_P_H
-
-#include "datavisualizationglobal_p.h"
-#include <QtGui/QColor>
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-class DeclarativeColor : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
-
-public:
- DeclarativeColor(QObject *parent = 0);
-
- void setColor(const QColor &color);
- QColor color() const;
-
-Q_SIGNALS:
- void colorChanged(QColor color);
-
-private:
- QColor m_color;
-};
-
-QT_END_NAMESPACE_DATAVISUALIZATION
-
-#endif
diff --git a/src/datavisualizationqml2/declarativescene.cpp b/src/datavisualizationqml2/declarativescene.cpp
deleted file mode 100644
index 54bb52da..00000000
--- a/src/datavisualizationqml2/declarativescene.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "declarativescene_p.h"
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-Declarative3DScene::Declarative3DScene(QObject *parent)
- : Q3DScene(parent)
-{
- QObject::connect(this, &Q3DScene::selectionQueryPositionChanged, this,
- &Declarative3DScene::selectionQueryPositionChanged);
-}
-
-Declarative3DScene::~Declarative3DScene()
-{
-}
-
-void Declarative3DScene::setSelectionQueryPosition(const QPointF &point)
-{
- Q3DScene::setSelectionQueryPosition(point.toPoint());
-}
-
-QPointF Declarative3DScene::selectionQueryPosition() const
-{
- return QPointF(Q3DScene::selectionQueryPosition());
-}
-
-QPoint Declarative3DScene::invalidSelectionPoint() const
-{
- return Q3DScene::invalidSelectionPoint();
-}
-
-QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualizationqml2/declarativescene_p.h b/src/datavisualizationqml2/declarativescene_p.h
deleted file mode 100644
index b4c03e26..00000000
--- a/src/datavisualizationqml2/declarativescene_p.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the QtDataVisualization API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-
-#ifndef DECLARATIVESCENE_P_H
-#define DECLARATIVESCENE_P_H
-
-#include "datavisualizationglobal_p.h"
-#include "q3dscene.h"
-
-QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-
-class Declarative3DScene : public Q3DScene
-{
- Q_OBJECT
- // This property is overloaded to use QPointF instead of QPoint to work around qml bug
- // where Qt.point(0, 0) can't be assigned due to error "Cannot assign QPointF to QPoint".
- Q_PROPERTY(QPointF selectionQueryPosition READ selectionQueryPosition WRITE setSelectionQueryPosition NOTIFY selectionQueryPositionChanged)
- // This is static method in parent class, overload as constant property for qml.
- Q_PROPERTY(QPoint invalidSelectionPoint READ invalidSelectionPoint CONSTANT)
-
-public:
- Declarative3DScene(QObject *parent = 0);
- virtual ~Declarative3DScene();
-
- void setSelectionQueryPosition(const QPointF &point);
- QPointF selectionQueryPosition() const;
- QPoint invalidSelectionPoint() const;
-
-Q_SIGNALS:
- void selectionQueryPositionChanged(const QPointF position);
-};
-
-QT_END_NAMESPACE_DATAVISUALIZATION
-
-#endif
diff --git a/src/datavisualizationqml2/designer/default/Bars3D.qml b/src/datavisualizationqml2/designer/default/Bars3D.qml
deleted file mode 100644
index 32f4c939..00000000
--- a/src/datavisualizationqml2/designer/default/Bars3D.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtDataVisualization 1.2
-
-Bars3D {
- width: 300
- height: 300
- Bar3DSeries {
- ItemModelBarDataProxy {
- itemModel: ListModel {
- ListElement{ row: "row 1"; column: "column 1"; value: "1"; }
- ListElement{ row: "row 1"; column: "column 2"; value: "2"; }
- ListElement{ row: "row 1"; column: "column 3"; value: "3"; }
- }
-
- rowRole: "row"
- columnRole: "column"
- valueRole: "value"
- }
- }
-}
diff --git a/src/datavisualizationqml2/designer/default/Scatter3D.qml b/src/datavisualizationqml2/designer/default/Scatter3D.qml
deleted file mode 100644
index 2c92d192..00000000
--- a/src/datavisualizationqml2/designer/default/Scatter3D.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtDataVisualization 1.2
-
-Scatter3D {
- width: 300
- height: 300
- Scatter3DSeries {
- ItemModelScatterDataProxy {
- itemModel: ListModel {
- ListElement{ x: "1"; y: "2"; z: "3"; }
- ListElement{ x: "2"; y: "3"; z: "4"; }
- ListElement{ x: "3"; y: "4"; z: "1"; }
- }
-
- xPosRole: "x"
- yPosRole: "y"
- zPosRole: "z"
- }
- }
-}
diff --git a/src/datavisualizationqml2/designer/default/Surface3D.qml b/src/datavisualizationqml2/designer/default/Surface3D.qml
deleted file mode 100644
index 66fd10fb..00000000
--- a/src/datavisualizationqml2/designer/default/Surface3D.qml
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtDataVisualization 1.2
-
-Surface3D {
- width: 300
- height: 300
- Surface3DSeries {
- ItemModelSurfaceDataProxy {
- itemModel: ListModel {
- ListElement{ row: "1"; column: "1"; y: "1"; }
- ListElement{ row: "1"; column: "2"; y: "2"; }
- ListElement{ row: "2"; column: "1"; y: "3"; }
- ListElement{ row: "2"; column: "2"; y: "4"; }
- }
-
- rowRole: "row"
- columnRole: "column"
- yPosRole: "y"
- }
- }
-}
diff --git a/src/datavisualizationqml2/designer/designer.pri b/src/datavisualizationqml2/designer/designer.pri
deleted file mode 100644
index e22fb618..00000000
--- a/src/datavisualizationqml2/designer/designer.pri
+++ /dev/null
@@ -1,19 +0,0 @@
-QML_FILES += \
- $$PWD/Bars3DSpecifics.qml \
- $$PWD/Scatter3DSpecifics.qml \
- $$PWD/Surface3DSpecifics.qml \
- $$PWD/default/Bars3D.qml \
- $$PWD/default/Scatter3D.qml \
- $$PWD/default/Surface3D.qml
-
-QML_FILES += $$PWD/qtdatavisualization.metainfo
-
-# Images
-QML_FILES += \
- $$PWD/images/bars3d-icon.png \
- $$PWD/images/bars3d-icon16.png \
- $$PWD/images/scatter3d-icon.png \
- $$PWD/images/scatter3d-icon16.png \
- $$PWD/images/surface3d-icon.png \
- $$PWD/images/surface3d-icon16.png
-
diff --git a/src/datavisualizationqml2/enumtostringmap_p.h b/src/datavisualizationqml2/enumtostringmap_p.h
deleted file mode 100644
index ee613433..00000000
--- a/src/datavisualizationqml2/enumtostringmap_p.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the QtDataVisualization API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-
-#ifndef ENUMTOSTRINGMAP_P_H
-#define ENUMTOSTRINGMAP_P_H
-
-//#define VERBOSE_STATE_STORE
-
-#ifdef VERBOSE_STATE_STORE
-
-#include <QtGui/qopengl.h>
-#include <QMap>
-#include <QString>
-
-class EnumToStringMap
-{
-public:
- static EnumToStringMap *newInstance();
- static void deleteInstance();
- QString lookUp(const GLuint value) const;
-
-private:
- EnumToStringMap();
- QMap<int, QString> m_map;
- QString m_unknown;
-};
-#endif
-#endif
diff --git a/src/datavisualizationqml2/plugins.qmltypes b/src/datavisualizationqml2/plugins.qmltypes
deleted file mode 100644
index 69a48706..00000000
--- a/src/datavisualizationqml2/plugins.qmltypes
+++ /dev/null
@@ -1,2375 +0,0 @@
-import QtQuick.tooling 1.2
-
-// This file describes the plugin-supplied types contained in the library.
-// It is used for QML tooling purposes only.
-//
-// This file was auto-generated by:
-// 'qmlplugindump -nonrelocatable -defaultplatform QtDataVisualization 1.14'
-
-Module {
- dependencies: ["QtQuick 2.0"]
- Component {
- name: "QAbstractItemModel"
- prototype: "QObject"
- exports: ["QtDataVisualization/AbstractItemModel 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Enum {
- name: "LayoutChangeHint"
- values: {
- "NoLayoutChangeHint": 0,
- "VerticalSortHint": 1,
- "HorizontalSortHint": 2
- }
- }
- Enum {
- name: "CheckIndexOption"
- values: {
- "NoOption": 0,
- "IndexIsValid": 1,
- "DoNotUseParent": 2,
- "ParentIsInvalid": 4
- }
- }
- Signal {
- name: "dataChanged"
- Parameter { name: "topLeft"; type: "QModelIndex" }
- Parameter { name: "bottomRight"; type: "QModelIndex" }
- Parameter { name: "roles"; type: "QVector<int>" }
- }
- Signal {
- name: "dataChanged"
- Parameter { name: "topLeft"; type: "QModelIndex" }
- Parameter { name: "bottomRight"; type: "QModelIndex" }
- }
- Signal {
- name: "headerDataChanged"
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "layoutChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
- }
- Signal {
- name: "layoutChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- }
- Signal { name: "layoutChanged" }
- Signal {
- name: "layoutAboutToBeChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
- }
- Signal {
- name: "layoutAboutToBeChanged"
- Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
- }
- Signal { name: "layoutAboutToBeChanged" }
- Signal {
- name: "rowsAboutToBeInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsAboutToBeRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "rowsRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsInserted"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal {
- name: "columnsRemoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "first"; type: "int" }
- Parameter { name: "last"; type: "int" }
- }
- Signal { name: "modelAboutToBeReset" }
- Signal { name: "modelReset" }
- Signal {
- name: "rowsAboutToBeMoved"
- Parameter { name: "sourceParent"; type: "QModelIndex" }
- Parameter { name: "sourceStart"; type: "int" }
- Parameter { name: "sourceEnd"; type: "int" }
- Parameter { name: "destinationParent"; type: "QModelIndex" }
- Parameter { name: "destinationRow"; type: "int" }
- }
- Signal {
- name: "rowsMoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "start"; type: "int" }
- Parameter { name: "end"; type: "int" }
- Parameter { name: "destination"; type: "QModelIndex" }
- Parameter { name: "row"; type: "int" }
- }
- Signal {
- name: "columnsAboutToBeMoved"
- Parameter { name: "sourceParent"; type: "QModelIndex" }
- Parameter { name: "sourceStart"; type: "int" }
- Parameter { name: "sourceEnd"; type: "int" }
- Parameter { name: "destinationParent"; type: "QModelIndex" }
- Parameter { name: "destinationColumn"; type: "int" }
- }
- Signal {
- name: "columnsMoved"
- Parameter { name: "parent"; type: "QModelIndex" }
- Parameter { name: "start"; type: "int" }
- Parameter { name: "end"; type: "int" }
- Parameter { name: "destination"; type: "QModelIndex" }
- Parameter { name: "column"; type: "int" }
- }
- Method { name: "submit"; type: "bool" }
- Method { name: "revert" }
- Method {
- name: "hasIndex"
- type: "bool"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "hasIndex"
- type: "bool"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- }
- Method {
- name: "index"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "index"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- }
- Method {
- name: "parent"
- type: "QModelIndex"
- Parameter { name: "child"; type: "QModelIndex" }
- }
- Method {
- name: "sibling"
- type: "QModelIndex"
- Parameter { name: "row"; type: "int" }
- Parameter { name: "column"; type: "int" }
- Parameter { name: "idx"; type: "QModelIndex" }
- }
- Method {
- name: "rowCount"
- type: "int"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "rowCount"; type: "int" }
- Method {
- name: "columnCount"
- type: "int"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "columnCount"; type: "int" }
- Method {
- name: "hasChildren"
- type: "bool"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method { name: "hasChildren"; type: "bool" }
- Method {
- name: "data"
- type: "QVariant"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "data"
- type: "QVariant"
- Parameter { name: "index"; type: "QModelIndex" }
- }
- Method {
- name: "setData"
- type: "bool"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "setData"
- type: "bool"
- Parameter { name: "index"; type: "QModelIndex" }
- Parameter { name: "value"; type: "QVariant" }
- }
- Method {
- name: "headerData"
- type: "QVariant"
- Parameter { name: "section"; type: "int" }
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- Parameter { name: "role"; type: "int" }
- }
- Method {
- name: "headerData"
- type: "QVariant"
- Parameter { name: "section"; type: "int" }
- Parameter { name: "orientation"; type: "Qt::Orientation" }
- }
- Method {
- name: "fetchMore"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "canFetchMore"
- type: "bool"
- Parameter { name: "parent"; type: "QModelIndex" }
- }
- Method {
- name: "flags"
- type: "Qt::ItemFlags"
- Parameter { name: "index"; type: "QModelIndex" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "hits"; type: "int" }
- Parameter { name: "flags"; type: "Qt::MatchFlags" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- Parameter { name: "hits"; type: "int" }
- }
- Method {
- name: "match"
- type: "QModelIndexList"
- Parameter { name: "start"; type: "QModelIndex" }
- Parameter { name: "role"; type: "int" }
- Parameter { name: "value"; type: "QVariant" }
- }
- }
- Component {
- name: "QtDataVisualization::AbstractDeclarative"
- defaultProperty: "data"
- prototype: "QQuickItem"
- exports: [
- "QtDataVisualization/AbstractGraph3D 1.0",
- "QtDataVisualization/AbstractGraph3D 1.1",
- "QtDataVisualization/AbstractGraph3D 1.2"
- ]
- isCreatable: false
- exportMetaObjectRevisions: [0, 1, 2]
- Enum {
- name: "SelectionFlag"
- values: {
- "SelectionNone": 0,
- "SelectionItem": 1,
- "SelectionRow": 2,
- "SelectionItemAndRow": 3,
- "SelectionColumn": 4,
- "SelectionItemAndColumn": 5,
- "SelectionRowAndColumn": 6,
- "SelectionItemRowAndColumn": 7,
- "SelectionSlice": 8,
- "SelectionMultiSeries": 16
- }
- }
- Enum {
- name: "SelectionFlags"
- values: {
- "SelectionNone": 0,
- "SelectionItem": 1,
- "SelectionRow": 2,
- "SelectionItemAndRow": 3,
- "SelectionColumn": 4,
- "SelectionItemAndColumn": 5,
- "SelectionRowAndColumn": 6,
- "SelectionItemRowAndColumn": 7,
- "SelectionSlice": 8,
- "SelectionMultiSeries": 16
- }
- }
- Enum {
- name: "ShadowQuality"
- values: {
- "ShadowQualityNone": 0,
- "ShadowQualityLow": 1,
- "ShadowQualityMedium": 2,
- "ShadowQualityHigh": 3,
- "ShadowQualitySoftLow": 4,
- "ShadowQualitySoftMedium": 5,
- "ShadowQualitySoftHigh": 6
- }
- }
- Enum {
- name: "ElementType"
- values: {
- "ElementNone": 0,
- "ElementSeries": 1,
- "ElementAxisXLabel": 2,
- "ElementAxisYLabel": 3,
- "ElementAxisZLabel": 4,
- "ElementCustomItem": 5
- }
- }
- Enum {
- name: "RenderingMode"
- values: {
- "RenderDirectToBackground": 0,
- "RenderDirectToBackground_NoClear": 1,
- "RenderIndirect": 2
- }
- }
- Enum {
- name: "OptimizationHint"
- values: {
- "OptimizationDefault": 0,
- "OptimizationStatic": 1
- }
- }
- Enum {
- name: "OptimizationHints"
- values: {
- "OptimizationDefault": 0,
- "OptimizationStatic": 1
- }
- }
- Property { name: "selectionMode"; type: "SelectionFlags" }
- Property { name: "shadowQuality"; type: "ShadowQuality" }
- Property { name: "shadowsSupported"; type: "bool"; isReadonly: true }
- Property { name: "msaaSamples"; type: "int" }
- Property { name: "scene"; type: "Declarative3DScene"; isReadonly: true; isPointer: true }
- Property { name: "inputHandler"; type: "QAbstract3DInputHandler"; isPointer: true }
- Property { name: "theme"; type: "Q3DTheme"; isPointer: true }
- Property { name: "renderingMode"; type: "RenderingMode" }
- Property { name: "measureFps"; revision: 1; type: "bool" }
- Property { name: "currentFps"; revision: 1; type: "double"; isReadonly: true }
- Property {
- name: "customItemList"
- revision: 1
- type: "QCustom3DItem"
- isList: true
- isReadonly: true
- }
- Property { name: "orthoProjection"; revision: 1; type: "bool" }
- Property { name: "selectedElement"; revision: 1; type: "ElementType"; isReadonly: true }
- Property { name: "aspectRatio"; revision: 1; type: "double" }
- Property { name: "optimizationHints"; revision: 1; type: "OptimizationHints" }
- Property { name: "polar"; revision: 2; type: "bool" }
- Property { name: "radialLabelOffset"; revision: 2; type: "float" }
- Property { name: "horizontalAspectRatio"; revision: 2; type: "double" }
- Property { name: "reflection"; revision: 2; type: "bool" }
- Property { name: "reflectivity"; revision: 2; type: "double" }
- Property { name: "locale"; revision: 2; type: "QLocale" }
- Property { name: "queriedGraphPosition"; revision: 2; type: "QVector3D"; isReadonly: true }
- Property { name: "margin"; revision: 2; type: "double" }
- Signal {
- name: "selectionModeChanged"
- Parameter { name: "mode"; type: "AbstractDeclarative::SelectionFlags" }
- }
- Signal {
- name: "shadowQualityChanged"
- Parameter { name: "quality"; type: "AbstractDeclarative::ShadowQuality" }
- }
- Signal {
- name: "shadowsSupportedChanged"
- Parameter { name: "supported"; type: "bool" }
- }
- Signal {
- name: "msaaSamplesChanged"
- Parameter { name: "samples"; type: "int" }
- }
- Signal {
- name: "sceneChanged"
- Parameter { name: "scene"; type: "Q3DScene"; isPointer: true }
- }
- Signal {
- name: "inputHandlerChanged"
- Parameter { name: "inputHandler"; type: "QAbstract3DInputHandler"; isPointer: true }
- }
- Signal {
- name: "themeChanged"
- Parameter { name: "theme"; type: "Q3DTheme"; isPointer: true }
- }
- Signal {
- name: "renderingModeChanged"
- Parameter { name: "mode"; type: "AbstractDeclarative::RenderingMode" }
- }
- Signal {
- name: "measureFpsChanged"
- revision: 1
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "currentFpsChanged"
- revision: 1
- Parameter { name: "fps"; type: "double" }
- }
- Signal {
- name: "selectedElementChanged"
- revision: 1
- Parameter { name: "type"; type: "AbstractDeclarative::ElementType" }
- }
- Signal {
- name: "orthoProjectionChanged"
- revision: 1
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "aspectRatioChanged"
- revision: 1
- Parameter { name: "ratio"; type: "double" }
- }
- Signal {
- name: "optimizationHintsChanged"
- revision: 1
- Parameter { name: "hints"; type: "AbstractDeclarative::OptimizationHints" }
- }
- Signal {
- name: "polarChanged"
- revision: 2
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "radialLabelOffsetChanged"
- revision: 2
- Parameter { name: "offset"; type: "float" }
- }
- Signal {
- name: "horizontalAspectRatioChanged"
- revision: 2
- Parameter { name: "ratio"; type: "double" }
- }
- Signal {
- name: "reflectionChanged"
- revision: 2
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "reflectivityChanged"
- revision: 2
- Parameter { name: "reflectivity"; type: "double" }
- }
- Signal {
- name: "localeChanged"
- revision: 2
- Parameter { name: "locale"; type: "QLocale" }
- }
- Signal {
- name: "queriedGraphPositionChanged"
- revision: 2
- Parameter { name: "data"; type: "QVector3D" }
- }
- Signal {
- name: "marginChanged"
- revision: 2
- Parameter { name: "margin"; type: "double" }
- }
- Method {
- name: "handleAxisXChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisYChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisZChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "windowDestroyed"
- Parameter { name: "obj"; type: "QObject"; isPointer: true }
- }
- Method { name: "destroyContext" }
- Method { name: "clearSelection" }
- Method {
- name: "addCustomItem"
- revision: 1
- type: "int"
- Parameter { name: "item"; type: "QCustom3DItem"; isPointer: true }
- }
- Method { name: "removeCustomItems"; revision: 1 }
- Method {
- name: "removeCustomItem"
- revision: 1
- Parameter { name: "item"; type: "QCustom3DItem"; isPointer: true }
- }
- Method {
- name: "removeCustomItemAt"
- revision: 1
- Parameter { name: "position"; type: "QVector3D" }
- }
- Method {
- name: "releaseCustomItem"
- revision: 1
- Parameter { name: "item"; type: "QCustom3DItem"; isPointer: true }
- }
- Method { name: "selectedLabelIndex"; revision: 1; type: "int" }
- Method { name: "selectedAxis"; revision: 1; type: "QAbstract3DAxis*" }
- Method { name: "selectedCustomItemIndex"; revision: 1; type: "int" }
- Method { name: "selectedCustomItem"; revision: 1; type: "QCustom3DItem*" }
- }
- Component {
- name: "QtDataVisualization::ColorGradient"
- defaultProperty: "stops"
- prototype: "QObject"
- exports: ["QtDataVisualization/ColorGradient 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "stops"; type: "ColorGradientStop"; isList: true; isReadonly: true }
- Signal { name: "updated" }
- }
- Component {
- name: "QtDataVisualization::ColorGradientStop"
- prototype: "QObject"
- exports: ["QtDataVisualization/ColorGradientStop 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "position"; type: "double" }
- Property { name: "color"; type: "QColor" }
- Signal {
- name: "positionChanged"
- Parameter { name: "position"; type: "double" }
- }
- Signal {
- name: "colorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- }
- Component {
- name: "QtDataVisualization::Declarative3DScene"
- prototype: "QtDataVisualization::Q3DScene"
- exports: [
- "QtDataVisualization/Scene3D 1.0",
- "QtDataVisualization/Scene3D 1.2"
- ]
- isCreatable: false
- exportMetaObjectRevisions: [0, 1]
- Property { name: "selectionQueryPosition"; type: "QPointF" }
- Property { name: "invalidSelectionPoint"; type: "QPoint"; isReadonly: true }
- Signal {
- name: "selectionQueryPositionChanged"
- Parameter { name: "position"; type: "QPointF" }
- }
- }
- Component {
- name: "QtDataVisualization::DeclarativeBar3DSeries"
- defaultProperty: "seriesChildren"
- prototype: "QtDataVisualization::QBar3DSeries"
- exports: ["QtDataVisualization/Bar3DSeries 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "seriesChildren"; type: "QObject"; isList: true; isReadonly: true }
- Property { name: "selectedBar"; type: "QPointF" }
- Property { name: "invalidSelectionPosition"; type: "QPointF"; isReadonly: true }
- Property { name: "baseGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "singleHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "multiHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Signal {
- name: "selectedBarChanged"
- Parameter { name: "position"; type: "QPointF" }
- }
- Signal {
- name: "baseGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Method { name: "handleBaseGradientUpdate" }
- Method { name: "handleSingleHighlightGradientUpdate" }
- Method { name: "handleMultiHighlightGradientUpdate" }
- }
- Component {
- name: "QtDataVisualization::DeclarativeBars"
- defaultProperty: "seriesList"
- prototype: "QtDataVisualization::AbstractDeclarative"
- exports: [
- "QtDataVisualization/Bars3D 1.0",
- "QtDataVisualization/Bars3D 1.2"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "rowAxis"; type: "QCategory3DAxis"; isPointer: true }
- Property { name: "valueAxis"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "columnAxis"; type: "QCategory3DAxis"; isPointer: true }
- Property { name: "multiSeriesUniform"; type: "bool" }
- Property { name: "barThickness"; type: "float" }
- Property { name: "barSpacing"; type: "QSizeF" }
- Property { name: "barSpacingRelative"; type: "bool" }
- Property { name: "seriesList"; type: "QBar3DSeries"; isList: true; isReadonly: true }
- Property { name: "selectedSeries"; type: "QBar3DSeries"; isReadonly: true; isPointer: true }
- Property { name: "primarySeries"; type: "QBar3DSeries"; isPointer: true }
- Property { name: "floorLevel"; revision: 1; type: "float" }
- Signal {
- name: "rowAxisChanged"
- Parameter { name: "axis"; type: "QCategory3DAxis"; isPointer: true }
- }
- Signal {
- name: "valueAxisChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "columnAxisChanged"
- Parameter { name: "axis"; type: "QCategory3DAxis"; isPointer: true }
- }
- Signal {
- name: "multiSeriesUniformChanged"
- Parameter { name: "uniform"; type: "bool" }
- }
- Signal {
- name: "barThicknessChanged"
- Parameter { name: "thicknessRatio"; type: "float" }
- }
- Signal {
- name: "barSpacingChanged"
- Parameter { name: "spacing"; type: "QSizeF" }
- }
- Signal {
- name: "barSpacingRelativeChanged"
- Parameter { name: "relative"; type: "bool" }
- }
- Signal {
- name: "meshFileNameChanged"
- Parameter { name: "filename"; type: "string" }
- }
- Signal {
- name: "primarySeriesChanged"
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- Signal {
- name: "selectedSeriesChanged"
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- Signal {
- name: "floorLevelChanged"
- revision: 1
- Parameter { name: "level"; type: "float" }
- }
- Method {
- name: "handleAxisXChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisYChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisZChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "addSeries"
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- Method {
- name: "removeSeries"
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- Method {
- name: "insertSeries"
- Parameter { name: "index"; type: "int" }
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::DeclarativeColor"
- prototype: "QObject"
- exports: ["QtDataVisualization/ThemeColor 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "color"; type: "QColor" }
- Signal {
- name: "colorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- }
- Component {
- name: "QtDataVisualization::DeclarativeScatter"
- defaultProperty: "seriesList"
- prototype: "QtDataVisualization::AbstractDeclarative"
- exports: ["QtDataVisualization/Scatter3D 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "axisX"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "axisY"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "axisZ"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "selectedSeries"; type: "QScatter3DSeries"; isReadonly: true; isPointer: true }
- Property { name: "seriesList"; type: "QScatter3DSeries"; isList: true; isReadonly: true }
- Signal {
- name: "axisXChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "axisYChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "axisZChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "selectedSeriesChanged"
- Parameter { name: "series"; type: "QScatter3DSeries"; isPointer: true }
- }
- Method {
- name: "handleAxisXChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisYChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisZChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "addSeries"
- Parameter { name: "series"; type: "QScatter3DSeries"; isPointer: true }
- }
- Method {
- name: "removeSeries"
- Parameter { name: "series"; type: "QScatter3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::DeclarativeScatter3DSeries"
- defaultProperty: "seriesChildren"
- prototype: "QtDataVisualization::QScatter3DSeries"
- exports: ["QtDataVisualization/Scatter3DSeries 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "seriesChildren"; type: "QObject"; isList: true; isReadonly: true }
- Property { name: "baseGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "singleHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "multiHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "invalidSelectionIndex"; type: "int"; isReadonly: true }
- Signal {
- name: "baseGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Method { name: "handleBaseGradientUpdate" }
- Method { name: "handleSingleHighlightGradientUpdate" }
- Method { name: "handleMultiHighlightGradientUpdate" }
- }
- Component {
- name: "QtDataVisualization::DeclarativeSurface"
- defaultProperty: "seriesList"
- prototype: "QtDataVisualization::AbstractDeclarative"
- exports: [
- "QtDataVisualization/Surface3D 1.0",
- "QtDataVisualization/Surface3D 1.2"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "axisX"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "axisY"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "axisZ"; type: "QValue3DAxis"; isPointer: true }
- Property { name: "selectedSeries"; type: "QSurface3DSeries"; isReadonly: true; isPointer: true }
- Property { name: "seriesList"; type: "QSurface3DSeries"; isList: true; isReadonly: true }
- Property { name: "flipHorizontalGrid"; revision: 1; type: "bool" }
- Signal {
- name: "axisXChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "axisYChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "axisZChanged"
- Parameter { name: "axis"; type: "QValue3DAxis"; isPointer: true }
- }
- Signal {
- name: "selectedSeriesChanged"
- Parameter { name: "series"; type: "QSurface3DSeries"; isPointer: true }
- }
- Signal {
- name: "flipHorizontalGridChanged"
- revision: 1
- Parameter { name: "flip"; type: "bool" }
- }
- Method {
- name: "handleAxisXChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisYChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "handleAxisZChanged"
- Parameter { name: "axis"; type: "QAbstract3DAxis"; isPointer: true }
- }
- Method {
- name: "addSeries"
- Parameter { name: "series"; type: "QSurface3DSeries"; isPointer: true }
- }
- Method {
- name: "removeSeries"
- Parameter { name: "series"; type: "QSurface3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::DeclarativeSurface3DSeries"
- defaultProperty: "seriesChildren"
- prototype: "QtDataVisualization::QSurface3DSeries"
- exports: ["QtDataVisualization/Surface3DSeries 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "seriesChildren"; type: "QObject"; isList: true; isReadonly: true }
- Property { name: "selectedPoint"; type: "QPointF" }
- Property { name: "invalidSelectionPosition"; type: "QPointF"; isReadonly: true }
- Property { name: "baseGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "singleHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "multiHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Signal {
- name: "selectedPointChanged"
- Parameter { name: "position"; type: "QPointF" }
- }
- Signal {
- name: "baseGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Method { name: "handleBaseGradientUpdate" }
- Method { name: "handleSingleHighlightGradientUpdate" }
- Method { name: "handleMultiHighlightGradientUpdate" }
- }
- Component {
- name: "QtDataVisualization::DeclarativeTheme3D"
- defaultProperty: "themeChildren"
- prototype: "QtDataVisualization::Q3DTheme"
- exports: ["QtDataVisualization/Theme3D 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "themeChildren"; type: "QObject"; isList: true; isReadonly: true }
- Property { name: "baseColors"; type: "DeclarativeColor"; isList: true; isReadonly: true }
- Property { name: "baseGradients"; type: "ColorGradient"; isList: true; isReadonly: true }
- Property { name: "singleHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Property { name: "multiHighlightGradient"; type: "ColorGradient"; isPointer: true }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "ColorGradient"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DCamera"
- prototype: "QtDataVisualization::Q3DObject"
- exports: [
- "QtDataVisualization/Camera3D 1.0",
- "QtDataVisualization/Camera3D 1.2"
- ]
- exportMetaObjectRevisions: [0, 1]
- Enum {
- name: "CameraPreset"
- values: {
- "CameraPresetNone": -1,
- "CameraPresetFrontLow": 0,
- "CameraPresetFront": 1,
- "CameraPresetFrontHigh": 2,
- "CameraPresetLeftLow": 3,
- "CameraPresetLeft": 4,
- "CameraPresetLeftHigh": 5,
- "CameraPresetRightLow": 6,
- "CameraPresetRight": 7,
- "CameraPresetRightHigh": 8,
- "CameraPresetBehindLow": 9,
- "CameraPresetBehind": 10,
- "CameraPresetBehindHigh": 11,
- "CameraPresetIsometricLeft": 12,
- "CameraPresetIsometricLeftHigh": 13,
- "CameraPresetIsometricRight": 14,
- "CameraPresetIsometricRightHigh": 15,
- "CameraPresetDirectlyAbove": 16,
- "CameraPresetDirectlyAboveCW45": 17,
- "CameraPresetDirectlyAboveCCW45": 18,
- "CameraPresetFrontBelow": 19,
- "CameraPresetLeftBelow": 20,
- "CameraPresetRightBelow": 21,
- "CameraPresetBehindBelow": 22,
- "CameraPresetDirectlyBelow": 23
- }
- }
- Property { name: "xRotation"; type: "float" }
- Property { name: "yRotation"; type: "float" }
- Property { name: "zoomLevel"; type: "float" }
- Property { name: "cameraPreset"; type: "CameraPreset" }
- Property { name: "wrapXRotation"; type: "bool" }
- Property { name: "wrapYRotation"; type: "bool" }
- Property { name: "target"; revision: 1; type: "QVector3D" }
- Property { name: "minZoomLevel"; revision: 1; type: "float" }
- Property { name: "maxZoomLevel"; revision: 1; type: "float" }
- Signal {
- name: "xRotationChanged"
- Parameter { name: "rotation"; type: "float" }
- }
- Signal {
- name: "yRotationChanged"
- Parameter { name: "rotation"; type: "float" }
- }
- Signal {
- name: "zoomLevelChanged"
- Parameter { name: "zoomLevel"; type: "float" }
- }
- Signal {
- name: "cameraPresetChanged"
- Parameter { name: "preset"; type: "Q3DCamera::CameraPreset" }
- }
- Signal {
- name: "wrapXRotationChanged"
- Parameter { name: "isEnabled"; type: "bool" }
- }
- Signal {
- name: "wrapYRotationChanged"
- Parameter { name: "isEnabled"; type: "bool" }
- }
- Signal {
- name: "targetChanged"
- revision: 1
- Parameter { name: "target"; type: "QVector3D" }
- }
- Signal {
- name: "minZoomLevelChanged"
- revision: 1
- Parameter { name: "zoomLevel"; type: "float" }
- }
- Signal {
- name: "maxZoomLevelChanged"
- revision: 1
- Parameter { name: "zoomLevel"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DInputHandler"
- prototype: "QtDataVisualization::QAbstract3DInputHandler"
- exports: ["QtDataVisualization/InputHandler3D 1.2"]
- exportMetaObjectRevisions: [0]
- Property { name: "rotationEnabled"; type: "bool" }
- Property { name: "zoomEnabled"; type: "bool" }
- Property { name: "selectionEnabled"; type: "bool" }
- Property { name: "zoomAtTargetEnabled"; type: "bool" }
- Signal {
- name: "rotationEnabledChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "zoomEnabledChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "selectionEnabledChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "zoomAtTargetEnabledChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DLight"
- prototype: "QtDataVisualization::Q3DObject"
- exports: [
- "QtDataVisualization/Light3D 1.0",
- "QtDataVisualization/Light3D 1.3"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "autoPosition"; revision: 1; type: "bool" }
- Signal {
- name: "autoPositionChanged"
- revision: 1
- Parameter { name: "autoPosition"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DObject"
- prototype: "QObject"
- exports: ["QtDataVisualization/Object3D 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "parentScene"; type: "Q3DScene"; isReadonly: true; isPointer: true }
- Property { name: "position"; type: "QVector3D" }
- Signal {
- name: "positionChanged"
- Parameter { name: "position"; type: "QVector3D" }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DScene"
- prototype: "QObject"
- Property { name: "viewport"; type: "QRect"; isReadonly: true }
- Property { name: "primarySubViewport"; type: "QRect" }
- Property { name: "secondarySubViewport"; type: "QRect" }
- Property { name: "selectionQueryPosition"; type: "QPoint" }
- Property { name: "secondarySubviewOnTop"; type: "bool" }
- Property { name: "slicingActive"; type: "bool" }
- Property { name: "activeCamera"; type: "Q3DCamera"; isPointer: true }
- Property { name: "activeLight"; type: "Q3DLight"; isPointer: true }
- Property { name: "devicePixelRatio"; type: "float" }
- Property { name: "graphPositionQuery"; revision: 1; type: "QPoint" }
- Signal {
- name: "viewportChanged"
- Parameter { name: "viewport"; type: "QRect" }
- }
- Signal {
- name: "primarySubViewportChanged"
- Parameter { name: "subViewport"; type: "QRect" }
- }
- Signal {
- name: "secondarySubViewportChanged"
- Parameter { name: "subViewport"; type: "QRect" }
- }
- Signal {
- name: "secondarySubviewOnTopChanged"
- Parameter { name: "isSecondaryOnTop"; type: "bool" }
- }
- Signal {
- name: "slicingActiveChanged"
- Parameter { name: "isSlicingActive"; type: "bool" }
- }
- Signal {
- name: "activeCameraChanged"
- Parameter { name: "camera"; type: "Q3DCamera"; isPointer: true }
- }
- Signal {
- name: "activeLightChanged"
- Parameter { name: "light"; type: "Q3DLight"; isPointer: true }
- }
- Signal {
- name: "devicePixelRatioChanged"
- Parameter { name: "pixelRatio"; type: "float" }
- }
- Signal {
- name: "selectionQueryPositionChanged"
- Parameter { name: "position"; type: "QPoint" }
- }
- Signal {
- name: "graphPositionQueryChanged"
- revision: 1
- Parameter { name: "position"; type: "QPoint" }
- }
- }
- Component {
- name: "QtDataVisualization::Q3DTheme"
- prototype: "QObject"
- exports: ["QtDataVisualization/Q3DTheme 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Enum {
- name: "ColorStyle"
- values: {
- "ColorStyleUniform": 0,
- "ColorStyleObjectGradient": 1,
- "ColorStyleRangeGradient": 2
- }
- }
- Enum {
- name: "Theme"
- values: {
- "ThemeQt": 0,
- "ThemePrimaryColors": 1,
- "ThemeDigia": 2,
- "ThemeStoneMoss": 3,
- "ThemeArmyBlue": 4,
- "ThemeRetro": 5,
- "ThemeEbony": 6,
- "ThemeIsabelle": 7,
- "ThemeUserDefined": 8
- }
- }
- Property { name: "type"; type: "Theme" }
- Property { name: "baseColors"; type: "QList<QColor>" }
- Property { name: "backgroundColor"; type: "QColor" }
- Property { name: "windowColor"; type: "QColor" }
- Property { name: "labelTextColor"; type: "QColor" }
- Property { name: "labelBackgroundColor"; type: "QColor" }
- Property { name: "gridLineColor"; type: "QColor" }
- Property { name: "singleHighlightColor"; type: "QColor" }
- Property { name: "multiHighlightColor"; type: "QColor" }
- Property { name: "lightColor"; type: "QColor" }
- Property { name: "baseGradients"; type: "QList<QLinearGradient>" }
- Property { name: "singleHighlightGradient"; type: "QLinearGradient" }
- Property { name: "multiHighlightGradient"; type: "QLinearGradient" }
- Property { name: "lightStrength"; type: "float" }
- Property { name: "ambientLightStrength"; type: "float" }
- Property { name: "highlightLightStrength"; type: "float" }
- Property { name: "labelBorderEnabled"; type: "bool" }
- Property { name: "font"; type: "QFont" }
- Property { name: "backgroundEnabled"; type: "bool" }
- Property { name: "gridEnabled"; type: "bool" }
- Property { name: "labelBackgroundEnabled"; type: "bool" }
- Property { name: "colorStyle"; type: "ColorStyle" }
- Signal {
- name: "typeChanged"
- Parameter { name: "themeType"; type: "Q3DTheme::Theme" }
- }
- Signal {
- name: "baseColorsChanged"
- Parameter { name: "colors"; type: "QList<QColor>" }
- }
- Signal {
- name: "backgroundColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "windowColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "labelTextColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "labelBackgroundColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "gridLineColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "singleHighlightColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "multiHighlightColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "lightColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "baseGradientsChanged"
- Parameter { name: "gradients"; type: "QList<QLinearGradient>" }
- }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "QLinearGradient" }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "QLinearGradient" }
- }
- Signal {
- name: "lightStrengthChanged"
- Parameter { name: "strength"; type: "float" }
- }
- Signal {
- name: "ambientLightStrengthChanged"
- Parameter { name: "strength"; type: "float" }
- }
- Signal {
- name: "highlightLightStrengthChanged"
- Parameter { name: "strength"; type: "float" }
- }
- Signal {
- name: "labelBorderEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "fontChanged"
- Parameter { name: "font"; type: "QFont" }
- }
- Signal {
- name: "backgroundEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "gridEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "labelBackgroundEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "colorStyleChanged"
- Parameter { name: "style"; type: "Q3DTheme::ColorStyle" }
- }
- }
- Component {
- name: "QtDataVisualization::QAbstract3DAxis"
- prototype: "QObject"
- exports: [
- "QtDataVisualization/AbstractAxis3D 1.0",
- "QtDataVisualization/AbstractAxis3D 1.1"
- ]
- isCreatable: false
- exportMetaObjectRevisions: [0, 1]
- Enum {
- name: "AxisOrientation"
- values: {
- "AxisOrientationNone": 0,
- "AxisOrientationX": 1,
- "AxisOrientationY": 2,
- "AxisOrientationZ": 4
- }
- }
- Enum {
- name: "AxisType"
- values: {
- "AxisTypeNone": 0,
- "AxisTypeCategory": 1,
- "AxisTypeValue": 2
- }
- }
- Property { name: "title"; type: "string" }
- Property { name: "labels"; type: "QStringList" }
- Property { name: "orientation"; type: "AxisOrientation"; isReadonly: true }
- Property { name: "type"; type: "AxisType"; isReadonly: true }
- Property { name: "min"; type: "float" }
- Property { name: "max"; type: "float" }
- Property { name: "autoAdjustRange"; type: "bool" }
- Property { name: "labelAutoRotation"; revision: 1; type: "float" }
- Property { name: "titleVisible"; revision: 1; type: "bool" }
- Property { name: "titleFixed"; revision: 1; type: "bool" }
- Signal {
- name: "titleChanged"
- Parameter { name: "newTitle"; type: "string" }
- }
- Signal {
- name: "orientationChanged"
- Parameter { name: "orientation"; type: "QAbstract3DAxis::AxisOrientation" }
- }
- Signal {
- name: "minChanged"
- Parameter { name: "value"; type: "float" }
- }
- Signal {
- name: "maxChanged"
- Parameter { name: "value"; type: "float" }
- }
- Signal {
- name: "rangeChanged"
- Parameter { name: "min"; type: "float" }
- Parameter { name: "max"; type: "float" }
- }
- Signal {
- name: "autoAdjustRangeChanged"
- Parameter { name: "autoAdjust"; type: "bool" }
- }
- Signal {
- name: "labelAutoRotationChanged"
- revision: 1
- Parameter { name: "angle"; type: "float" }
- }
- Signal {
- name: "titleVisibilityChanged"
- revision: 1
- Parameter { name: "visible"; type: "bool" }
- }
- Signal {
- name: "titleFixedChanged"
- revision: 1
- Parameter { name: "fixed"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::QAbstract3DInputHandler"
- prototype: "QObject"
- exports: ["QtDataVisualization/AbstractInputHandler3D 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Enum {
- name: "InputView"
- values: {
- "InputViewNone": 0,
- "InputViewOnPrimary": 1,
- "InputViewOnSecondary": 2
- }
- }
- Property { name: "inputView"; type: "InputView" }
- Property { name: "inputPosition"; type: "QPoint" }
- Property { name: "scene"; type: "Q3DScene"; isPointer: true }
- Signal {
- name: "positionChanged"
- Parameter { name: "position"; type: "QPoint" }
- }
- Signal {
- name: "inputViewChanged"
- Parameter { name: "view"; type: "QAbstract3DInputHandler::InputView" }
- }
- Signal {
- name: "sceneChanged"
- Parameter { name: "scene"; type: "Q3DScene"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::QAbstract3DSeries"
- prototype: "QObject"
- exports: [
- "QtDataVisualization/Abstract3DSeries 1.0",
- "QtDataVisualization/Abstract3DSeries 1.1"
- ]
- isCreatable: false
- exportMetaObjectRevisions: [0, 1]
- Enum {
- name: "SeriesType"
- values: {
- "SeriesTypeNone": 0,
- "SeriesTypeBar": 1,
- "SeriesTypeScatter": 2,
- "SeriesTypeSurface": 4
- }
- }
- Enum {
- name: "Mesh"
- values: {
- "MeshUserDefined": 0,
- "MeshBar": 1,
- "MeshCube": 2,
- "MeshPyramid": 3,
- "MeshCone": 4,
- "MeshCylinder": 5,
- "MeshBevelBar": 6,
- "MeshBevelCube": 7,
- "MeshSphere": 8,
- "MeshMinimal": 9,
- "MeshArrow": 10,
- "MeshPoint": 11
- }
- }
- Property { name: "type"; type: "SeriesType"; isReadonly: true }
- Property { name: "itemLabelFormat"; type: "string" }
- Property { name: "visible"; type: "bool" }
- Property { name: "mesh"; type: "Mesh" }
- Property { name: "meshSmooth"; type: "bool" }
- Property { name: "meshRotation"; type: "QQuaternion" }
- Property { name: "userDefinedMesh"; type: "string" }
- Property { name: "colorStyle"; type: "QtDataVisualization::Q3DTheme::ColorStyle" }
- Property { name: "baseColor"; type: "QColor" }
- Property { name: "baseGradient"; type: "QLinearGradient" }
- Property { name: "singleHighlightColor"; type: "QColor" }
- Property { name: "singleHighlightGradient"; type: "QLinearGradient" }
- Property { name: "multiHighlightColor"; type: "QColor" }
- Property { name: "multiHighlightGradient"; type: "QLinearGradient" }
- Property { name: "name"; type: "string" }
- Property { name: "itemLabel"; revision: 1; type: "string"; isReadonly: true }
- Property { name: "itemLabelVisible"; revision: 1; type: "bool" }
- Signal {
- name: "itemLabelFormatChanged"
- Parameter { name: "format"; type: "string" }
- }
- Signal {
- name: "visibilityChanged"
- Parameter { name: "visible"; type: "bool" }
- }
- Signal {
- name: "meshChanged"
- Parameter { name: "mesh"; type: "QAbstract3DSeries::Mesh" }
- }
- Signal {
- name: "meshSmoothChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "meshRotationChanged"
- Parameter { name: "rotation"; type: "QQuaternion" }
- }
- Signal {
- name: "userDefinedMeshChanged"
- Parameter { name: "fileName"; type: "string" }
- }
- Signal {
- name: "colorStyleChanged"
- Parameter { name: "style"; type: "Q3DTheme::ColorStyle" }
- }
- Signal {
- name: "baseColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "baseGradientChanged"
- Parameter { name: "gradient"; type: "QLinearGradient" }
- }
- Signal {
- name: "singleHighlightColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "singleHighlightGradientChanged"
- Parameter { name: "gradient"; type: "QLinearGradient" }
- }
- Signal {
- name: "multiHighlightColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "multiHighlightGradientChanged"
- Parameter { name: "gradient"; type: "QLinearGradient" }
- }
- Signal {
- name: "nameChanged"
- Parameter { name: "name"; type: "string" }
- }
- Signal {
- name: "itemLabelChanged"
- revision: 1
- Parameter { name: "label"; type: "string" }
- }
- Signal {
- name: "itemLabelVisibilityChanged"
- revision: 1
- Parameter { name: "visible"; type: "bool" }
- }
- Method {
- name: "setMeshAxisAndAngle"
- Parameter { name: "axis"; type: "QVector3D" }
- Parameter { name: "angle"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::QAbstractDataProxy"
- prototype: "QObject"
- exports: ["QtDataVisualization/AbstractDataProxy 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Enum {
- name: "DataType"
- values: {
- "DataTypeNone": 0,
- "DataTypeBar": 1,
- "DataTypeScatter": 2,
- "DataTypeSurface": 4
- }
- }
- Property { name: "type"; type: "DataType"; isReadonly: true }
- }
- Component {
- name: "QtDataVisualization::QBar3DSeries"
- prototype: "QtDataVisualization::QAbstract3DSeries"
- exports: ["QtDataVisualization/QBar3DSeries 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "dataProxy"; type: "QBarDataProxy"; isPointer: true }
- Property { name: "selectedBar"; type: "QPoint" }
- Property { name: "meshAngle"; type: "float" }
- Signal {
- name: "dataProxyChanged"
- Parameter { name: "proxy"; type: "QBarDataProxy"; isPointer: true }
- }
- Signal {
- name: "selectedBarChanged"
- Parameter { name: "position"; type: "QPoint" }
- }
- Signal {
- name: "meshAngleChanged"
- Parameter { name: "angle"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::QBarDataProxy"
- prototype: "QtDataVisualization::QAbstractDataProxy"
- exports: ["QtDataVisualization/BarDataProxy 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "rowCount"; type: "int"; isReadonly: true }
- Property { name: "rowLabels"; type: "QStringList" }
- Property { name: "columnLabels"; type: "QStringList" }
- Property { name: "series"; type: "QBar3DSeries"; isReadonly: true; isPointer: true }
- Signal { name: "arrayReset" }
- Signal {
- name: "rowsAdded"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsChanged"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsRemoved"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsInserted"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemChanged"
- Parameter { name: "rowIndex"; type: "int" }
- Parameter { name: "columnIndex"; type: "int" }
- }
- Signal {
- name: "rowCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "seriesChanged"
- Parameter { name: "series"; type: "QBar3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::QCategory3DAxis"
- prototype: "QtDataVisualization::QAbstract3DAxis"
- exports: ["QtDataVisualization/CategoryAxis3D 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "labels"; type: "QStringList" }
- }
- Component {
- name: "QtDataVisualization::QCustom3DItem"
- prototype: "QObject"
- exports: [
- "QtDataVisualization/Custom3DItem 1.1",
- "QtDataVisualization/Custom3DItem 1.2"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "meshFile"; type: "string" }
- Property { name: "textureFile"; type: "string" }
- Property { name: "position"; type: "QVector3D" }
- Property { name: "positionAbsolute"; type: "bool" }
- Property { name: "scaling"; type: "QVector3D" }
- Property { name: "rotation"; type: "QQuaternion" }
- Property { name: "visible"; type: "bool" }
- Property { name: "shadowCasting"; type: "bool" }
- Property { name: "scalingAbsolute"; revision: 1; type: "bool" }
- Signal {
- name: "meshFileChanged"
- Parameter { name: "meshFile"; type: "string" }
- }
- Signal {
- name: "textureFileChanged"
- Parameter { name: "textureFile"; type: "string" }
- }
- Signal {
- name: "positionChanged"
- Parameter { name: "position"; type: "QVector3D" }
- }
- Signal {
- name: "positionAbsoluteChanged"
- Parameter { name: "positionAbsolute"; type: "bool" }
- }
- Signal {
- name: "scalingChanged"
- Parameter { name: "scaling"; type: "QVector3D" }
- }
- Signal {
- name: "rotationChanged"
- Parameter { name: "rotation"; type: "QQuaternion" }
- }
- Signal {
- name: "visibleChanged"
- Parameter { name: "visible"; type: "bool" }
- }
- Signal {
- name: "shadowCastingChanged"
- Parameter { name: "shadowCasting"; type: "bool" }
- }
- Signal {
- name: "scalingAbsoluteChanged"
- revision: 1
- Parameter { name: "scalingAbsolute"; type: "bool" }
- }
- Method {
- name: "setRotationAxisAndAngle"
- Parameter { name: "axis"; type: "QVector3D" }
- Parameter { name: "angle"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::QCustom3DLabel"
- prototype: "QtDataVisualization::QCustom3DItem"
- exports: ["QtDataVisualization/Custom3DLabel 1.1"]
- exportMetaObjectRevisions: [0]
- Property { name: "text"; type: "string" }
- Property { name: "font"; type: "QFont" }
- Property { name: "textColor"; type: "QColor" }
- Property { name: "backgroundColor"; type: "QColor" }
- Property { name: "borderEnabled"; type: "bool" }
- Property { name: "backgroundEnabled"; type: "bool" }
- Property { name: "facingCamera"; type: "bool" }
- Signal {
- name: "textChanged"
- Parameter { name: "text"; type: "string" }
- }
- Signal {
- name: "fontChanged"
- Parameter { name: "font"; type: "QFont" }
- }
- Signal {
- name: "textColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "backgroundColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "borderEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "backgroundEnabledChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "facingCameraChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::QCustom3DVolume"
- prototype: "QtDataVisualization::QCustom3DItem"
- exports: ["QtDataVisualization/Custom3DVolume 1.2"]
- exportMetaObjectRevisions: [0]
- Property { name: "textureWidth"; type: "int" }
- Property { name: "textureHeight"; type: "int" }
- Property { name: "textureDepth"; type: "int" }
- Property { name: "sliceIndexX"; type: "int" }
- Property { name: "sliceIndexY"; type: "int" }
- Property { name: "sliceIndexZ"; type: "int" }
- Property { name: "colorTable"; type: "QVector<QRgb>" }
- Property { name: "textureData"; type: "QVector<uchar>"; isPointer: true }
- Property { name: "alphaMultiplier"; type: "float" }
- Property { name: "preserveOpacity"; type: "bool" }
- Property { name: "useHighDefShader"; type: "bool" }
- Property { name: "drawSlices"; type: "bool" }
- Property { name: "drawSliceFrames"; type: "bool" }
- Property { name: "sliceFrameColor"; type: "QColor" }
- Property { name: "sliceFrameWidths"; type: "QVector3D" }
- Property { name: "sliceFrameGaps"; type: "QVector3D" }
- Property { name: "sliceFrameThicknesses"; type: "QVector3D" }
- Signal {
- name: "textureWidthChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "textureHeightChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "textureDepthChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "sliceIndexXChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "sliceIndexYChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "sliceIndexZChanged"
- Parameter { name: "value"; type: "int" }
- }
- Signal {
- name: "textureDataChanged"
- Parameter { name: "data"; type: "QVector<uchar>"; isPointer: true }
- }
- Signal {
- name: "textureFormatChanged"
- Parameter { name: "format"; type: "QImage::Format" }
- }
- Signal {
- name: "alphaMultiplierChanged"
- Parameter { name: "mult"; type: "float" }
- }
- Signal {
- name: "preserveOpacityChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "useHighDefShaderChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "drawSlicesChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "drawSliceFramesChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "sliceFrameColorChanged"
- Parameter { name: "color"; type: "QColor" }
- }
- Signal {
- name: "sliceFrameWidthsChanged"
- Parameter { name: "values"; type: "QVector3D" }
- }
- Signal {
- name: "sliceFrameGapsChanged"
- Parameter { name: "values"; type: "QVector3D" }
- }
- Signal {
- name: "sliceFrameThicknessesChanged"
- Parameter { name: "values"; type: "QVector3D" }
- }
- }
- Component {
- name: "QtDataVisualization::QHeightMapSurfaceDataProxy"
- prototype: "QtDataVisualization::QSurfaceDataProxy"
- exports: ["QtDataVisualization/HeightMapSurfaceDataProxy 1.0"]
- exportMetaObjectRevisions: [0]
- Property { name: "heightMap"; type: "QImage" }
- Property { name: "heightMapFile"; type: "string" }
- Property { name: "minXValue"; type: "float" }
- Property { name: "maxXValue"; type: "float" }
- Property { name: "minZValue"; type: "float" }
- Property { name: "maxZValue"; type: "float" }
- Signal {
- name: "heightMapChanged"
- Parameter { name: "image"; type: "QImage" }
- }
- Signal {
- name: "heightMapFileChanged"
- Parameter { name: "filename"; type: "string" }
- }
- Signal {
- name: "minXValueChanged"
- Parameter { name: "value"; type: "float" }
- }
- Signal {
- name: "maxXValueChanged"
- Parameter { name: "value"; type: "float" }
- }
- Signal {
- name: "minZValueChanged"
- Parameter { name: "value"; type: "float" }
- }
- Signal {
- name: "maxZValueChanged"
- Parameter { name: "value"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::QItemModelBarDataProxy"
- prototype: "QtDataVisualization::QBarDataProxy"
- exports: [
- "QtDataVisualization/ItemModelBarDataProxy 1.0",
- "QtDataVisualization/ItemModelBarDataProxy 1.1"
- ]
- exportMetaObjectRevisions: [0, 1]
- Enum {
- name: "MultiMatchBehavior"
- values: {
- "MMBFirst": 0,
- "MMBLast": 1,
- "MMBAverage": 2,
- "MMBCumulative": 3
- }
- }
- Property { name: "itemModel"; type: "QAbstractItemModel"; isPointer: true }
- Property { name: "rowRole"; type: "string" }
- Property { name: "columnRole"; type: "string" }
- Property { name: "valueRole"; type: "string" }
- Property { name: "rotationRole"; type: "string" }
- Property { name: "rowCategories"; type: "QStringList" }
- Property { name: "columnCategories"; type: "QStringList" }
- Property { name: "useModelCategories"; type: "bool" }
- Property { name: "autoRowCategories"; type: "bool" }
- Property { name: "autoColumnCategories"; type: "bool" }
- Property { name: "rowRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "columnRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "valueRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "rotationRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "rowRoleReplace"; revision: 1; type: "string" }
- Property { name: "columnRoleReplace"; revision: 1; type: "string" }
- Property { name: "valueRoleReplace"; revision: 1; type: "string" }
- Property { name: "rotationRoleReplace"; revision: 1; type: "string" }
- Property { name: "multiMatchBehavior"; revision: 1; type: "MultiMatchBehavior" }
- Signal {
- name: "itemModelChanged"
- Parameter { name: "itemModel"; type: "const QAbstractItemModel"; isPointer: true }
- }
- Signal {
- name: "rowRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "columnRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "valueRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "rotationRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "useModelCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "autoRowCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "autoColumnCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "rowRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "columnRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "valueRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "rotationRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "rowRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "columnRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "valueRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "rotationRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "multiMatchBehaviorChanged"
- revision: 1
- Parameter { name: "behavior"; type: "MultiMatchBehavior" }
- }
- Method {
- name: "rowCategoryIndex"
- type: "int"
- Parameter { name: "category"; type: "string" }
- }
- Method {
- name: "columnCategoryIndex"
- type: "int"
- Parameter { name: "category"; type: "string" }
- }
- }
- Component {
- name: "QtDataVisualization::QItemModelScatterDataProxy"
- prototype: "QtDataVisualization::QScatterDataProxy"
- exports: [
- "QtDataVisualization/ItemModelScatterDataProxy 1.0",
- "QtDataVisualization/ItemModelScatterDataProxy 1.1"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "itemModel"; type: "QAbstractItemModel"; isPointer: true }
- Property { name: "xPosRole"; type: "string" }
- Property { name: "yPosRole"; type: "string" }
- Property { name: "zPosRole"; type: "string" }
- Property { name: "rotationRole"; type: "string" }
- Property { name: "xPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "yPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "zPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "rotationRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "xPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "yPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "zPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "rotationRoleReplace"; revision: 1; type: "string" }
- Signal {
- name: "itemModelChanged"
- Parameter { name: "itemModel"; type: "const QAbstractItemModel"; isPointer: true }
- }
- Signal {
- name: "xPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "yPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "zPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "rotationRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "xPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "yPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "zPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "rotationRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "rotationRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "xPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "yPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "zPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- }
- Component {
- name: "QtDataVisualization::QItemModelSurfaceDataProxy"
- prototype: "QtDataVisualization::QSurfaceDataProxy"
- exports: [
- "QtDataVisualization/ItemModelSurfaceDataProxy 1.0",
- "QtDataVisualization/ItemModelSurfaceDataProxy 1.1"
- ]
- exportMetaObjectRevisions: [0, 1]
- Enum {
- name: "MultiMatchBehavior"
- values: {
- "MMBFirst": 0,
- "MMBLast": 1,
- "MMBAverage": 2,
- "MMBCumulativeY": 3
- }
- }
- Property { name: "itemModel"; type: "QAbstractItemModel"; isPointer: true }
- Property { name: "rowRole"; type: "string" }
- Property { name: "columnRole"; type: "string" }
- Property { name: "xPosRole"; type: "string" }
- Property { name: "yPosRole"; type: "string" }
- Property { name: "zPosRole"; type: "string" }
- Property { name: "rowCategories"; type: "QStringList" }
- Property { name: "columnCategories"; type: "QStringList" }
- Property { name: "useModelCategories"; type: "bool" }
- Property { name: "autoRowCategories"; type: "bool" }
- Property { name: "autoColumnCategories"; type: "bool" }
- Property { name: "rowRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "columnRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "xPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "yPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "zPosRolePattern"; revision: 1; type: "QRegExp" }
- Property { name: "rowRoleReplace"; revision: 1; type: "string" }
- Property { name: "columnRoleReplace"; revision: 1; type: "string" }
- Property { name: "xPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "yPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "zPosRoleReplace"; revision: 1; type: "string" }
- Property { name: "multiMatchBehavior"; revision: 1; type: "MultiMatchBehavior" }
- Signal {
- name: "itemModelChanged"
- Parameter { name: "itemModel"; type: "const QAbstractItemModel"; isPointer: true }
- }
- Signal {
- name: "rowRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "columnRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "xPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "yPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "zPosRoleChanged"
- Parameter { name: "role"; type: "string" }
- }
- Signal {
- name: "useModelCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "autoRowCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "autoColumnCategoriesChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "rowRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "columnRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "xPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "yPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "zPosRolePatternChanged"
- revision: 1
- Parameter { name: "pattern"; type: "QRegExp" }
- }
- Signal {
- name: "rowRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "columnRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "xPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "yPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "zPosRoleReplaceChanged"
- revision: 1
- Parameter { name: "replace"; type: "string" }
- }
- Signal {
- name: "multiMatchBehaviorChanged"
- revision: 1
- Parameter { name: "behavior"; type: "MultiMatchBehavior" }
- }
- Method {
- name: "rowCategoryIndex"
- type: "int"
- Parameter { name: "category"; type: "string" }
- }
- Method {
- name: "columnCategoryIndex"
- type: "int"
- Parameter { name: "category"; type: "string" }
- }
- }
- Component {
- name: "QtDataVisualization::QLogValue3DAxisFormatter"
- prototype: "QtDataVisualization::QValue3DAxisFormatter"
- exports: ["QtDataVisualization/LogValueAxis3DFormatter 1.1"]
- exportMetaObjectRevisions: [0]
- Property { name: "base"; type: "double" }
- Property { name: "autoSubGrid"; type: "bool" }
- Property { name: "showEdgeLabels"; type: "bool" }
- Signal {
- name: "baseChanged"
- Parameter { name: "base"; type: "double" }
- }
- Signal {
- name: "autoSubGridChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- Signal {
- name: "showEdgeLabelsChanged"
- Parameter { name: "enabled"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::QScatter3DSeries"
- prototype: "QtDataVisualization::QAbstract3DSeries"
- exports: ["QtDataVisualization/QScatter3DSeries 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "dataProxy"; type: "QScatterDataProxy"; isPointer: true }
- Property { name: "selectedItem"; type: "int" }
- Property { name: "itemSize"; type: "float" }
- Signal {
- name: "dataProxyChanged"
- Parameter { name: "proxy"; type: "QScatterDataProxy"; isPointer: true }
- }
- Signal {
- name: "selectedItemChanged"
- Parameter { name: "index"; type: "int" }
- }
- Signal {
- name: "itemSizeChanged"
- Parameter { name: "size"; type: "float" }
- }
- }
- Component {
- name: "QtDataVisualization::QScatterDataProxy"
- prototype: "QtDataVisualization::QAbstractDataProxy"
- exports: ["QtDataVisualization/ScatterDataProxy 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "itemCount"; type: "int"; isReadonly: true }
- Property { name: "series"; type: "QScatter3DSeries"; isReadonly: true; isPointer: true }
- Signal { name: "arrayReset" }
- Signal {
- name: "itemsAdded"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemsChanged"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemsRemoved"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemsInserted"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "seriesChanged"
- Parameter { name: "series"; type: "QScatter3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::QSurface3DSeries"
- prototype: "QtDataVisualization::QAbstract3DSeries"
- exports: ["QtDataVisualization/QSurface3DSeries 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Enum {
- name: "DrawFlag"
- values: {
- "DrawWireframe": 1,
- "DrawSurface": 2,
- "DrawSurfaceAndWireframe": 3
- }
- }
- Enum {
- name: "DrawFlags"
- values: {
- "DrawWireframe": 1,
- "DrawSurface": 2,
- "DrawSurfaceAndWireframe": 3
- }
- }
- Property { name: "dataProxy"; type: "QSurfaceDataProxy"; isPointer: true }
- Property { name: "selectedPoint"; type: "QPoint" }
- Property { name: "flatShadingEnabled"; type: "bool" }
- Property { name: "flatShadingSupported"; type: "bool"; isReadonly: true }
- Property { name: "drawMode"; type: "DrawFlags" }
- Property { name: "texture"; type: "QImage" }
- Property { name: "textureFile"; type: "string" }
- Signal {
- name: "dataProxyChanged"
- Parameter { name: "proxy"; type: "QSurfaceDataProxy"; isPointer: true }
- }
- Signal {
- name: "selectedPointChanged"
- Parameter { name: "position"; type: "QPoint" }
- }
- Signal {
- name: "flatShadingEnabledChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "flatShadingSupportedChanged"
- Parameter { name: "enable"; type: "bool" }
- }
- Signal {
- name: "drawModeChanged"
- Parameter { name: "mode"; type: "QSurface3DSeries::DrawFlags" }
- }
- Signal {
- name: "textureChanged"
- Parameter { name: "image"; type: "QImage" }
- }
- Signal {
- name: "textureFileChanged"
- Parameter { name: "filename"; type: "string" }
- }
- }
- Component {
- name: "QtDataVisualization::QSurfaceDataProxy"
- prototype: "QtDataVisualization::QAbstractDataProxy"
- exports: ["QtDataVisualization/SurfaceDataProxy 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "rowCount"; type: "int"; isReadonly: true }
- Property { name: "columnCount"; type: "int"; isReadonly: true }
- Property { name: "series"; type: "QSurface3DSeries"; isReadonly: true; isPointer: true }
- Signal { name: "arrayReset" }
- Signal {
- name: "rowsAdded"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsChanged"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsRemoved"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "rowsInserted"
- Parameter { name: "startIndex"; type: "int" }
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "itemChanged"
- Parameter { name: "rowIndex"; type: "int" }
- Parameter { name: "columnIndex"; type: "int" }
- }
- Signal {
- name: "rowCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "columnCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "seriesChanged"
- Parameter { name: "series"; type: "QSurface3DSeries"; isPointer: true }
- }
- }
- Component {
- name: "QtDataVisualization::QTouch3DInputHandler"
- prototype: "QtDataVisualization::Q3DInputHandler"
- exports: ["QtDataVisualization/TouchInputHandler3D 1.2"]
- exportMetaObjectRevisions: [0]
- }
- Component {
- name: "QtDataVisualization::QValue3DAxis"
- prototype: "QtDataVisualization::QAbstract3DAxis"
- exports: [
- "QtDataVisualization/ValueAxis3D 1.0",
- "QtDataVisualization/ValueAxis3D 1.1"
- ]
- exportMetaObjectRevisions: [0, 1]
- Property { name: "segmentCount"; type: "int" }
- Property { name: "subSegmentCount"; type: "int" }
- Property { name: "labelFormat"; type: "string" }
- Property { name: "formatter"; revision: 1; type: "QValue3DAxisFormatter"; isPointer: true }
- Property { name: "reversed"; revision: 1; type: "bool" }
- Signal {
- name: "segmentCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "subSegmentCountChanged"
- Parameter { name: "count"; type: "int" }
- }
- Signal {
- name: "labelFormatChanged"
- Parameter { name: "format"; type: "string" }
- }
- Signal {
- name: "formatterChanged"
- revision: 1
- Parameter { name: "formatter"; type: "QValue3DAxisFormatter"; isPointer: true }
- }
- Signal {
- name: "reversedChanged"
- revision: 1
- Parameter { name: "enable"; type: "bool" }
- }
- }
- Component {
- name: "QtDataVisualization::QValue3DAxisFormatter"
- prototype: "QObject"
- exports: ["QtDataVisualization/ValueAxis3DFormatter 1.1"]
- exportMetaObjectRevisions: [0]
- }
-}
diff --git a/src/datavisualizationqml2/qmldir b/src/datavisualizationqml2/qmldir
deleted file mode 100644
index bbd17868..00000000
--- a/src/datavisualizationqml2/qmldir
+++ /dev/null
@@ -1,4 +0,0 @@
-module QtDataVisualization
-plugin datavisualizationqml2
-classname QtDataVisualizationQml2Plugin
-
diff --git a/src/src.pro b/src/src.pro
deleted file mode 100644
index 3547745d..00000000
--- a/src/src.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-TEMPLATE = subdirs
-CONFIG += ordered
-SUBDIRS += datavisualization
-
-qtHaveModule(quick): SUBDIRS += datavisualizationqml2
diff --git a/sync.profile b/sync.profile
deleted file mode 100644
index 85328591..00000000
--- a/sync.profile
+++ /dev/null
@@ -1,17 +0,0 @@
-%modules = ( # path to module name map
- "QtDataVisualization" => "$basedir/src/datavisualization",
-);
-%moduleheaders = ( # restrict the module headers to those found in relative path
-);
-# Module dependencies.
-# Every module that is required to build this module should have one entry.
-# Each of the module version specifiers can take one of the following values:
-# - A specific Git revision.
-# - any git symbolic ref resolvable from the module's repository (e.g. "refs/heads/master" to track master branch)
-#
-%dependencies = (
- "qtbase" => "",
- "qtdeclarative" => "",
- "qtxmlpatterns" => "",
- "qtmultimedia" => "",
-);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 00000000..898ece00
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(QT_BUILD_STANDALONE_TESTS)
+endif()
+qt_build_tests()
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt
new file mode 100644
index 00000000..6f440eaa
--- /dev/null
+++ b/tests/auto/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(NOT ANDROID)
+ add_subdirectory(cpptest)
+endif()
+if(TARGET Qt::Quick AND NOT boot2qt)
+ add_subdirectory(qmltest)
+endif()
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
deleted file mode 100644
index 38f40591..00000000
--- a/tests/auto/auto.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = subdirs
-
-!android: SUBDIRS += cpptest
-
-qtHaveModule(quick): SUBDIRS += qmltest
-
-installed_cmake.depends = cmake
-
-# OpenGL support is needed for all qmltests but it's not available on boot2qt
-boot2qt: SUBDIRS -= qmltest
diff --git a/tests/auto/cpptest/CMakeLists.txt b/tests/auto/cpptest/CMakeLists.txt
new file mode 100644
index 00000000..939b32c9
--- /dev/null
+++ b/tests/auto/cpptest/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(q3dbars)
+add_subdirectory(q3dbars-proxy)
+add_subdirectory(q3dbars-modelproxy)
+add_subdirectory(q3dbars-series)
+add_subdirectory(q3dscatter)
+add_subdirectory(q3dscatter-proxy)
+add_subdirectory(q3dscatter-modelproxy)
+add_subdirectory(q3dscatter-series)
+add_subdirectory(q3dsurface)
+add_subdirectory(q3dsurface-proxy)
+add_subdirectory(q3dsurface-modelproxy)
+add_subdirectory(q3dsurface-modelproxy-nan)
+add_subdirectory(q3dsurface-heightproxy)
+add_subdirectory(q3dsurface-series)
+add_subdirectory(q3daxis-category)
+add_subdirectory(q3daxis-logvalue)
+add_subdirectory(q3daxis-value)
+add_subdirectory(q3dscene)
+add_subdirectory(q3dscene-camera)
+add_subdirectory(q3dscene-light)
+add_subdirectory(q3dtheme)
+add_subdirectory(q3dinput)
+add_subdirectory(q3dinput-touch)
+add_subdirectory(q3dcustom)
+add_subdirectory(q3dcustom-label)
+add_subdirectory(q3dcustom-volume)
diff --git a/tests/auto/cpptest/common/cpptestutil.h b/tests/auto/cpptest/common/cpptestutil.h
index 986ba8b9..546c60f9 100644
--- a/tests/auto/cpptest/common/cpptestutil.h
+++ b/tests/auto/cpptest/common/cpptestutil.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CPPTESTUTIL_H
#define CPPTESTUTIL_H
diff --git a/tests/auto/cpptest/common/cpptestutil.pri b/tests/auto/cpptest/common/cpptestutil.pri
deleted file mode 100644
index 0bac2856..00000000
--- a/tests/auto/cpptest/common/cpptestutil.pri
+++ /dev/null
@@ -1,2 +0,0 @@
-QT += gui-private
-INCLUDEPATH += $$PWD/
diff --git a/tests/auto/cpptest/cpptest.pro b/tests/auto/cpptest/cpptest.pro
deleted file mode 100644
index abd8f38e..00000000
--- a/tests/auto/cpptest/cpptest.pro
+++ /dev/null
@@ -1,26 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = q3dbars \
- q3dbars-proxy \
- q3dbars-modelproxy \
- q3dbars-series \
- q3dscatter \
- q3dscatter-proxy \
- q3dscatter-modelproxy \
- q3dscatter-series \
- q3dsurface \
- q3dsurface-proxy \
- q3dsurface-modelproxy \
- q3dsurface-heightproxy \
- q3dsurface-series \
- q3daxis-category \
- q3daxis-logvalue \
- q3daxis-value \
- q3dscene \
- q3dscene-camera \
- q3dscene-light \
- q3dtheme \
- q3dinput \
- q3dinput-touch \
- q3dcustom \
- q3dcustom-label \
- q3dcustom-volume
diff --git a/tests/auto/cpptest/q3daxis-category/CMakeLists.txt b/tests/auto/cpptest/q3daxis-category/CMakeLists.txt
new file mode 100644
index 00000000..f148b184
--- /dev/null
+++ b/tests/auto/cpptest/q3daxis-category/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3daxis-category_datavis
+ SOURCES
+ tst_axis.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3daxis-category/q3daxis-category.pro b/tests/auto/cpptest/q3daxis-category/q3daxis-category.pro
deleted file mode 100644
index 74415397..00000000
--- a/tests/auto/cpptest/q3daxis-category/q3daxis-category.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_axis.cpp
diff --git a/tests/auto/cpptest/q3daxis-category/tst_axis.cpp b/tests/auto/cpptest/q3daxis-category/tst_axis.cpp
index 789ace17..d1440d6a 100644
--- a/tests/auto/cpptest/q3daxis-category/tst_axis.cpp
+++ b/tests/auto/cpptest/q3daxis-category/tst_axis.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QCategory3DAxis>
-using namespace QtDataVisualization;
-
class tst_axis: public QObject
{
Q_OBJECT
@@ -82,7 +54,7 @@ void tst_axis::initialProperties()
{
QVERIFY(m_axis);
- QCOMPARE(m_axis->labels().length(), 0);
+ QCOMPARE(m_axis->labels().size(), 0);
// Common (from QAbstract3DAxis)
QCOMPARE(m_axis->isAutoAdjustRange(), true);
@@ -102,7 +74,7 @@ void tst_axis::initializeProperties()
m_axis->setLabels(QStringList() << "first" << "second");
- QCOMPARE(m_axis->labels().length(), 2);
+ QCOMPARE(m_axis->labels().size(), 2);
QCOMPARE(m_axis->labels().at(1), QString("second"));
// Common (from QAbstract3DAxis)
diff --git a/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt b/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt
new file mode 100644
index 00000000..0bba27a9
--- /dev/null
+++ b/tests/auto/cpptest/q3daxis-logvalue/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3daxis-logvalue_datavis
+ SOURCES
+ tst_axis.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3daxis-logvalue/q3daxis-logvalue.pro b/tests/auto/cpptest/q3daxis-logvalue/q3daxis-logvalue.pro
deleted file mode 100644
index 74415397..00000000
--- a/tests/auto/cpptest/q3daxis-logvalue/q3daxis-logvalue.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_axis.cpp
diff --git a/tests/auto/cpptest/q3daxis-logvalue/tst_axis.cpp b/tests/auto/cpptest/q3daxis-logvalue/tst_axis.cpp
index 450059ea..cf2b055c 100644
--- a/tests/auto/cpptest/q3daxis-logvalue/tst_axis.cpp
+++ b/tests/auto/cpptest/q3daxis-logvalue/tst_axis.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QLogValue3DAxisFormatter>
-using namespace QtDataVisualization;
-
class tst_axis: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3daxis-value/CMakeLists.txt b/tests/auto/cpptest/q3daxis-value/CMakeLists.txt
new file mode 100644
index 00000000..5c412106
--- /dev/null
+++ b/tests/auto/cpptest/q3daxis-value/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3daxis-value_datavis
+ SOURCES
+ tst_axis.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3daxis-value/q3daxis-value.pro b/tests/auto/cpptest/q3daxis-value/q3daxis-value.pro
deleted file mode 100644
index 74415397..00000000
--- a/tests/auto/cpptest/q3daxis-value/q3daxis-value.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_axis.cpp
diff --git a/tests/auto/cpptest/q3daxis-value/tst_axis.cpp b/tests/auto/cpptest/q3daxis-value/tst_axis.cpp
index ae178edd..54d36d3d 100644
--- a/tests/auto/cpptest/q3daxis-value/tst_axis.cpp
+++ b/tests/auto/cpptest/q3daxis-value/tst_axis.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QValue3DAxis>
-using namespace QtDataVisualization;
-
class tst_axis: public QObject
{
Q_OBJECT
@@ -90,7 +62,7 @@ void tst_axis::initialProperties()
// Common (from QAbstract3DAxis)
QCOMPARE(m_axis->isAutoAdjustRange(), true);
QCOMPARE(m_axis->labelAutoRotation(), 0.0f);
- QCOMPARE(m_axis->labels().length(), 6);
+ QCOMPARE(m_axis->labels().size(), 6);
QCOMPARE(m_axis->labels().at(0), QString("0.00"));
QCOMPARE(m_axis->labels().at(1), QString("2.00"));
QCOMPARE(m_axis->labels().at(2), QString("4.00"));
@@ -131,7 +103,7 @@ void tst_axis::initializeProperties()
QCOMPARE(m_axis->isAutoAdjustRange(), false);
QCOMPARE(m_axis->labelAutoRotation(), 15.0f);
- QCOMPARE(m_axis->labels().length(), 3);
+ QCOMPARE(m_axis->labels().size(), 3);
QCOMPARE(m_axis->labels().at(0), QString("5m"));
QCOMPARE(m_axis->labels().at(1), QString("15m"));
QCOMPARE(m_axis->labels().at(2), QString("25m"));
diff --git a/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt
new file mode 100644
index 00000000..f9b05902
--- /dev/null
+++ b/tests/auto/cpptest/q3dbars-modelproxy/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dbars-modelproxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dbars-modelproxy/q3dbars-modelproxy.pro b/tests/auto/cpptest/q3dbars-modelproxy/q3dbars-modelproxy.pro
deleted file mode 100644
index ad1fe0cc..00000000
--- a/tests/auto/cpptest/q3dbars-modelproxy/q3dbars-modelproxy.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization widgets
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dbars-modelproxy/tst_proxy.cpp b/tests/auto/cpptest/q3dbars-modelproxy/tst_proxy.cpp
index dfeee506..424aad3f 100644
--- a/tests/auto/cpptest/q3dbars-modelproxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dbars-modelproxy/tst_proxy.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -35,8 +9,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -94,8 +66,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->columnRole(), QString(""));
QCOMPARE(proxy->valueRole(), QString("val"));
QCOMPARE(proxy->rotationRole(), QString(""));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelBarDataProxy(table->model(), "row", "col", "val");
@@ -104,8 +76,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->columnRole(), QString("col"));
QCOMPARE(proxy->valueRole(), QString("val"));
QCOMPARE(proxy->rotationRole(), QString(""));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelBarDataProxy(table->model(), "row", "col", "val", "rot");
@@ -114,8 +86,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->columnRole(), QString("col"));
QCOMPARE(proxy->valueRole(), QString("val"));
QCOMPARE(proxy->rotationRole(), QString("rot"));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelBarDataProxy(table->model(), "row", "col", "val",
@@ -125,8 +97,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->columnRole(), QString("col"));
QCOMPARE(proxy->valueRole(), QString("val"));
QCOMPARE(proxy->rotationRole(), QString(""));
- QCOMPARE(proxy->rowCategories().length(), 1);
- QCOMPARE(proxy->columnCategories().length(), 1);
+ QCOMPARE(proxy->rowCategories().size(), 1);
+ QCOMPARE(proxy->columnCategories().size(), 1);
delete proxy;
proxy = new QItemModelBarDataProxy(table->model(), "row", "col", "val", "rot",
@@ -136,8 +108,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->columnRole(), QString("col"));
QCOMPARE(proxy->valueRole(), QString("val"));
QCOMPARE(proxy->rotationRole(), QString("rot"));
- QCOMPARE(proxy->rowCategories().length(), 1);
- QCOMPARE(proxy->columnCategories().length(), 1);
+ QCOMPARE(proxy->rowCategories().size(), 1);
+ QCOMPARE(proxy->columnCategories().size(), 1);
delete proxy;
}
@@ -149,25 +121,25 @@ void tst_proxy::initialProperties()
QCOMPARE(m_proxy->autoRowCategories(), true);
QCOMPARE(m_proxy->columnCategories(), QStringList());
QCOMPARE(m_proxy->columnRole(), QString());
- QCOMPARE(m_proxy->columnRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->columnRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->columnRoleReplace(), QString());
QVERIFY(!m_proxy->itemModel());
QCOMPARE(m_proxy->multiMatchBehavior(), QItemModelBarDataProxy::MMBLast);
QCOMPARE(m_proxy->rotationRole(), QString());
- QCOMPARE(m_proxy->rotationRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->rotationRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->rotationRoleReplace(), QString());
QCOMPARE(m_proxy->rowCategories(), QStringList());
QCOMPARE(m_proxy->rowRole(), QString());
- QCOMPARE(m_proxy->rowRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->rowRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->rowRoleReplace(), QString());
QCOMPARE(m_proxy->useModelCategories(), false);
QCOMPARE(m_proxy->valueRole(), QString());
- QCOMPARE(m_proxy->valueRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->valueRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->valueRoleReplace(), QString());
- QCOMPARE(m_proxy->columnLabels().count(), 0);
+ QCOMPARE(m_proxy->columnLabels().size(), 0);
QCOMPARE(m_proxy->rowCount(), 0);
- QCOMPARE(m_proxy->rowLabels().count(), 0);
+ QCOMPARE(m_proxy->rowLabels().size(), 0);
QVERIFY(!m_proxy->series());
QCOMPARE(m_proxy->type(), QAbstractDataProxy::DataTypeBar);
@@ -183,40 +155,40 @@ void tst_proxy::initializeProperties()
m_proxy->setAutoRowCategories(false);
m_proxy->setColumnCategories(QStringList() << "col1" << "col2");
m_proxy->setColumnRole("column");
- m_proxy->setColumnRolePattern(QRegExp("/^.*-(\\d\\d)$/"));
+ m_proxy->setColumnRolePattern(QRegularExpression("/^.*-(\\d\\d)$/"));
m_proxy->setColumnRoleReplace("\\\\1");
m_proxy->setItemModel(table.model());
m_proxy->setMultiMatchBehavior(QItemModelBarDataProxy::MMBAverage);
m_proxy->setRotationRole("rotation");
- m_proxy->setRotationRolePattern(QRegExp("/-/"));
+ m_proxy->setRotationRolePattern(QRegularExpression("/-/"));
m_proxy->setRotationRoleReplace("\\\\1");
m_proxy->setRowCategories(QStringList() << "row1" << "row2");
m_proxy->setRowRole("row");
- m_proxy->setRowRolePattern(QRegExp("/^(\\d\\d\\d\\d).*$/"));
+ m_proxy->setRowRolePattern(QRegularExpression("/^(\\d\\d\\d\\d).*$/"));
m_proxy->setRowRoleReplace("\\\\1");
m_proxy->setUseModelCategories(true);
m_proxy->setValueRole("value");
- m_proxy->setValueRolePattern(QRegExp("/-/"));
+ m_proxy->setValueRolePattern(QRegularExpression("/-/"));
m_proxy->setValueRoleReplace("\\\\1");
QCOMPARE(m_proxy->autoColumnCategories(), false);
QCOMPARE(m_proxy->autoRowCategories(), false);
- QCOMPARE(m_proxy->columnCategories().count(), 2);
+ QCOMPARE(m_proxy->columnCategories().size(), 2);
QCOMPARE(m_proxy->columnRole(), QString("column"));
- QCOMPARE(m_proxy->columnRolePattern(), QRegExp("/^.*-(\\d\\d)$/"));
+ QCOMPARE(m_proxy->columnRolePattern(), QRegularExpression("/^.*-(\\d\\d)$/"));
QCOMPARE(m_proxy->columnRoleReplace(), QString("\\\\1"));
QVERIFY(m_proxy->itemModel());
QCOMPARE(m_proxy->multiMatchBehavior(), QItemModelBarDataProxy::MMBAverage);
QCOMPARE(m_proxy->rotationRole(), QString("rotation"));
- QCOMPARE(m_proxy->rotationRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->rotationRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->rotationRoleReplace(), QString("\\\\1"));
- QCOMPARE(m_proxy->rowCategories().count(), 2);
+ QCOMPARE(m_proxy->rowCategories().size(), 2);
QCOMPARE(m_proxy->rowRole(), QString("row"));
- QCOMPARE(m_proxy->rowRolePattern(), QRegExp("/^(\\d\\d\\d\\d).*$/"));
+ QCOMPARE(m_proxy->rowRolePattern(), QRegularExpression("/^(\\d\\d\\d\\d).*$/"));
QCOMPARE(m_proxy->rowRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->useModelCategories(), true);
QCOMPARE(m_proxy->valueRole(), QString("value"));
- QCOMPARE(m_proxy->valueRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->valueRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->valueRoleReplace(), QString("\\\\1"));
}
@@ -247,12 +219,13 @@ void tst_proxy::multiMatch()
m_proxy->setItemModel(table.model());
m_proxy->setRowRole(table.model()->roleNames().value(Qt::DisplayRole));
m_proxy->setColumnRole(table.model()->roleNames().value(Qt::DisplayRole));
- m_proxy->setRowRolePattern(QRegExp(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setRowRolePattern(QRegularExpression(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setRowRoleReplace(QStringLiteral("\\2"));
- m_proxy->setValueRolePattern(QRegExp(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setValueRolePattern(QRegularExpression(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setValueRoleReplace(QStringLiteral("\\3"));
- m_proxy->setColumnRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setColumnRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setColumnRoleReplace(QStringLiteral("\\1"));
+ QCoreApplication::processEvents();
QBar3DSeries *series = new QBar3DSeries(m_proxy);
@@ -273,9 +246,9 @@ void tst_proxy::multiMatch()
QCoreApplication::processEvents();
QCOMPARE(graph.valueAxis()->max(), 15.0f);
- QCOMPARE(m_proxy->columnLabels().count(), 1);
+ QCOMPARE(m_proxy->columnLabels().size(), 1);
QCOMPARE(m_proxy->rowCount(), 1);
- QCOMPARE(m_proxy->rowLabels().count(), 1);
+ QCOMPARE(m_proxy->rowLabels().size(), 1);
QVERIFY(m_proxy->series());
m_proxy = 0; // Proxy gets deleted as graph gets deleted
diff --git a/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt
new file mode 100644
index 00000000..23c6997d
--- /dev/null
+++ b/tests/auto/cpptest/q3dbars-proxy/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dbars-proxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dbars-proxy/q3dbars-proxy.pro b/tests/auto/cpptest/q3dbars-proxy/q3dbars-proxy.pro
deleted file mode 100644
index b0b5d361..00000000
--- a/tests/auto/cpptest/q3dbars-proxy/q3dbars-proxy.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dbars-proxy/tst_proxy.cpp b/tests/auto/cpptest/q3dbars-proxy/tst_proxy.cpp
index a04c594f..4c343cb4 100644
--- a/tests/auto/cpptest/q3dbars-proxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dbars-proxy/tst_proxy.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QBarDataProxy>
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -81,9 +53,9 @@ void tst_proxy::initialProperties()
{
QVERIFY(m_proxy);
- QCOMPARE(m_proxy->columnLabels().count(), 0);
+ QCOMPARE(m_proxy->columnLabels().size(), 0);
QCOMPARE(m_proxy->rowCount(), 0);
- QCOMPARE(m_proxy->rowLabels().count(), 0);
+ QCOMPARE(m_proxy->rowLabels().size(), 0);
QVERIFY(!m_proxy->series());
QCOMPARE(m_proxy->type(), QAbstractDataProxy::DataTypeBar);
@@ -99,9 +71,9 @@ void tst_proxy::initializeProperties()
m_proxy->addRow(data);
m_proxy->setRowLabels(QStringList() << "1");
- QCOMPARE(m_proxy->columnLabels().count(), 3);
+ QCOMPARE(m_proxy->columnLabels().size(), 3);
QCOMPARE(m_proxy->rowCount(), 1);
- QCOMPARE(m_proxy->rowLabels().count(), 1);
+ QCOMPARE(m_proxy->rowLabels().size(), 1);
}
QTEST_MAIN(tst_proxy)
diff --git a/tests/auto/cpptest/q3dbars-series/CMakeLists.txt b/tests/auto/cpptest/q3dbars-series/CMakeLists.txt
new file mode 100644
index 00000000..f160c81c
--- /dev/null
+++ b/tests/auto/cpptest/q3dbars-series/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dbars-series_datavis
+ SOURCES
+ tst_series.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dbars-series/q3dbars-series.pro b/tests/auto/cpptest/q3dbars-series/q3dbars-series.pro
deleted file mode 100644
index 481653ef..00000000
--- a/tests/auto/cpptest/q3dbars-series/q3dbars-series.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_series.cpp
diff --git a/tests/auto/cpptest/q3dbars-series/tst_series.cpp b/tests/auto/cpptest/q3dbars-series/tst_series.cpp
index a52ce9ef..6e0272ac 100644
--- a/tests/auto/cpptest/q3dbars-series/tst_series.cpp
+++ b/tests/auto/cpptest/q3dbars-series/tst_series.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QBar3DSeries>
-using namespace QtDataVisualization;
-
class tst_series: public QObject
{
Q_OBJECT
@@ -92,6 +64,7 @@ void tst_series::initialProperties()
QVERIFY(m_series->dataProxy());
QCOMPARE(m_series->meshAngle(), 0.0f);
QCOMPARE(m_series->selectedBar(), m_series->invalidSelectionPosition());
+ QCOMPARE(m_series->rowColors().size(), 0);
// Common properties
QCOMPARE(m_series->baseColor(), QColor(Qt::black));
@@ -134,6 +107,13 @@ void tst_series::initializeProperties()
gradient3.setColorAt(0.0, Qt::white);
gradient3.setColorAt(1.0, Qt::gray);
+ QList<QColor> rowColors;
+ rowColors.append(QColor(Qt::green));
+ rowColors.append(QColor(Qt::blue));
+ rowColors.append(QColor(Qt::red));
+
+ m_series->setRowColors(rowColors);
+
// Common properties
m_series->setBaseColor(QColor(Qt::blue));
m_series->setBaseGradient(gradient1);
@@ -167,6 +147,11 @@ void tst_series::initializeProperties()
QCOMPARE(m_series->singleHighlightGradient().stops().at(0).second, QColor(Qt::white));
QCOMPARE(m_series->userDefinedMesh(), QString(":/customitem.obj"));
QCOMPARE(m_series->isVisible(), false);
+
+ QCOMPARE(m_series->rowColors().size(), 3);
+ QCOMPARE(m_series->rowColors().at(0), QColor(Qt::green));
+ QCOMPARE(m_series->rowColors().at(1), QColor(Qt::blue));
+ QCOMPARE(m_series->rowColors().at(2), QColor(Qt::red));
}
void tst_series::invalidProperties()
diff --git a/tests/auto/cpptest/q3dbars/CMakeLists.txt b/tests/auto/cpptest/q3dbars/CMakeLists.txt
new file mode 100644
index 00000000..c2f05908
--- /dev/null
+++ b/tests/auto/cpptest/q3dbars/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dbars_datavis
+ SOURCES
+ tst_bars.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dbars/q3dbars.pro b/tests/auto/cpptest/q3dbars/q3dbars.pro
deleted file mode 100644
index bba500fa..00000000
--- a/tests/auto/cpptest/q3dbars/q3dbars.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-include(../common/cpptestutil.pri)
-
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_bars.cpp
diff --git a/tests/auto/cpptest/q3dbars/tst_bars.cpp b/tests/auto/cpptest/q3dbars/tst_bars.cpp
index 0d128c36..96219cb0 100644
--- a/tests/auto/cpptest/q3dbars/tst_bars.cpp
+++ b/tests/auto/cpptest/q3dbars/tst_bars.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -36,8 +10,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_bars: public QObject
{
Q_OBJECT
@@ -59,6 +31,7 @@ private slots:
void selectSeries();
void removeSeries();
void removeMultipleSeries();
+ void hasSeries();
// The following tests are not required for scatter or surface, as they are handled identically
void addInputHandler();
@@ -123,8 +96,9 @@ void tst_bars::initialProperties()
QCOMPARE(m_graph->isMultiSeriesUniform(), false);
QCOMPARE(m_graph->barThickness(), 1.0);
QCOMPARE(m_graph->barSpacing(), QSizeF(1.0f, 1.0f));
+ QCOMPARE(m_graph->barSeriesMargin(), QSizeF(0.0f, 0.0f));
QCOMPARE(m_graph->isBarSpacingRelative(), true);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
QVERIFY(!m_graph->selectedSeries());
QVERIFY(!m_graph->primarySeries());
QCOMPARE(m_graph->floorLevel(), 0.0);
@@ -159,12 +133,14 @@ void tst_bars::initializeProperties()
m_graph->setMultiSeriesUniform(true);
m_graph->setBarThickness(0.2f);
m_graph->setBarSpacing(QSizeF(0.1f, 0.1f));
+ m_graph->setBarSeriesMargin(QSizeF(0.3f, 0.3f));
m_graph->setBarSpacingRelative(false);
m_graph->setFloorLevel(1.0f);
QCOMPARE(m_graph->isMultiSeriesUniform(), true);
QCOMPARE(m_graph->barThickness(), 0.2f);
QCOMPARE(m_graph->barSpacing(), QSizeF(0.1f, 0.1f));
+ QCOMPARE(m_graph->barSeriesMargin(), QSizeF(0.3f, 0.3f));
QCOMPARE(m_graph->isBarSpacingRelative(), false);
QCOMPARE(m_graph->floorLevel(), 1.0f);
@@ -210,9 +186,9 @@ void tst_bars::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
@@ -222,7 +198,7 @@ void tst_bars::addSeries()
m_graph->addSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QVERIFY(!m_graph->selectedSeries());
QCOMPARE(m_graph->primarySeries(), series);
}
@@ -237,7 +213,7 @@ void tst_bars::addMultipleSeries()
m_graph->addSeries(series2);
m_graph->addSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 3);
+ QCOMPARE(m_graph->seriesList().size(), 3);
QCOMPARE(m_graph->primarySeries(), series);
m_graph->setPrimarySeries(series2);
@@ -252,7 +228,7 @@ void tst_bars::selectSeries()
m_graph->addSeries(series);
m_graph->primarySeries()->setSelectedBar(QPoint(0, 0));
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->clearSelection();
@@ -265,7 +241,7 @@ void tst_bars::removeSeries()
m_graph->addSeries(series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
}
@@ -283,22 +259,31 @@ void tst_bars::removeMultipleSeries()
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 2);
+ QCOMPARE(m_graph->seriesList().size(), 2);
QCOMPARE(m_graph->primarySeries(), series2);
QVERIFY(!m_graph->selectedSeries());
m_graph->removeSeries(series2);
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QCOMPARE(m_graph->primarySeries(), series3);
m_graph->removeSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
delete series2;
delete series3;
}
+void tst_bars::hasSeries()
+{
+ QBar3DSeries *series1 = newSeries();
+ m_graph->addSeries(series1);
+ QCOMPARE(m_graph->hasSeries(series1), true);
+ QBar3DSeries *series2 = newSeries();
+ QCOMPARE(m_graph->hasSeries(series2), false);
+}
+
// The following tests are not required for scatter or surface, as they are handled identically
void tst_bars::addInputHandler()
{
@@ -309,14 +294,14 @@ void tst_bars::addInputHandler()
m_graph->addInputHandler(handler);
m_graph->addInputHandler(handler2);
- QCOMPARE(m_graph->inputHandlers().length(), 3); // Default, as it is still active, plus added ones
+ QCOMPARE(m_graph->inputHandlers().size(), 3); // Default, as it is still active, plus added ones
QCOMPARE(m_graph->activeInputHandler(), initialHandler);
m_graph->setActiveInputHandler(handler2);
QCOMPARE(m_graph->activeInputHandler(), handler2);
m_graph->setActiveInputHandler(NULL);
QVERIFY(!m_graph->activeInputHandler());
- QCOMPARE(m_graph->inputHandlers().length(), 2);
+ QCOMPARE(m_graph->inputHandlers().size(), 2);
}
void tst_bars::removeInputHandler()
@@ -328,12 +313,12 @@ void tst_bars::removeInputHandler()
m_graph->addInputHandler(handler2);
m_graph->setActiveInputHandler(handler2);
- QCOMPARE(m_graph->inputHandlers().length(), 2); // Default handler removed by previous call
+ QCOMPARE(m_graph->inputHandlers().size(), 2); // Default handler removed by previous call
QCOMPARE(m_graph->activeInputHandler(), handler2);
m_graph->releaseInputHandler(handler2);
- QCOMPARE(m_graph->inputHandlers().length(), 1);
+ QCOMPARE(m_graph->inputHandlers().size(), 1);
m_graph->releaseInputHandler(handler);
- QCOMPARE(m_graph->inputHandlers().length(), 0);
+ QCOMPARE(m_graph->inputHandlers().size(), 0);
delete handler2;
delete handler;
@@ -347,7 +332,7 @@ void tst_bars::addTheme()
m_graph->addTheme(theme);
m_graph->addTheme(theme2);
- QCOMPARE(m_graph->themes().length(), 3); // Default, plus added ones
+ QCOMPARE(m_graph->themes().size(), 3); // Default, plus added ones
QCOMPARE(m_graph->activeTheme(), initialTheme);
m_graph->setActiveTheme(theme2);
QCOMPARE(m_graph->activeTheme(), theme2);
@@ -363,9 +348,9 @@ void tst_bars::removeTheme()
m_graph->setActiveTheme(theme2);
QCOMPARE(m_graph->activeTheme(), theme2);
m_graph->releaseTheme(theme2);
- QCOMPARE(m_graph->themes().length(), 2);
+ QCOMPARE(m_graph->themes().size(), 2);
m_graph->releaseTheme(theme);
- QCOMPARE(m_graph->themes().length(), 1); // Default theme remains
+ QCOMPARE(m_graph->themes().size(), 1); // Default theme remains
delete theme2;
delete theme;
@@ -377,9 +362,9 @@ void tst_bars::addCustomItem()
QCustom3DItem *item2 = new QCustom3DItem();
m_graph->addCustomItem(item);
- QCOMPARE(m_graph->customItems().length(), 1);
+ QCOMPARE(m_graph->customItems().size(), 1);
m_graph->addCustomItem(item2);
- QCOMPARE(m_graph->customItems().length(), 2);
+ QCOMPARE(m_graph->customItems().size(), 2);
}
void tst_bars::removeCustomItem()
@@ -394,14 +379,14 @@ void tst_bars::removeCustomItem()
m_graph->addCustomItem(item3);
m_graph->releaseCustomItem(item);
- QCOMPARE(m_graph->customItems().length(), 2);
+ QCOMPARE(m_graph->customItems().size(), 2);
m_graph->removeCustomItem(item2);
- QCOMPARE(m_graph->customItems().length(), 1);
+ QCOMPARE(m_graph->customItems().size(), 1);
m_graph->addCustomItem(item);
m_graph->removeCustomItemAt(QVector3D(1, 1, 1));
- QCOMPARE(m_graph->customItems().length(), 1);
+ QCOMPARE(m_graph->customItems().size(), 1);
m_graph->removeCustomItems();
- QCOMPARE(m_graph->customItems().length(), 0);
+ QCOMPARE(m_graph->customItems().size(), 0);
}
void tst_bars::renderToImage()
diff --git a/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt b/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt
new file mode 100644
index 00000000..3baea7fa
--- /dev/null
+++ b/tests/auto/cpptest/q3dcustom-label/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dcustom-label_datavis
+ SOURCES
+ tst_custom.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dcustom-label/q3dcustom-label.pro b/tests/auto/cpptest/q3dcustom-label/q3dcustom-label.pro
deleted file mode 100644
index c47e018a..00000000
--- a/tests/auto/cpptest/q3dcustom-label/q3dcustom-label.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_custom.cpp
diff --git a/tests/auto/cpptest/q3dcustom-label/tst_custom.cpp b/tests/auto/cpptest/q3dcustom-label/tst_custom.cpp
index 44c9d2b2..6914031f 100644
--- a/tests/auto/cpptest/q3dcustom-label/tst_custom.cpp
+++ b/tests/auto/cpptest/q3dcustom-label/tst_custom.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -33,8 +7,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_custom: public QObject
{
Q_OBJECT
@@ -81,8 +53,8 @@ void tst_custom::construct()
QVERIFY(custom);
delete custom;
- custom = new QCustom3DLabel("label", QFont("Times New Roman", 10.0), QVector3D(1.0, 1.0, 1.0),
- QVector3D(1.0, 1.0, 1.0), QQuaternion(1.0, 1.0, 10.0, 100.0));
+ custom = new QCustom3DLabel("label", QFont("Times New Roman", 10.0), QVector3D(1.0f, 1.0f, 1.0f),
+ QVector3D(1.0f, 1.0f, 1.0f), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
QVERIFY(custom);
QCOMPARE(custom->backgroundColor(), QColor(Qt::gray));
QCOMPARE(custom->isBackgroundEnabled(), true);
@@ -92,10 +64,10 @@ void tst_custom::construct()
QCOMPARE(custom->text(), QString("label"));
QCOMPARE(custom->textColor(), QColor(Qt::white));
QCOMPARE(custom->meshFile(), QString(":/defaultMeshes/plane"));
- QCOMPARE(custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isPositionAbsolute(), false);
- QCOMPARE(custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isScalingAbsolute(), true);
QCOMPARE(custom->isShadowCasting(), false);
QCOMPARE(custom->textureFile(), QString());
@@ -148,17 +120,17 @@ void tst_custom::initializeProperties()
QCOMPARE(m_custom->textColor(), QColor(Qt::blue));
// Common (from QCustom3DItem)
- m_custom->setPosition(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setPosition(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setPositionAbsolute(true);
- m_custom->setRotation(QQuaternion(1.0, 1.0, 10.0, 100.0));
- m_custom->setScaling(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setRotation(QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ m_custom->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setShadowCasting(true);
m_custom->setVisible(false);
- QCOMPARE(m_custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isPositionAbsolute(), true);
- QCOMPARE(m_custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(m_custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(m_custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isShadowCasting(), true);
QCOMPARE(m_custom->isVisible(), false);
}
diff --git a/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt b/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt
new file mode 100644
index 00000000..858f2dfc
--- /dev/null
+++ b/tests/auto/cpptest/q3dcustom-volume/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dcustom-volume_datavis
+ SOURCES
+ tst_custom.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dcustom-volume/q3dcustom-volume.pro b/tests/auto/cpptest/q3dcustom-volume/q3dcustom-volume.pro
deleted file mode 100644
index af584baa..00000000
--- a/tests/auto/cpptest/q3dcustom-volume/q3dcustom-volume.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_custom.cpp
diff --git a/tests/auto/cpptest/q3dcustom-volume/tst_custom.cpp b/tests/auto/cpptest/q3dcustom-volume/tst_custom.cpp
index 982353ac..21040df3 100644
--- a/tests/auto/cpptest/q3dcustom-volume/tst_custom.cpp
+++ b/tests/auto/cpptest/q3dcustom-volume/tst_custom.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QCustom3DVolume>
-using namespace QtDataVisualization;
-
class tst_custom: public QObject
{
Q_OBJECT
@@ -82,8 +54,8 @@ void tst_custom::construct()
QList<QRgb> table;
table << QRgb(0xff00ff) << QRgb(0x00ff00);
- custom = new QCustom3DVolume(QVector3D(1.0, 1.0, 1.0), QVector3D(1.0, 1.0, 1.0),
- QQuaternion(1.0, 1.0, 10.0, 100.0), 10, 10, 10,
+ custom = new QCustom3DVolume(QVector3D(1.0f, 1.0f, 1.0f), QVector3D(1.0f, 1.0f, 1.0f),
+ QQuaternion(1.0f, 1.0f, 10.0f, 100.0f), 10, 10, 10,
tdata, QImage::Format_ARGB32, table);
QVERIFY(custom);
QCOMPARE(custom->alphaMultiplier(), 1.0f);
@@ -98,17 +70,17 @@ void tst_custom::construct()
QCOMPARE(custom->sliceIndexY(), -1);
QCOMPARE(custom->sliceIndexZ(), -1);
QCOMPARE(custom->useHighDefShader(), true);
- QCOMPARE(custom->textureData()->length(), 1000);
+ QCOMPARE(custom->textureData()->size(), 1000);
QCOMPARE(custom->textureDataWidth(), 40);
QCOMPARE(custom->textureFormat(), QImage::Format_ARGB32);
QCOMPARE(custom->textureHeight(), 10);
QCOMPARE(custom->textureWidth(), 10);
QCOMPARE(custom->textureDepth(), 10);
QCOMPARE(custom->meshFile(), QString(":/defaultMeshes/barFull"));
- QCOMPARE(custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isPositionAbsolute(), false);
- QCOMPARE(custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isScalingAbsolute(), true);
QCOMPARE(custom->isShadowCasting(), false);
QCOMPARE(custom->textureFile(), QString());
@@ -176,18 +148,18 @@ void tst_custom::initializeProperties()
QCOMPARE(m_custom->useHighDefShader(), false);
// Common (from QCustom3DVolume)
- m_custom->setPosition(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setPosition(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setPositionAbsolute(true);
- m_custom->setRotation(QQuaternion(1.0, 1.0, 10.0, 100.0));
- m_custom->setScaling(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setRotation(QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ m_custom->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setScalingAbsolute(false);
m_custom->setShadowCasting(false);
m_custom->setVisible(false);
- QCOMPARE(m_custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isPositionAbsolute(), true);
- QCOMPARE(m_custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(m_custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(m_custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isScalingAbsolute(), false);
QCOMPARE(m_custom->isShadowCasting(), false);
QCOMPARE(m_custom->isVisible(), false);
diff --git a/tests/auto/cpptest/q3dcustom/CMakeLists.txt b/tests/auto/cpptest/q3dcustom/CMakeLists.txt
new file mode 100644
index 00000000..4126a884
--- /dev/null
+++ b/tests/auto/cpptest/q3dcustom/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dcustom_datavis
+ SOURCES
+ tst_custom.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dcustom/q3dcustom.pro b/tests/auto/cpptest/q3dcustom/q3dcustom.pro
deleted file mode 100644
index af584baa..00000000
--- a/tests/auto/cpptest/q3dcustom/q3dcustom.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_custom.cpp
diff --git a/tests/auto/cpptest/q3dcustom/tst_custom.cpp b/tests/auto/cpptest/q3dcustom/tst_custom.cpp
index 94e32c62..05e09f98 100644
--- a/tests/auto/cpptest/q3dcustom/tst_custom.cpp
+++ b/tests/auto/cpptest/q3dcustom/tst_custom.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QCustom3DItem>
-using namespace QtDataVisualization;
-
class tst_custom: public QObject
{
Q_OBJECT
@@ -76,15 +48,15 @@ void tst_custom::construct()
QVERIFY(custom);
delete custom;
- custom = new QCustom3DItem(":/customitem.obj", QVector3D(1.0, 1.0, 1.0),
- QVector3D(1.0, 1.0, 1.0), QQuaternion(1.0, 1.0, 10.0, 100.0),
+ custom = new QCustom3DItem(":/customitem.obj", QVector3D(1.0f, 1.0f, 1.0f),
+ QVector3D(1.0f, 1.0f, 1.0f), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f),
QImage(":/customtexture.jpg"));
QVERIFY(custom);
QCOMPARE(custom->meshFile(), QString(":/customitem.obj"));
- QCOMPARE(custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isPositionAbsolute(), false);
- QCOMPARE(custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(custom->isScalingAbsolute(), true);
QCOMPARE(custom->isShadowCasting(), true);
QCOMPARE(custom->textureFile(), QString());
@@ -112,20 +84,20 @@ void tst_custom::initializeProperties()
QVERIFY(m_custom);
m_custom->setMeshFile(":/customitem.obj");
- m_custom->setPosition(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setPosition(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setPositionAbsolute(true);
- m_custom->setRotation(QQuaternion(1.0, 1.0, 10.0, 100.0));
- m_custom->setScaling(QVector3D(1.0, 1.0, 1.0));
+ m_custom->setRotation(QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ m_custom->setScaling(QVector3D(1.0f, 1.0f, 1.0f));
m_custom->setScalingAbsolute(false);
m_custom->setShadowCasting(false);
m_custom->setTextureFile(":/customtexture.jpg");
m_custom->setVisible(false);
QCOMPARE(m_custom->meshFile(), QString(":/customitem.obj"));
- QCOMPARE(m_custom->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->position(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isPositionAbsolute(), true);
- QCOMPARE(m_custom->rotation(), QQuaternion(1.0, 1.0, 10.0, 100.0));
- QCOMPARE(m_custom->scaling(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_custom->rotation(), QQuaternion(1.0f, 1.0f, 10.0f, 100.0f));
+ QCOMPARE(m_custom->scaling(), QVector3D(1.0f, 1.0f, 1.0f));
QCOMPARE(m_custom->isScalingAbsolute(), false);
QCOMPARE(m_custom->isShadowCasting(), false);
QCOMPARE(m_custom->textureFile(), QString(":/customtexture.jpg"));
diff --git a/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt b/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt
new file mode 100644
index 00000000..7550bf2b
--- /dev/null
+++ b/tests/auto/cpptest/q3dinput-touch/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dinput-touch_datavis
+ SOURCES
+ tst_input.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dinput-touch/q3dinput-touch.pro b/tests/auto/cpptest/q3dinput-touch/q3dinput-touch.pro
deleted file mode 100644
index 2de48158..00000000
--- a/tests/auto/cpptest/q3dinput-touch/q3dinput-touch.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_input.cpp
diff --git a/tests/auto/cpptest/q3dinput-touch/tst_input.cpp b/tests/auto/cpptest/q3dinput-touch/tst_input.cpp
index f33b20da..6a11741c 100644
--- a/tests/auto/cpptest/q3dinput-touch/tst_input.cpp
+++ b/tests/auto/cpptest/q3dinput-touch/tst_input.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QTouch3DInputHandler>
-using namespace QtDataVisualization;
-
class tst_input: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3dinput/CMakeLists.txt b/tests/auto/cpptest/q3dinput/CMakeLists.txt
new file mode 100644
index 00000000..ac0fe9a9
--- /dev/null
+++ b/tests/auto/cpptest/q3dinput/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dinput_datavis
+ SOURCES
+ tst_input.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dinput/q3dinput.pro b/tests/auto/cpptest/q3dinput/q3dinput.pro
deleted file mode 100644
index 2de48158..00000000
--- a/tests/auto/cpptest/q3dinput/q3dinput.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_input.cpp
diff --git a/tests/auto/cpptest/q3dinput/tst_input.cpp b/tests/auto/cpptest/q3dinput/tst_input.cpp
index 16861a91..95912b8a 100644
--- a/tests/auto/cpptest/q3dinput/tst_input.cpp
+++ b/tests/auto/cpptest/q3dinput/tst_input.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/Q3DInputHandler>
-using namespace QtDataVisualization;
-
class tst_input: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt
new file mode 100644
index 00000000..438c05f8
--- /dev/null
+++ b/tests/auto/cpptest/q3dscatter-modelproxy/CMakeLists.txt
@@ -0,0 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscatter-modelproxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscatter-modelproxy/q3dscatter-modelproxy.pro b/tests/auto/cpptest/q3dscatter-modelproxy/q3dscatter-modelproxy.pro
deleted file mode 100644
index c383ec25..00000000
--- a/tests/auto/cpptest/q3dscatter-modelproxy/q3dscatter-modelproxy.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization widgets
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dscatter-modelproxy/tst_proxy.cpp b/tests/auto/cpptest/q3dscatter-modelproxy/tst_proxy.cpp
index 55fb2333..d6950f1f 100644
--- a/tests/auto/cpptest/q3dscatter-modelproxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dscatter-modelproxy/tst_proxy.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -33,8 +7,6 @@
#include <QtDataVisualization/Q3DScatter>
#include <QtWidgets/QTableWidget>
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -109,16 +81,16 @@ void tst_proxy::initialProperties()
QVERIFY(!m_proxy->itemModel());
QCOMPARE(m_proxy->rotationRole(), QString());
- QCOMPARE(m_proxy->rotationRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->rotationRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->rotationRoleReplace(), QString());
QCOMPARE(m_proxy->xPosRole(), QString());
- QCOMPARE(m_proxy->xPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->xPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->xPosRoleReplace(), QString());
QCOMPARE(m_proxy->yPosRole(), QString());
- QCOMPARE(m_proxy->yPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->yPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->yPosRoleReplace(), QString());
QCOMPARE(m_proxy->zPosRole(), QString());
- QCOMPARE(m_proxy->zPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->zPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->zPosRoleReplace(), QString());
QCOMPARE(m_proxy->itemCount(), 0);
@@ -135,30 +107,30 @@ void tst_proxy::initializeProperties()
m_proxy->setItemModel(table.model());
m_proxy->setRotationRole("rotation");
- m_proxy->setRotationRolePattern(QRegExp("/-/"));
+ m_proxy->setRotationRolePattern(QRegularExpression("/-/"));
m_proxy->setRotationRoleReplace("\\\\1");
m_proxy->setXPosRole("X");
- m_proxy->setXPosRolePattern(QRegExp("/-/"));
+ m_proxy->setXPosRolePattern(QRegularExpression("/-/"));
m_proxy->setXPosRoleReplace("\\\\1");
m_proxy->setYPosRole("Y");
- m_proxy->setYPosRolePattern(QRegExp("/-/"));
+ m_proxy->setYPosRolePattern(QRegularExpression("/-/"));
m_proxy->setYPosRoleReplace("\\\\1");
m_proxy->setZPosRole("Z");
- m_proxy->setZPosRolePattern(QRegExp("/-/"));
+ m_proxy->setZPosRolePattern(QRegularExpression("/-/"));
m_proxy->setZPosRoleReplace("\\\\1");
QVERIFY(m_proxy->itemModel());
QCOMPARE(m_proxy->rotationRole(), QString("rotation"));
- QCOMPARE(m_proxy->rotationRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->rotationRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->rotationRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->xPosRole(), QString("X"));
- QCOMPARE(m_proxy->xPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->xPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->xPosRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->yPosRole(), QString("Y"));
- QCOMPARE(m_proxy->yPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->yPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->yPosRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->zPosRole(), QString("Z"));
- QCOMPARE(m_proxy->zPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->zPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->zPosRoleReplace(), QString("\\\\1"));
}
@@ -184,12 +156,13 @@ void tst_proxy::addModel()
m_proxy->setItemModel(table.model());
m_proxy->setXPosRole(table.model()->roleNames().value(Qt::DisplayRole));
m_proxy->setZPosRole(table.model()->roleNames().value(Qt::DisplayRole));
- m_proxy->setXPosRolePattern(QRegExp(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setXPosRolePattern(QRegularExpression(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setXPosRoleReplace(QStringLiteral("\\2"));
- m_proxy->setYPosRolePattern(QRegExp(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setYPosRolePattern(QRegularExpression(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setYPosRoleReplace(QStringLiteral("\\3"));
- m_proxy->setZPosRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setZPosRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setZPosRoleReplace(QStringLiteral("\\1"));
+ QCoreApplication::processEvents();
QScatter3DSeries *series = new QScatter3DSeries(m_proxy);
Q_UNUSED(series);
diff --git a/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt
new file mode 100644
index 00000000..c813e9fb
--- /dev/null
+++ b/tests/auto/cpptest/q3dscatter-proxy/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscatter-proxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscatter-proxy/q3dscatter-proxy.pro b/tests/auto/cpptest/q3dscatter-proxy/q3dscatter-proxy.pro
deleted file mode 100644
index b0b5d361..00000000
--- a/tests/auto/cpptest/q3dscatter-proxy/q3dscatter-proxy.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dscatter-proxy/tst_proxy.cpp b/tests/auto/cpptest/q3dscatter-proxy/tst_proxy.cpp
index 3ca07aa2..e2633225 100644
--- a/tests/auto/cpptest/q3dscatter-proxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dscatter-proxy/tst_proxy.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QScatterDataProxy>
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt b/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt
new file mode 100644
index 00000000..c2eb2c4a
--- /dev/null
+++ b/tests/auto/cpptest/q3dscatter-series/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscatter-series_datavis
+ SOURCES
+ tst_series.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscatter-series/q3dscatter-series.pro b/tests/auto/cpptest/q3dscatter-series/q3dscatter-series.pro
deleted file mode 100644
index 481653ef..00000000
--- a/tests/auto/cpptest/q3dscatter-series/q3dscatter-series.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_series.cpp
diff --git a/tests/auto/cpptest/q3dscatter-series/tst_series.cpp b/tests/auto/cpptest/q3dscatter-series/tst_series.cpp
index eef9f908..c0c23b07 100644
--- a/tests/auto/cpptest/q3dscatter-series/tst_series.cpp
+++ b/tests/auto/cpptest/q3dscatter-series/tst_series.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QScatter3DSeries>
-using namespace QtDataVisualization;
-
class tst_series: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3dscatter/CMakeLists.txt b/tests/auto/cpptest/q3dscatter/CMakeLists.txt
new file mode 100644
index 00000000..176fb66e
--- /dev/null
+++ b/tests/auto/cpptest/q3dscatter/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscatter_datavis
+ SOURCES
+ tst_scatter.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscatter/q3dscatter.pro b/tests/auto/cpptest/q3dscatter/q3dscatter.pro
deleted file mode 100644
index 6c94fe64..00000000
--- a/tests/auto/cpptest/q3dscatter/q3dscatter.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_scatter.cpp
diff --git a/tests/auto/cpptest/q3dscatter/tst_scatter.cpp b/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
index 64561340..f6ac402e 100644
--- a/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
+++ b/tests/auto/cpptest/q3dscatter/tst_scatter.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -33,8 +7,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_scatter: public QObject
{
Q_OBJECT
@@ -56,6 +28,7 @@ private slots:
void selectSeries();
void removeSeries();
void removeMultipleSeries();
+ void hasSeries();
private:
Q3DScatter *m_graph;
@@ -105,7 +78,7 @@ void tst_scatter::construct()
void tst_scatter::initialProperties()
{
QVERIFY(m_graph);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
QVERIFY(!m_graph->selectedSeries());
QCOMPARE(m_graph->axisX()->orientation(), QAbstract3DAxis::AxisOrientationX);
QCOMPARE(m_graph->axisY()->orientation(), QAbstract3DAxis::AxisOrientationY);
@@ -175,9 +148,9 @@ void tst_scatter::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
@@ -185,7 +158,7 @@ void tst_scatter::addSeries()
{
m_graph->addSeries(newSeries());
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QVERIFY(!m_graph->selectedSeries());
}
@@ -199,7 +172,7 @@ void tst_scatter::addMultipleSeries()
m_graph->addSeries(series2);
m_graph->addSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 3);
+ QCOMPARE(m_graph->seriesList().size(), 3);
}
void tst_scatter::selectSeries()
@@ -209,7 +182,7 @@ void tst_scatter::selectSeries()
m_graph->addSeries(series);
m_graph->seriesList()[0]->setSelectedItem(1);
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->clearSelection();
@@ -222,7 +195,7 @@ void tst_scatter::removeSeries()
m_graph->addSeries(series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
}
@@ -241,19 +214,28 @@ void tst_scatter::removeMultipleSeries()
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 2);
+ QCOMPARE(m_graph->seriesList().size(), 2);
QVERIFY(!m_graph->selectedSeries());
m_graph->removeSeries(series2);
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
m_graph->removeSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
delete series2;
delete series3;
}
+void tst_scatter::hasSeries()
+{
+ QScatter3DSeries *series1 = newSeries();
+ m_graph->addSeries(series1);
+ QCOMPARE(m_graph->hasSeries(series1), true);
+ QScatter3DSeries *series2 = newSeries();
+ QCOMPARE(m_graph->hasSeries(series2), false);
+}
+
QTEST_MAIN(tst_scatter)
#include "tst_scatter.moc"
diff --git a/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt b/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt
new file mode 100644
index 00000000..63cd964c
--- /dev/null
+++ b/tests/auto/cpptest/q3dscene-camera/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscene-camera_datavis
+ SOURCES
+ tst_camera.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscene-camera/q3dscene-camera.pro b/tests/auto/cpptest/q3dscene-camera/q3dscene-camera.pro
deleted file mode 100644
index c575a55e..00000000
--- a/tests/auto/cpptest/q3dscene-camera/q3dscene-camera.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_camera.cpp
diff --git a/tests/auto/cpptest/q3dscene-camera/tst_camera.cpp b/tests/auto/cpptest/q3dscene-camera/tst_camera.cpp
index 0c92581d..8c8f4b45 100644
--- a/tests/auto/cpptest/q3dscene-camera/tst_camera.cpp
+++ b/tests/auto/cpptest/q3dscene-camera/tst_camera.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/Q3DCamera>
-using namespace QtDataVisualization;
-
class tst_camera: public QObject
{
Q_OBJECT
@@ -87,7 +59,7 @@ void tst_camera::initialProperties()
QCOMPARE(m_camera->cameraPreset(), Q3DCamera::CameraPresetNone);
QCOMPARE(m_camera->maxZoomLevel(), 500.0f);
QCOMPARE(m_camera->minZoomLevel(), 10.0f);
- QCOMPARE(m_camera->target(), QVector3D(0.0, 0.0, 0.0));
+ QCOMPARE(m_camera->target(), QVector3D(0.0f, 0.0f, 0.0f));
QCOMPARE(m_camera->wrapXRotation(), true);
QCOMPARE(m_camera->wrapYRotation(), false);
QCOMPARE(m_camera->xRotation(), 0.0f);
@@ -105,7 +77,7 @@ void tst_camera::initializeProperties()
m_camera->setMaxZoomLevel(1000.0f);
m_camera->setMinZoomLevel(100.0f);
- m_camera->setTarget(QVector3D(1.0, -1.0, 1.0));
+ m_camera->setTarget(QVector3D(1.0f, -1.0f, 1.0f));
m_camera->setWrapXRotation(false);
m_camera->setWrapYRotation(true);
m_camera->setXRotation(30.0f);
@@ -114,26 +86,26 @@ void tst_camera::initializeProperties()
QCOMPARE(m_camera->maxZoomLevel(), 1000.0f);
QCOMPARE(m_camera->minZoomLevel(), 100.0f);
- QCOMPARE(m_camera->target(), QVector3D(1.0, -1.0, 1.0));
+ QCOMPARE(m_camera->target(), QVector3D(1.0f, -1.0f, 1.0f));
QCOMPARE(m_camera->wrapXRotation(), false);
QCOMPARE(m_camera->wrapYRotation(), true);
QCOMPARE(m_camera->xRotation(), 30.0f);
QCOMPARE(m_camera->yRotation(), 30.0f);
QCOMPARE(m_camera->zoomLevel(), 500.0f);
- m_camera->setPosition(QVector3D(1.0, 1.0, 1.0));
+ m_camera->setPosition(QVector3D(1.0f, 1.0f, 1.0f));
// Common (from Q3DObject)
- QCOMPARE(m_camera->position(), QVector3D(1.0, 1.0, 1.0));
+ QCOMPARE(m_camera->position(), QVector3D(1.0f, 1.0f, 1.0f));
}
void tst_camera::invalidProperties()
{
- m_camera->setTarget(QVector3D(-1.5, -1.5, -1.5));
- QCOMPARE(m_camera->target(), QVector3D(-1.0, -1.0, -1.0));
+ m_camera->setTarget(QVector3D(-1.5f, -1.5f, -1.5f));
+ QCOMPARE(m_camera->target(), QVector3D(-1.0f, -1.0f, -1.0f));
- m_camera->setTarget(QVector3D(1.5, 1.5, 1.5));
- QCOMPARE(m_camera->target(), QVector3D(1.0, 1.0, 1.0));
+ m_camera->setTarget(QVector3D(1.5f, 1.5f, 1.5f));
+ QCOMPARE(m_camera->target(), QVector3D(1.0f, 1.0f, 1.0f));
m_camera->setMinZoomLevel(0.1f);
QCOMPARE(m_camera->minZoomLevel(), 1.0f);
@@ -144,7 +116,7 @@ void tst_camera::changePresets()
m_camera->setCameraPreset(Q3DCamera::CameraPresetBehind); // Will be overridden by the the following sets
m_camera->setMaxZoomLevel(1000.0f);
m_camera->setMinZoomLevel(100.0f);
- m_camera->setTarget(QVector3D(1.0, -1.0, 1.0));
+ m_camera->setTarget(QVector3D(1.0f, -1.0f, 1.0f));
m_camera->setWrapXRotation(false);
m_camera->setWrapYRotation(true);
m_camera->setXRotation(30.0f);
@@ -154,7 +126,7 @@ void tst_camera::changePresets()
QCOMPARE(m_camera->cameraPreset(), Q3DCamera::CameraPresetNone);
QCOMPARE(m_camera->maxZoomLevel(), 1000.0f);
QCOMPARE(m_camera->minZoomLevel(), 100.0f);
- QCOMPARE(m_camera->target(), QVector3D(1.0, -1.0, 1.0));
+ QCOMPARE(m_camera->target(), QVector3D(1.0f, -1.0f, 1.0f));
QCOMPARE(m_camera->wrapXRotation(), false);
QCOMPARE(m_camera->wrapYRotation(), true);
QCOMPARE(m_camera->xRotation(), 30.0f);
@@ -166,7 +138,7 @@ void tst_camera::changePresets()
QCOMPARE(m_camera->cameraPreset(), Q3DCamera::CameraPresetBehind);
QCOMPARE(m_camera->maxZoomLevel(), 1000.0f);
QCOMPARE(m_camera->minZoomLevel(), 100.0f);
- QCOMPARE(m_camera->target(), QVector3D(0.0, 0.0, 0.0));
+ QCOMPARE(m_camera->target(), QVector3D(0.0f, 0.0f, 0.0f));
QCOMPARE(m_camera->wrapXRotation(), false);
QCOMPARE(m_camera->wrapYRotation(), true);
QCOMPARE(m_camera->xRotation(), 180.0f);
@@ -178,7 +150,7 @@ void tst_camera::changePresets()
QCOMPARE(m_camera->cameraPreset(), Q3DCamera::CameraPresetNone);
QCOMPARE(m_camera->maxZoomLevel(), 1000.0f);
QCOMPARE(m_camera->minZoomLevel(), 100.0f);
- QCOMPARE(m_camera->target(), QVector3D(0.0, 0.0, 0.0));
+ QCOMPARE(m_camera->target(), QVector3D(0.0f, 0.0f, 0.0f));
QCOMPARE(m_camera->wrapXRotation(), false);
QCOMPARE(m_camera->wrapYRotation(), true);
QCOMPARE(m_camera->xRotation(), 10.0f);
diff --git a/tests/auto/cpptest/q3dscene-light/CMakeLists.txt b/tests/auto/cpptest/q3dscene-light/CMakeLists.txt
new file mode 100644
index 00000000..fc70b804
--- /dev/null
+++ b/tests/auto/cpptest/q3dscene-light/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscene-light_datavis
+ SOURCES
+ tst_light.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscene-light/q3dscene-light.pro b/tests/auto/cpptest/q3dscene-light/q3dscene-light.pro
deleted file mode 100644
index 21a3c934..00000000
--- a/tests/auto/cpptest/q3dscene-light/q3dscene-light.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_light.cpp
diff --git a/tests/auto/cpptest/q3dscene-light/tst_light.cpp b/tests/auto/cpptest/q3dscene-light/tst_light.cpp
index d5eb4507..fb5ba325 100644
--- a/tests/auto/cpptest/q3dscene-light/tst_light.cpp
+++ b/tests/auto/cpptest/q3dscene-light/tst_light.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/Q3DLight>
-using namespace QtDataVisualization;
-
class tst_light: public QObject
{
Q_OBJECT
@@ -96,8 +68,8 @@ void tst_light::initializeProperties()
QCOMPARE(m_light->isAutoPosition(), true);
// Common (from Q3DObject)
- m_light->setPosition(QVector3D(1.0, 1.0, 1.0));
- QCOMPARE(m_light->position(), QVector3D(1.0, 1.0, 1.0));
+ m_light->setPosition(QVector3D(1.0f, 1.0f, 1.0f));
+ QCOMPARE(m_light->position(), QVector3D(1.0f, 1.0f, 1.0f));
}
QTEST_MAIN(tst_light)
diff --git a/tests/auto/cpptest/q3dscene/CMakeLists.txt b/tests/auto/cpptest/q3dscene/CMakeLists.txt
new file mode 100644
index 00000000..a7c25ff2
--- /dev/null
+++ b/tests/auto/cpptest/q3dscene/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dscene_datavis
+ SOURCES
+ tst_scene.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dscene/q3dscene.pro b/tests/auto/cpptest/q3dscene/q3dscene.pro
deleted file mode 100644
index b7a0110c..00000000
--- a/tests/auto/cpptest/q3dscene/q3dscene.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_scene.cpp
diff --git a/tests/auto/cpptest/q3dscene/tst_scene.cpp b/tests/auto/cpptest/q3dscene/tst_scene.cpp
index 2b450f64..23d3392c 100644
--- a/tests/auto/cpptest/q3dscene/tst_scene.cpp
+++ b/tests/auto/cpptest/q3dscene/tst_scene.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -34,8 +8,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_scene: public QObject
{
Q_OBJECT
diff --git a/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt
new file mode 100644
index 00000000..b7285b3a
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-heightproxy/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface-heightproxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
+
+set(q3dsurface-heightproxy_resource_files
+ "customtexture.jpg"
+)
+
+qt_internal_add_resource(q3dsurface-heightproxy_datavis "q3dsurface-heightproxy"
+ PREFIX
+ "/"
+ FILES
+ ${q3dsurface-heightproxy_resource_files}
+)
diff --git a/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.pro b/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.pro
deleted file mode 100644
index 56a964d0..00000000
--- a/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
-
-RESOURCES += \
- q3dsurface-heightproxy.qrc
diff --git a/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.qrc b/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.qrc
deleted file mode 100644
index b83c7ef9..00000000
--- a/tests/auto/cpptest/q3dsurface-heightproxy/q3dsurface-heightproxy.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>customtexture.jpg</file>
- </qresource>
-</RCC>
diff --git a/tests/auto/cpptest/q3dsurface-heightproxy/tst_proxy.cpp b/tests/auto/cpptest/q3dsurface-heightproxy/tst_proxy.cpp
index e031688c..2d28398a 100644
--- a/tests/auto/cpptest/q3dsurface-heightproxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dsurface-heightproxy/tst_proxy.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -80,6 +52,7 @@ void tst_proxy::construct()
QImage image(QSize(10, 10), QImage::Format_ARGB32);
image.fill(0);
proxy = new QHeightMapSurfaceDataProxy(image);
+ QCoreApplication::processEvents();
QVERIFY(proxy);
QCoreApplication::processEvents();
QCOMPARE(proxy->columnCount(), 10);
@@ -87,6 +60,7 @@ void tst_proxy::construct()
delete proxy;
proxy = new QHeightMapSurfaceDataProxy(":/customtexture.jpg");
+ QCoreApplication::processEvents();
QVERIFY(proxy);
QCoreApplication::processEvents();
QCOMPARE(proxy->columnCount(), 24);
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt
new file mode 100644
index 00000000..835a3bad
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-modelproxy-nan/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface-modelproxy-nan_datavis
+ SOURCES
+ tst_proxy.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy-nan/tst_proxy.cpp b/tests/auto/cpptest/q3dsurface-modelproxy-nan/tst_proxy.cpp
new file mode 100644
index 00000000..c6e0841a
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-modelproxy-nan/tst_proxy.cpp
@@ -0,0 +1,266 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/QtTest>
+
+#include <QtDataVisualization/QItemModelSurfaceDataProxy>
+#include <QtDataVisualization/Q3DSurface>
+
+#include "cpptestutil.h"
+
+class tst_proxy: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void dataContainingNaNFirstRow();
+ void dataContainingNaNLastRow();
+ void dataContainingNaNFirstLastRow();
+};
+
+void tst_proxy::initTestCase()
+{
+}
+
+void tst_proxy::cleanupTestCase()
+{
+}
+
+void tst_proxy::init()
+{
+}
+
+void tst_proxy::cleanup()
+{
+}
+
+void tst_proxy::dataContainingNaNFirstRow()
+{
+ if (!CpptestUtil::isOpenGLSupported())
+ QSKIP("OpenGL not supported on this platform");
+
+ const int size = 10;
+ const int missingRow = 0;
+
+ QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy();
+ QSurface3DSeries *series = new QSurface3DSeries(proxy);
+ Q3DSurface *graph = new Q3DSurface();
+ graph->addSeries(series);
+
+ // X
+ QSurfaceDataArray *array = new QSurfaceDataArray();
+ array->reserve(size);
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D((i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(i),
+ qSin(static_cast<float>(i)), static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Y
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ (i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : qSin(static_cast<float>(i)),
+ static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Z
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ qSin(static_cast<float>(i)),
+ (i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ delete graph;
+
+}
+
+void tst_proxy::dataContainingNaNLastRow()
+{
+ if (!CpptestUtil::isOpenGLSupported())
+ QSKIP("OpenGL not supported on this platform");
+
+ const int size = 10;
+ const int missingRow = size - 1;
+ QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy();
+ QSurface3DSeries *series = new QSurface3DSeries(proxy);
+ Q3DSurface *graph = new Q3DSurface();
+ graph->addSeries(series);
+
+ // X
+ QSurfaceDataArray *array = new QSurfaceDataArray();
+ array->reserve(size);
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D((i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(i),
+ qSin(static_cast<float>(i)), static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Y
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ (i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : qSin(static_cast<float>(i)),
+ static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Z
+ for (int i = 0; i < size; i++) {
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ qSin(static_cast<float>(i)),
+ (i == missingRow) ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+ delete graph;
+}
+
+void tst_proxy::dataContainingNaNFirstLastRow()
+{
+ if (!CpptestUtil::isOpenGLSupported())
+ QSKIP("OpenGL not supported on this platform");
+
+ const int size = 10;
+ const int rowFirst = 0;
+ const int rowLast = size - 1;
+ QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy();
+ QSurface3DSeries *series = new QSurface3DSeries(proxy);
+ Q3DSurface *graph = new Q3DSurface();
+ graph->addSeries(series);
+
+ // X
+ QSurfaceDataArray *array = new QSurfaceDataArray();
+ array->reserve(size);
+ for (int i = 0; i < size; i++) {
+ bool missingRow = (i == rowFirst || i == rowLast);
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(missingRow ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(i),
+ qSin(static_cast<float>(i)), static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Y
+ for (int i = 0; i < size; i++) {
+ bool missingRow = (i == rowFirst || i == rowLast);
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ missingRow ? std::numeric_limits<float>::quiet_NaN()
+ : qSin(static_cast<float>(i)),
+ static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+
+ // Z
+ for (int i = 0; i < size; i++) {
+ bool missingRow = (i == rowFirst || i == rowLast);
+ QSurfaceDataRow *row = new QSurfaceDataRow(size);
+ for (int j = 0; j < size; j++) {
+ (*row)[j].setPosition(QVector3D(static_cast<float>(i),
+ qSin(static_cast<float>(i)),
+ missingRow ? std::numeric_limits<float>::quiet_NaN()
+ : static_cast<float>(j)));
+ }
+ *array << row;
+ }
+ proxy->resetArray(array);
+ QVERIFY(!qIsNaN(graph->axisX()->min()));
+ QVERIFY(!qIsNaN(graph->axisX()->max()));
+ QVERIFY(!qIsNaN(graph->axisY()->min()));
+ QVERIFY(!qIsNaN(graph->axisY()->max()));
+ QVERIFY(!qIsNaN(graph->axisZ()->min()));
+ QVERIFY(!qIsNaN(graph->axisZ()->max()));
+ delete graph;
+}
+
+QTEST_MAIN(tst_proxy)
+#include "tst_proxy.moc"
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt
new file mode 100644
index 00000000..4b42431a
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-modelproxy/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface-modelproxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy/q3dsurface-modelproxy.pro b/tests/auto/cpptest/q3dsurface-modelproxy/q3dsurface-modelproxy.pro
deleted file mode 100644
index ad1fe0cc..00000000
--- a/tests/auto/cpptest/q3dsurface-modelproxy/q3dsurface-modelproxy.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization widgets
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dsurface-modelproxy/tst_proxy.cpp b/tests/auto/cpptest/q3dsurface-modelproxy/tst_proxy.cpp
index eb984c1a..a442b1f3 100644
--- a/tests/auto/cpptest/q3dsurface-modelproxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dsurface-modelproxy/tst_proxy.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -35,8 +9,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -96,8 +68,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->xPosRole(), QString(""));
QCOMPARE(proxy->yPosRole(), QString("y"));
QCOMPARE(proxy->zPosRole(), QString(""));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelSurfaceDataProxy(table.model(), "row", "column", "y");
@@ -107,8 +79,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->xPosRole(), QString("column"));
QCOMPARE(proxy->yPosRole(), QString("y"));
QCOMPARE(proxy->zPosRole(), QString("row"));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelSurfaceDataProxy(table.model(), "row", "column", "x", "y", "z");
@@ -118,8 +90,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->xPosRole(), QString("x"));
QCOMPARE(proxy->yPosRole(), QString("y"));
QCOMPARE(proxy->zPosRole(), QString("z"));
- QCOMPARE(proxy->rowCategories().length(), 0);
- QCOMPARE(proxy->columnCategories().length(), 0);
+ QCOMPARE(proxy->rowCategories().size(), 0);
+ QCOMPARE(proxy->columnCategories().size(), 0);
delete proxy;
proxy = new QItemModelSurfaceDataProxy(table.model(), "row", "column", "y",
@@ -130,8 +102,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->xPosRole(), QString("column"));
QCOMPARE(proxy->yPosRole(), QString("y"));
QCOMPARE(proxy->zPosRole(), QString("row"));
- QCOMPARE(proxy->rowCategories().length(), 1);
- QCOMPARE(proxy->columnCategories().length(), 1);
+ QCOMPARE(proxy->rowCategories().size(), 1);
+ QCOMPARE(proxy->columnCategories().size(), 1);
delete proxy;
proxy = new QItemModelSurfaceDataProxy(table.model(), "row", "column", "x", "y", "z",
@@ -142,8 +114,8 @@ void tst_proxy::construct()
QCOMPARE(proxy->xPosRole(), QString("x"));
QCOMPARE(proxy->yPosRole(), QString("y"));
QCOMPARE(proxy->zPosRole(), QString("z"));
- QCOMPARE(proxy->rowCategories().length(), 1);
- QCOMPARE(proxy->columnCategories().length(), 1);
+ QCOMPARE(proxy->rowCategories().size(), 1);
+ QCOMPARE(proxy->columnCategories().size(), 1);
delete proxy;
}
@@ -155,23 +127,23 @@ void tst_proxy::initialProperties()
QCOMPARE(m_proxy->autoRowCategories(), true);
QCOMPARE(m_proxy->columnCategories(), QStringList());
QCOMPARE(m_proxy->columnRole(), QString());
- QCOMPARE(m_proxy->columnRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->columnRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->columnRoleReplace(), QString());
QVERIFY(!m_proxy->itemModel());
QCOMPARE(m_proxy->multiMatchBehavior(), QItemModelSurfaceDataProxy::MMBLast);
QCOMPARE(m_proxy->rowCategories(), QStringList());
QCOMPARE(m_proxy->rowRole(), QString());
- QCOMPARE(m_proxy->rowRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->rowRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->rowRoleReplace(), QString());
QCOMPARE(m_proxy->useModelCategories(), false);
QCOMPARE(m_proxy->xPosRole(), QString());
- QCOMPARE(m_proxy->xPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->xPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->xPosRoleReplace(), QString());
QCOMPARE(m_proxy->yPosRole(), QString());
- QCOMPARE(m_proxy->yPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->yPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->yPosRoleReplace(), QString());
QCOMPARE(m_proxy->zPosRole(), QString());
- QCOMPARE(m_proxy->zPosRolePattern(), QRegExp());
+ QCOMPARE(m_proxy->zPosRolePattern(), QRegularExpression());
QCOMPARE(m_proxy->zPosRoleReplace(), QString());
QCOMPARE(m_proxy->columnCount(), 0);
@@ -191,46 +163,46 @@ void tst_proxy::initializeProperties()
m_proxy->setAutoRowCategories(false);
m_proxy->setColumnCategories(QStringList() << "col1" << "col2");
m_proxy->setColumnRole("column");
- m_proxy->setColumnRolePattern(QRegExp("/^.*-(\\d\\d)$/"));
+ m_proxy->setColumnRolePattern(QRegularExpression("/^.*-(\\d\\d)$/"));
m_proxy->setColumnRoleReplace("\\\\1");
m_proxy->setItemModel(table.model());
m_proxy->setMultiMatchBehavior(QItemModelSurfaceDataProxy::MMBAverage);
m_proxy->setRowCategories(QStringList() << "row1" << "row2");
m_proxy->setRowRole("row");
- m_proxy->setRowRolePattern(QRegExp("/^(\\d\\d\\d\\d).*$/"));
+ m_proxy->setRowRolePattern(QRegularExpression("/^(\\d\\d\\d\\d).*$/"));
m_proxy->setRowRoleReplace("\\\\1");
m_proxy->setUseModelCategories(true);
m_proxy->setXPosRole("X");
- m_proxy->setXPosRolePattern(QRegExp("/-/"));
+ m_proxy->setXPosRolePattern(QRegularExpression("/-/"));
m_proxy->setXPosRoleReplace("\\\\1");
m_proxy->setYPosRole("Y");
- m_proxy->setYPosRolePattern(QRegExp("/-/"));
+ m_proxy->setYPosRolePattern(QRegularExpression("/-/"));
m_proxy->setYPosRoleReplace("\\\\1");
m_proxy->setZPosRole("Z");
- m_proxy->setZPosRolePattern(QRegExp("/-/"));
+ m_proxy->setZPosRolePattern(QRegularExpression("/-/"));
m_proxy->setZPosRoleReplace("\\\\1");
QCOMPARE(m_proxy->autoColumnCategories(), false);
QCOMPARE(m_proxy->autoRowCategories(), false);
- QCOMPARE(m_proxy->columnCategories().count(), 2);
+ QCOMPARE(m_proxy->columnCategories().size(), 2);
QCOMPARE(m_proxy->columnRole(), QString("column"));
- QCOMPARE(m_proxy->columnRolePattern(), QRegExp("/^.*-(\\d\\d)$/"));
+ QCOMPARE(m_proxy->columnRolePattern(), QRegularExpression("/^.*-(\\d\\d)$/"));
QCOMPARE(m_proxy->columnRoleReplace(), QString("\\\\1"));
QVERIFY(m_proxy->itemModel());
QCOMPARE(m_proxy->multiMatchBehavior(), QItemModelSurfaceDataProxy::MMBAverage);
- QCOMPARE(m_proxy->rowCategories().count(), 2);
+ QCOMPARE(m_proxy->rowCategories().size(), 2);
QCOMPARE(m_proxy->rowRole(), QString("row"));
- QCOMPARE(m_proxy->rowRolePattern(), QRegExp("/^(\\d\\d\\d\\d).*$/"));
+ QCOMPARE(m_proxy->rowRolePattern(), QRegularExpression("/^(\\d\\d\\d\\d).*$/"));
QCOMPARE(m_proxy->rowRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->useModelCategories(), true);
QCOMPARE(m_proxy->xPosRole(), QString("X"));
- QCOMPARE(m_proxy->xPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->xPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->xPosRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->yPosRole(), QString("Y"));
- QCOMPARE(m_proxy->yPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->yPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->yPosRoleReplace(), QString("\\\\1"));
QCOMPARE(m_proxy->zPosRole(), QString("Z"));
- QCOMPARE(m_proxy->zPosRolePattern(), QRegExp("/-/"));
+ QCOMPARE(m_proxy->zPosRolePattern(), QRegularExpression("/-/"));
QCOMPARE(m_proxy->zPosRoleReplace(), QString("\\\\1"));
}
@@ -264,12 +236,13 @@ void tst_proxy::multiMatch()
m_proxy->setItemModel(table.model());
m_proxy->setRowRole(table.model()->roleNames().value(Qt::DisplayRole));
m_proxy->setColumnRole(table.model()->roleNames().value(Qt::DisplayRole));
- m_proxy->setRowRolePattern(QRegExp(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setRowRolePattern(QRegularExpression(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setRowRoleReplace(QStringLiteral("\\2"));
- m_proxy->setYPosRolePattern(QRegExp(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setYPosRolePattern(QRegularExpression(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setYPosRoleReplace(QStringLiteral("\\3"));
- m_proxy->setColumnRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ m_proxy->setColumnRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
m_proxy->setColumnRoleReplace(QStringLiteral("\\1"));
+ QCoreApplication::processEvents();
QSurface3DSeries *series = new QSurface3DSeries(m_proxy);
diff --git a/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt
new file mode 100644
index 00000000..5553d635
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-proxy/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface-proxy_datavis
+ SOURCES
+ tst_proxy.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dsurface-proxy/q3dsurface-proxy.pro b/tests/auto/cpptest/q3dsurface-proxy/q3dsurface-proxy.pro
deleted file mode 100644
index b0b5d361..00000000
--- a/tests/auto/cpptest/q3dsurface-proxy/q3dsurface-proxy.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_proxy.cpp
diff --git a/tests/auto/cpptest/q3dsurface-proxy/tst_proxy.cpp b/tests/auto/cpptest/q3dsurface-proxy/tst_proxy.cpp
index cda6bcce..bc5d9edc 100644
--- a/tests/auto/cpptest/q3dsurface-proxy/tst_proxy.cpp
+++ b/tests/auto/cpptest/q3dsurface-proxy/tst_proxy.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QSurfaceDataProxy>
-using namespace QtDataVisualization;
-
class tst_proxy: public QObject
{
Q_OBJECT
@@ -47,6 +19,7 @@ private slots:
void initialProperties();
void initializeProperties();
+ void initialRow();
private:
QSurfaceDataProxy *m_proxy;
@@ -105,5 +78,14 @@ void tst_proxy::initializeProperties()
QCOMPARE(m_proxy->rowCount(), 2);
}
+void tst_proxy::initialRow()
+{
+ QSurfaceDataProxy proxy;
+ QSurfaceDataRow row{QSurfaceDataItem{QVector3D{0, 0, 0}},
+ QSurfaceDataItem{QVector3D{1, 1, 1}}};
+ proxy.addRow(new QSurfaceDataRow(row));
+ proxy.addRow(new QSurfaceDataRow(row));
+}
+
QTEST_MAIN(tst_proxy)
#include "tst_proxy.moc"
diff --git a/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt b/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt
new file mode 100644
index 00000000..283829bd
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface-series/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface-series_datavis
+ SOURCES
+ tst_series.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dsurface-series/q3dsurface-series.pro b/tests/auto/cpptest/q3dsurface-series/q3dsurface-series.pro
deleted file mode 100644
index 481653ef..00000000
--- a/tests/auto/cpptest/q3dsurface-series/q3dsurface-series.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_series.cpp
diff --git a/tests/auto/cpptest/q3dsurface-series/tst_series.cpp b/tests/auto/cpptest/q3dsurface-series/tst_series.cpp
index 97119f63..59befddc 100644
--- a/tests/auto/cpptest/q3dsurface-series/tst_series.cpp
+++ b/tests/auto/cpptest/q3dsurface-series/tst_series.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/QSurface3DSeries>
-using namespace QtDataVisualization;
-
class tst_series: public QObject
{
Q_OBJECT
@@ -94,7 +66,7 @@ void tst_series::initialProperties()
QCOMPARE(m_series->isFlatShadingEnabled(), true);
QCOMPARE(m_series->isFlatShadingSupported(), true);
QCOMPARE(m_series->selectedPoint(), m_series->invalidSelectionPosition());
-
+ QCOMPARE(m_series->wireframeColor(), QColor(Qt::black));
// Common properties. The ones identical between different series are tested in QBar3DSeries tests
QCOMPARE(m_series->itemLabelFormat(), QString("@xLabel, @yLabel, @zLabel"));
QCOMPARE(m_series->mesh(), QAbstract3DSeries::MeshSphere);
@@ -109,10 +81,12 @@ void tst_series::initializeProperties()
m_series->setDrawMode(QSurface3DSeries::DrawWireframe);
m_series->setFlatShadingEnabled(false);
m_series->setSelectedPoint(QPoint(0, 0));
+ m_series->setWireframeColor(QColor(Qt::red));
QCOMPARE(m_series->drawMode(), QSurface3DSeries::DrawWireframe);
QCOMPARE(m_series->isFlatShadingEnabled(), false);
QCOMPARE(m_series->selectedPoint(), QPoint(0, 0));
+ QCOMPARE(m_series->wireframeColor(), QColor(Qt::red));
// Common properties. The ones identical between different series are tested in QBar3DSeries tests
m_series->setMesh(QAbstract3DSeries::MeshPyramid);
diff --git a/tests/auto/cpptest/q3dsurface/CMakeLists.txt b/tests/auto/cpptest/q3dsurface/CMakeLists.txt
new file mode 100644
index 00000000..71f78da8
--- /dev/null
+++ b/tests/auto/cpptest/q3dsurface/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dsurface_datavis
+ SOURCES
+ tst_surface.cpp
+ INCLUDE_DIRECTORIES
+ ../common
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dsurface/q3dsurface.pro b/tests/auto/cpptest/q3dsurface/q3dsurface.pro
deleted file mode 100644
index 9ed3c7f5..00000000
--- a/tests/auto/cpptest/q3dsurface/q3dsurface.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-include(../common/cpptestutil.pri)
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_surface.cpp
diff --git a/tests/auto/cpptest/q3dsurface/tst_surface.cpp b/tests/auto/cpptest/q3dsurface/tst_surface.cpp
index 04fe5d21..b27dfa0c 100644
--- a/tests/auto/cpptest/q3dsurface/tst_surface.cpp
+++ b/tests/auto/cpptest/q3dsurface/tst_surface.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
@@ -33,8 +7,6 @@
#include "cpptestutil.h"
-using namespace QtDataVisualization;
-
class tst_surface: public QObject
{
Q_OBJECT
@@ -56,6 +28,7 @@ private slots:
void selectSeries();
void removeSeries();
void removeMultipleSeries();
+ void hasSeries();
private:
Q3DSurface *m_graph;
@@ -110,7 +83,7 @@ void tst_surface::construct()
void tst_surface::initialProperties()
{
QVERIFY(m_graph);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
QVERIFY(!m_graph->selectedSeries());
QCOMPARE(m_graph->flipHorizontalGrid(), false);
QCOMPARE(m_graph->axisX()->orientation(), QAbstract3DAxis::AxisOrientationX);
@@ -185,9 +158,9 @@ void tst_surface::invalidProperties()
m_graph->setLocale(QLocale("XX"));
QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
- QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
- QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
+ QCOMPARE(m_graph->aspectRatio(), 2.0);
+ QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
+ QCOMPARE(m_graph->reflectivity(), 0.5);
QCOMPARE(m_graph->locale(), QLocale("C"));
}
@@ -195,7 +168,7 @@ void tst_surface::addSeries()
{
m_graph->addSeries(newSeries());
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QVERIFY(!m_graph->selectedSeries());
}
@@ -209,7 +182,7 @@ void tst_surface::addMultipleSeries()
m_graph->addSeries(series2);
m_graph->addSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 3);
+ QCOMPARE(m_graph->seriesList().size(), 3);
}
void tst_surface::selectSeries()
@@ -219,7 +192,7 @@ void tst_surface::selectSeries()
m_graph->addSeries(series);
m_graph->seriesList()[0]->setSelectedPoint(QPoint(0, 0));
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->clearSelection();
@@ -232,7 +205,7 @@ void tst_surface::removeSeries()
m_graph->addSeries(series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
}
@@ -251,19 +224,28 @@ void tst_surface::removeMultipleSeries()
QCOMPARE(m_graph->selectedSeries(), series);
m_graph->removeSeries(series);
- QCOMPARE(m_graph->seriesList().length(), 2);
+ QCOMPARE(m_graph->seriesList().size(), 2);
QVERIFY(!m_graph->selectedSeries());
m_graph->removeSeries(series2);
- QCOMPARE(m_graph->seriesList().length(), 1);
+ QCOMPARE(m_graph->seriesList().size(), 1);
m_graph->removeSeries(series3);
- QCOMPARE(m_graph->seriesList().length(), 0);
+ QCOMPARE(m_graph->seriesList().size(), 0);
delete series;
delete series2;
delete series3;
}
+void tst_surface::hasSeries()
+{
+ QSurface3DSeries *series1 = newSeries();
+ m_graph->addSeries(series1);
+ QCOMPARE(m_graph->hasSeries(series1), true);
+ QSurface3DSeries *series2 = newSeries();
+ QCOMPARE(m_graph->hasSeries(series2), false);
+}
+
QTEST_MAIN(tst_surface)
#include "tst_surface.moc"
diff --git a/tests/auto/cpptest/q3dtheme/CMakeLists.txt b/tests/auto/cpptest/q3dtheme/CMakeLists.txt
new file mode 100644
index 00000000..0b59ed6e
--- /dev/null
+++ b/tests/auto/cpptest/q3dtheme/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(q3dtheme_datavis
+ SOURCES
+ tst_theme.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::DataVisualization
+)
diff --git a/tests/auto/cpptest/q3dtheme/q3dtheme.pro b/tests/auto/cpptest/q3dtheme/q3dtheme.pro
deleted file mode 100644
index 30a4802c..00000000
--- a/tests/auto/cpptest/q3dtheme/q3dtheme.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += testlib datavisualization
-
-TARGET = tst_cpptest
-CONFIG += console testcase
-
-TEMPLATE = app
-
-SOURCES += tst_theme.cpp
diff --git a/tests/auto/cpptest/q3dtheme/tst_theme.cpp b/tests/auto/cpptest/q3dtheme/tst_theme.cpp
index 63635b48..24503d95 100644
--- a/tests/auto/cpptest/q3dtheme/tst_theme.cpp
+++ b/tests/auto/cpptest/q3dtheme/tst_theme.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtDataVisualization/Q3DTheme>
-using namespace QtDataVisualization;
-
class tst_theme: public QObject
{
Q_OBJECT
@@ -82,10 +54,10 @@ void tst_theme::construct()
QCOMPARE(theme->ambientLightStrength(), 0.5f);
QCOMPARE(theme->backgroundColor(), QColor(Qt::black));
QCOMPARE(theme->isBackgroundEnabled(), true);
- QCOMPARE(theme->baseColors().length(), 5);
+ QCOMPARE(theme->baseColors().size(), 5);
QCOMPARE(theme->baseColors().at(0), QColor(Qt::white));
QCOMPARE(theme->baseColors().at(4), QColor(QRgb(0x6b6b6b)));
- QCOMPARE(theme->baseGradients().length(), 5);
+ QCOMPARE(theme->baseGradients().size(), 5);
QCOMPARE(theme->baseGradients().at(0).stops().at(1).second, QColor(Qt::white));
QCOMPARE(theme->baseGradients().at(4).stops().at(1).second, QColor(QRgb(0x6b6b6b)));
QCOMPARE(theme->colorStyle(), Q3DTheme::ColorStyleUniform);
@@ -115,9 +87,9 @@ void tst_theme::initialProperties()
QCOMPARE(m_theme->ambientLightStrength(), 0.25f);
QCOMPARE(m_theme->backgroundColor(), QColor(Qt::black));
QCOMPARE(m_theme->isBackgroundEnabled(), true);
- QCOMPARE(m_theme->baseColors().length(), 1);
+ QCOMPARE(m_theme->baseColors().size(), 1);
QCOMPARE(m_theme->baseColors().at(0), QColor(Qt::black));
- QCOMPARE(m_theme->baseGradients().length(), 1);
+ QCOMPARE(m_theme->baseGradients().size(), 1);
QCOMPARE(m_theme->baseGradients().at(0).stops().at(0).second, QColor(Qt::black));
QCOMPARE(m_theme->baseGradients().at(0).stops().at(1).second, QColor(Qt::white));
QCOMPARE(m_theme->colorStyle(), Q3DTheme::ColorStyleUniform);
@@ -180,10 +152,10 @@ void tst_theme::initializeProperties()
QCOMPARE(m_theme->ambientLightStrength(), 0.3f);
QCOMPARE(m_theme->backgroundColor(), QColor(Qt::red));
QCOMPARE(m_theme->isBackgroundEnabled(), false);
- QCOMPARE(m_theme->baseColors().length(), 2);
+ QCOMPARE(m_theme->baseColors().size(), 2);
QCOMPARE(m_theme->baseColors().at(0), QColor(Qt::red));
QCOMPARE(m_theme->baseColors().at(1), QColor(Qt::blue));
- QCOMPARE(m_theme->baseGradients().length(), 2);
+ QCOMPARE(m_theme->baseGradients().size(), 2);
QCOMPARE(m_theme->baseGradients().at(0), gradient1);
QCOMPARE(m_theme->baseGradients().at(0), gradient2);
QCOMPARE(m_theme->colorStyle(), Q3DTheme::ColorStyleRangeGradient);
diff --git a/tests/auto/qmltest/CMakeLists.txt b/tests/auto/qmltest/CMakeLists.txt
new file mode 100644
index 00000000..3f891438
--- /dev/null
+++ b/tests/auto/qmltest/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ *)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qmltest_datavis
+ QMLTEST
+ SOURCES
+ tst_qmltest.cpp
+ LIBRARIES
+ Qt::Gui
+ TESTDATA ${test_data}
+)
+
+set(qmltest_resource_files
+ "customitem.obj"
+ "customtexture.jpg"
+)
+
+qt_internal_add_resource(tst_qmltest_datavis "qmltest"
+ PREFIX
+ "/"
+ FILES
+ ${qmltest_resource_files}
+)
diff --git a/tests/auto/qmltest/axis3d/tst_category.qml b/tests/auto/qmltest/axis3d/tst_category.qml
index 0792ad8f..7400177e 100644
--- a/tests/auto/qmltest/axis3d/tst_category.qml
+++ b/tests/auto/qmltest/axis3d/tst_category.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/axis3d/tst_logvalue.qml b/tests/auto/qmltest/axis3d/tst_logvalue.qml
index d92f98d7..323bc194 100644
--- a/tests/auto/qmltest/axis3d/tst_logvalue.qml
+++ b/tests/auto/qmltest/axis3d/tst_logvalue.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/axis3d/tst_value.qml b/tests/auto/qmltest/axis3d/tst_value.qml
index 6e15cb85..d284a874 100644
--- a/tests/auto/qmltest/axis3d/tst_value.qml
+++ b/tests/auto/qmltest/axis3d/tst_value.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/bars3d/tst_bars.qml b/tests/auto/qmltest/bars3d/tst_bars.qml
index 75cf10a2..03638501 100644
--- a/tests/auto/qmltest/bars3d/tst_bars.qml
+++ b/tests/auto/qmltest/bars3d/tst_bars.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -40,8 +14,8 @@ Item {
function constructBars() {
bars3d = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
anchors.fill: parent
}", top)
@@ -89,6 +63,14 @@ Item {
compare(bars3d.selectedSeries, series1)
waitForRendering(top)
+ }
+
+ function test_6_has_series() {
+ bars3d.seriesList = [series1]
+ compare(bars3d.hasSeries(series1), true)
+ compare(bars3d.hasSeries(series2), false)
+
+ waitForRendering(top)
bars3d.destroy()
waitForRendering(top)
}
@@ -103,8 +85,8 @@ Item {
function constructBarsWithCustomItemList() {
bars3d = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
anchors.fill: parent
customItemList: [item1, item2]
diff --git a/tests/auto/qmltest/bars3d/tst_barseries.qml b/tests/auto/qmltest/bars3d/tst_barseries.qml
index 3db19615..7ee38d29 100644
--- a/tests/auto/qmltest/bars3d/tst_barseries.qml
+++ b/tests/auto/qmltest/bars3d/tst_barseries.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -64,6 +38,20 @@ Item {
]
}
+ ThemeColor {
+ id: rowColor1
+ color: "green"
+ }
+
+ ThemeColor {
+ id: rowColor2
+ color: "blue"
+ }
+ ThemeColor {
+ id: rowColor3
+ color: "red"
+ }
+
Bar3DSeries {
id: initialized
dataProxy: ItemModelBarDataProxy {
@@ -92,6 +80,7 @@ Item {
singleHighlightGradient: gradient3
userDefinedMesh: ":/customitem.obj"
visible: false
+ rowColors: [ rowColor1, rowColor2, rowColor3 ]
}
ItemModelBarDataProxy {
@@ -118,6 +107,7 @@ Item {
compare(initial.invalidSelectionPosition, Qt.point(-1, -1))
compare(initial.meshAngle, 0)
compare(initial.selectedBar, Qt.point(-1, -1))
+ compare(initial.rowColors.length, 0)
}
function test_2_initial_common() {
@@ -149,6 +139,7 @@ Item {
compare(initialized.dataProxy.rowCount, 2)
fuzzyCompare(initialized.meshAngle, 15.0, 0.01)
compare(initialized.selectedBar, Qt.point(0, 0))
+ compare(initialized.rowColors.length, 3)
}
function test_2_initialized_common() {
@@ -177,6 +168,7 @@ Item {
change.dataProxy = proxy1
change.meshAngle = 15.0
change.selectedBar = Qt.point(0, 0)
+ change.rowColors = [rowColor1, rowColor2, rowColor3]
}
function test_2_test_change() {
@@ -222,5 +214,10 @@ Item {
gradient1.stops[0].color = "yellow"
compare(change.baseGradient.stops[0].color, "#ffff00")
}
+
+ function test_5_change_rowColors() {
+ rowColor2.color = "purple"
+ compare(change.rowColors[1].color, "#800080")
+ }
}
}
diff --git a/tests/auto/qmltest/bars3d/tst_basic.qml b/tests/auto/qmltest/bars3d/tst_basic.qml
index 3ef7101d..881d629e 100644
--- a/tests/auto/qmltest/bars3d/tst_basic.qml
+++ b/tests/auto/qmltest/bars3d/tst_basic.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -43,22 +17,24 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
}", top)
}
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
anchors.fill: parent
multiSeriesUniform: true
barThickness: 0.1
barSpacing.width: 0.1
barSpacing.height: 0.1
+ barSeriesMargin.width: 0.3
+ barSeriesMargin.height: 0.3
barSpacingRelative: false
floorLevel: 1.0
}", top)
@@ -67,8 +43,8 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
anchors.fill: parent
}", top)
@@ -77,8 +53,8 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Bars3D {
anchors.fill: parent
selectionMode: AbstractGraph3D.SelectionNone
@@ -112,6 +88,7 @@ Item {
compare(empty.multiSeriesUniform, false, "multiSeriesUniform")
compare(empty.barThickness, 1.0, "barThickness")
compare(empty.barSpacing, Qt.size(1.0, 1.0), "barSpacing")
+ compare(empty.barSeriesMargin, Qt.size(0.0, 0.0), "barSeriesMargin")
compare(empty.barSpacingRelative, true, "barSpacingRelative")
compare(empty.seriesList.length, 0, "seriesList")
compare(empty.selectedSeries, null, "selectedSeries")
@@ -124,8 +101,6 @@ Item {
compare(empty.rowAxis.type, AbstractAxis3D.AxisTypeCategory)
compare(empty.valueAxis.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -140,6 +115,7 @@ Item {
compare(basic.multiSeriesUniform, true, "multiSeriesUniform")
compare(basic.barThickness, 0.1, "barThickness")
compare(basic.barSpacing, Qt.size(0.1, 0.1), "barSpacing")
+ compare(basic.barSeriesMargin, Qt.size(0.3, 0.3), "barSeriesMargin")
compare(basic.barSpacingRelative, false, "barSpacingRelative")
compare(basic.floorLevel, 1.0, "floorLevel")
waitForRendering(top)
@@ -149,11 +125,13 @@ Item {
basic.multiSeriesUniform = false
basic.barThickness = 0.5
basic.barSpacing = Qt.size(1.0, 0.0)
+ basic.barSeriesMargin = Qt.size(0.5, 0.0)
basic.barSpacingRelative = true
basic.floorLevel = 0.2
compare(basic.multiSeriesUniform, false, "multiSeriesUniform")
compare(basic.barThickness, 0.5, "barThickness")
compare(basic.barSpacing, Qt.size(1.0, 0.0), "barSpacing")
+ compare(basic.barSeriesMargin, Qt.size(0.5, 0.0), "barSeriesMargin")
compare(basic.barSpacingRelative, true, "barSpacingRelative")
compare(basic.floorLevel, 0.2, "floorLevel")
waitForRendering(top)
@@ -162,10 +140,10 @@ Item {
function test_3_basic_change_invalid() {
basic.barThickness = -1
basic.barSpacing = Qt.size(-1.0, -1.0)
+ basic.barSeriesMargin = Qt.size(-1.0, -1.0)
compare(basic.barThickness, -1/*0.5*/, "barThickness") // TODO: Fix once QTRD-3367 is done
compare(basic.barSpacing, Qt.size(-1.0, -1.0), "barSpacing")
- waitForRendering(top)
- basic.destroy()
+ compare(basic.barSeriesMargin, Qt.size(-1.0, -1.0), "barSeriesMargin")
waitForRendering(top)
}
}
@@ -175,13 +153,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -202,14 +183,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -243,6 +224,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -254,28 +238,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
}
+ }
+
+ TestCase {
+ name: "Bars3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false) // This test is flaky on VM, use shadowsSupported to detect being run in VM
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -290,9 +276,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/auto/qmltest/bars3d/tst_proxy.qml b/tests/auto/qmltest/bars3d/tst_proxy.qml
index ca8b8516..bd337017 100644
--- a/tests/auto/qmltest/bars3d/tst_proxy.qml
+++ b/tests/auto/qmltest/bars3d/tst_proxy.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
diff --git a/tests/auto/qmltest/custom3d/tst_customitem.qml b/tests/auto/qmltest/custom3d/tst_customitem.qml
index 862aa67a..eebfaac1 100644
--- a/tests/auto/qmltest/custom3d/tst_customitem.qml
+++ b/tests/auto/qmltest/custom3d/tst_customitem.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/custom3d/tst_customlabel.qml b/tests/auto/qmltest/custom3d/tst_customlabel.qml
index f4094efd..28f062ab 100644
--- a/tests/auto/qmltest/custom3d/tst_customlabel.qml
+++ b/tests/auto/qmltest/custom3d/tst_customlabel.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/custom3d/tst_customvolume.qml b/tests/auto/qmltest/custom3d/tst_customvolume.qml
index aa97a7e2..21630394 100644
--- a/tests/auto/qmltest/custom3d/tst_customvolume.qml
+++ b/tests/auto/qmltest/custom3d/tst_customvolume.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/input3d/tst_input.qml b/tests/auto/qmltest/input3d/tst_input.qml
index 44b06b65..a2904c53 100644
--- a/tests/auto/qmltest/input3d/tst_input.qml
+++ b/tests/auto/qmltest/input3d/tst_input.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/input3d/tst_touch.qml b/tests/auto/qmltest/input3d/tst_touch.qml
index 13af8afd..047abb97 100644
--- a/tests/auto/qmltest/input3d/tst_touch.qml
+++ b/tests/auto/qmltest/input3d/tst_touch.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/qmltest.pro b/tests/auto/qmltest/qmltest.pro
deleted file mode 100644
index 5b52595f..00000000
--- a/tests/auto/qmltest/qmltest.pro
+++ /dev/null
@@ -1,35 +0,0 @@
-TEMPLATE = app
-TARGET = tst_qmltest
-CONFIG += qmltestcase
-CONFIG += console
-SOURCES += tst_qmltest.cpp
-OTHER_FILES += bars3d/tst_basic.qml \
- bars3d/tst_bars.qml \
- bars3d/tst_barseries.qml \
- bars3d/tst_proxy.qml \
- scatter3d/tst_basic.qml \
- scatter3d/tst_scatter.qml \
- scatter3d/tst_scatterseries.qml \
- scatter3d/tst_proxy.qml \
- surface3d/tst_basic.qml \
- surface3d/tst_surface.qml \
- surface3d/tst_surfaceseries.qml \
- surface3d/tst_proxy.qml \
- surface3d/tst_heightproxy.qml \
- theme3d/tst_theme.qml \
- theme3d/tst_colorgradient.qml \
- theme3d/tst_themecolor.qml \
- custom3d/tst_customitem.qml \
- custom3d/tst_customlabel.qml \
- custom3d/tst_customvolume.qml \
- scene3d/tst_scene.qml \
- scene3d/tst_camera.qml \
- scene3d/tst_light.qml \
- input3d/tst_input.qml \
- input3d/tst_touch.qml \
- axis3d/tst_category.qml \
- axis3d/tst_value.qml \
- axis3d/tst_logvalue.qml \
-
-RESOURCES += \
- qmltest.qrc
diff --git a/tests/auto/qmltest/qmltest.qrc b/tests/auto/qmltest/qmltest.qrc
deleted file mode 100644
index 61f19086..00000000
--- a/tests/auto/qmltest/qmltest.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>customitem.obj</file>
- <file>customtexture.jpg</file>
- </qresource>
-</RCC>
diff --git a/tests/auto/qmltest/scatter3d/tst_basic.qml b/tests/auto/qmltest/scatter3d/tst_basic.qml
index a5f20d01..7320ac49 100644
--- a/tests/auto/qmltest/scatter3d/tst_basic.qml
+++ b/tests/auto/qmltest/scatter3d/tst_basic.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -43,16 +17,16 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
}", top)
}
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
}", top)
@@ -61,8 +35,8 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
}", top)
@@ -71,8 +45,8 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Scatter3D {
anchors.fill: parent
selectionMode: AbstractGraph3D.SelectionNone
@@ -112,8 +86,6 @@ Item {
compare(empty.axisZ.type, AbstractAxis3D.AxisTypeValue)
compare(empty.axisY.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -126,8 +98,6 @@ Item {
compare(basic.width, 150, "width")
compare(basic.height, 150, "height")
waitForRendering(top)
- basic.destroy()
- waitForRendering(top)
}
}
@@ -136,13 +106,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -163,14 +136,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionNone
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -204,6 +177,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -215,28 +191,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
- }
+ }
+ }
+
+ TestCase {
+ name: "Scatter3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false)
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -251,9 +229,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/auto/qmltest/scatter3d/tst_proxy.qml b/tests/auto/qmltest/scatter3d/tst_proxy.qml
index bd8c0c74..c970b82a 100644
--- a/tests/auto/qmltest/scatter3d/tst_proxy.qml
+++ b/tests/auto/qmltest/scatter3d/tst_proxy.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/scatter3d/tst_scatter.qml b/tests/auto/qmltest/scatter3d/tst_scatter.qml
index 9805b2e9..c8c8f93a 100644
--- a/tests/auto/qmltest/scatter3d/tst_scatter.qml
+++ b/tests/auto/qmltest/scatter3d/tst_scatter.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -67,5 +41,11 @@ Item {
series.seriesList[0].selectedItem = 0
compare(series.selectedSeries, series1)
}
+
+ function test_5_has_series() {
+ series.seriesList = [series1]
+ compare(series.hasSeries(series1), true)
+ compare(series.hasSeries(series2), false)
+ }
}
}
diff --git a/tests/auto/qmltest/scatter3d/tst_scatterseries.qml b/tests/auto/qmltest/scatter3d/tst_scatterseries.qml
index 7d84e83c..9e6cc80e 100644
--- a/tests/auto/qmltest/scatter3d/tst_scatterseries.qml
+++ b/tests/auto/qmltest/scatter3d/tst_scatterseries.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/scene3d/tst_camera.qml b/tests/auto/qmltest/scene3d/tst_camera.qml
index 96418ae3..c6aa446a 100644
--- a/tests/auto/qmltest/scene3d/tst_camera.qml
+++ b/tests/auto/qmltest/scene3d/tst_camera.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/scene3d/tst_light.qml b/tests/auto/qmltest/scene3d/tst_light.qml
index 68602316..faf3bce2 100644
--- a/tests/auto/qmltest/scene3d/tst_light.qml
+++ b/tests/auto/qmltest/scene3d/tst_light.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.3
diff --git a/tests/auto/qmltest/scene3d/tst_scene.qml b/tests/auto/qmltest/scene3d/tst_scene.qml
index 08a55662..b9f84202 100644
--- a/tests/auto/qmltest/scene3d/tst_scene.qml
+++ b/tests/auto/qmltest/scene3d/tst_scene.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
@@ -44,7 +18,7 @@ Item {
Bars3D {
id: initialized
scene.activeCamera: Camera3D { zoomLevel: 200 }
- scene.devicePixelRatio: 2.0
+ scene.devicePixelRatio: 2 // Will work only if actual pixel ratio is 2.0
scene.graphPositionQuery: Qt.point(0, 0)
scene.primarySubViewport: Qt.rect(0, 0, 50, 50)
scene.secondarySubViewport: Qt.rect(50, 50, 100, 100)
@@ -67,7 +41,7 @@ Item {
function test_initial() {
verify(initial.scene.activeCamera)
verify(initial.scene.activeLight)
- compare(initial.scene.devicePixelRatio, 1.0)
+ compare(initial.scene.devicePixelRatio, Screen.devicePixelRatio)
compare(initial.scene.graphPositionQuery, Qt.point(-1, -1))
compare(initial.scene.invalidSelectionPoint, Qt.point(-1, -1))
compare(initial.scene.primarySubViewport.x, 0)
@@ -93,7 +67,7 @@ Item {
function test_initialized() {
compare(initialized.scene.activeCamera.zoomLevel, 200)
- compare(initialized.scene.devicePixelRatio, 2.0)
+ compare(initialized.scene.devicePixelRatio, Screen.devicePixelRatio)
compare(initialized.scene.graphPositionQuery, Qt.point(0, 0))
compare(initialized.scene.primarySubViewport.x, 0)
compare(initialized.scene.primarySubViewport.y, 0)
diff --git a/tests/auto/qmltest/surface3d/tst_basic.qml b/tests/auto/qmltest/surface3d/tst_basic.qml
index a0a0bd19..2979d6d5 100644
--- a/tests/auto/qmltest/surface3d/tst_basic.qml
+++ b/tests/auto/qmltest/surface3d/tst_basic.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
@@ -43,16 +17,16 @@ Item {
function constructEmpty() {
empty = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
}", top)
}
function constructBasic() {
basic = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
flipHorizontalGrid: true
@@ -62,8 +36,8 @@ Item {
function constructCommon() {
common = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
}", top)
@@ -72,8 +46,8 @@ Item {
function constructCommonInit() {
common_init = Qt.createQmlObject("
- import QtQuick 2.2
- import QtDataVisualization 1.2
+ import QtQuick
+ import QtDataVisualization
Surface3D {
anchors.fill: parent
selectionMode: AbstractGraph3D.SelectionNone
@@ -114,8 +88,6 @@ Item {
compare(empty.axisZ.type, AbstractAxis3D.AxisTypeValue)
compare(empty.axisY.type, AbstractAxis3D.AxisTypeValue)
waitForRendering(top)
- empty.destroy()
- waitForRendering(top)
}
}
@@ -134,8 +106,6 @@ Item {
basic.flipHorizontalGrid = false
compare(basic.flipHorizontalGrid, false, "flipHorizontalGrid")
waitForRendering(top)
- basic.destroy()
- waitForRendering(top)
}
}
@@ -144,13 +114,16 @@ Item {
when: windowShown
function test_1_common() {
+ if (Qt.platform.os === "android")
+ return;
+
constructCommon()
+ if (common.shadowsSupported === false)
+ return;
+
compare(common.selectionMode, AbstractGraph3D.SelectionItem, "selectionMode")
compare(common.shadowQuality, AbstractGraph3D.ShadowQualityMedium, "shadowQuality")
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 4, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.msaaSamples, 4, "msaaSamples")
compare(common.theme.type, Theme3D.ThemeQt, "theme")
compare(common.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common.measureFps, false, "measureFps")
@@ -171,14 +144,14 @@ Item {
}
function test_2_change_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
common.shadowQuality = AbstractGraph3D.ShadowQualitySoftHigh
- compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
common.msaaSamples = 8
- if (common.shadowsSupported === true)
- compare(common.msaaSamples, 8, "msaaSamples")
- else
- compare(common.msaaSamples, 0, "msaaSamples")
+ compare(common.shadowQuality, AbstractGraph3D.ShadowQualitySoftHigh, "shadowQuality")
+ compare(common.msaaSamples, 8, "msaaSamples")
common.theme.type = Theme3D.ThemeRetro
common.renderingMode = AbstractGraph3D.RenderDirectToBackground_NoClear
common.measureFps = true
@@ -212,6 +185,9 @@ Item {
}
function test_3_change_invalid_common() {
+ if (Qt.platform.os === "android" || common.shadowsSupported === false)
+ return;
+
common.selectionMode = AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionColumn | AbstractGraph3D.SelectionSlice
common.theme.type = -2
common.renderingMode = -1
@@ -223,28 +199,30 @@ Item {
common.reflection = false
common.reflectivity = -1.0
compare(common.selectionMode, AbstractGraph3D.SelectionItem | AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice, "selectionMode")
- compare(common.theme.type, -2/*Theme3D.ThemeRetro*/, "theme") // TODO: Fix once QTRD-3367 is done
- compare(common.renderingMode, -1/*AbstractGraph3D.RenderDirectToBackground_NoClear*/, "renderingMode") // TODO: Fix once QTRD-3367 is done
- compare(common.aspectRatio, -1.0/*1.0*/, "aspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.horizontalAspectRatio, -2/*1*/, "horizontalAspectRatio") // TODO: Fix once QTRD-3367 is done
- compare(common.reflectivity, -1.0/*1.0*/, "reflectivity") // TODO: Fix once QTRD-3367 is done
-
- waitForRendering(top)
- common.destroy()
+ compare(common.theme.type, Theme3D.ThemeRetro, "theme")
+ compare(common.renderingMode, AbstractGraph3D.RenderDirectToBackground_NoClear, "renderingMode")
+ compare(common.aspectRatio, 1.0, "aspectRatio")
+ compare(common.horizontalAspectRatio, 1.0, "horizontalAspectRatio")
+ compare(common.reflectivity, 1.0, "reflectivity")
waitForRendering(top)
}
+ }
+
+ TestCase {
+ name: "Surface3D Common Initialized"
+ when: windowShown
+
+ function test_1_common_initialized() {
+ if (Qt.platform.os === "android")
+ return;
- function test_4_common_initialized() {
constructCommonInit()
+ if (common_init.shadowsSupported === false)
+ return;
compare(common_init.selectionMode, AbstractGraph3D.SelectionNone, "selectionMode")
- if (common_init.shadowsSupported === true) {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
- compare(common_init.msaaSamples, 2, "msaaSamples")
- } else {
- tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityNone)
- compare(common_init.msaaSamples, 0, "msaaSamples")
- }
+ tryCompare(common_init, "shadowQuality", AbstractGraph3D.ShadowQualityLow)
+ compare(common_init.msaaSamples, 2, "msaaSamples")
compare(common_init.theme.type, Theme3D.ThemeUserDefined, "theme")
compare(common_init.renderingMode, AbstractGraph3D.RenderIndirect, "renderingMode")
compare(common_init.measureFps, true, "measureFps")
@@ -259,9 +237,6 @@ Item {
compare(common_init.reflectivity, 0.1, "reflectivity")
compare(common_init.locale, Qt.locale("UK"), "locale")
compare(common_init.margin, 0.2, "margin")
-
- waitForRendering(top)
- common_init.destroy();
waitForRendering(top)
}
}
diff --git a/tests/auto/qmltest/surface3d/tst_heightproxy.qml b/tests/auto/qmltest/surface3d/tst_heightproxy.qml
index f92d8198..c3c5b71d 100644
--- a/tests/auto/qmltest/surface3d/tst_heightproxy.qml
+++ b/tests/auto/qmltest/surface3d/tst_heightproxy.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/surface3d/tst_proxy.qml b/tests/auto/qmltest/surface3d/tst_proxy.qml
index eddad5a2..57058f36 100644
--- a/tests/auto/qmltest/surface3d/tst_proxy.qml
+++ b/tests/auto/qmltest/surface3d/tst_proxy.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/surface3d/tst_surface.qml b/tests/auto/qmltest/surface3d/tst_surface.qml
index 2ec96007..4c52d184 100644
--- a/tests/auto/qmltest/surface3d/tst_surface.qml
+++ b/tests/auto/qmltest/surface3d/tst_surface.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -67,5 +41,11 @@ Item {
series.seriesList[0].selectedPoint = Qt.point(0, 0)
compare(series.selectedSeries, series1)
}
+
+ function test_5_has_series() {
+ series.seriesList = [series1]
+ compare(series.hasSeries(series1), true)
+ compare(series.hasSeries(series2), false)
+ }
}
}
diff --git a/tests/auto/qmltest/surface3d/tst_surfaceseries.qml b/tests/auto/qmltest/surface3d/tst_surfaceseries.qml
index a4593c94..7d681021 100644
--- a/tests/auto/qmltest/surface3d/tst_surfaceseries.qml
+++ b/tests/auto/qmltest/surface3d/tst_surfaceseries.qml
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
-import QtDataVisualization 1.2
+import QtDataVisualization
import QtTest 1.0
Item {
@@ -79,6 +53,7 @@ Item {
flatShadingEnabled: false
selectedPoint: Qt.point(0, 0)
textureFile: ":\customtexture.jpg"
+ wireframeColor: "red"
baseColor: "blue"
baseGradient: gradient1
@@ -123,6 +98,7 @@ Item {
compare(initial.flatShadingEnabled, true)
compare(initial.flatShadingSupported, true)
compare(initial.selectedPoint, Qt.point(-1, -1))
+ compare(initial.wireframeColor, "#000000")
}
function test_2_initial_common() {
@@ -156,6 +132,7 @@ Item {
compare(initialized.flatShadingEnabled, false)
compare(initialized.selectedPoint, Qt.point(0, 0))
compare(initialized.textureFile, ":\customtexture.jpg")
+ compare(initialized.wireframeColor, "#ff0000")
}
function test_2_initialized_common() {
@@ -187,6 +164,7 @@ Item {
change.flatShadingEnabled = false
change.selectedPoint = Qt.point(0, 0)
change.textureFile = ":\customtexture.jpg"
+ change.wireframeColor = "green"
}
function test_2_test_change() {
@@ -196,6 +174,7 @@ Item {
compare(change.flatShadingEnabled, false)
compare(change.selectedPoint, Qt.point(0, 0))
compare(change.textureFile, ":\customtexture.jpg")
+ compare(change.wireframeColor, "#008000")
}
function test_3_change_common() {
diff --git a/tests/auto/qmltest/theme3d/tst_colorgradient.qml b/tests/auto/qmltest/theme3d/tst_colorgradient.qml
index e1a25400..6d2cdf35 100644
--- a/tests/auto/qmltest/theme3d/tst_colorgradient.qml
+++ b/tests/auto/qmltest/theme3d/tst_colorgradient.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/theme3d/tst_theme.qml b/tests/auto/qmltest/theme3d/tst_theme.qml
index 880ff87b..3b44a5c8 100644
--- a/tests/auto/qmltest/theme3d/tst_theme.qml
+++ b/tests/auto/qmltest/theme3d/tst_theme.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/theme3d/tst_themecolor.qml b/tests/auto/qmltest/theme3d/tst_themecolor.qml
index e7b4c1ca..6e662deb 100644
--- a/tests/auto/qmltest/theme3d/tst_themecolor.qml
+++ b/tests/auto/qmltest/theme3d/tst_themecolor.qml
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtDataVisualization 1.2
diff --git a/tests/auto/qmltest/tst_qmltest.cpp b/tests/auto/qmltest/tst_qmltest.cpp
index 6e2e0318..86482f65 100644
--- a/tests/auto/qmltest/tst_qmltest.cpp
+++ b/tests/auto/qmltest/tst_qmltest.cpp
@@ -1,31 +1,34 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtQuickTest/quicktest.h>
-QUICK_TEST_MAIN(qmltest)
+
+class tst_qmltest: public QObject
+{
+ Q_OBJECT
+private slots:
+ void skiptest() { QSKIP("This test will fail, skipping."); };
+};
+
+int main(int argc, char **argv)
+{
+ if (!qEnvironmentVariableIsEmpty("QEMU_LD_PREFIX")) {
+ qWarning("This test would fail due to QEMU emulation shortcomings, so it will be skipped.");
+ tst_qmltest skip;
+ return QTest::qExec(&skip, argc, argv);
+ }
+#ifdef Q_OS_QNX
+ if (qEnvironmentVariable("QTEST_ENVIRONMENT").split(' ').contains("ci") &&
+ qEnvironmentVariable("QT_QPA_PLATFORM").split(' ').contains("offscreen")
+ ) {
+ qWarning("This test would fail on CI QNX QEMU without OpenGL support, so it will be skipped.");
+ tst_qmltest skip;
+ return QTest::qExec(&skip, argc, argv);
+ }
+#endif
+ qputenv("QSG_RHI_BACKEND", "opengl");
+ QTEST_SET_MAIN_SOURCE_PATH
+ return quick_test_main(argc, argv, "qmltest", QUICK_TEST_SOURCE_DIR);
+}
+
+#include "tst_qmltest.moc"
diff --git a/tests/manual/CMakeLists.txt b/tests/manual/CMakeLists.txt
new file mode 100644
index 00000000..32112c6b
--- /dev/null
+++ b/tests/manual/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(TARGET Qt::Quick)
+ add_subdirectory(qmldynamicdata)
+ add_subdirectory(qmlmultitest)
+ add_subdirectory(qmlvolume)
+ add_subdirectory(qmlperf)
+ add_subdirectory(qmlgradient)
+ add_subdirectory(qmlheightmap)
+ add_subdirectory(qmlbarsrowcolors)
+endif()
+if(NOT ANDROID AND NOT IOS AND NOT WINRT)
+ add_subdirectory(barstest)
+ add_subdirectory(scattertest)
+ add_subdirectory(surfacetest)
+ add_subdirectory(multigraphs)
+ add_subdirectory(directional)
+ add_subdirectory(itemmodeltest)
+ add_subdirectory(volumetrictest)
+ add_subdirectory(minimalbars)
+ add_subdirectory(minimalscatter)
+ add_subdirectory(minimalsurface)
+endif()
diff --git a/tests/manual/barstest/CMakeLists.txt b/tests/manual/barstest/CMakeLists.txt
new file mode 100644
index 00000000..391b98aa
--- /dev/null
+++ b/tests/manual/barstest/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(barstest
+ GUI
+ SOURCES
+ chart.cpp chart.h
+ sliderwrapper.cpp sliderwrapper.h
+ buttonwrapper.cpp buttonwrapper.h
+ custominputhandler.cpp custominputhandler.h
+ main.cpp
+ NO_PCH_SOURCES
+ chart.cpp # undef QT_NO_FOREACH
+ )
+target_link_libraries(barstest PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
+
+set(barstest_resource_files
+ "shuttle.obj"
+ "shuttle.png"
+ )
+
+qt_internal_add_resource(barstest "barstest"
+ PREFIX
+ "/"
+ FILES
+ ${barstest_resource_files}
+ )
diff --git a/tests/manual/barstest/buttonwrapper.cpp b/tests/manual/barstest/buttonwrapper.cpp
new file mode 100644
index 00000000..c8eef0c7
--- /dev/null
+++ b/tests/manual/barstest/buttonwrapper.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "buttonwrapper.h"
+#include <QPushButton>
+
+ButtonWrapper::ButtonWrapper(QPushButton *button)
+{
+ m_button = button;
+}
+
+void ButtonWrapper::setEnabled(int state)
+{
+ m_button->setEnabled(state);
+}
diff --git a/tests/manual/barstest/buttonwrapper.h b/tests/manual/barstest/buttonwrapper.h
new file mode 100644
index 00000000..d0112117
--- /dev/null
+++ b/tests/manual/barstest/buttonwrapper.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#ifndef BUTTONWRAPPER_H
+#define BUTTONWRAPPER_H
+
+#include <QObject>
+class QPushButton;
+
+class ButtonWrapper : public QObject
+{
+ Q_OBJECT
+public:
+ ButtonWrapper(QPushButton *button);
+
+public Q_SLOTS:
+ void setEnabled(int state);
+
+private:
+ QPushButton *m_button;
+};
+
+#endif // BUTTONWRAPPER_H
diff --git a/tests/manual/barstest/chart.cpp b/tests/manual/barstest/chart.cpp
index 2cc52ecf..d427921a 100644
--- a/tests/manual/barstest/chart.cpp
+++ b/tests/manual/barstest/chart.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "chart.h"
#include "custominputhandler.h"
@@ -42,8 +18,6 @@
#include <QtCore/QElapsedTimer>
#include <QtCore/qmath.h>
-using namespace QtDataVisualization;
-
const QString celsiusString = QString(QChar(0xB0)) + "C";
GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
@@ -56,6 +30,8 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
m_static(true),
m_barSpacingX(0.1f),
m_barSpacingZ(0.1f),
+ m_barSeriesMarginX(0.0f),
+ m_barSeriesMarginZ(0.0f),
m_fontSize(20),
m_segments(10),
m_subSegments(3),
@@ -268,7 +244,7 @@ void GraphModifier::start()
restart(false);
}
-void GraphModifier::restart(bool dynamicData)
+void GraphModifier::restart(int dynamicData)
{
m_static = !dynamicData;
@@ -343,7 +319,7 @@ void GraphModifier::releaseSeries()
m_graph->removeSeries(series);
}
-void GraphModifier::flipViews()
+void GraphModifier::flipViews(bool checked)
{
m_graph->scene()->setSecondarySubviewOnTop(!m_graph->scene()->isSecondarySubviewOnTop());
qDebug() << "secondary subview on top:" << m_graph->scene()->isSecondarySubviewOnTop();
@@ -686,7 +662,9 @@ void GraphModifier::changeSelectionMode()
{
static int selectionMode = m_graph->selectionMode();
- if (++selectionMode > (QAbstract3DGraph::SelectionItemAndColumn | QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionMultiSeries))
+ if (++selectionMode > (int)(QAbstract3DGraph::SelectionItemAndColumn |
+ QAbstract3DGraph::SelectionSlice |
+ QAbstract3DGraph::SelectionMultiSeries))
selectionMode = QAbstract3DGraph::SelectionNone;
m_graph->setSelectionMode((QAbstract3DGraph::SelectionFlag)selectionMode);
@@ -733,7 +711,7 @@ void GraphModifier::handleSelectionChange(const QPoint &position)
qDebug() << "Selected bar position:" << position << "series:" << index;
}
-void GraphModifier::setUseNullInputHandler(bool useNull)
+void GraphModifier::setUseNullInputHandler(int useNull)
{
qDebug() << "setUseNullInputHandler" << useNull;
if (m_useNullInputHandler == useNull)
@@ -826,7 +804,7 @@ QBarDataArray *GraphModifier::makeDummyData()
}
// Executes one step of the primary series test
-void GraphModifier::primarySeriesTest()
+void GraphModifier::primarySeriesTest(bool checked)
{
static int nextStep = 0;
@@ -1048,7 +1026,7 @@ void GraphModifier::insertRemoveTestToggle()
}
}
-void GraphModifier::toggleRotation()
+void GraphModifier::toggleRotation(bool checked)
{
if (m_rotationTimer.isActive())
m_rotationTimer.stop();
@@ -1056,7 +1034,7 @@ void GraphModifier::toggleRotation()
m_rotationTimer.start(20);
}
-void GraphModifier::useLogAxis()
+void GraphModifier::useLogAxis(bool checked)
{
static int counter = -1;
static QLogValue3DAxisFormatter *logFormatter = 0;
@@ -1212,7 +1190,7 @@ void GraphModifier::addRemoveSeries()
counter++;
}
-void GraphModifier::testItemAndRowChanges()
+void GraphModifier::testItemAndRowChanges(bool checked)
{
static int counter = 0;
const int rowCount = 12;
@@ -1602,7 +1580,7 @@ void GraphModifier::rotateY(int rotation)
m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
}
-void GraphModifier::setFpsMeasurement(bool enable)
+void GraphModifier::setFpsMeasurement(int enable)
{
m_graph->setMeasureFps(enable);
}
@@ -1624,6 +1602,18 @@ void GraphModifier::setSpacingSpecsZ(int spacing)
m_graph->setBarSpacing(QSizeF(m_barSpacingX, m_barSpacingZ));
}
+void GraphModifier::setMarginX(int margin)
+{
+ m_barSeriesMarginX = (float)margin / 100.0f;
+ m_graph->setBarSeriesMargin(QSizeF(m_barSeriesMarginX, m_barSeriesMarginZ));
+}
+
+void GraphModifier::setMarginZ(int margin)
+{
+ m_barSeriesMarginZ = (float)margin / 100.0f;
+ m_graph->setBarSeriesMargin(QSizeF(m_barSeriesMarginX, m_barSeriesMarginZ));
+}
+
void GraphModifier::setSampleCountX(int samples)
{
m_columnCount = samples;
@@ -1659,7 +1649,7 @@ void GraphModifier::setMaxY(int max)
m_maxval = max;
}
-void GraphModifier::changeColorStyle()
+void GraphModifier::changeColorStyle(bool checked)
{
int style = m_graph->activeTheme()->colorStyle();
@@ -1669,7 +1659,7 @@ void GraphModifier::changeColorStyle()
m_graph->activeTheme()->setColorStyle(Q3DTheme::ColorStyle(style));
}
-void GraphModifier::useOwnTheme()
+void GraphModifier::useOwnTheme(bool checked)
{
// Own theme is persistent, any changes to it via UI will be remembered
if (!m_ownTheme) {
@@ -1708,7 +1698,7 @@ void GraphModifier::changeBaseColor(const QColor &color)
m_graph->activeTheme()->setBaseColors(colors);
}
-void GraphModifier::setGradient()
+void GraphModifier::setGradient(bool checked)
{
QLinearGradient barGradient(0, 0, 1, 100);
barGradient.setColorAt(1.0, Qt::lightGray);
@@ -1748,7 +1738,7 @@ void GraphModifier::toggleMultiseriesScaling()
m_graph->setMultiSeriesUniform(!m_graph->isMultiSeriesUniform());
}
-void GraphModifier::setReflection(bool enabled)
+void GraphModifier::setReflection(int enabled)
{
m_graph->setReflection(enabled);
}
diff --git a/tests/manual/barstest/chart.h b/tests/manual/barstest/chart.h
index eb5b948b..ae72318e 100644
--- a/tests/manual/barstest/chart.h
+++ b/tests/manual/barstest/chart.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CHARTMODIFIER_H
#define CHARTMODIFIER_H
@@ -42,8 +16,6 @@
#include <QTimer>
#include <QLabel>
-using namespace QtDataVisualization;
-
class GraphModifier : public QObject
{
Q_OBJECT
@@ -70,13 +42,15 @@ public:
void changeFontSize(int fontsize);
void rotateX(int rotation);
void rotateY(int rotation);
- void setFpsMeasurement(bool enable);
+ void setFpsMeasurement(int state);
void setBackgroundEnabled(int enabled);
void setGridEnabled(int enabled);
void setSpecsRatio(int barwidth);
void setSpecsZ(int bardepth);
void setSpacingSpecsX(int spacing);
void setSpacingSpecsZ(int spacing);
+ void setMarginX(int margin);
+ void setMarginZ(int margin);
void setSampleCountX(int samples);
void setSampleCountZ(int samples);
void setMinX(int min);
@@ -84,43 +58,43 @@ public:
void setMinY(int min);
void setMaxY(int max);
void start();
- void restart(bool dynamicData);
+ void restart(int dynamicData);
void selectBar();
void swapAxis();
void releaseAxes();
void releaseSeries();
void createMassiveArray();
- void useOwnTheme();
+ void useOwnTheme(bool checked);
void changeBaseColor(const QColor &color);
- void changeColorStyle();
+ void changeColorStyle(bool checked);
void showFiveSeries();
QBarDataArray *makeDummyData();
- void primarySeriesTest();
+ void primarySeriesTest(bool checked);
void insertRemoveTestToggle();
- void toggleRotation();
- void useLogAxis();
+ void toggleRotation(bool checked);
+ void useLogAxis(bool checked);
void changeValueAxisFormat(const QString & text);
void changeLogBase(const QString & text);
void setFpsLabel(QLabel *fpsLabel) { m_fpsLabel = fpsLabel; }
void addRemoveSeries();
- void testItemAndRowChanges();
+ void testItemAndRowChanges(bool checked);
void reverseValueAxis(int enabled);
void setInputHandlerRotationEnabled(int enabled);
void setInputHandlerZoomEnabled(int enabled);
void setInputHandlerSelectionEnabled(int enabled);
void setInputHandlerZoomAtTargetEnabled(int enabled);
- void setReflection(bool enabled);
+ void setReflection(int enabled);
void setReflectivity(int value);
void toggleCustomItem();
public Q_SLOTS:
- void flipViews();
- void setGradient();
+ void flipViews(bool checked);
+ void setGradient(bool checked);
void toggleMultiseriesScaling();
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
void handleSelectionChange(const QPoint &position);
- void setUseNullInputHandler(bool useNull);
+ void setUseNullInputHandler(int useNull);
void changeValueAxisSegments(int value);
void handleRowAxisChanged(QCategory3DAxis *axis);
@@ -152,9 +126,11 @@ private:
int m_rowCount;
float m_xRotation;
float m_yRotation;
- bool m_static;
+ int m_static;
float m_barSpacingX;
float m_barSpacingZ;
+ float m_barSeriesMarginX;
+ float m_barSeriesMarginZ;
int m_fontSize;
int m_segments;
int m_subSegments;
diff --git a/tests/manual/barstest/custominputhandler.cpp b/tests/manual/barstest/custominputhandler.cpp
index e6fe9aa5..2740fddb 100644
--- a/tests/manual/barstest/custominputhandler.cpp
+++ b/tests/manual/barstest/custominputhandler.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "custominputhandler.h"
diff --git a/tests/manual/barstest/custominputhandler.h b/tests/manual/barstest/custominputhandler.h
index ef07d5ec..ee762cee 100644
--- a/tests/manual/barstest/custominputhandler.h
+++ b/tests/manual/barstest/custominputhandler.h
@@ -1,47 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CUSTOMINPUTHANDLER_H
#define CUSTOMINPUTHANDLER_H
#include <QtDataVisualization/QAbstract3DInputHandler>
-using namespace QtDataVisualization;
-
class CustomInputHandler : public QAbstract3DInputHandler
{
Q_OBJECT
public:
explicit CustomInputHandler(QObject *parent = 0);
- virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
- virtual void wheelEvent(QWheelEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) override;
+ virtual void wheelEvent(QWheelEvent *event) override;
};
#endif
diff --git a/tests/manual/barstest/main.cpp b/tests/manual/barstest/main.cpp
index 88c1884f..178b91f3 100644
--- a/tests/manual/barstest/main.cpp
+++ b/tests/manual/barstest/main.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "chart.h"
+#include "sliderwrapper.h"
+#include "buttonwrapper.h"
#include <QApplication>
#include <QWidget>
@@ -52,6 +28,7 @@
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
// Test creating custom items before graph is created
@@ -303,6 +280,18 @@ int main(int argc, char **argv)
spacingSliderZ->setValue(10);
spacingSliderZ->setMaximum(200);
+ QSlider *marginSliderX = new QSlider(Qt::Horizontal, widget);
+ marginSliderX->setTickInterval(1);
+ marginSliderX->setMinimum(0);
+ marginSliderX->setValue(0);
+ marginSliderX->setMaximum(100);
+
+ QSlider *marginSliderZ = new QSlider(Qt::Horizontal, widget);
+ marginSliderZ->setTickInterval(1);
+ marginSliderZ->setMinimum(0);
+ marginSliderZ->setValue(0);
+ marginSliderZ->setMaximum(100);
+
QSlider *sampleSliderX = new QSlider(Qt::Horizontal, widget);
sampleSliderX->setTickInterval(1);
sampleSliderX->setMinimum(1);
@@ -432,6 +421,9 @@ int main(int argc, char **argv)
vLayout2->addWidget(new QLabel(QStringLiteral("Adjust relative bar spacing")), 0, Qt::AlignTop);
vLayout2->addWidget(spacingSliderX, 0, Qt::AlignTop);
vLayout2->addWidget(spacingSliderZ, 0, Qt::AlignTop);
+ vLayout2->addWidget(new QLabel(QStringLiteral("Adjust margin")), 0, Qt::AlignTop);
+ vLayout2->addWidget(marginSliderX, 0, Qt::AlignTop);
+ vLayout2->addWidget(marginSliderZ, 0, Qt::AlignTop);
vLayout2->addWidget(new QLabel(QStringLiteral("Adjust sample count")), 0, Qt::AlignTop);
vLayout2->addWidget(sampleSliderX, 0, Qt::AlignTop);
vLayout2->addWidget(sampleSliderZ, 0, Qt::AlignTop);
@@ -471,7 +463,7 @@ int main(int argc, char **argv)
vLayout3->addWidget(toggleCustomItemButton, 0, Qt::AlignTop);
vLayout3->addWidget(new QLabel(QStringLiteral("Adjust floor level")), 0, Qt::AlignTop);
vLayout3->addWidget(floorLevelSlider, 0, Qt::AlignTop);
- vLayout3->addWidget(new QLabel(QStringLiteral("Adjust margin")), 0, Qt::AlignTop);
+ vLayout3->addWidget(new QLabel(QStringLiteral("Adjust bar series margin")), 0, Qt::AlignTop);
vLayout3->addWidget(marginSlider, 1, Qt::AlignTop);
widget->show();
@@ -488,6 +480,9 @@ int main(int argc, char **argv)
QObject::connect(spacingSliderZ, &QSlider::valueChanged, modifier,
&GraphModifier::setSpacingSpecsZ);
+ QObject::connect(marginSliderX, &QSlider::valueChanged, modifier, &GraphModifier::setMarginX);
+ QObject::connect(marginSliderZ, &QSlider::valueChanged, modifier, &GraphModifier::setMarginZ);
+
QObject::connect(sampleSliderX, &QSlider::valueChanged, modifier,
&GraphModifier::setSampleCountX);
QObject::connect(sampleSliderZ, &QSlider::valueChanged, modifier,
@@ -594,12 +589,14 @@ int main(int argc, char **argv)
QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, modifier,
&GraphModifier::setUseNullInputHandler);
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
- &QSlider::setEnabled);
+ SliderWrapper *rotationSliderWrapperX = new SliderWrapper(rotationSliderX);
+ SliderWrapper *rotationSliderWrapperY = new SliderWrapper(rotationSliderY);
+ QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderWrapperX,
+ &SliderWrapper::setEnabled);
QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
&QSlider::setValue);
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
- &QSlider::setEnabled);
+ QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderWrapperY,
+ &SliderWrapper::setEnabled);
QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
&QSlider::setValue);
@@ -614,40 +611,59 @@ int main(int argc, char **argv)
QObject::connect(toggleCustomItemButton, &QPushButton::clicked, modifier,
&GraphModifier::toggleCustomItem);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, addDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, addMultiDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, insertDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, insertMultiDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeSingleDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowsButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowsButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, massiveArrayButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderX,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderZ,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderX,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderZ,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderY,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, maxSliderY,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, swapAxisButton,
- &QSlider::setEnabled);
+ ButtonWrapper *addDataButtonWrapper = new ButtonWrapper(addDataButton);
+ ButtonWrapper *addMultiDataButtonWrapper = new ButtonWrapper(addMultiDataButton);
+ ButtonWrapper *insertDataButtonWrapper = new ButtonWrapper(insertDataButton);
+ ButtonWrapper *insertMultiDataButtonWrapper = new ButtonWrapper(insertMultiDataButton);
+ ButtonWrapper *changeSingleDataButtonWrapper = new ButtonWrapper(changeSingleDataButton);
+ ButtonWrapper *changeRowButtonWrapper = new ButtonWrapper(changeRowButton);
+ ButtonWrapper *changeRowsButtonWrapper = new ButtonWrapper(changeRowsButton);
+ ButtonWrapper *massiveArrayButtonWrapper = new ButtonWrapper(massiveArrayButton);
+ ButtonWrapper *removeRowButtonWrapper = new ButtonWrapper(removeRowButton);
+ ButtonWrapper *removeRowsButtonWrapper = new ButtonWrapper(removeRowsButton);
+
+ SliderWrapper *sampleSliderWrapperX = new SliderWrapper(sampleSliderX);
+ SliderWrapper *sampleSliderWrapperZ = new SliderWrapper(sampleSliderZ);
+ SliderWrapper *minSliderWrapperX = new SliderWrapper(minSliderX);
+ SliderWrapper *minSliderWrapperZ = new SliderWrapper(minSliderZ);
+ SliderWrapper *minSliderWrapperY = new SliderWrapper(minSliderY);
+ SliderWrapper *maxSliderWrapperY = new SliderWrapper(maxSliderY);
+ ButtonWrapper *swapAxisButtonWrapper = new ButtonWrapper(swapAxisButton);
+
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, addDataButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, addMultiDataButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, insertDataButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, insertMultiDataButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeSingleDataButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowsButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowsButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, massiveArrayButtonWrapper,
+ &ButtonWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderWrapperX,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderWrapperZ,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderWrapperX,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderWrapperZ,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderWrapperY,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, maxSliderWrapperY,
+ &SliderWrapper::setEnabled);
+ QObject::connect(staticCheckBox, &QCheckBox::stateChanged, swapAxisButtonWrapper,
+ &ButtonWrapper::setEnabled);
QObject::connect(staticCheckBox, &QCheckBox::stateChanged, modifier, &GraphModifier::restart);
modifier->setFpsLabel(fpsLabel);
diff --git a/tests/manual/barstest/sliderwrapper.cpp b/tests/manual/barstest/sliderwrapper.cpp
new file mode 100644
index 00000000..bdfeb4f7
--- /dev/null
+++ b/tests/manual/barstest/sliderwrapper.cpp
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "sliderwrapper.h"
+
+SliderWrapper::SliderWrapper(QSlider *slider)
+{
+ m_slider = slider;
+}
+
+void SliderWrapper::setEnabled(int enabled)
+{
+ m_slider->setEnabled(enabled);
+}
diff --git a/tests/manual/barstest/sliderwrapper.h b/tests/manual/barstest/sliderwrapper.h
new file mode 100644
index 00000000..f6d9404a
--- /dev/null
+++ b/tests/manual/barstest/sliderwrapper.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#ifndef SLIDERWRAPPER_H
+#define SLIDERWRAPPER_H
+#include <QObject>
+#include <QSlider>
+
+class SliderWrapper : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit SliderWrapper(QSlider *slider);
+
+public Q_SLOTS:
+ void setEnabled(int enabled);
+
+private:
+ QSlider *m_slider = nullptr;
+
+};
+
+#endif // SLIDERWRAPPER_H
diff --git a/tests/manual/directional/CMakeLists.txt b/tests/manual/directional/CMakeLists.txt
new file mode 100644
index 00000000..43b961e0
--- /dev/null
+++ b/tests/manual/directional/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(directional
+ GUI
+ SOURCES
+ main.cpp
+ scatterdatamodifier.cpp scatterdatamodifier.h
+ )
+target_link_libraries(directional PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/directional/main.cpp b/tests/manual/directional/main.cpp
index a3e7bb8b..66b80d40 100644
--- a/tests/manual/directional/main.cpp
+++ b/tests/manual/directional/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterdatamodifier.h"
@@ -43,6 +17,7 @@
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
Q3DScatter *graph = new Q3DScatter();
QWidget *container = QWidget::createWindowContainer(graph);
diff --git a/tests/manual/directional/scatterdatamodifier.cpp b/tests/manual/directional/scatterdatamodifier.cpp
index 2a98625d..b537a8a2 100644
--- a/tests/manual/directional/scatterdatamodifier.cpp
+++ b/tests/manual/directional/scatterdatamodifier.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterdatamodifier.h"
#include <QtDataVisualization/qscatterdataproxy.h>
@@ -37,8 +11,6 @@
#include <qmath.h>
#include <QComboBox>
-using namespace QtDataVisualization;
-
const int numberOfCols = 8;
const int numberOfRows = 8;
const float limit = 8.0f;
diff --git a/tests/manual/directional/scatterdatamodifier.h b/tests/manual/directional/scatterdatamodifier.h
index 447e1603..c794d17c 100644
--- a/tests/manual/directional/scatterdatamodifier.h
+++ b/tests/manual/directional/scatterdatamodifier.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
@@ -35,8 +9,6 @@
#include <QtGui/QFont>
#include <QtCore/QTimer>
-using namespace QtDataVisualization;
-
class ScatterDataModifier : public QObject
{
Q_OBJECT
@@ -67,7 +39,7 @@ Q_SIGNALS:
void backgroundEnabledChanged(bool enabled);
void gridEnabledChanged(bool enabled);
void shadowQualityChanged(int quality);
- void fontChanged(QFont font);
+ void fontChanged(const QFont &font);
private:
Q3DScatter *m_graph;
diff --git a/tests/manual/galaxy/CMakeLists.txt b/tests/manual/galaxy/CMakeLists.txt
new file mode 100644
index 00000000..f089ed7d
--- /dev/null
+++ b/tests/manual/galaxy/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+qt_add_executable(galaxy
+ cumulativedistributor.cpp cumulativedistributor.h
+ galaxydata.cpp galaxydata.h
+ main.cpp
+ star.cpp star.h
+ )
+target_link_libraries(galaxy PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ )
diff --git a/tests/manual/galaxy/cumulativedistributor.cpp b/tests/manual/galaxy/cumulativedistributor.cpp
index 4506480c..961583ff 100644
--- a/tests/manual/galaxy/cumulativedistributor.cpp
+++ b/tests/manual/galaxy/cumulativedistributor.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
/*
* Galaxy creation code obtained from http://beltoforion.de/galaxy/galaxy_en.html
diff --git a/tests/manual/galaxy/cumulativedistributor.h b/tests/manual/galaxy/cumulativedistributor.h
index 56276e98..60c48ccc 100644
--- a/tests/manual/galaxy/cumulativedistributor.h
+++ b/tests/manual/galaxy/cumulativedistributor.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
/*
* Galaxy creation code obtained from http://beltoforion.de/galaxy/galaxy_en.html
diff --git a/tests/manual/galaxy/galaxydata.cpp b/tests/manual/galaxy/galaxydata.cpp
index c49e07fd..73ccf9c5 100644
--- a/tests/manual/galaxy/galaxydata.cpp
+++ b/tests/manual/galaxy/galaxydata.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
/*
* Galaxy creation code obtained from http://beltoforion.de/galaxy/galaxy_en.html
diff --git a/tests/manual/galaxy/galaxydata.h b/tests/manual/galaxy/galaxydata.h
index e01db67b..6127482e 100644
--- a/tests/manual/galaxy/galaxydata.h
+++ b/tests/manual/galaxy/galaxydata.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
diff --git a/tests/manual/galaxy/main.cpp b/tests/manual/galaxy/main.cpp
index 5fb7b0ca..a0cbda52 100644
--- a/tests/manual/galaxy/main.cpp
+++ b/tests/manual/galaxy/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "galaxydata.h"
diff --git a/tests/manual/galaxy/star.cpp b/tests/manual/galaxy/star.cpp
index ca6b66f0..5b639125 100644
--- a/tests/manual/galaxy/star.cpp
+++ b/tests/manual/galaxy/star.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "star.h"
diff --git a/tests/manual/galaxy/star.h b/tests/manual/galaxy/star.h
index 9c5dc1ac..045a9702 100644
--- a/tests/manual/galaxy/star.h
+++ b/tests/manual/galaxy/star.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef STAR_H
#define STAR_H
diff --git a/tests/manual/itemmodeltest/CMakeLists.txt b/tests/manual/itemmodeltest/CMakeLists.txt
new file mode 100644
index 00000000..8fee8d00
--- /dev/null
+++ b/tests/manual/itemmodeltest/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(itemmodeltest
+ GUI
+ SOURCES
+ main.cpp
+ )
+target_link_libraries(itemmodeltest PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/itemmodeltest/main.cpp b/tests/manual/itemmodeltest/main.cpp
index 90a2e74e..feebd1b1 100644
--- a/tests/manual/itemmodeltest/main.cpp
+++ b/tests/manual/itemmodeltest/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtDataVisualization/q3dbars.h>
#include <QtDataVisualization/q3dsurface.h>
@@ -50,8 +24,6 @@
#define USE_STATIC_DATA
-using namespace QtDataVisualization;
-
class GraphDataGenerator : public QObject
{
public:
@@ -236,8 +208,8 @@ void GraphDataGenerator::changeSelectedButtonClicked()
{
// Change all selected cells to a random value 1-10
QVariant value = QVariant::fromValue(QRandomGenerator::global()->bounded(10.0) + 1);
- QList<QTableWidgetItem *> selectedItems = m_tableWidget->selectedItems();
- foreach (QTableWidgetItem *item, selectedItems) {
+ const QList<QTableWidgetItem *> selectedItems = m_tableWidget->selectedItems();
+ for (QTableWidgetItem *item : selectedItems) {
QString oldData = item->data(Qt::DisplayRole).toString();
item->setData(Qt::DisplayRole,
oldData.left(5)
@@ -249,6 +221,7 @@ void GraphDataGenerator::changeSelectedButtonClicked()
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
Q3DBars *barGraph = new Q3DBars();
Q3DSurface *surfaceGraph = new Q3DSurface();
@@ -288,17 +261,17 @@ int main(int argc, char **argv)
barProxy->setUseModelCategories(true);
surfaceProxy->setUseModelCategories(true);
barProxy->setRotationRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
- barProxy->setValueRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
- barProxy->setRotationRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)\\d*\\/\\d*([\\.\\,]?)\\d*(\\/)(\\d*[\\.\\,]?\\d*)$")));
+ barProxy->setValueRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ barProxy->setRotationRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)\\d*\\/\\d*([\\.\\,]?)\\d*(\\/)(\\d*[\\.\\,]?\\d*)$")));
barProxy->setValueRoleReplace(QStringLiteral("\\4"));
barProxy->setRotationRoleReplace(QStringLiteral("\\5"));
surfaceProxy->setXPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
- surfaceProxy->setZPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
- surfaceProxy->setXPosRolePattern(QRegExp(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setYPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
+ surfaceProxy->setXPosRolePattern(QRegularExpression(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
surfaceProxy->setXPosRoleReplace(QStringLiteral("\\2"));
- surfaceProxy->setYPosRolePattern(QRegExp(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setYPosRolePattern(QRegularExpression(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
surfaceProxy->setYPosRoleReplace(QStringLiteral("\\3"));
- surfaceProxy->setZPosRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setZPosRolePattern(QRegularExpression(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
surfaceProxy->setZPosRoleReplace(QStringLiteral("\\1"));
QBar3DSeries *barSeries = new QBar3DSeries(barProxy);
QSurface3DSeries *surfaceSeries = new QSurface3DSeries(surfaceProxy);
diff --git a/tests/manual/minimalbars/CMakeLists.txt b/tests/manual/minimalbars/CMakeLists.txt
new file mode 100644
index 00000000..50ae8a61
--- /dev/null
+++ b/tests/manual/minimalbars/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(MinimalBars
+ GUI
+ SOURCES
+ ../../../src/datavisualization/doc/snippets/doc_src_q3dbars_construction.cpp
+ )
+target_link_libraries(MinimalBars PUBLIC
+ Qt::Gui
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/minimalscatter/CMakeLists.txt b/tests/manual/minimalscatter/CMakeLists.txt
new file mode 100644
index 00000000..5f9c07ae
--- /dev/null
+++ b/tests/manual/minimalscatter/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(MinimalScatter
+ GUI
+ SOURCES
+ ../../../src/datavisualization/doc/snippets/doc_src_q3dscatter_construction.cpp
+ )
+target_link_libraries(MinimalScatter PUBLIC
+ Qt::Gui
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/minimalsurface/CMakeLists.txt b/tests/manual/minimalsurface/CMakeLists.txt
new file mode 100644
index 00000000..39c3b04d
--- /dev/null
+++ b/tests/manual/minimalsurface/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(MinimalSurface
+ GUI
+ SOURCES
+ ../../../src/datavisualization/doc/snippets/doc_src_q3dsurface_construction.cpp
+ )
+target_link_libraries(MinimalSurface PUBLIC
+ Qt::Gui
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/multigraphs/CMakeLists.txt b/tests/manual/multigraphs/CMakeLists.txt
new file mode 100644
index 00000000..8e6da82a
--- /dev/null
+++ b/tests/manual/multigraphs/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(multigraphs
+ GUI
+ SOURCES
+ data.cpp data.h
+ main.cpp
+ )
+target_link_libraries(multigraphs PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
+
+set(multigraphs_resource_files
+ "australia.png"
+ )
+
+qt_internal_add_resource(multigraphs "multigraphs"
+ PREFIX
+ "/"
+ FILES
+ ${multigraphs_resource_files}
+ )
diff --git a/tests/manual/multigraphs/data.cpp b/tests/manual/multigraphs/data.cpp
index 8279e3e6..b46c6a0d 100644
--- a/tests/manual/multigraphs/data.cpp
+++ b/tests/manual/multigraphs/data.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define NOMINMAX
@@ -40,8 +14,6 @@
#include <QSize>
#include <QImage>
-using namespace QtDataVisualization;
-
Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars,
QTextEdit *statusArea, QWidget *widget) :
m_surface(surface),
diff --git a/tests/manual/multigraphs/data.h b/tests/manual/multigraphs/data.h
index 8f759f6a..a2c43452 100644
--- a/tests/manual/multigraphs/data.h
+++ b/tests/manual/multigraphs/data.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef DATA_H
#define DATA_H
@@ -38,8 +12,6 @@
#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
#include <QTextEdit>
-using namespace QtDataVisualization;
-
class Data : public QObject
{
Q_OBJECT
diff --git a/tests/manual/multigraphs/main.cpp b/tests/manual/multigraphs/main.cpp
index a4d4211f..b13dd2ce 100644
--- a/tests/manual/multigraphs/main.cpp
+++ b/tests/manual/multigraphs/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "data.h"
@@ -43,6 +17,7 @@
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
QWidget *widget = new QWidget();
diff --git a/tests/manual/qmlbarsrowcolors/CMakeLists.txt b/tests/manual/qmlbarsrowcolors/CMakeLists.txt
new file mode 100644
index 00000000..62a2ed98
--- /dev/null
+++ b/tests/manual/qmlbarsrowcolors/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(qmlbarsrowcolors
+ GUI
+ SOURCES
+ main.cpp
+ )
+
+target_link_libraries(qmlbarsrowcolors PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+)
+
+set(qmlbarsrowcolors_resource_files
+ "qml/qmlbarsrowcolors/Axes.qml"
+ "qml/qmlbarsrowcolors/Data.qml"
+ "qml/qmlbarsrowcolors/main.qml"
+)
+
+qt6_add_resources(qmlbarsrowcolors "qmlbarsrowcolors"
+ PREFIX
+ "/"
+ FILES
+ ${qmlbarsrowcolors_resource_files}
+)
diff --git a/tests/manual/qmlbarsrowcolors/main.cpp b/tests/manual/qmlbarsrowcolors/main.cpp
new file mode 100644
index 00000000..83a1a78a
--- /dev/null
+++ b/tests/manual/qmlbarsrowcolors/main.cpp
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQuick/QQuickView>
+#include <QtQml/QQmlEngine>
+
+int main(int argc, char *argv[])
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+ QGuiApplication app(argc, argv);
+
+ QQuickView viewer;
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#endif
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+
+ viewer.setTitle(QStringLiteral("Monthly income/expenses"));
+
+ viewer.setSource(QUrl("qrc:/qml/qmlbarsrowcolors/main.qml"));
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Axes.qml b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Axes.qml
new file mode 100644
index 00000000..0e021c34
--- /dev/null
+++ b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Axes.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtDataVisualization
+
+Item {
+ property alias column: columnAxis
+ property alias row: rowAxis
+ property alias value: valueAxis
+ property alias total: totalAxis
+
+ // Custom labels for columns, since the data contains abbreviated month names.
+ //! [0]
+ CategoryAxis3D {
+ id: columnAxis
+ labels: ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"]
+ labelAutoRotation: 30
+ }
+ //! [0]
+ CategoryAxis3D {
+ id: totalAxis
+ labels: ["Yearly total"]
+ labelAutoRotation: 30
+ }
+ CategoryAxis3D {
+ // For row labels we can use row labels from data proxy, no labels defined for rows.
+ id: rowAxis
+ labelAutoRotation: 30
+ }
+
+ ValueAxis3D {
+ id: valueAxis
+ min: 0
+ max: 35
+ labelFormat: "%.2f M\u20AC"
+ title: "Monthly income"
+ labelAutoRotation: 90
+ }
+}
diff --git a/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Data.qml b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Data.qml
new file mode 100644
index 00000000..6eb27741
--- /dev/null
+++ b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/Data.qml
@@ -0,0 +1,118 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQml.Models
+
+Item {
+ property alias model: dataModel
+
+ property var modelAsJsArray: {
+ var arr = []
+ for (var i = 0; i < dataModel.count; i++) {
+ var row = dataModel.get(i)
+ arr.push({
+ timestamp: row.timestamp,
+ expenses: row.expenses,
+ income: row.income
+ })
+ }
+ return arr
+ }
+
+ //! [0]
+ ListModel {
+ id: dataModel
+ ListElement{ timestamp: "2006-01"; expenses: "-4"; income: "5" }
+ ListElement{ timestamp: "2006-02"; expenses: "-5"; income: "6" }
+ ListElement{ timestamp: "2006-03"; expenses: "-7"; income: "4" }
+ //! [0]
+ ListElement{ timestamp: "2006-04"; expenses: "-3"; income: "2" }
+ ListElement{ timestamp: "2006-05"; expenses: "-4"; income: "1" }
+ ListElement{ timestamp: "2006-06"; expenses: "-2"; income: "2" }
+ ListElement{ timestamp: "2006-07"; expenses: "-1"; income: "3" }
+ ListElement{ timestamp: "2006-08"; expenses: "-5"; income: "1" }
+ ListElement{ timestamp: "2006-09"; expenses: "-2"; income: "3" }
+ ListElement{ timestamp: "2006-10"; expenses: "-5"; income: "2" }
+ ListElement{ timestamp: "2006-11"; expenses: "-8"; income: "5" }
+ ListElement{ timestamp: "2006-12"; expenses: "-3"; income: "3" }
+
+ ListElement{ timestamp: "2007-01"; expenses: "-3"; income: "1" }
+ ListElement{ timestamp: "2007-02"; expenses: "-4"; income: "2" }
+ ListElement{ timestamp: "2007-03"; expenses: "-12"; income: "4" }
+ ListElement{ timestamp: "2007-04"; expenses: "-13"; income: "6" }
+ ListElement{ timestamp: "2007-05"; expenses: "-14"; income: "11" }
+ ListElement{ timestamp: "2007-06"; expenses: "-7"; income: "7" }
+ ListElement{ timestamp: "2007-07"; expenses: "-6"; income: "4" }
+ ListElement{ timestamp: "2007-08"; expenses: "-4"; income: "15" }
+ ListElement{ timestamp: "2007-09"; expenses: "-2"; income: "18" }
+ ListElement{ timestamp: "2007-10"; expenses: "-29"; income: "25" }
+ ListElement{ timestamp: "2007-11"; expenses: "-23"; income: "29" }
+ ListElement{ timestamp: "2007-12"; expenses: "-5"; income: "9" }
+
+ ListElement{ timestamp: "2008-01"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2008-02"; expenses: "-8"; income: "14" }
+ ListElement{ timestamp: "2008-03"; expenses: "-10"; income: "20" }
+ ListElement{ timestamp: "2008-04"; expenses: "-12"; income: "24" }
+ ListElement{ timestamp: "2008-05"; expenses: "-10"; income: "19" }
+ ListElement{ timestamp: "2008-06"; expenses: "-5"; income: "8" }
+ ListElement{ timestamp: "2008-07"; expenses: "-1"; income: "4" }
+ ListElement{ timestamp: "2008-08"; expenses: "-7"; income: "12" }
+ ListElement{ timestamp: "2008-09"; expenses: "-4"; income: "16" }
+ ListElement{ timestamp: "2008-10"; expenses: "-22"; income: "33" }
+ ListElement{ timestamp: "2008-11"; expenses: "-16"; income: "25" }
+ ListElement{ timestamp: "2008-12"; expenses: "-2"; income: "7" }
+
+ ListElement{ timestamp: "2009-01"; expenses: "-4"; income: "5" }
+ ListElement{ timestamp: "2009-02"; expenses: "-4"; income: "7" }
+ ListElement{ timestamp: "2009-03"; expenses: "-11"; income: "14" }
+ ListElement{ timestamp: "2009-04"; expenses: "-16"; income: "22" }
+ ListElement{ timestamp: "2009-05"; expenses: "-3"; income: "5" }
+ ListElement{ timestamp: "2009-06"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2009-07"; expenses: "-7"; income: "9" }
+ ListElement{ timestamp: "2009-08"; expenses: "-9"; income: "13" }
+ ListElement{ timestamp: "2009-09"; expenses: "-1"; income: "6" }
+ ListElement{ timestamp: "2009-10"; expenses: "-14"; income: "25" }
+ ListElement{ timestamp: "2009-11"; expenses: "-19"; income: "29" }
+ ListElement{ timestamp: "2009-12"; expenses: "-5"; income: "7" }
+
+ ListElement{ timestamp: "2010-01"; expenses: "-14"; income: "22" }
+ ListElement{ timestamp: "2010-02"; expenses: "-5"; income: "7" }
+ ListElement{ timestamp: "2010-03"; expenses: "-1"; income: "9" }
+ ListElement{ timestamp: "2010-04"; expenses: "-1"; income: "12" }
+ ListElement{ timestamp: "2010-05"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2010-06"; expenses: "-5"; income: "8" }
+ ListElement{ timestamp: "2010-07"; expenses: "-3"; income: "7" }
+ ListElement{ timestamp: "2010-08"; expenses: "-1"; income: "5" }
+ ListElement{ timestamp: "2010-09"; expenses: "-2"; income: "4" }
+ ListElement{ timestamp: "2010-10"; expenses: "-10"; income: "13" }
+ ListElement{ timestamp: "2010-11"; expenses: "-12"; income: "17" }
+ ListElement{ timestamp: "2010-12"; expenses: "-6"; income: "9" }
+
+ ListElement{ timestamp: "2011-01"; expenses: "-2"; income: "6" }
+ ListElement{ timestamp: "2011-02"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2011-03"; expenses: "-7"; income: "12" }
+ ListElement{ timestamp: "2011-04"; expenses: "-9"; income: "15" }
+ ListElement{ timestamp: "2011-05"; expenses: "-7"; income: "19" }
+ ListElement{ timestamp: "2011-06"; expenses: "-9"; income: "18" }
+ ListElement{ timestamp: "2011-07"; expenses: "-13"; income: "17" }
+ ListElement{ timestamp: "2011-08"; expenses: "-5"; income: "9" }
+ ListElement{ timestamp: "2011-09"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2011-10"; expenses: "-13"; income: "15" }
+ ListElement{ timestamp: "2011-11"; expenses: "-8"; income: "17" }
+ ListElement{ timestamp: "2011-12"; expenses: "-7"; income: "10" }
+
+ ListElement{ timestamp: "2012-01"; expenses: "-12"; income: "16" }
+ ListElement{ timestamp: "2012-02"; expenses: "-24"; income: "28" }
+ ListElement{ timestamp: "2012-03"; expenses: "-27"; income: "22" }
+ ListElement{ timestamp: "2012-04"; expenses: "-29"; income: "25" }
+ ListElement{ timestamp: "2012-05"; expenses: "-27"; income: "29" }
+ ListElement{ timestamp: "2012-06"; expenses: "-19"; income: "18" }
+ ListElement{ timestamp: "2012-07"; expenses: "-13"; income: "17" }
+ ListElement{ timestamp: "2012-08"; expenses: "-15"; income: "19" }
+ ListElement{ timestamp: "2012-09"; expenses: "-3"; income: "8" }
+ ListElement{ timestamp: "2012-10"; expenses: "-3"; income: "6" }
+ ListElement{ timestamp: "2012-11"; expenses: "-4"; income: "8" }
+ ListElement{ timestamp: "2012-12"; expenses: "-5"; income: "9" }
+ }
+}
diff --git a/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/main.qml b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/main.qml
new file mode 100644
index 00000000..2f15b453
--- /dev/null
+++ b/tests/manual/qmlbarsrowcolors/qml/qmlbarsrowcolors/main.qml
@@ -0,0 +1,392 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtDataVisualization
+import QtQuick.Window
+import Qt.labs.qmlmodels
+import "."
+
+Item {
+ id: mainview
+
+ property int buttonLayoutHeight: 180;
+ property int currentRow
+ property Bar3DSeries selectedSeries
+
+ function toggleRowColorsForBarSeries(enable) {
+ if (enable)
+ barSeries.rowColors = [color1, color2, color3]
+ else
+ barSeries.rowColors = []
+ }
+
+ function toggleRowColorsForSecondarySeries(enable) {
+ if (enable)
+ secondarySeries.rowColors = [color4, color5, color6]
+ else
+ secondarySeries.rowColors = []
+ }
+
+ function handleSelectionChange(series, position) {
+ if (position !== series.invalidSelectionPosition)
+ selectedSeries = series
+
+ // Set tableView current row to selected bar
+ var rowRole = series.dataProxy.rowLabels[position.x];
+ var colRole
+ if (barGraph.columnAxis === graphAxes.total)
+ colRole = "01";
+ else
+ colRole = series.dataProxy.columnLabels[position.y];
+ var checkTimestamp = rowRole + "-" + colRole
+
+ if (currentRow === -1 || checkTimestamp !== graphData.model.get(currentRow).timestamp) {
+ var totalRows = tableView.rows;
+ for (var i = 0; i < totalRows; i++) {
+ var modelTimestamp = graphData.model.get(i).timestamp
+ if (modelTimestamp === checkTimestamp) {
+ currentRow = i
+ break
+ }
+ }
+ }
+ }
+
+ width: 1280
+ height: 1024
+
+ state: Screen.width < Screen.height ? "portrait" : "landscape"
+ selectedSeries: barSeries
+
+ onCurrentRowChanged: {
+ var timestamp = graphData.model.get(currentRow).timestamp
+ var pattern = /(\d\d\d\d)-(\d\d)/
+ var matches = pattern.exec(timestamp)
+ var rowIndex = modelProxy.rowCategoryIndex(matches[1])
+ var colIndex
+ if (barGraph.columnAxis === graphAxes.total)
+ colIndex = 0 // Just one column when showing yearly totals
+ else
+ colIndex = modelProxy.columnCategoryIndex(matches[2])
+ if (selectedSeries.visible)
+ mainview.selectedSeries.selectedBar = Qt.point(rowIndex, colIndex)
+ else if (barSeries.visible)
+ barSeries.selectedBar = Qt.point(rowIndex, colIndex)
+ else
+ secondarySeries.selectedBar = Qt.point(rowIndex, colIndex)
+ }
+
+ Data {
+ id: graphData
+ }
+
+ Axes {
+ id: graphAxes
+ }
+
+ ThemeColor {
+ id: color1
+ color: "green"
+ }
+
+ ThemeColor {
+ id: color2
+ color: "blue"
+ }
+
+ ThemeColor {
+ id: color3
+ color: "red"
+ }
+
+ ThemeColor {
+ id: color4
+ color: "yellow"
+ }
+
+ ThemeColor {
+ id: color5
+ color: "purple"
+ }
+
+ ThemeColor {
+ id: color6
+ color: "orange"
+ }
+
+ Theme3D {
+ id: theme1
+ type: Theme3D.ThemeRetro
+ labelBorderEnabled: true
+ font.pointSize: 35
+ labelBackgroundEnabled: true
+ colorStyle: Theme3D.ColorStyleUniform
+ }
+
+ Theme3D {
+ id: theme2
+ type: Theme3D.ThemeArmyBlue
+ labelBorderEnabled: true
+ font.pointSize: 35
+ labelBackgroundEnabled: true
+ colorStyle: Theme3D.ColorStyleUniform
+ }
+
+ Item {
+ id: dataView
+ anchors.right: mainview.right;
+ anchors.bottom: mainview.bottom
+
+ Bars3D {
+ id: barGraph
+ width: dataView.width
+ height: dataView.height
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionItem
+ theme: theme1
+ barThickness: 0.7
+ barSpacing: Qt.size(0.5, 0.5)
+ barSpacingRelative: false
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
+ columnAxis: graphAxes.column
+ rowAxis: graphAxes.row
+ valueAxis: graphAxes.value
+
+ Bar3DSeries {
+ id: secondarySeries
+ visible: false
+ itemLabelFormat: "Expenses, @colLabel, @rowLabel: -@valueLabel"
+ rowColors: [color4 , color5, color6]
+
+ onSelectedBarChanged: (position)=> handleSelectionChange(secondarySeries, position)
+
+ ItemModelBarDataProxy {
+ id: secondaryProxy
+ itemModel: graphData.model
+ rowRole: "timestamp"
+ columnRole: "timestamp"
+ valueRole: "expenses"
+ rowRolePattern: /^(\d\d\d\d).*$/
+ columnRolePattern: /^.*-(\d\d)$/
+ valueRolePattern: /-/
+ rowRoleReplace: "\\1"
+ columnRoleReplace: "\\1"
+ multiMatchBehavior: ItemModelBarDataProxy.MMBCumulative
+ }
+ }
+
+ Bar3DSeries {
+ id: barSeries
+ itemLabelFormat: "Income, @colLabel, @rowLabel: @valueLabel"
+ rowColors: [color1, color2, color3]
+
+ onSelectedBarChanged: (position)=> handleSelectionChange(barSeries, position)
+
+ ItemModelBarDataProxy {
+ id: modelProxy
+ itemModel: graphData.model
+ rowRole: "timestamp"
+ columnRole: "timestamp"
+ valueRole: "income"
+ rowRolePattern: /^(\d\d\d\d).*$/
+ columnRolePattern: /^.*-(\d\d)$/
+ rowRoleReplace: "\\1"
+ columnRoleReplace: "\\1"
+ multiMatchBehavior: ItemModelBarDataProxy.MMBCumulative
+ }
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: tableViewLayout
+
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ HorizontalHeaderView {
+ id: header
+ property var columnNames: ["Month", "Expenses", "Income"]
+
+ syncView: tableView
+ Layout.fillWidth: true
+ delegate: Text {
+ padding: 3
+ text: header.columnNames[index]
+ }
+
+ }
+
+ TableView {
+ id: tableView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ reuseItems: false
+ clip: true
+
+ model: TableModel {
+ id: tableModel
+ TableModelColumn { display: "timestamp" }
+ TableModelColumn { display: "expenses" }
+ TableModelColumn { display: "income" }
+
+ rows: graphData.modelAsJsArray
+ }
+
+ delegate: Rectangle {
+ implicitHeight: 30
+ implicitWidth: tableView.width / 3
+ color: row === currentRow ? "#e0e0e0" : "#ffffff"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: currentRow = row
+ }
+
+ Text {
+ id: delegateText
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ anchors.leftMargin: 4
+ anchors.left: parent.left
+ anchors.right: parent.right
+ text: formattedText
+ property string formattedText: {
+ if (column === 0) {
+ if (display !== "") {
+ var pattern = /(\d\d\d\d)-(\d\d)/
+ var matches = pattern.exec(display)
+ var colIndex = parseInt(matches[2], 10) - 1
+ return matches[1] + " - " + graphAxes.column.labels[colIndex]
+ }
+ } else {
+ return display
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: controlLayout
+ spacing: 0
+
+ Button {
+ id: seriesToggle
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ text: "Show Expenses"
+ clip: true
+
+ onClicked: {
+ if (text === "Show Expenses") {
+ barSeries.visible = false
+ secondarySeries.visible = true
+ barGraph.valueAxis.labelFormat = "-%.2f M\u20AC"
+ secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: @valueLabel"
+ text = "Show Both"
+ } else if (text === "Show Both") {
+ barSeries.visible = true
+ barGraph.valueAxis.labelFormat = "%.2f M\u20AC"
+ secondarySeries.itemLabelFormat = "Expenses, @colLabel, @rowLabel: -@valueLabel"
+ text = "Show Income"
+ } else { // text === "Show Income"
+ secondarySeries.visible = false
+ text = "Show Expenses"
+ }
+ }
+ }
+
+ Button {
+ id: themeToggle
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ text: "Use theme 2"
+ clip: true
+
+ onClicked: {
+ if (text === "Use theme 2") {
+ barGraph.theme = theme2
+ text = "Use theme 1"
+ } else {
+ barGraph.theme = theme1
+ text = "Use theme 2"
+ }
+ }
+ }
+
+ Button {
+ id: barSeriesRowColorToggle
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ text: "Disable row colors"
+
+ onClicked: {
+ if (text === "Disable row colors") {
+ toggleRowColorsForBarSeries(false)
+ toggleRowColorsForSecondarySeries(false)
+ text = "Enable row colors"
+ } else {
+ toggleRowColorsForBarSeries(true)
+ toggleRowColorsForSecondarySeries(true)
+ text = "Disable row colors"
+ }
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "landscape"
+ PropertyChanges {
+ target: dataView
+ width: mainview.width / 4 * 3
+ height: mainview.height
+ }
+ PropertyChanges {
+ target: tableViewLayout
+ height: mainview.height - buttonLayoutHeight
+ anchors.right: dataView.left
+ anchors.left: mainview.left
+ anchors.bottom: undefined
+ }
+ PropertyChanges {
+ target: controlLayout
+ width: mainview.width / 4
+ height: buttonLayoutHeight
+ anchors.top: tableViewLayout.bottom
+ anchors.bottom: mainview.bottom
+ anchors.left: mainview.left
+ anchors.right: dataView.left
+ }
+ },
+ State {
+ name: "portrait"
+ PropertyChanges {
+ target: dataView
+ width: mainview.height / 4 * 3
+ height: mainview.width
+ }
+ PropertyChanges {
+ target: tableViewLayout
+ height: mainview.width
+ anchors.right: controlLayout.left
+ anchors.left: mainview.left
+ anchors.bottom: dataView.top
+ }
+ PropertyChanges {
+ target: controlLayout
+ width: mainview.height / 4
+ height: mainview.width / 4
+ anchors.top: mainview.top
+ anchors.bottom: dataView.top
+ anchors.left: undefined
+ anchors.right: mainview.right
+ }
+ }
+ ]
+}
diff --git a/tests/manual/qmldynamicdata/CMakeLists.txt b/tests/manual/qmldynamicdata/CMakeLists.txt
new file mode 100644
index 00000000..739ecd15
--- /dev/null
+++ b/tests/manual/qmldynamicdata/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qmldynamicdata
+ GUI
+ SOURCES
+ main.cpp
+ )
+target_link_libraries(qmldynamicdata PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set(qmldynamicdata_resource_files
+ "qml/qmldynamicdata/main.qml"
+ )
+
+qt_internal_add_resource(qmldynamicdata "qmldynamicdata"
+ PREFIX
+ "/"
+ FILES
+ ${qmldynamicdata_resource_files}
+ )
diff --git a/tests/manual/qmldynamicdata/main.cpp b/tests/manual/qmldynamicdata/main.cpp
index 3a69ca8f..6a416829 100644
--- a/tests/manual/qmldynamicdata/main.cpp
+++ b/tests/manual/qmldynamicdata/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui/QGuiApplication>
#include <QtCore/QDir>
@@ -34,6 +8,7 @@
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
diff --git a/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml b/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml
deleted file mode 100644
index 54cdce24..00000000
--- a/tests/manual/qmldynamicdata/qml/qmldynamicdata/NewButton.qml
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- height: 80
-
- Button {
- width: parent.width
- height: parent.height
- Text {
- id: buttonText
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
index a49a1184..1d0e65bf 100644
--- a/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
+++ b/tests/manual/qmldynamicdata/qml/qmldynamicdata/main.qml
@@ -1,37 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-import QtQuick 2.1
-import QtDataVisualization 1.0
+import QtQuick
+import QtDataVisualization 1.2
+import QtQuick.Controls
import "."
-Rectangle {
+Item {
id: mainView
width: 1280
height: 720
@@ -154,15 +129,15 @@ Rectangle {
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
- property int mouseX: -1
- property int mouseY: -1
+ property int mouseXPos: -1
+ property int mouseYPos: -1
- onPositionChanged: {
- mouseX = mouse.x;
- mouseY = mouse.y;
+ onPositionChanged: (mouse)=> {
+ mouseXPos = mouse.x;
+ mouseYPos = mouse.y;
}
- onWheel: {
+ onWheel: (wheel)=> {
// Adjust zoom level based on what zoom range we're in.
var zoomLevel = scatterGraph.scene.activeCamera.zoomLevel;
if (zoomLevel > 100)
@@ -186,7 +161,8 @@ Rectangle {
running: true
repeat: true
onTriggered: {
- scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseX, inputArea.mouseY);
+ scatterGraph.scene.selectionQueryPosition = Qt.point(inputArea.mouseXPos,
+ inputArea.mouseYPos);
}
}
}
@@ -227,7 +203,7 @@ Rectangle {
}
}
- NewButton {
+ Button {
id: shadowToggle
width: parent.width / 3 // We're adding 3 buttons and want to divide them equally
text: "Hide Shadows"
@@ -244,7 +220,7 @@ Rectangle {
}
}
- NewButton {
+ Button {
id: cameraToggle
width: parent.width / 3
text: "Pause Camera"
@@ -261,11 +237,11 @@ Rectangle {
}
}
- NewButton {
+ Button {
id: exitButton
width: parent.width / 3
text: "Quit"
anchors.left: cameraToggle.right
- onClicked: Qt.quit(0);
+ onClicked: Qt.quit();
}
}
diff --git a/tests/manual/qmldynamicdata/qmldynamicdata.qrc b/tests/manual/qmldynamicdata/qmldynamicdata.qrc
index 76641cf9..e1997ffc 100644
--- a/tests/manual/qmldynamicdata/qmldynamicdata.qrc
+++ b/tests/manual/qmldynamicdata/qmldynamicdata.qrc
@@ -1,6 +1,5 @@
<RCC>
<qresource prefix="/">
<file>qml/qmldynamicdata/main.qml</file>
- <file>qml/qmldynamicdata/NewButton.qml</file>
</qresource>
</RCC>
diff --git a/tests/manual/qmlgradient/CMakeLists.txt b/tests/manual/qmlgradient/CMakeLists.txt
new file mode 100644
index 00000000..8288e1b2
--- /dev/null
+++ b/tests/manual/qmlgradient/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qmlgradient
+ GUI
+ SOURCES
+ main.cpp
+ )
+target_link_libraries(qmlgradient PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set(qmlgradient_resource_files
+ "qml/qmlgradient/main.qml"
+ "crater.png"
+ )
+
+set_source_files_properties("crater.png"
+ PROPERTIES QT_RESOURCE_ALIAS "map"
+ )
+
+qt_internal_add_resource(qmlgradient "qmlgradient"
+ PREFIX
+ "/"
+ FILES
+ ${qmlgradient_resource_files}
+ )
diff --git a/tests/manual/qmlgradient/crater.png b/tests/manual/qmlgradient/crater.png
new file mode 100644
index 00000000..91bba197
--- /dev/null
+++ b/tests/manual/qmlgradient/crater.png
Binary files differ
diff --git a/tests/manual/qmlgradient/main.cpp b/tests/manual/qmlgradient/main.cpp
new file mode 100644
index 00000000..b3a65f0f
--- /dev/null
+++ b/tests/manual/qmlgradient/main.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQuick/QQuickView>
+#include <QtQml/QQmlEngine>
+
+int main(int argc, char *argv[])
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+#endif
+
+ QGuiApplication app(argc, argv);
+
+ QQuickView viewer;
+
+ const QUrl url(QStringLiteral("qrc:/qml/qmlgradient/main.qml"));
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../%2"));
+#endif
+
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+ QObject::connect( viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+ viewer.setSource(url);
+ viewer.show();
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ return app.exec();
+}
diff --git a/examples/datavisualization/custominput/custominput.qrc b/tests/manual/qmlgradient/qml.qrc
index 8ced2b91..cd67689c 100644
--- a/examples/datavisualization/custominput/custominput.qrc
+++ b/tests/manual/qmlgradient/qml.qrc
@@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/">
- <file>data/data.txt</file>
+ <file>qml/qmlgradient/main.qml</file>
</qresource>
</RCC>
diff --git a/tests/manual/qmlgradient/qml/qmlgradient/main.qml b/tests/manual/qmlgradient/qml/qmlgradient/main.qml
new file mode 100644
index 00000000..650dd087
--- /dev/null
+++ b/tests/manual/qmlgradient/qml/qmlgradient/main.qml
@@ -0,0 +1,191 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtDataVisualization 1.2
+import "."
+
+Item {
+ id: mainwindow
+
+ function updateinfoLabels()
+ {
+ if (surfaceGraph.theme.baseGradients[0] === mainGradient)
+ gradientLabel.text = "Main gradient";
+ else if (surfaceGraph.theme.baseGradients[0] === secondaryGradient)
+ gradientLabel.text = "Secondary gradient";
+ }
+
+ width: 1024
+ height: 768
+ visible: true
+
+ Item {
+ id: surfaceview
+ width: mainwindow.width
+ height: mainwindow.height
+
+ anchors.top: mainwindow.top
+ anchors.left: mainwindow.left
+
+ ColorGradient {
+ id: mainGradient
+ ColorGradientStop { position: 0.0; color: "red"}
+ ColorGradientStop { position: 0.5; color: "green"}
+ ColorGradientStop { position: 0.8; color: "blue"}
+ ColorGradientStop { position: 0.6; color: "yellow"}
+ ColorGradientStop { position: 0.8; color: "black"}
+ ColorGradientStop { position: 1.0; color: "peru"}
+ }
+
+ ColorGradient {
+ id: secondaryGradient
+ ColorGradientStop { position: 0.0; color: "crimson"}
+ ColorGradientStop { position: 0.5; color: "chartreuse"}
+ ColorGradientStop { position: 0.8; color: "blueviolet"}
+ ColorGradientStop { position: 0.6; color: "gold"}
+ ColorGradientStop { position: 0.8; color: "darkslategrey"}
+ ColorGradientStop { position: 1.0; color: "seagreen"}
+ }
+
+ ColorGradient {
+ id: seriesGradient
+ ColorGradientStop { position: 0.0; color: "gold" }
+ ColorGradientStop { position: 0.5; color: "crimson" }
+ ColorGradientStop { position: 1.0; color: "blueviolet" }
+ }
+
+ Theme3D {
+ id: mainTheme
+ type: Q3DTheme.ThemeStoneMoss
+
+ colorStyle: Q3DTheme.ColorStyleRangeGradient
+ baseGradients: [mainGradient]
+ }
+
+ Theme3D {
+ id: secondaryTheme
+ type: Q3DTheme.ThemeArmyBlue
+ baseGradients: [secondaryGradient]
+ }
+
+ Surface3D {
+ id: surfaceGraph
+ width: surfaceview.width
+ height: surfaceview.height
+ theme: mainTheme
+
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
+ axisY.min: 0.0
+ axisY.max: 500.0
+ axisX.segmentCount: 10
+ axisX.subSegmentCount: 2
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 10
+ axisZ.subSegmentCount: 2
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 5
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+ axisY.title: "Height"
+ axisX.title: "Latitude"
+ axisZ.title: "Longitude"
+
+ Surface3DSeries {
+ id: heightSeries
+ drawMode: Surface3DSeries.DrawSurface
+ visible: true
+ flatShadingEnabled: false
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: ":/map"
+ }
+ }
+ }
+
+ RowLayout {
+ id: buttonLayout
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Button {
+ id: toggleTheme
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ text: qsTr("Toggle theme")
+ onClicked: {
+ if (surfaceGraph.theme == mainTheme) {
+ surfaceGraph.theme = secondaryTheme;
+ themeLabel.text = "Secondary theme";
+ updateinfoLabels();
+ } else if (surfaceGraph.theme == secondaryTheme) {
+ surfaceGraph.theme = mainTheme;
+ updateinfoLabels();
+ themeLabel.text = "Main theme";
+ }
+ }
+ }
+
+ Button {
+ id: toggleGradient
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ text: qsTr("Toggle theme gradient")
+ onClicked: {
+ if (surfaceGraph.theme.baseGradients[0] === mainGradient) {
+ surfaceGraph.theme.baseGradients[0] = secondaryGradient;
+ updateinfoLabels();
+ } else if (surfaceGraph.theme.baseGradients[0] === secondaryGradient) {
+ surfaceGraph.theme.baseGradients[0] = mainGradient;
+ updateinfoLabels();
+ }
+ }
+ }
+
+ Button {
+ id: toggleSeriesGradient
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ text: qsTr("Override theme gradient with series gradient")
+
+ onClicked: {
+ heightSeries.baseGradient = seriesGradient;
+ gradientLabel.text = "Series gradient";
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: infoLayout
+ anchors.top: buttonLayout.bottom
+ anchors.left: parent.left
+
+ Rectangle {
+ Layout.minimumHeight: 20
+
+ Label {
+ id: themeLabel
+ text: qsTr("Main theme")
+ }
+ }
+
+ Rectangle {
+ Layout.minimumHeight: 20
+
+ Label {
+ id: gradientLabel
+ text: qsTr("Main gradient")
+ }
+ }
+ }
+ }
+}
diff --git a/tests/manual/qmlheightmap/CMakeLists.txt b/tests/manual/qmlheightmap/CMakeLists.txt
new file mode 100644
index 00000000..17e7f3f2
--- /dev/null
+++ b/tests/manual/qmlheightmap/CMakeLists.txt
@@ -0,0 +1,43 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(qmlheightmap
+ GUI
+ SOURCES
+ main.cpp
+ )
+target_link_libraries(qmlheightmap PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set_source_files_properties("gradientGRAY8.png"
+ PROPERTIES QT_RESOURCE_ALIAS "mapGRAY8"
+ )
+set_source_files_properties("gradientGRAY16.png"
+ PROPERTIES QT_RESOURCE_ALIAS "mapGRAY16"
+ )
+set_source_files_properties("gradientRGB8.png"
+ PROPERTIES QT_RESOURCE_ALIAS "mapRGB8"
+ )
+set_source_files_properties("gradientRGB16.png"
+ PROPERTIES QT_RESOURCE_ALIAS "mapRGB16"
+ )
+
+set(qmlheightmap_resource_files
+ "qml/qmlheightmap/main.qml"
+ "gradientGRAY8.png"
+ "gradientGRAY16.png"
+ "gradientRGB8.png"
+ "gradientRGB16.png"
+ )
+qt_internal_add_resource(qmlheightmap "qmlheightmap"
+ PREFIX
+ "/"
+ FILES
+ ${qmlheightmap_resource_files}
+ )
diff --git a/tests/manual/qmlheightmap/gradientGRAY16.png b/tests/manual/qmlheightmap/gradientGRAY16.png
new file mode 100644
index 00000000..28df3673
--- /dev/null
+++ b/tests/manual/qmlheightmap/gradientGRAY16.png
Binary files differ
diff --git a/tests/manual/qmlheightmap/gradientGRAY8.png b/tests/manual/qmlheightmap/gradientGRAY8.png
new file mode 100644
index 00000000..6696e57c
--- /dev/null
+++ b/tests/manual/qmlheightmap/gradientGRAY8.png
Binary files differ
diff --git a/tests/manual/qmlheightmap/gradientRGB16.png b/tests/manual/qmlheightmap/gradientRGB16.png
new file mode 100644
index 00000000..b62e510b
--- /dev/null
+++ b/tests/manual/qmlheightmap/gradientRGB16.png
Binary files differ
diff --git a/tests/manual/qmlheightmap/gradientRGB8.png b/tests/manual/qmlheightmap/gradientRGB8.png
new file mode 100644
index 00000000..79879f35
--- /dev/null
+++ b/tests/manual/qmlheightmap/gradientRGB8.png
Binary files differ
diff --git a/tests/manual/qmlheightmap/main.cpp b/tests/manual/qmlheightmap/main.cpp
new file mode 100644
index 00000000..371b78a8
--- /dev/null
+++ b/tests/manual/qmlheightmap/main.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQuick/QQuickView>
+#include <QtQml/QQmlEngine>
+
+int main(int argc, char *argv[])
+{
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+#endif
+
+ QGuiApplication app(argc, argv);
+
+ QQuickView viewer;
+
+ const QUrl url(QStringLiteral("qrc:/qml/qmlheightmap/main.qml"));
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../%2"));
+#endif
+
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+ QObject::connect( viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+ viewer.setSource(url);
+ viewer.show();
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ return app.exec();
+}
diff --git a/examples/datavisualization/customproxy/customproxy.qrc b/tests/manual/qmlheightmap/qml.qrc
index 53cd4915..b1cbc545 100644
--- a/examples/datavisualization/customproxy/customproxy.qrc
+++ b/tests/manual/qmlheightmap/qml.qrc
@@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/">
- <file>data/raindata.txt</file>
+ <file>qml/qmlheightmap/qml/main.qml</file>
</qresource>
</RCC>
diff --git a/tests/manual/qmlheightmap/qml/qmlheightmap/main.qml b/tests/manual/qmlheightmap/qml/qmlheightmap/main.qml
new file mode 100644
index 00000000..53003b59
--- /dev/null
+++ b/tests/manual/qmlheightmap/qml/qmlheightmap/main.qml
@@ -0,0 +1,181 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtDataVisualization
+import "."
+
+Item {
+ id: mainwindow
+
+ width: 1024
+ height: 768
+ visible: true
+
+ Item {
+ id: surfaceview
+ width: mainwindow.width
+ height: mainwindow.height
+
+ anchors.top: mainwindow.top
+ anchors.left: mainwindow.left
+
+ ColorGradient {
+ id: surfaceGradient
+ ColorGradientStop { position: 0.0; color: "darkslategray" }
+ ColorGradientStop { id: middleGradient; position: 0.50; color: "peru" }
+ ColorGradientStop { position: 1.0; color: "red" }
+ }
+
+ Theme3D {
+ id: mainTheme
+ type: Q3DTheme.ThemeStoneMoss
+ colorStyle: Q3DTheme.ColorStyleRangeGradient
+ baseGradients: [surfaceGradient]
+ }
+
+ Surface3D {
+ id: surfaceGraph
+ width: surfaceview.width
+ height: surfaceview.height
+ theme: mainTheme
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
+ axisY.min: 0.0
+ axisY.max: 500.0
+ axisX.segmentCount: 10
+ axisX.subSegmentCount: 2
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 10
+ axisZ.subSegmentCount: 2
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 5
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+ axisY.title: "Y"
+ axisX.title: "X"
+ axisZ.title: "Z"
+
+ Surface3DSeries {
+ id: heightSeriesRGB8
+ drawMode: Surface3DSeries.DrawSurface
+ visible: true
+ flatShadingEnabled: false
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: ":/mapRGB8"
+ minYValue: surfaceGraph.axisY.min
+ maxYValue: surfaceGraph.axisY.max
+ }
+ }
+
+ Surface3DSeries {
+ id: heightSeriesRGB16
+ drawMode: Surface3DSeries.DrawSurface
+ visible: false
+ flatShadingEnabled: false
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: ":/mapRGB16"
+ minYValue: surfaceGraph.axisY.min
+ maxYValue: surfaceGraph.axisY.max
+ }
+ }
+
+ Surface3DSeries {
+ id: heightSeriesGRAY8
+ drawMode: Surface3DSeries.DrawSurface
+ visible: false
+ flatShadingEnabled: false
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: ":/mapGRAY8"
+ minYValue: surfaceGraph.axisY.min
+ maxYValue: surfaceGraph.axisY.max
+ }
+ }
+
+ Surface3DSeries {
+ id: heightSeriesGRAY16
+ drawMode: Surface3DSeries.DrawSurface
+ visible: false
+ flatShadingEnabled: false
+
+ HeightMapSurfaceDataProxy {
+ heightMapFile: ":/mapGRAY16"
+ minYValue: surfaceGraph.axisY.min
+ maxYValue: surfaceGraph.axisY.max
+ }
+ }
+ }
+
+ RowLayout {
+ id: buttonLayout
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Button {
+ id: toggleHeightSeries
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ text: qsTr("Use 16-bit rgb map")
+ onClicked: {
+ if (heightSeriesRGB8.visible === true) {
+ heightSeriesRGB8.visible = false
+ heightSeriesRGB16.visible = true
+ heightSeriesGRAY8.visible = false
+ heightSeriesGRAY16.visible = false
+ text = "Use 8-bit grayscale map"
+ } else if (heightSeriesRGB16.visible === true){
+ heightSeriesRGB8.visible = false
+ heightSeriesRGB16.visible = false
+ heightSeriesGRAY8.visible = true
+ heightSeriesGRAY16.visible = false
+ text = "Use 16-bit grayscale map"
+ } else if (heightSeriesGRAY8.visible === true){
+ heightSeriesRGB8.visible = false
+ heightSeriesRGB16.visible = false
+ heightSeriesGRAY8.visible = false
+ heightSeriesGRAY16.visible = true
+ text = "Use 8-bit rgb map"
+ } else if (heightSeriesGRAY16.visible === true){
+ heightSeriesRGB8.visible = true
+ heightSeriesRGB16.visible = false
+ heightSeriesGRAY8.visible = false
+ heightSeriesGRAY16.visible = false
+ text = "Use 16-bit rgb map"
+ }
+ }
+ }
+
+ Button {
+ id: toggleAutoScaleY
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ text: qsTr("Enable autoScaleY")
+ onClicked: {
+ if (text === "Enable autoScaleY") {
+ heightSeriesRGB8.dataProxy.autoScaleY = true
+ heightSeriesRGB16.dataProxy.autoScaleY = true
+ heightSeriesGRAY8.dataProxy.autoScaleY = true
+ heightSeriesGRAY16.dataProxy.autoScaleY = true
+ text = "Disable autoScaleY"
+ } else {
+ heightSeriesRGB8.dataProxy.autoScaleY = false
+ heightSeriesRGB16.dataProxy.autoScaleY = false
+ heightSeriesGRAY8.dataProxy.autoScaleY = false
+ heightSeriesGRAY16.dataProxy.autoScaleY = false
+ text = "Enable autoScaleY"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/manual/qmlmultitest/CMakeLists.txt b/tests/manual/qmlmultitest/CMakeLists.txt
new file mode 100644
index 00000000..a92ff8db
--- /dev/null
+++ b/tests/manual/qmlmultitest/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qmlmultitest
+ GUI
+ SOURCES
+ main.cpp
+ )
+target_link_libraries(qmlmultitest PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set(qmlmultitest_resource_files
+ "qml/qmlmultitest/Data.qml"
+ "qml/qmlmultitest/main.qml"
+ )
+
+qt_internal_add_resource(qmlmultitest "qmlmultitest"
+ PREFIX
+ "/"
+ FILES
+ ${qmlmultitest_resource_files}
+ )
diff --git a/tests/manual/qmlmultitest/main.cpp b/tests/manual/qmlmultitest/main.cpp
index e6010697..555dff63 100644
--- a/tests/manual/qmlmultitest/main.cpp
+++ b/tests/manual/qmlmultitest/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui/QGuiApplication>
#include <QtCore/QDir>
@@ -34,6 +8,7 @@
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
diff --git a/tests/manual/qmlmultitest/qml/qmlmultitest/Data.qml b/tests/manual/qmlmultitest/qml/qmlmultitest/Data.qml
index 9bbbd7f8..78e65575 100644
--- a/tests/manual/qmlmultitest/qml/qmlmultitest/Data.qml
+++ b/tests/manual/qmlmultitest/qml/qmlmultitest/Data.qml
@@ -1,33 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-import QtQuick 2.1
+import QtQuick
Item {
property alias sharedData: dataModel
diff --git a/tests/manual/qmlmultitest/qml/qmlmultitest/NewButton.qml b/tests/manual/qmlmultitest/qml/qmlmultitest/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/tests/manual/qmlmultitest/qml/qmlmultitest/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/tests/manual/qmlmultitest/qml/qmlmultitest/main.qml b/tests/manual/qmlmultitest/qml/qmlmultitest/main.qml
index 388cf391..493feb79 100644
--- a/tests/manual/qmlmultitest/qml/qmlmultitest/main.qml
+++ b/tests/manual/qmlmultitest/qml/qmlmultitest/main.qml
@@ -1,38 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtDataVisualization 1.2
import "."
-Rectangle {
+Item {
id: mainView
width: 800
height: 600
@@ -56,6 +31,7 @@ Rectangle {
Layout.fillWidth: true
border.color: surfaceGraph.theme.gridLineColor
border.width: 2
+ color: "#00000000"
Surface3D {
id: surfaceGraph
@@ -106,7 +82,7 @@ Rectangle {
anchors.bottom: parent.bottom
columns: 2
- NewButton {
+ Button {
Layout.minimumWidth: parent.width / 2
Layout.fillHeight: true
Layout.fillWidth: true
@@ -114,22 +90,22 @@ Rectangle {
onClicked: clearSelections() // call a helper function to keep button itself simpler
}
- NewButton {
+ Button {
Layout.minimumWidth: parent.width / 2
Layout.fillHeight: true
Layout.fillWidth: true
text: "Quit"
- onClicked: Qt.quit(0);
+ onClicked: Qt.quit();
}
- NewButton {
+ Button {
Layout.fillHeight: true
Layout.fillWidth: true
text: "Reset Cameras"
onClicked: resetCameras() // call a helper function to keep button itself simpler
}
- NewButton {
+ Button {
id: mmbButton
Layout.fillHeight: true
Layout.fillWidth: true
@@ -144,6 +120,7 @@ Rectangle {
Layout.fillWidth: true
border.color: scatterGraph.theme.gridLineColor
border.width: 2
+ color: "#00000000"
Scatter3D {
id: scatterGraph
@@ -184,6 +161,7 @@ Rectangle {
Layout.fillWidth: true
border.color: barGraph.theme.gridLineColor
border.width: 2
+ color: "#00000000"
Bars3D {
id: barGraph
diff --git a/tests/manual/qmlmultitest/qmlmultitest.qrc b/tests/manual/qmlmultitest/qmlmultitest.qrc
index 7fc9ade2..ae52b7e7 100644
--- a/tests/manual/qmlmultitest/qmlmultitest.qrc
+++ b/tests/manual/qmlmultitest/qmlmultitest.qrc
@@ -2,6 +2,5 @@
<qresource prefix="/">
<file>qml/qmlmultitest/Data.qml</file>
<file>qml/qmlmultitest/main.qml</file>
- <file>qml/qmlmultitest/NewButton.qml</file>
</qresource>
</RCC>
diff --git a/tests/manual/qmlperf/CMakeLists.txt b/tests/manual/qmlperf/CMakeLists.txt
new file mode 100644
index 00000000..31235e32
--- /dev/null
+++ b/tests/manual/qmlperf/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(qmlperf
+ GUI
+ SOURCES
+ datagenerator.cpp datagenerator.h
+ main.cpp
+ )
+target_link_libraries(qmlperf PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set(qmlperf_resource_files
+ "qml/qmlperf/main.qml"
+ )
+
+qt_internal_add_resource(qmlperf "qmlperf"
+ PREFIX
+ "/"
+ FILES
+ ${qmlperf_resource_files}
+ )
diff --git a/tests/manual/qmlperf/datagenerator.cpp b/tests/manual/qmlperf/datagenerator.cpp
index 0d8cf9b2..df00d483 100644
--- a/tests/manual/qmlperf/datagenerator.cpp
+++ b/tests/manual/qmlperf/datagenerator.cpp
@@ -1,38 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "datagenerator.h"
#include <QDebug>
#include <QRandomGenerator>
-using namespace QtDataVisualization;
-
Q_DECLARE_METATYPE(QScatter3DSeries *)
DataGenerator::DataGenerator(QObject *parent) :
diff --git a/tests/manual/qmlperf/datagenerator.h b/tests/manual/qmlperf/datagenerator.h
index affcebbb..99a9dbf7 100644
--- a/tests/manual/qmlperf/datagenerator.h
+++ b/tests/manual/qmlperf/datagenerator.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef DATAGENERATOR_H
#define DATAGENERATOR_H
@@ -33,8 +7,6 @@
#include <QtDataVisualization/QScatter3DSeries>
#include <QtCore/QFile>
-using namespace QtDataVisualization;
-
class DataGenerator : public QObject
{
Q_OBJECT
diff --git a/tests/manual/qmlperf/main.cpp b/tests/manual/qmlperf/main.cpp
index 27a9fb3a..2566fc7d 100644
--- a/tests/manual/qmlperf/main.cpp
+++ b/tests/manual/qmlperf/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "datagenerator.h"
@@ -37,6 +11,7 @@
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
diff --git a/tests/manual/qmlperf/qml/qmlperf/main.qml b/tests/manual/qmlperf/qml/qmlperf/main.qml
index 43c6c5bf..4562e538 100644
--- a/tests/manual/qmlperf/qml/qmlperf/main.qml
+++ b/tests/manual/qmlperf/qml/qmlperf/main.qml
@@ -1,39 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Controls 1.0
-import QtDataVisualization 1.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtDataVisualization 1.2
import "."
-Rectangle {
+Item {
id: mainview
width: 1280
height: 1024
@@ -136,17 +110,17 @@ Rectangle {
fpsText.text = itemCount + " : " + scatterPlot.currentFps.toFixed(1);
}
-// theme: Theme3D {
-// type: Theme3D.ThemeRetro
-// colorStyle: Theme3D.ColorStyleRangeGradient
-// baseGradients: customGradient
+ theme: Theme3D {
+ type: Theme3D.ThemeRetro
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ baseGradients: customGradient
-// ColorGradient {
-// id: customGradient
-// ColorGradientStop { position: 1.0; color: "red" }
-// ColorGradientStop { position: 0.0; color: "blue" }
-// }
-// }
+ ColorGradient {
+ id: customGradient
+ ColorGradientStop { position: 1.0; color: "red" }
+ ColorGradientStop { position: 0.0; color: "blue" }
+ }
+ }
Scatter3DSeries {
id: scatterSeries
diff --git a/tests/manual/qmlvolume/CMakeLists.txt b/tests/manual/qmlvolume/CMakeLists.txt
new file mode 100644
index 00000000..5a0e446a
--- /dev/null
+++ b/tests/manual/qmlvolume/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(qmlvolume
+ GUI
+ SOURCES
+ datasource.cpp datasource.h
+ main.cpp
+ )
+target_link_libraries(qmlvolume PUBLIC
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::DataVisualization
+ )
+
+set(qmlvolume_resource_files
+ "qml/qmlvolume/main.qml"
+ )
+
+qt_internal_add_resource(qmlvolume "qmlvolume"
+ PREFIX
+ "/"
+ FILES
+ ${qmlvolume_resource_files}
+ )
diff --git a/tests/manual/qmlvolume/datasource.cpp b/tests/manual/qmlvolume/datasource.cpp
index a06ea6d9..6a16278e 100644
--- a/tests/manual/qmlvolume/datasource.cpp
+++ b/tests/manual/qmlvolume/datasource.cpp
@@ -1,39 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "datasource.h"
#include <QtCore/qmath.h>
#include <QtGui/QRgb>
#include <QtGui/QVector3D>
-using namespace QtDataVisualization;
-
Q_DECLARE_METATYPE(QCustom3DVolume *)
DataSource::DataSource(QObject *parent) :
@@ -52,7 +24,7 @@ void DataSource::fillVolume(QCustom3DVolume *volumeItem)
// This can take a while if the dimensions are large, so we support incremental data generation.
int index = 0;
- int textureSize = 256;
+ int textureSize = 1024;
QVector3D midPoint(float(textureSize) / 2.0f,
float(textureSize) / 2.0f,
float(textureSize) / 2.0f);
diff --git a/tests/manual/qmlvolume/datasource.h b/tests/manual/qmlvolume/datasource.h
index cd7ca2d6..de502337 100644
--- a/tests/manual/qmlvolume/datasource.h
+++ b/tests/manual/qmlvolume/datasource.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef DATASOURCE_H
#define DATASOURCE_H
@@ -33,8 +7,6 @@
#include <QtDataVisualization/QCustom3DVolume>
#include <QtCore/QObject>
-using namespace QtDataVisualization;
-
class DataSource : public QObject
{
Q_OBJECT
diff --git a/tests/manual/qmlvolume/main.cpp b/tests/manual/qmlvolume/main.cpp
index ac69d4f1..1c4e4492 100644
--- a/tests/manual/qmlvolume/main.cpp
+++ b/tests/manual/qmlvolume/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "datasource.h"
@@ -39,6 +13,7 @@
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QGuiApplication app(argc, argv);
QQuickView viewer;
diff --git a/tests/manual/qmlvolume/qml/qmlvolume/NewButton.qml b/tests/manual/qmlvolume/qml/qmlvolume/NewButton.qml
deleted file mode 100644
index 19309cca..00000000
--- a/tests/manual/qmlvolume/qml/qmlvolume/NewButton.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/tests/manual/qmlvolume/qml/qmlvolume/main.qml b/tests/manual/qmlvolume/qml/qmlvolume/main.qml
index 24946a12..da061483 100644
--- a/tests/manual/qmlvolume/qml/qmlvolume/main.qml
+++ b/tests/manual/qmlvolume/qml/qmlvolume/main.qml
@@ -1,35 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Layouts 1.0
-import QtQuick.Controls 1.0
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
import QtDataVisualization 1.2
import "."
@@ -50,15 +24,7 @@ Item {
width: dataView.width
height: dataView.height
orthoProjection: true
- //measureFps: true
-
- onCurrentFpsChanged: {
- if (fps > 10)
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps)
- else
- fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0
- }
-
+ measureFps : false
Surface3DSeries {
id: surfaceSeries
drawMode: Surface3DSeries.DrawSurface;
@@ -68,7 +34,7 @@ Item {
itemLabelVisible: false
onItemLabelChanged: {
- if (surfaceSeries.selectedPoint === surfaceSeries.invalidSelectionPosition)
+ if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
selectionText.text = "No selection"
else
selectionText.text = surfaceSeries.itemLabel
@@ -92,12 +58,9 @@ Item {
anchors.fill: parent
RowLayout {
id: sliderLayout
- anchors.top: parent.top
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.minimumHeight: 150
+ Layout.fillHeight: false
spacing: 0
-
+ visible: surfaceGraph.measureFps
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
@@ -116,19 +79,21 @@ Item {
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
+ text: {
+ return "FPS: " + surfaceGraph.currentFps > 10
+ ? Math.round(surfaceGraph.currentFps)
+ : Math.round(surfaceGraph.currentFps * 10.0) / 10.0
+ }
}
}
}
RowLayout {
id: buttonLayout
- Layout.fillHeight: true
- Layout.fillWidth: true
Layout.minimumHeight: 50
- anchors.bottom: parent.bottom
spacing: 0
- NewButton {
+ Button {
id: sliceButton
Layout.fillHeight: true
Layout.fillWidth: true
@@ -136,7 +101,7 @@ Item {
text: "Slice"
onClicked: {
- if (volumeItem.sliceIndexZ == -1) {
+ if (volumeItem.sliceIndexZ === -1) {
volumeItem.sliceIndexZ = 128
volumeItem.drawSlices = true
volumeItem.drawSliceFrames = true
@@ -147,18 +112,38 @@ Item {
}
}
}
- NewButton {
+ Button {
id: exitButton
Layout.fillHeight: true
Layout.fillWidth: true
text: "Quit"
- onClicked: Qt.quit(0);
+ onClicked: Qt.quit();
}
}
}
+ }
+
+ SequentialAnimation {
+ running: volumeItem.drawSlices
+ loops: Animation.Infinite
+ PropertyAnimation {
+ target: volumeItem
+ property: "sliceIndexZ"
+ from: 0
+ to: 1024
+ duration: 5000
+ }
+
+ PropertyAnimation {
+ target: volumeItem
+ property: "sliceIndexZ"
+ from: 1024
+ to: 0
+ duration: 5000
+ }
}
Custom3DVolume {
diff --git a/tests/manual/qmlvolume/qmlvolume.qrc b/tests/manual/qmlvolume/qmlvolume.qrc
index 18fe57e1..b1cb2997 100644
--- a/tests/manual/qmlvolume/qmlvolume.qrc
+++ b/tests/manual/qmlvolume/qmlvolume.qrc
@@ -1,6 +1,5 @@
<RCC>
<qresource prefix="/">
<file>qml/qmlvolume/main.qml</file>
- <file>qml/qmlvolume/NewButton.qml</file>
</qresource>
</RCC>
diff --git a/tests/manual/scattertest/CMakeLists.txt b/tests/manual/scattertest/CMakeLists.txt
new file mode 100644
index 00000000..89013c12
--- /dev/null
+++ b/tests/manual/scattertest/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(scattertest
+ GUI
+ SOURCES
+ main.cpp
+ scatterchart.cpp scatterchart.h
+ NO_PCH_SOURCES
+ scatterchart.cpp # undef QT_NO_FOREACH
+ )
+target_link_libraries(scattertest PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
diff --git a/tests/manual/scattertest/main.cpp b/tests/manual/scattertest/main.cpp
index d7e349bc..af4d477f 100644
--- a/tests/manual/scattertest/main.cpp
+++ b/tests/manual/scattertest/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "scatterchart.h"
@@ -46,6 +20,7 @@
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
//QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
diff --git a/tests/manual/scattertest/scatterchart.cpp b/tests/manual/scattertest/scatterchart.cpp
index c6775df2..fce115d4 100644
--- a/tests/manual/scattertest/scatterchart.cpp
+++ b/tests/manual/scattertest/scatterchart.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "scatterchart.h"
#include <QtDataVisualization/qscatterdataproxy.h>
@@ -37,7 +13,6 @@
#include <QtDataVisualization/Q3DInputHandler>
#include <qmath.h>
#include <qrandom.h>
-using namespace QtDataVisualization;
//#define RANDOM_SCATTER
@@ -245,7 +220,7 @@ void ScatterDataModifier::massiveTestAppendAndScroll()
m_chart->axisZ()->setRange(min, max);
}
-void ScatterDataModifier::setFpsMeasurement(bool enable)
+void ScatterDataModifier::setFpsMeasurement(int enable)
{
m_chart->setMeasureFps(enable);
}
@@ -974,14 +949,14 @@ void ScatterDataModifier::changeRadialLabelOffset(int offset)
m_chart->setRadialLabelOffset(float(offset) / 100.0f);
}
-void ScatterDataModifier::toggleAxisTitleVisibility(bool enabled)
+void ScatterDataModifier::toggleAxisTitleVisibility(int enabled)
{
m_chart->axisX()->setTitleVisible(enabled);
m_chart->axisY()->setTitleVisible(enabled);
m_chart->axisZ()->setTitleVisible(enabled);
}
-void ScatterDataModifier::toggleAxisTitleFixed(bool enabled)
+void ScatterDataModifier::toggleAxisTitleFixed(int enabled)
{
m_chart->axisX()->setTitleFixed(enabled);
m_chart->axisY()->setTitleFixed(enabled);
@@ -1010,12 +985,12 @@ void ScatterDataModifier::renderToImage()
}
}
-void ScatterDataModifier::togglePolar(bool enable)
+void ScatterDataModifier::togglePolar(int enable)
{
m_chart->setPolar(enable);
}
-void ScatterDataModifier::toggleStatic(bool enable)
+void ScatterDataModifier::toggleStatic(int enable)
{
if (enable)
m_chart->setOptimizationHints(QAbstract3DGraph::OptimizationStatic);
@@ -1023,7 +998,7 @@ void ScatterDataModifier::toggleStatic(bool enable)
m_chart->setOptimizationHints(QAbstract3DGraph::OptimizationDefault);
}
-void ScatterDataModifier::toggleOrtho(bool enable)
+void ScatterDataModifier::toggleOrtho(int enable)
{
m_chart->setOrthoProjection(enable);
}
diff --git a/tests/manual/scattertest/scatterchart.h b/tests/manual/scattertest/scatterchart.h
index 05fb0b03..2771a9a4 100644
--- a/tests/manual/scattertest/scatterchart.h
+++ b/tests/manual/scattertest/scatterchart.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
@@ -38,8 +12,6 @@
#include <QTimer>
#include <QLabel>
-using namespace QtDataVisualization;
-
class ScatterDataModifier : public QObject
{
Q_OBJECT
@@ -69,7 +41,7 @@ public:
void massiveDataTest();
void massiveTestScroll();
void massiveTestAppendAndScroll();
- void setFpsMeasurement(bool enable);
+ void setFpsMeasurement(int enable);
void setFpsLabel(QLabel *fpsLabel) { m_fpsLabel = fpsLabel; }
void testItemChanges();
void testAxisReverse();
@@ -103,12 +75,12 @@ public Q_SLOTS:
void handleFpsChange(qreal fps);
void changeLabelRotation(int rotation);
void changeRadialLabelOffset(int offset);
- void toggleAxisTitleVisibility(bool enabled);
- void toggleAxisTitleFixed(bool enabled);
+ void toggleAxisTitleVisibility(int enabled);
+ void toggleAxisTitleFixed(int enabled);
void renderToImage();
- void togglePolar(bool enable);
- void toggleStatic(bool enable);
- void toggleOrtho(bool enable);
+ void togglePolar(int enable);
+ void toggleStatic(int enable);
+ void toggleOrtho(int enable);
void setCameraTargetX(int value);
void setCameraTargetY(int value);
void setCameraTargetZ(int value);
diff --git a/tests/manual/surfacetest/CMakeLists.txt b/tests/manual/surfacetest/CMakeLists.txt
new file mode 100644
index 00000000..bb3f0500
--- /dev/null
+++ b/tests/manual/surfacetest/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(surfacetest
+ GUI
+ SOURCES
+ buttonwrapper.cpp buttonwrapper.h
+ checkboxwrapper.cpp checkboxwrapper.h
+ graphmodifier.cpp graphmodifier.h
+ main.cpp
+ NO_PCH_SOURCES
+ graphmodifier.cpp # undef QT_NO_FOREACH
+ )
+target_link_libraries(surfacetest PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
+
+set_source_files_properties("Heightmap.png"
+ PROPERTIES QT_RESOURCE_ALIAS "map"
+ )
+set_source_files_properties("mapimage.png"
+ PROPERTIES QT_RESOURCE_ALIAS "mapimage"
+ )
+set(surfacetest_resource_files
+ "Heightmap.png"
+ "mapimage.png"
+ )
+
+qt_internal_add_resource(surfacetest "surfacetest"
+ PREFIX
+ "/maps"
+ FILES
+ ${surfacetest_resource_files}
+ )
diff --git a/tests/manual/surfacetest/buttonwrapper.cpp b/tests/manual/surfacetest/buttonwrapper.cpp
new file mode 100644
index 00000000..c8eef0c7
--- /dev/null
+++ b/tests/manual/surfacetest/buttonwrapper.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "buttonwrapper.h"
+#include <QPushButton>
+
+ButtonWrapper::ButtonWrapper(QPushButton *button)
+{
+ m_button = button;
+}
+
+void ButtonWrapper::setEnabled(int state)
+{
+ m_button->setEnabled(state);
+}
diff --git a/tests/manual/surfacetest/buttonwrapper.h b/tests/manual/surfacetest/buttonwrapper.h
new file mode 100644
index 00000000..d0112117
--- /dev/null
+++ b/tests/manual/surfacetest/buttonwrapper.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#ifndef BUTTONWRAPPER_H
+#define BUTTONWRAPPER_H
+
+#include <QObject>
+class QPushButton;
+
+class ButtonWrapper : public QObject
+{
+ Q_OBJECT
+public:
+ ButtonWrapper(QPushButton *button);
+
+public Q_SLOTS:
+ void setEnabled(int state);
+
+private:
+ QPushButton *m_button;
+};
+
+#endif // BUTTONWRAPPER_H
diff --git a/tests/manual/surfacetest/checkboxwrapper.cpp b/tests/manual/surfacetest/checkboxwrapper.cpp
new file mode 100644
index 00000000..37bd3ded
--- /dev/null
+++ b/tests/manual/surfacetest/checkboxwrapper.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "checkboxwrapper.h"
+#include <QCheckBox>
+
+CheckBoxWrapper::CheckBoxWrapper(QCheckBox *cb)
+{
+ m_checkbox = cb;
+}
+
+void CheckBoxWrapper::setEnabled(int enabled)
+{
+ m_checkbox->setEnabled(enabled);
+}
diff --git a/tests/manual/surfacetest/checkboxwrapper.h b/tests/manual/surfacetest/checkboxwrapper.h
new file mode 100644
index 00000000..37e72346
--- /dev/null
+++ b/tests/manual/surfacetest/checkboxwrapper.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#ifndef CHECKBOXWRAPPER_H
+#define CHECKBOXWRAPPER_H
+
+#include <QObject>
+
+class QCheckBox;
+
+class CheckBoxWrapper : public QObject
+{
+ Q_OBJECT
+public:
+ explicit CheckBoxWrapper(QCheckBox *cb);
+
+public Q_SLOTS:
+ void setEnabled(int enabled);
+
+private:
+ QCheckBox *m_checkbox;
+};
+
+#endif // CHECKBOXWRAPPER_H
diff --git a/tests/manual/surfacetest/graphmodifier.cpp b/tests/manual/surfacetest/graphmodifier.cpp
index 11cabb4d..f406513d 100644
--- a/tests/manual/surfacetest/graphmodifier.cpp
+++ b/tests/manual/surfacetest/graphmodifier.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "graphmodifier.h"
#include <QtDataVisualization/QValue3DAxis>
@@ -42,7 +18,6 @@
#ifndef QT_NO_CURSOR
#include <QtGui/QCursor>
#endif
-using namespace QtDataVisualization;
//#define JITTER_PLANE
//#define WONKY_PLANE
@@ -194,7 +169,7 @@ void GraphModifier::fillSeries()
m_multiseries[3]->dataProxy()->resetArray(dataArray4);
}
-void GraphModifier::toggleSeries1(bool enabled)
+void GraphModifier::toggleSeries1(int enabled)
{
qDebug() << __FUNCTION__ << " enabled = " << enabled;
@@ -205,7 +180,7 @@ void GraphModifier::toggleSeries1(bool enabled)
}
}
-void GraphModifier::toggleSeries2(bool enabled)
+void GraphModifier::toggleSeries2(int enabled)
{
qDebug() << __FUNCTION__ << " enabled = " << enabled;
@@ -216,7 +191,7 @@ void GraphModifier::toggleSeries2(bool enabled)
}
}
-void GraphModifier::toggleSeries3(bool enabled)
+void GraphModifier::toggleSeries3(int enabled)
{
qDebug() << __FUNCTION__ << " enabled = " << enabled;
@@ -227,7 +202,7 @@ void GraphModifier::toggleSeries3(bool enabled)
}
}
-void GraphModifier::toggleSeries4(bool enabled)
+void GraphModifier::toggleSeries4(int enabled)
{
qDebug() << __FUNCTION__ << " enabled = " << enabled;
@@ -238,7 +213,7 @@ void GraphModifier::toggleSeries4(bool enabled)
}
}
-void GraphModifier::toggleSmooth(bool enabled)
+void GraphModifier::toggleSmooth(int enabled)
{
qDebug() << "GraphModifier::toggleSmooth " << enabled;
m_theSeries->setFlatShadingEnabled(enabled);
@@ -247,7 +222,7 @@ void GraphModifier::toggleSmooth(bool enabled)
#endif
}
-void GraphModifier::toggleSurfaceGrid(bool enable)
+void GraphModifier::toggleSurfaceGrid(int enable)
{
qDebug() << "GraphModifier::toggleSurfaceGrid" << enable;
if (enable)
@@ -261,7 +236,7 @@ void GraphModifier::toggleSurfaceGrid(bool enable)
#endif
}
-void GraphModifier::toggleSurface(bool enable)
+void GraphModifier::toggleSurface(int enable)
{
qDebug() << "GraphModifier::toggleSurface" << enable;
if (enable)
@@ -275,7 +250,7 @@ void GraphModifier::toggleSurface(bool enable)
#endif
}
-void GraphModifier::toggleSeriesVisible(bool enable)
+void GraphModifier::toggleSeriesVisible(int enable)
{
m_theSeries->setVisible(enable);
#ifdef MULTI_SERIES
@@ -283,13 +258,13 @@ void GraphModifier::toggleSeriesVisible(bool enable)
#endif
}
-void GraphModifier::toggleSmoothS2(bool enabled)
+void GraphModifier::toggleSmoothS2(int enabled)
{
qDebug() << __FUNCTION__ << enabled;
m_multiseries[1]->setFlatShadingEnabled(enabled);
}
-void GraphModifier::toggleSurfaceGridS2(bool enable)
+void GraphModifier::toggleSurfaceGridS2(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -300,7 +275,7 @@ void GraphModifier::toggleSurfaceGridS2(bool enable)
m_multiseries[1]->setDrawMode(m_drawMode2);
}
-void GraphModifier::toggleSurfaceS2(bool enable)
+void GraphModifier::toggleSurfaceS2(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -311,19 +286,19 @@ void GraphModifier::toggleSurfaceS2(bool enable)
m_multiseries[1]->setDrawMode(m_drawMode2);
}
-void GraphModifier::toggleSeries2Visible(bool enable)
+void GraphModifier::toggleSeries2Visible(int enable)
{
qDebug() << __FUNCTION__ << enable;
m_multiseries[1]->setVisible(enable);
}
-void GraphModifier::toggleSmoothS3(bool enabled)
+void GraphModifier::toggleSmoothS3(int enabled)
{
qDebug() << __FUNCTION__ << enabled;
m_multiseries[2]->setFlatShadingEnabled(enabled);
}
-void GraphModifier::toggleSurfaceGridS3(bool enable)
+void GraphModifier::toggleSurfaceGridS3(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -334,7 +309,7 @@ void GraphModifier::toggleSurfaceGridS3(bool enable)
m_multiseries[2]->setDrawMode(m_drawMode3);
}
-void GraphModifier::toggleSurfaceS3(bool enable)
+void GraphModifier::toggleSurfaceS3(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -345,19 +320,19 @@ void GraphModifier::toggleSurfaceS3(bool enable)
m_multiseries[2]->setDrawMode(m_drawMode3);
}
-void GraphModifier::toggleSeries3Visible(bool enable)
+void GraphModifier::toggleSeries3Visible(int enable)
{
qDebug() << __FUNCTION__ << enable;
m_multiseries[2]->setVisible(enable);
}
-void GraphModifier::toggleSmoothS4(bool enabled)
+void GraphModifier::toggleSmoothS4(int enabled)
{
qDebug() << __FUNCTION__ << enabled;
m_multiseries[3]->setFlatShadingEnabled(enabled);
}
-void GraphModifier::toggleSurfaceGridS4(bool enable)
+void GraphModifier::toggleSurfaceGridS4(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -368,7 +343,7 @@ void GraphModifier::toggleSurfaceGridS4(bool enable)
m_multiseries[3]->setDrawMode(m_drawMode4);
}
-void GraphModifier::toggleSurfaceS4(bool enable)
+void GraphModifier::toggleSurfaceS4(int enable)
{
qDebug() << __FUNCTION__ << enable;
if (enable)
@@ -379,13 +354,13 @@ void GraphModifier::toggleSurfaceS4(bool enable)
m_multiseries[3]->setDrawMode(m_drawMode4);
}
-void GraphModifier::toggleSeries4Visible(bool enable)
+void GraphModifier::toggleSeries4Visible(int enable)
{
qDebug() << __FUNCTION__ << enable;
m_multiseries[3]->setVisible(enable);
}
-void GraphModifier::toggleSqrtSin(bool enable)
+void GraphModifier::toggleSqrtSin(int enable)
{
if (enable) {
qDebug() << "Create Sqrt&Sin surface, (" << m_xCount << ", " << m_zCount << ")";
@@ -427,7 +402,7 @@ void GraphModifier::toggleSqrtSin(bool enable)
}
}
-void GraphModifier::togglePlane(bool enable)
+void GraphModifier::togglePlane(int enable)
{
qDebug() << "GraphModifier::togglePlane " << enable;
@@ -750,21 +725,21 @@ void GraphModifier::changeLabelRotation(int rotation)
m_graph->axisZ()->setLabelAutoRotation(float(rotation));
}
-void GraphModifier::toggleAxisTitleVisibility(bool enabled)
+void GraphModifier::toggleAxisTitleVisibility(int enabled)
{
m_graph->axisX()->setTitleVisible(enabled);
m_graph->axisY()->setTitleVisible(enabled);
m_graph->axisZ()->setTitleVisible(enabled);
}
-void GraphModifier::toggleAxisTitleFixed(bool enabled)
+void GraphModifier::toggleAxisTitleFixed(int enabled)
{
m_graph->axisX()->setTitleFixed(enabled);
m_graph->axisY()->setTitleFixed(enabled);
m_graph->axisZ()->setTitleFixed(enabled);
}
-void GraphModifier::toggleXAscending(bool enabled)
+void GraphModifier::toggleXAscending(int enabled)
{
m_ascendingX = enabled;
@@ -794,7 +769,7 @@ void GraphModifier::toggleXAscending(bool enabled)
}
}
-void GraphModifier::toggleZAscending(bool enabled)
+void GraphModifier::toggleZAscending(int enabled)
{
m_ascendingZ = enabled;
@@ -824,7 +799,7 @@ void GraphModifier::toggleZAscending(bool enabled)
}
}
-void GraphModifier::togglePolar(bool enabled)
+void GraphModifier::togglePolar(int enabled)
{
m_graph->setPolar(enabled);
}
@@ -1682,7 +1657,7 @@ void GraphModifier::setHorizontalAspectRatio(int ratio)
m_graph->setHorizontalAspectRatio(aspectRatio);
}
-void GraphModifier::setSurfaceTexture(bool enabled)
+void GraphModifier::setSurfaceTexture(int enabled)
{
if (enabled)
m_multiseries[3]->setTexture(QImage(":/maps/mapimage"));
diff --git a/tests/manual/surfacetest/graphmodifier.h b/tests/manual/surfacetest/graphmodifier.h
index c520f3c5..fe839976 100644
--- a/tests/manual/surfacetest/graphmodifier.h
+++ b/tests/manual/surfacetest/graphmodifier.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef GRAPHMODIFIER_H
#define GRAPHMODIFIER_H
@@ -40,8 +14,6 @@
#define MULTI_SERIES
-using namespace QtDataVisualization;
-
class GraphModifier : public QObject
{
Q_OBJECT
@@ -55,29 +27,29 @@ public:
explicit GraphModifier(Q3DSurface *graph, QWidget *parentWidget);
~GraphModifier();
- void toggleSeries1(bool enabled);
- void toggleSeries2(bool enabled);
- void toggleSeries3(bool enabled);
- void toggleSeries4(bool enabled);
- void toggleSmooth(bool enabled);
- void toggleSurfaceGrid(bool enable);
- void toggleSurface(bool enable);
- void toggleSeriesVisible(bool enable);
- void toggleSmoothS2(bool enabled);
- void toggleSurfaceGridS2(bool enable);
- void toggleSurfaceS2(bool enable);
- void toggleSeries2Visible(bool enable);
- void toggleSmoothS3(bool enabled);
- void toggleSurfaceGridS3(bool enable);
- void toggleSurfaceS3(bool enable);
- void toggleSeries3Visible(bool enable);
- void toggleSmoothS4(bool enabled);
- void toggleSurfaceGridS4(bool enable);
- void toggleSurfaceS4(bool enable);
- void toggleSeries4Visible(bool enable);
+ void toggleSeries1(int enabled);
+ void toggleSeries2(int enabled);
+ void toggleSeries3(int enabled);
+ void toggleSeries4(int enabled);
+ void toggleSmooth(int enabled);
+ void toggleSurfaceGrid(int enable);
+ void toggleSurface(int enable);
+ void toggleSeriesVisible(int enable);
+ void toggleSmoothS2(int enabled);
+ void toggleSurfaceGridS2(int enable);
+ void toggleSurfaceS2(int enable);
+ void toggleSeries2Visible(int enable);
+ void toggleSmoothS3(int enabled);
+ void toggleSurfaceGridS3(int enable);
+ void toggleSurfaceS3(int enable);
+ void toggleSeries3Visible(int enable);
+ void toggleSmoothS4(int enabled);
+ void toggleSurfaceGridS4(int enable);
+ void toggleSurfaceS4(int enable);
+ void toggleSeries4Visible(int enable);
- void toggleSqrtSin(bool enable);
- void togglePlane(bool enable);
+ void toggleSqrtSin(int enable);
+ void togglePlane(int enable);
void setHeightMapData(bool enable);
void toggleGridSliderLock(bool enable);
void setGridSliderX(QSlider *slider) { m_gridSliderX = slider; }
@@ -125,7 +97,7 @@ public:
void testDataOrdering();
void setAspectRatio(int ratio);
void setHorizontalAspectRatio(int ratio);
- void setSurfaceTexture(bool enabled);
+ void setSurfaceTexture(int enabled);
public Q_SLOTS:
void changeShadowQuality(int quality);
@@ -140,11 +112,11 @@ public Q_SLOTS:
void handleAxisZChanged(QValue3DAxis *axis);
void handleFpsChange(qreal fps);
void changeLabelRotation(int rotation);
- void toggleAxisTitleVisibility(bool enabled);
- void toggleAxisTitleFixed(bool enabled);
- void toggleXAscending(bool enabled);
- void toggleZAscending(bool enabled);
- void togglePolar(bool enabled);
+ void toggleAxisTitleVisibility(int enabled);
+ void toggleAxisTitleFixed(int enabled);
+ void toggleXAscending(int enabled);
+ void toggleZAscending(int enabled);
+ void togglePolar(int enabled);
void setCameraTargetX(int value);
void setCameraTargetY(int value);
void setCameraTargetZ(int value);
diff --git a/tests/manual/surfacetest/main.cpp b/tests/manual/surfacetest/main.cpp
index 2a638f0f..7b90a0c2 100644
--- a/tests/manual/surfacetest/main.cpp
+++ b/tests/manual/surfacetest/main.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "graphmodifier.h"
+#include "buttonwrapper.h"
+#include "checkboxwrapper.h"
#include <QtDataVisualization/q3dtheme.h>
#include <QApplication>
@@ -45,12 +21,11 @@
#include <QFrame>
#include <QDebug>
-using namespace QtDataVisualization;
-
const int initialTheme = 4;
int main(int argc, char *argv[])
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
QWidget *widget = new QWidget;
@@ -581,49 +556,66 @@ int main(int argc, char *argv[])
QObject::connect(series4VisibleCB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSeries4Visible);
+ CheckBoxWrapper *series1SmoothCBWrapper = new CheckBoxWrapper(smoothCB);
+ CheckBoxWrapper *series1SurfaceGridCBWrapper = new CheckBoxWrapper(surfaceGridCB);
+ CheckBoxWrapper *series1surfaceCBWrapper = new CheckBoxWrapper(surfaceCB);
+ CheckBoxWrapper *series1VisibleCBWrapper = new CheckBoxWrapper(seriesVisibleCB);
QObject::connect(series1CB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSeries1);
QObject::connect(series1CB, &QCheckBox::stateChanged,
- smoothCB, &QPushButton::setEnabled);
+ series1SmoothCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series1CB, &QCheckBox::stateChanged,
- surfaceGridCB, &QPushButton::setEnabled);
+ series1SurfaceGridCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series1CB, &QCheckBox::stateChanged,
- surfaceCB, &QPushButton::setEnabled);
+ series1surfaceCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series1CB, &QCheckBox::stateChanged,
- seriesVisibleCB, &QPushButton::setEnabled);
+ series1VisibleCBWrapper, &CheckBoxWrapper::setEnabled);
+
+ CheckBoxWrapper *series2SmoothCBWrapper = new CheckBoxWrapper(smoothS2CB);
+ CheckBoxWrapper *series2SurfaceGridCBWrapper = new CheckBoxWrapper(surfaceGridS2CB);
+ CheckBoxWrapper *series2surfaceCBWrapper = new CheckBoxWrapper(surfaceS2CB);
+ CheckBoxWrapper *series2VisibleCBWrapper = new CheckBoxWrapper(series2VisibleCB);
QObject::connect(series2CB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSeries2);
QObject::connect(series2CB, &QCheckBox::stateChanged,
- smoothS2CB, &QPushButton::setEnabled);
+ series2SmoothCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series2CB, &QCheckBox::stateChanged,
- surfaceGridS2CB, &QPushButton::setEnabled);
+ series2SurfaceGridCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series2CB, &QCheckBox::stateChanged,
- surfaceS2CB, &QPushButton::setEnabled);
+ series2surfaceCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series2CB, &QCheckBox::stateChanged,
- series2VisibleCB, &QPushButton::setEnabled);
+ series2VisibleCBWrapper, &CheckBoxWrapper::setEnabled);
+ CheckBoxWrapper *series3SmoothCBWrapper = new CheckBoxWrapper(smoothS3CB);
+ CheckBoxWrapper *series3SurfaceGridCBWrapper = new CheckBoxWrapper(surfaceGridS3CB);
+ CheckBoxWrapper *series3surfaceCBWrapper = new CheckBoxWrapper(surfaceS3CB);
+ CheckBoxWrapper *series3VisibleCBWrapper = new CheckBoxWrapper(series3VisibleCB);
QObject::connect(series3CB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSeries3);
QObject::connect(series3CB, &QCheckBox::stateChanged,
- smoothS3CB, &QPushButton::setEnabled);
+ series3SmoothCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series3CB, &QCheckBox::stateChanged,
- surfaceGridS3CB, &QPushButton::setEnabled);
+ series3SurfaceGridCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series3CB, &QCheckBox::stateChanged,
- surfaceS3CB, &QPushButton::setEnabled);
+ series3surfaceCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series3CB, &QCheckBox::stateChanged,
- series3VisibleCB, &QPushButton::setEnabled);
+ series3VisibleCBWrapper, &CheckBoxWrapper::setEnabled);
+ CheckBoxWrapper *series4SmoothCBWrapper = new CheckBoxWrapper(smoothS4CB);
+ CheckBoxWrapper *series4SurfaceGridCBWrapper = new CheckBoxWrapper(surfaceGridS4CB);
+ CheckBoxWrapper *series4surfaceCBWrapper = new CheckBoxWrapper(surfaceS4CB);
+ CheckBoxWrapper *series4VisibleCBWrapper = new CheckBoxWrapper(series4VisibleCB);
QObject::connect(series4CB, &QCheckBox::stateChanged,
modifier, &GraphModifier::toggleSeries4);
QObject::connect(series4CB, &QCheckBox::stateChanged,
- smoothS4CB, &QPushButton::setEnabled);
+ series4SmoothCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series4CB, &QCheckBox::stateChanged,
- surfaceGridS4CB, &QPushButton::setEnabled);
+ series4SurfaceGridCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series4CB, &QCheckBox::stateChanged,
- surfaceS4CB, &QPushButton::setEnabled);
+ series4surfaceCBWrapper, &CheckBoxWrapper::setEnabled);
QObject::connect(series4CB, &QCheckBox::stateChanged,
- series4VisibleCB, &QPushButton::setEnabled);
+ series4VisibleCBWrapper, &CheckBoxWrapper::setEnabled);
#else
QObject::connect(sqrtSinCB, &QRadioButton::toggled,
modifier, &GraphModifier::toggleSqrtSin);
diff --git a/tests/manual/volumetrictest/CMakeLists.txt b/tests/manual/volumetrictest/CMakeLists.txt
new file mode 100644
index 00000000..7e39bdf5
--- /dev/null
+++ b/tests/manual/volumetrictest/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+qt_internal_add_manual_test(volumetrictest
+ GUI
+ SOURCES
+ main.cpp
+ volumetrictest.cpp volumetrictest.h
+ )
+
+target_link_libraries(volumetrictest PUBLIC
+ Qt::Gui
+ Qt::Widgets
+ Qt::DataVisualization
+ )
+
+set_source_files_properties("cubeFilledFlat.obj"
+ PROPERTIES QT_RESOURCE_ALIAS "mesh"
+ )
+set(volumetrictest_resource_files
+ "cubeFilledFlat.obj"
+ "logo.png"
+ "logo_no_padding.png"
+ )
+
+qt_internal_add_resource(volumetrictest "volumetrictest"
+ PREFIX
+ "/"
+ FILES
+ ${volumetrictest_resource_files}
+ )
diff --git a/tests/manual/volumetrictest/main.cpp b/tests/manual/volumetrictest/main.cpp
index 412de874..d9d322be 100644
--- a/tests/manual/volumetrictest/main.cpp
+++ b/tests/manual/volumetrictest/main.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "volumetrictest.h"
#include <QtWidgets/QApplication>
@@ -41,6 +15,7 @@
int main(int argc, char **argv)
{
+ qputenv("QSG_RHI_BACKEND", "opengl");
QApplication app(argc, argv);
//Q3DScatter *graph = new Q3DScatter();
//Q3DSurface *graph = new Q3DSurface();
diff --git a/tests/manual/volumetrictest/volumetrictest.cpp b/tests/manual/volumetrictest/volumetrictest.cpp
index a60c55bc..49293873 100644
--- a/tests/manual/volumetrictest/volumetrictest.cpp
+++ b/tests/manual/volumetrictest/volumetrictest.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "volumetrictest.h"
#include <QtDataVisualization/qbar3dseries.h>
@@ -40,8 +14,6 @@
#include <QtWidgets/QLabel>
#include <QtCore/QDebug>
-using namespace QtDataVisualization;
-
const int imageCount = 512;
const float xMiddle = 100.0f;
const float yMiddle = 2.5f;
diff --git a/tests/manual/volumetrictest/volumetrictest.h b/tests/manual/volumetrictest/volumetrictest.h
index 83e0d01a..20b197d0 100644
--- a/tests/manual/volumetrictest/volumetrictest.h
+++ b/tests/manual/volumetrictest/volumetrictest.h
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef VOLUMETRICMODIFIER_H
#define VOLUMETRICMODIFIER_H
@@ -37,8 +11,6 @@
#include <QtDataVisualization/q3dbars.h>
#include <QtWidgets/QLabel>
-using namespace QtDataVisualization;
-
class VolumetricModifier : public QObject
{
Q_OBJECT
diff --git a/tests/tests.pro b/tests/tests.pro
deleted file mode 100644
index caa90722..00000000
--- a/tests/tests.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-!contains(QT_CONFIG, opengl) {
- error(Tests requires OpenGL!)
-}
-contains(QT_CONFIG, opengles1) {
- error(Tests do not support OpenGL ES 1!)
-}
-
-TEMPLATE = subdirs
-
-SUBDIRS += auto
-exists(manual): SUBDIRS += manual