From 88cd10aa7b3559b092cf5575b0a17d002dc100ae Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 13 Feb 2014 09:59:52 +0200 Subject: Fix examples installation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Had to add one folder to the examples structure so installation works correctly. Change-Id: Ic92dfe9997413a6243abcf5eeba12744ba9e938c Reviewed-by: Tomi Korpipää --- .../datavisualization/audiolevels/audiolevels.cpp | 89 + .../datavisualization/audiolevels/audiolevels.h | 45 + .../datavisualization/audiolevels/audiolevels.pro | 14 + .../audiolevels/audiolevelsiodevice.cpp | 103 + .../audiolevels/audiolevelsiodevice.h | 44 + .../audiolevels/doc/images/audiolevels-example.png | Bin 0 -> 120978 bytes .../audiolevels/doc/src/audiolevels.qdoc | 85 + examples/datavisualization/audiolevels/main.cpp | 39 + examples/datavisualization/bars/bars.pro | 8 + .../bars/doc/images/bars-example.png | Bin 0 -> 151337 bytes examples/datavisualization/bars/doc/src/bars.qdoc | 172 + examples/datavisualization/bars/graphmodifier.cpp | 280 + examples/datavisualization/bars/graphmodifier.h | 87 + examples/datavisualization/bars/main.cpp | 271 + .../datavisualization/custominput/custominput.pro | 12 + .../datavisualization/custominput/custominput.qrc | 5 + .../custominput/custominputhandler.cpp | 54 + .../custominput/custominputhandler.h | 36 + .../datavisualization/custominput/data/data.txt | 1060 ++ .../custominput/doc/images/custominput-example.png | Bin 0 -> 62422 bytes .../custominput/doc/src/custominput.qdoc | 70 + examples/datavisualization/custominput/main.cpp | 84 + .../custominput/scatterdatamodifier.cpp | 172 + .../custominput/scatterdatamodifier.h | 60 + .../datavisualization/customproxy/customproxy.pro | 20 + .../datavisualization/customproxy/customproxy.qrc | 5 + .../customproxy/data/raindata.txt | 158 + .../customproxy/doc/images/customproxy-example.png | Bin 0 -> 125698 bytes .../customproxy/doc/src/customproxy.qdoc | 113 + examples/datavisualization/customproxy/main.cpp | 38 + .../customproxy/rainfallgraph.cpp | 155 + .../datavisualization/customproxy/rainfallgraph.h | 51 + .../customproxy/variantbardatamapping.cpp | 133 + .../customproxy/variantbardatamapping.h | 79 + .../customproxy/variantbardataproxy.cpp | 140 + .../customproxy/variantbardataproxy.h | 68 + .../customproxy/variantdataset.cpp | 63 + .../datavisualization/customproxy/variantdataset.h | 57 + examples/datavisualization/datavisualization.pro | 21 + examples/datavisualization/examples.pri | 13 + .../itemmodel/doc/images/itemmodel-example-2.png | Bin 0 -> 78536 bytes .../itemmodel/doc/images/itemmodel-example.png | Bin 0 -> 45381 bytes .../itemmodel/doc/src/itemmodel.qdoc | 181 + examples/datavisualization/itemmodel/itemmodel.pro | 7 + examples/datavisualization/itemmodel/main.cpp | 285 + .../qmlbars/doc/images/qmlbars-example.png | Bin 0 -> 149167 bytes .../datavisualization/qmlbars/doc/src/qmlbars.qdoc | 93 + examples/datavisualization/qmlbars/main.cpp | 51 + .../datavisualization/qmlbars/qml/qmlbars/Axes.qml | 52 + .../datavisualization/qmlbars/qml/qmlbars/Data.qml | 119 + .../datavisualization/qmlbars/qml/qmlbars/main.qml | 303 + examples/datavisualization/qmlbars/qmlbars.desktop | 11 + examples/datavisualization/qmlbars/qmlbars.pro | 20 + examples/datavisualization/qmlbars/qmlbars.qrc | 7 + examples/datavisualization/qmlbars/qmlbars64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../doc/images/qmlcustominput-example.png | Bin 0 -> 57821 bytes .../qmlcustominput/doc/src/qmlcustominput.qdoc | 79 + examples/datavisualization/qmlcustominput/main.cpp | 51 + .../qmlcustominput/qml/qmlcustominput/Data.qml | 1087 ++ .../qml/qmlcustominput/NewButton.qml | 52 + .../qmlcustominput/qml/qmlcustominput/main.qml | 205 + .../qmlcustominput/qmlcustominput.desktop | 11 + .../qmlcustominput/qmlcustominput.pro | 21 + .../qmlcustominput/qmlcustominput.qrc | 7 + .../qmlcustominput/qmlcustominput64.png | Bin 0 -> 3400 bytes .../qmlcustominput/qmlcustominput80.png | Bin 0 -> 4945 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../qmllegend/doc/images/qmllegend-example.png | Bin 0 -> 98023 bytes .../qmllegend/doc/src/qmllegend.qdoc | 67 + examples/datavisualization/qmllegend/main.cpp | 51 + .../qmllegend/qml/qmllegend/Data.qml | 78 + .../qmllegend/qml/qmllegend/LegendItem.qml | 118 + .../qmllegend/qml/qmllegend/NewButton.qml | 52 + .../qmllegend/qml/qmllegend/main.qml | 239 + .../datavisualization/qmllegend/qmllegend.desktop | 11 + examples/datavisualization/qmllegend/qmllegend.pro | 23 + examples/datavisualization/qmllegend/qmllegend.qrc | 8 + .../datavisualization/qmllegend/qmllegend64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../doc/images/qmlmultigraph-example.png | Bin 0 -> 82347 bytes .../qmlmultigraph/doc/src/qmlmultigraph.qdoc | 46 + examples/datavisualization/qmlmultigraph/main.cpp | 50 + .../qmlmultigraph/qml/qmlmultigraph/Data.qml | 48 + .../qmlmultigraph/qml/qmlmultigraph/NewButton.qml | 52 + .../qmlmultigraph/qml/qmlmultigraph/main.qml | 215 + .../qmlmultigraph/qmlmultigraph.desktop | 11 + .../qmlmultigraph/qmlmultigraph.pro | 20 + .../qmlmultigraph/qmlmultigraph.qrc | 7 + .../qmlmultigraph/qmlmultigraph64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../qmloscilloscope/datasource.cpp | 166 + .../datavisualization/qmloscilloscope/datasource.h | 54 + .../doc/images/qmloscilloscope-example.png | Bin 0 -> 235720 bytes .../qmloscilloscope/doc/src/qmloscilloscope.qdoc | 102 + .../datavisualization/qmloscilloscope/main.cpp | 58 + .../qml/qmloscilloscope/NewButton.qml | 52 + .../qmloscilloscope/qml/qmloscilloscope/main.qml | 289 + .../qmloscilloscope/qmloscilloscope.desktop | 11 + .../qmloscilloscope/qmloscilloscope.pro | 24 + .../qmloscilloscope/qmloscilloscope.qrc | 6 + .../qmloscilloscope/qmloscilloscope64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../qmlscatter/doc/images/qmlscatter-example.png | Bin 0 -> 98086 bytes .../doc/images/qmlscatter-newproject.png | Bin 0 -> 37045 bytes .../qmlscatter/doc/src/qmlscatter.qdoc | 190 + examples/datavisualization/qmlscatter/main.cpp | 56 + .../qmlscatter/qml/qmlscatter/Data.qml | 1099 ++ .../qmlscatter/qml/qmlscatter/NewButton.qml | 52 + .../qmlscatter/qml/qmlscatter/main.qml | 229 + .../qmlscatter/qmlscatter.desktop | 11 + .../datavisualization/qmlscatter/qmlscatter.pro | 20 + .../datavisualization/qmlscatter/qmlscatter.qrc | 7 + .../datavisualization/qmlscatter/qmlscatter64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../qmlsurface/doc/images/qmlsurface-example.png | Bin 0 -> 195500 bytes .../qmlsurface/doc/src/qmlsurface.qdoc | 108 + .../datavisualization/qmlsurface/heightmap.png | Bin 0 -> 38634 bytes examples/datavisualization/qmlsurface/main.cpp | 51 + .../qmlsurface/qml/qmlsurface/Data.qml | 10029 +++++++++++++++++++ .../qmlsurface/qml/qmlsurface/NewButton.qml | 52 + .../qmlsurface/qml/qmlsurface/main.qml | 250 + .../qmlsurface/qmlsurface.desktop | 11 + .../datavisualization/qmlsurface/qmlsurface.pro | 20 + .../datavisualization/qmlsurface/qmlsurface.qrc | 10 + .../datavisualization/qmlsurface/qmlsurface64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../doc/images/qmlsurfacelayers-example.png | Bin 0 -> 86259 bytes .../qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc | 80 + .../datavisualization/qmlsurfacelayers/layer_1.png | Bin 0 -> 34540 bytes .../datavisualization/qmlsurfacelayers/layer_2.png | Bin 0 -> 13022 bytes .../datavisualization/qmlsurfacelayers/layer_3.png | Bin 0 -> 10553 bytes .../datavisualization/qmlsurfacelayers/main.cpp | 51 + .../qml/qmlsurfacelayers/NewButton.qml | 52 + .../qmlsurfacelayers/qml/qmlsurfacelayers/main.qml | 234 + .../qmlsurfacelayers/qmlsurfacelayers.desktop | 11 + .../qmlsurfacelayers/qmlsurfacelayers.pro | 20 + .../qmlsurfacelayers/qmlsurfacelayers.qrc | 11 + .../qmlsurfacelayers/qmlsurfacelayers64.png | Bin 0 -> 3400 bytes .../qtquick2applicationviewer.cpp | 81 + .../qtquick2applicationviewer.h | 33 + .../qtquick2applicationviewer.pri | 180 + .../rotations/doc/images/rotations-example.png | Bin 0 -> 69487 bytes .../rotations/doc/src/rotations.qdoc | 68 + examples/datavisualization/rotations/main.cpp | 87 + .../rotations/mesh/largesphere.obj | 1938 ++++ .../rotations/mesh/narrowarrow.obj | 413 + examples/datavisualization/rotations/rotations.pro | 10 + examples/datavisualization/rotations/rotations.qrc | 6 + .../rotations/scatterdatamodifier.cpp | 183 + .../rotations/scatterdatamodifier.h | 56 + .../scatter/doc/images/scatter-example.png | Bin 0 -> 142496 bytes .../datavisualization/scatter/doc/src/scatter.qdoc | 146 + examples/datavisualization/scatter/main.cpp | 176 + examples/datavisualization/scatter/scatter.pro | 8 + .../scatter/scatterdatamodifier.cpp | 203 + .../scatter/scatterdatamodifier.h | 69 + .../surface/doc/images/surface-example.png | Bin 0 -> 149046 bytes .../datavisualization/surface/doc/src/surface.qdoc | 136 + examples/datavisualization/surface/main.cpp | 210 + examples/datavisualization/surface/mountain.png | Bin 0 -> 34540 bytes examples/datavisualization/surface/surface.pro | 12 + examples/datavisualization/surface/surface.qrc | 5 + .../datavisualization/surface/surfacegraph.cpp | 265 + examples/datavisualization/surface/surfacegraph.h | 88 + 179 files changed, 27489 insertions(+) create mode 100644 examples/datavisualization/audiolevels/audiolevels.cpp create mode 100644 examples/datavisualization/audiolevels/audiolevels.h create mode 100644 examples/datavisualization/audiolevels/audiolevels.pro create mode 100644 examples/datavisualization/audiolevels/audiolevelsiodevice.cpp create mode 100644 examples/datavisualization/audiolevels/audiolevelsiodevice.h create mode 100644 examples/datavisualization/audiolevels/doc/images/audiolevels-example.png create mode 100644 examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc create mode 100644 examples/datavisualization/audiolevels/main.cpp create mode 100644 examples/datavisualization/bars/bars.pro create mode 100644 examples/datavisualization/bars/doc/images/bars-example.png create mode 100644 examples/datavisualization/bars/doc/src/bars.qdoc create mode 100644 examples/datavisualization/bars/graphmodifier.cpp create mode 100644 examples/datavisualization/bars/graphmodifier.h create mode 100644 examples/datavisualization/bars/main.cpp create mode 100644 examples/datavisualization/custominput/custominput.pro create mode 100644 examples/datavisualization/custominput/custominput.qrc create mode 100644 examples/datavisualization/custominput/custominputhandler.cpp create mode 100644 examples/datavisualization/custominput/custominputhandler.h create mode 100644 examples/datavisualization/custominput/data/data.txt create mode 100644 examples/datavisualization/custominput/doc/images/custominput-example.png create mode 100644 examples/datavisualization/custominput/doc/src/custominput.qdoc create mode 100644 examples/datavisualization/custominput/main.cpp create mode 100644 examples/datavisualization/custominput/scatterdatamodifier.cpp create mode 100644 examples/datavisualization/custominput/scatterdatamodifier.h create mode 100644 examples/datavisualization/customproxy/customproxy.pro create mode 100644 examples/datavisualization/customproxy/customproxy.qrc create mode 100644 examples/datavisualization/customproxy/data/raindata.txt create mode 100644 examples/datavisualization/customproxy/doc/images/customproxy-example.png create mode 100644 examples/datavisualization/customproxy/doc/src/customproxy.qdoc create mode 100644 examples/datavisualization/customproxy/main.cpp create mode 100644 examples/datavisualization/customproxy/rainfallgraph.cpp create mode 100644 examples/datavisualization/customproxy/rainfallgraph.h create mode 100644 examples/datavisualization/customproxy/variantbardatamapping.cpp create mode 100644 examples/datavisualization/customproxy/variantbardatamapping.h create mode 100644 examples/datavisualization/customproxy/variantbardataproxy.cpp create mode 100644 examples/datavisualization/customproxy/variantbardataproxy.h create mode 100644 examples/datavisualization/customproxy/variantdataset.cpp create mode 100644 examples/datavisualization/customproxy/variantdataset.h create mode 100644 examples/datavisualization/datavisualization.pro create mode 100644 examples/datavisualization/examples.pri create mode 100644 examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png create mode 100644 examples/datavisualization/itemmodel/doc/images/itemmodel-example.png create mode 100644 examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc create mode 100644 examples/datavisualization/itemmodel/itemmodel.pro create mode 100644 examples/datavisualization/itemmodel/main.cpp create mode 100644 examples/datavisualization/qmlbars/doc/images/qmlbars-example.png create mode 100644 examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc create mode 100644 examples/datavisualization/qmlbars/main.cpp create mode 100644 examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml create mode 100644 examples/datavisualization/qmlbars/qml/qmlbars/Data.qml create mode 100644 examples/datavisualization/qmlbars/qml/qmlbars/main.qml create mode 100644 examples/datavisualization/qmlbars/qmlbars.desktop create mode 100644 examples/datavisualization/qmlbars/qmlbars.pro create mode 100644 examples/datavisualization/qmlbars/qmlbars.qrc create mode 100644 examples/datavisualization/qmlbars/qmlbars64.png create mode 100644 examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png create mode 100644 examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc create mode 100644 examples/datavisualization/qmlcustominput/main.cpp create mode 100644 examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml create mode 100644 examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml create mode 100644 examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml create mode 100644 examples/datavisualization/qmlcustominput/qmlcustominput.desktop create mode 100644 examples/datavisualization/qmlcustominput/qmlcustominput.pro create mode 100644 examples/datavisualization/qmlcustominput/qmlcustominput.qrc create mode 100644 examples/datavisualization/qmlcustominput/qmlcustominput64.png create mode 100644 examples/datavisualization/qmlcustominput/qmlcustominput80.png create mode 100644 examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmllegend/doc/images/qmllegend-example.png create mode 100644 examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc create mode 100644 examples/datavisualization/qmllegend/main.cpp create mode 100644 examples/datavisualization/qmllegend/qml/qmllegend/Data.qml create mode 100644 examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml create mode 100644 examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml create mode 100644 examples/datavisualization/qmllegend/qml/qmllegend/main.qml create mode 100644 examples/datavisualization/qmllegend/qmllegend.desktop create mode 100644 examples/datavisualization/qmllegend/qmllegend.pro create mode 100644 examples/datavisualization/qmllegend/qmllegend.qrc create mode 100644 examples/datavisualization/qmllegend/qmllegend64.png create mode 100644 examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png create mode 100644 examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc create mode 100644 examples/datavisualization/qmlmultigraph/main.cpp create mode 100644 examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml create mode 100644 examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml create mode 100644 examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml create mode 100644 examples/datavisualization/qmlmultigraph/qmlmultigraph.desktop create mode 100644 examples/datavisualization/qmlmultigraph/qmlmultigraph.pro create mode 100644 examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc create mode 100644 examples/datavisualization/qmlmultigraph/qmlmultigraph64.png create mode 100644 examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmloscilloscope/datasource.cpp create mode 100644 examples/datavisualization/qmloscilloscope/datasource.h create mode 100644 examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.png create mode 100644 examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc create mode 100644 examples/datavisualization/qmloscilloscope/main.cpp create mode 100644 examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml create mode 100644 examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml create mode 100644 examples/datavisualization/qmloscilloscope/qmloscilloscope.desktop create mode 100644 examples/datavisualization/qmloscilloscope/qmloscilloscope.pro create mode 100644 examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc create mode 100644 examples/datavisualization/qmloscilloscope/qmloscilloscope64.png create mode 100644 examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png create mode 100644 examples/datavisualization/qmlscatter/doc/images/qmlscatter-newproject.png create mode 100644 examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc create mode 100644 examples/datavisualization/qmlscatter/main.cpp create mode 100644 examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml create mode 100644 examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml create mode 100644 examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml create mode 100644 examples/datavisualization/qmlscatter/qmlscatter.desktop create mode 100644 examples/datavisualization/qmlscatter/qmlscatter.pro create mode 100644 examples/datavisualization/qmlscatter/qmlscatter.qrc create mode 100644 examples/datavisualization/qmlscatter/qmlscatter64.png create mode 100644 examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png create mode 100644 examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc create mode 100644 examples/datavisualization/qmlsurface/heightmap.png create mode 100644 examples/datavisualization/qmlsurface/main.cpp create mode 100644 examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml create mode 100644 examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml create mode 100644 examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml create mode 100644 examples/datavisualization/qmlsurface/qmlsurface.desktop create mode 100644 examples/datavisualization/qmlsurface/qmlsurface.pro create mode 100644 examples/datavisualization/qmlsurface/qmlsurface.qrc create mode 100644 examples/datavisualization/qmlsurface/qmlsurface64.png create mode 100644 examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png create mode 100644 examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc create mode 100644 examples/datavisualization/qmlsurfacelayers/layer_1.png create mode 100644 examples/datavisualization/qmlsurfacelayers/layer_2.png create mode 100644 examples/datavisualization/qmlsurfacelayers/layer_3.png create mode 100644 examples/datavisualization/qmlsurfacelayers/main.cpp create mode 100644 examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml create mode 100644 examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml create mode 100644 examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.desktop create mode 100644 examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro create mode 100644 examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc create mode 100644 examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers64.png create mode 100644 examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.cpp create mode 100644 examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.h create mode 100644 examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.pri create mode 100644 examples/datavisualization/rotations/doc/images/rotations-example.png create mode 100644 examples/datavisualization/rotations/doc/src/rotations.qdoc create mode 100644 examples/datavisualization/rotations/main.cpp create mode 100644 examples/datavisualization/rotations/mesh/largesphere.obj create mode 100644 examples/datavisualization/rotations/mesh/narrowarrow.obj create mode 100644 examples/datavisualization/rotations/rotations.pro create mode 100644 examples/datavisualization/rotations/rotations.qrc create mode 100644 examples/datavisualization/rotations/scatterdatamodifier.cpp create mode 100644 examples/datavisualization/rotations/scatterdatamodifier.h create mode 100644 examples/datavisualization/scatter/doc/images/scatter-example.png create mode 100644 examples/datavisualization/scatter/doc/src/scatter.qdoc create mode 100644 examples/datavisualization/scatter/main.cpp create mode 100644 examples/datavisualization/scatter/scatter.pro create mode 100644 examples/datavisualization/scatter/scatterdatamodifier.cpp create mode 100644 examples/datavisualization/scatter/scatterdatamodifier.h create mode 100644 examples/datavisualization/surface/doc/images/surface-example.png create mode 100644 examples/datavisualization/surface/doc/src/surface.qdoc create mode 100644 examples/datavisualization/surface/main.cpp create mode 100644 examples/datavisualization/surface/mountain.png create mode 100644 examples/datavisualization/surface/surface.pro create mode 100644 examples/datavisualization/surface/surface.qrc create mode 100644 examples/datavisualization/surface/surfacegraph.cpp create mode 100644 examples/datavisualization/surface/surfacegraph.h (limited to 'examples/datavisualization') diff --git a/examples/datavisualization/audiolevels/audiolevels.cpp b/examples/datavisualization/audiolevels/audiolevels.cpp new file mode 100644 index 00000000..18c1342a --- /dev/null +++ b/examples/datavisualization/audiolevels/audiolevels.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "audiolevelsiodevice.h" +#include "audiolevels.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +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(); + + 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 + // Mac 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); + //! [0] +} + +AudioLevels::~AudioLevels() +{ + m_audioInput->stop(); + m_device->close(); +} diff --git a/examples/datavisualization/audiolevels/audiolevels.h b/examples/datavisualization/audiolevels/audiolevels.h new file mode 100644 index 00000000..84d9b4c4 --- /dev/null +++ b/examples/datavisualization/audiolevels/audiolevels.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef AUDIOLEVELS_H +#define AUDIOLEVELS_H + +#include + +using namespace QtDataVisualization; + +class AudioLevelsIODevice; +class QAudioInput; + +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 new file mode 100644 index 00000000..46f01635 --- /dev/null +++ b/examples/datavisualization/audiolevels/audiolevels.pro @@ -0,0 +1,14 @@ +!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 diff --git a/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp b/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp new file mode 100644 index 00000000..c0cd70e3 --- /dev/null +++ b/examples/datavisualization/audiolevels/audiolevelsiodevice.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "audiolevelsiodevice.h" +#include + +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 new file mode 100644 index 00000000..45f17626 --- /dev/null +++ b/examples/datavisualization/audiolevels/audiolevelsiodevice.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef AUDIOLEVELSIODEVICE_H +#define AUDIOLEVELSIODEVICE_H + +#include +#include + +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 new file mode 100644 index 00000000..ec79eb5a Binary files /dev/null and b/examples/datavisualization/audiolevels/doc/images/audiolevels-example.png differ diff --git a/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc b/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc new file mode 100644 index 00000000..ad87ecc0 --- /dev/null +++ b/examples/datavisualization/audiolevels/doc/src/audiolevels.qdoc @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/audiolevels/audiolevels.h 0 + + And initialize the microphone listening in the source: + + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 QVector 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 new file mode 100644 index 00000000..9dd07b1b --- /dev/null +++ b/examples/datavisualization/audiolevels/main.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "audiolevels.h" + +#include +#include + +using namespace QtDataVisualization; + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + Q3DBars window; + 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 new file mode 100644 index 00000000..5de4626a --- /dev/null +++ b/examples/datavisualization/bars/bars.pro @@ -0,0 +1,8 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp graphmodifier.cpp +HEADERS += graphmodifier.h + +QT += widgets diff --git a/examples/datavisualization/bars/doc/images/bars-example.png b/examples/datavisualization/bars/doc/images/bars-example.png new file mode 100644 index 00000000..5bd2c7d9 Binary files /dev/null and b/examples/datavisualization/bars/doc/images/bars-example.png differ diff --git a/examples/datavisualization/bars/doc/src/bars.qdoc b/examples/datavisualization/bars/doc/src/bars.qdoc new file mode 100644 index 00000000..3cfc72b1 --- /dev/null +++ b/examples/datavisualization/bars/doc/src/bars.qdoc @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + \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 + + \section1 Creating the application + + First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container + for it: + + \snippet ../examples/bars/main.cpp 0 + + The call to QWidget::createWindowContainer is required, as all data visualization types + (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 ../examples/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 ../examples/bars/main.cpp 2 + + The application main is done and we can show the graph and start the event loop: + + \snippet ../examples/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 ../examples/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 ../examples/bars/graphmodifier.cpp 1 + + Then we're setting some of the visual qualities for the graph: + + \snippet ../examples/bars/graphmodifier.cpp 2 + + We're also setting up the axes and setting them to the graph as active axes: + + \snippet ../examples/bars/graphmodifier.cpp 3 + + Next we initialize the visual properties of the series. + Note that the second series is initially not visible: + + \snippet ../examples/bars/graphmodifier.cpp 8 + + The series need to be added to the graph to show them: + + \snippet ../examples/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 ../examples/bars/graphmodifier.cpp 6 + + There you can see that the camera is controlled via the scene object of the graph: + + \snippet ../examples/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 ../examples/bars/graphmodifier.cpp 9 + + This method is used to add data to the proxies of the two series: + + \snippet ../examples/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 ../examples/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 ../examples/bars/main.cpp 5 + + Then we'll connect them to methods in \c GraphModifier: + + \snippet ../examples/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 ../examples/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 Data range to be shown + \li Bar style + \li Selection mode + \li Theme + \li Shadow quality + \li Font + \li Font size + \endlist + + \section1 Example contents + +*/ diff --git a/examples/datavisualization/bars/graphmodifier.cpp b/examples/datavisualization/bars/graphmodifier.cpp new file mode 100644 index 00000000..55f52580 --- /dev/null +++ b/examples/datavisualization/bars/graphmodifier.cpp @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "graphmodifier.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace QtDataVisualization; + +const QString celsiusString = QString(QChar(0xB0)) + "C"; + +//! [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), + //! [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) +{ + //! [2] + m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftMedium); + m_graph->activeTheme()->setBackgroundEnabled(false); + m_graph->activeTheme()->setFont(QFont("Times New Roman", m_fontSize)); + m_graph->activeTheme()->setLabelBackgroundEnabled(true); + 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"; + + //! [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_yearAxis->setTitle("Year"); + m_monthAxis->setTitle("Month"); + + m_graph->setValueAxis(m_temperatureAxis); + m_graph->setRowAxis(m_yearAxis); + m_graph->setColumnAxis(m_monthAxis); + //! [3] + + //! [8] + m_primarySeries->setItemLabelFormat(QStringLiteral("Oulu - @colLabel @rowLabel: @valueLabel")); + m_primarySeries->setMesh(QAbstract3DSeries::MeshBevelBar); + m_primarySeries->setMeshSmooth(false); + + m_secondarySeries->setItemLabelFormat(QStringLiteral("Helsinki - @colLabel @rowLabel: @valueLabel")); + m_secondarySeries->setMesh(QAbstract3DSeries::MeshBevelBar); + m_secondarySeries->setMeshSmooth(false); + m_secondarySeries->setVisible(false); + //! [8] + + //! [4] + m_graph->addSeries(m_primarySeries); + m_graph->addSeries(m_secondarySeries); + //! [4] + + //! [6] + changePresetCamera(); + //! [6] + + //! [9] + resetTemperatureData(); + //! [9] +} +//! [0] + +GraphModifier::~GraphModifier() +{ + delete m_graph; +} + +void GraphModifier::resetTemperatureData() +{ + //! [5] + // 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 + }; + + 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 + }; + + // Create data arrays + QBarDataArray *dataSet = new QBarDataArray; + QBarDataArray *dataSet2 = new QBarDataArray; + QBarDataRow *dataRow; + QBarDataRow *dataRow2; + + dataSet->reserve(m_years.size()); + for (int year = 0; year < m_years.size(); year++) { + // Create a data row + dataRow = new QBarDataRow(m_months.size()); + dataRow2 = new QBarDataRow(m_months.size()); + for (int month = 0; month < m_months.size(); month++) { + // Add data to the row + (*dataRow)[month].setValue(tempOulu[year][month]); + (*dataRow2)[month].setValue(tempHelsinki[year][month]); + } + // Add the row to the set + dataSet->append(dataRow); + dataSet2->append(dataRow2); + } + + // 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] +} + +void GraphModifier::changeRange(int range) +{ + if (range >= m_years.count()) + m_yearAxis->setRange(0, m_years.count() - 1); + else + m_yearAxis->setRange(range, range); +} + +void GraphModifier::changeStyle(int style) +{ + QComboBox *comboBox = qobject_cast(sender()); + if (comboBox) { + m_barMesh = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt()); + m_primarySeries->setMesh(m_barMesh); + m_secondarySeries->setMesh(m_barMesh); + } +} + +void GraphModifier::changePresetCamera() +{ + //! [10] + static int preset = Q3DCamera::CameraPresetFront; + + m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset); + + if (++preset > Q3DCamera::CameraPresetDirectlyBelow) + preset = Q3DCamera::CameraPresetFrontLow; + //! [10] +} + +void GraphModifier::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()); + emit fontSizeChanged(currentTheme->font().pointSize()); +} + +void GraphModifier::changeLabelBackground() +{ + m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled()); +} + +void GraphModifier::changeSelectionMode(int selectionMode) +{ + QComboBox *comboBox = qobject_cast(sender()); + if (comboBox) { + int flags = comboBox->itemData(selectionMode).toInt(); + m_graph->setSelectionMode(QAbstract3DGraph::SelectionFlags(flags)); + } +} + +void GraphModifier::changeFont(const QFont &font) +{ + QFont newFont = font; + m_graph->activeTheme()->setFont(newFont); +} + +void GraphModifier::changeFontSize(int fontsize) +{ + m_fontSize = fontsize; + QFont font = m_graph->activeTheme()->font(); + font.setPointSize(m_fontSize); + m_graph->activeTheme()->setFont(font); +} + +void GraphModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq) +{ + int quality = int(sq); + // Updates the UI component to show correct shadow quality + emit shadowQualityChanged(quality); +} + +void GraphModifier::changeShadowQuality(int quality) +{ + QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); + m_graph->setShadowQuality(sq); + emit shadowQualityChanged(quality); +} + +//! [7] +void GraphModifier::rotateX(int rotation) +{ + m_xRotation = rotation; + m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation); +} + +void GraphModifier::rotateY(int rotation) +{ + m_yRotation = rotation; + m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation); +} +//! [7] + +void GraphModifier::setBackgroundEnabled(int enabled) +{ + m_graph->activeTheme()->setBackgroundEnabled(bool(enabled)); +} + +void GraphModifier::setGridEnabled(int enabled) +{ + m_graph->activeTheme()->setGridEnabled(bool(enabled)); +} + +void GraphModifier::setSmoothBars(int smooth) +{ + m_smooth = bool(smooth); + m_primarySeries->setMeshSmooth(m_smooth); + m_secondarySeries->setMeshSmooth(m_smooth); +} + +void GraphModifier::setSeriesVisibility(int enabled) +{ + m_secondarySeries->setVisible(bool(enabled)); +} diff --git a/examples/datavisualization/bars/graphmodifier.h b/examples/datavisualization/bars/graphmodifier.h new file mode 100644 index 00000000..674c3262 --- /dev/null +++ b/examples/datavisualization/bars/graphmodifier.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef GRAPHMODIFIER_H +#define GRAPHMODIFIER_H + +#include +#include +#include + +#include +#include +#include +#include + +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); + +public 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); + +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; +}; + +#endif diff --git a/examples/datavisualization/bars/main.cpp b/examples/datavisualization/bars/main.cpp new file mode 100644 index 00000000..f04e501d --- /dev/null +++ b/examples/datavisualization/bars/main.cpp @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "graphmodifier.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + //! [0] + QApplication app(argc, argv); + Q3DBars *widgetgraph = new Q3DBars(); + QWidget *container = QWidget::createWindowContainer(widgetgraph); + //! [0] + + 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")); + + 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); + + //! [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); + + //! [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(backgroundCheckBox); + vLayout->addWidget(gridCheckBox); + vLayout->addWidget(smoothCheckBox); + vLayout->addWidget(seriesCheckBox); + 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, 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(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(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); + + //! [3] + widget->show(); + return app.exec(); + //! [3] +} diff --git a/examples/datavisualization/custominput/custominput.pro b/examples/datavisualization/custominput/custominput.pro new file mode 100644 index 00000000..303cfc83 --- /dev/null +++ b/examples/datavisualization/custominput/custominput.pro @@ -0,0 +1,12 @@ +!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 + +RESOURCES += custominput.qrc diff --git a/examples/datavisualization/custominput/custominput.qrc b/examples/datavisualization/custominput/custominput.qrc new file mode 100644 index 00000000..8ced2b91 --- /dev/null +++ b/examples/datavisualization/custominput/custominput.qrc @@ -0,0 +1,5 @@ + + + data/data.txt + + diff --git a/examples/datavisualization/custominput/custominputhandler.cpp b/examples/datavisualization/custominput/custominputhandler.cpp new file mode 100644 index 00000000..a5734e16 --- /dev/null +++ b/examples/datavisualization/custominput/custominputhandler.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "custominputhandler.h" + +#include + +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 new file mode 100644 index 00000000..60c88ef7 --- /dev/null +++ b/examples/datavisualization/custominput/custominputhandler.h @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef CUSTOMINPUTHANDLER_H +#define CUSTOMINPUTHANDLER_H + +#include + +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 new file mode 100644 index 00000000..d0689b1f --- /dev/null +++ b/examples/datavisualization/custominput/data/data.txt @@ -0,0 +1,1060 @@ +# 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 new file mode 100644 index 00000000..b2656b69 Binary files /dev/null and b/examples/datavisualization/custominput/doc/images/custominput-example.png differ diff --git a/examples/datavisualization/custominput/doc/src/custominput.qdoc b/examples/datavisualization/custominput/doc/src/custominput.qdoc new file mode 100644 index 00000000..88c53b4d --- /dev/null +++ b/examples/datavisualization/custominput/doc/src/custominput.qdoc @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + + \section1 Replacing default input handling + + The default input handling mechanism is replaced by setting the active input handler of \l Q3DScatter + to \c CustomInputHandler that implements the custom behavior. + + \snippet ../examples/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 \l QAbstract3DInputHandler::inputPosition property. + + \snippet ../examples/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 ../examples/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 ../examples/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 \l Q3DCamera::xRotation property. + + \snippet ../examples/custominput/scatterdatamodifier.cpp 2 + + The camera movement up and down is implemented with a QSequentialAnimationGroup that varies the \l Q3DCamera::yRotation property of the camera + from 5 degrees to 45 degrees and back with in and out easing. + + \snippet ../examples/custominput/scatterdatamodifier.cpp 3 +*/ diff --git a/examples/datavisualization/custominput/main.cpp b/examples/datavisualization/custominput/main.cpp new file mode 100644 index 00000000..069a5b0a --- /dev/null +++ b/examples/datavisualization/custominput/main.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + Q3DScatter *graph = new Q3DScatter(); + QWidget *container = QWidget::createWindowContainer(graph); + + 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 new file mode 100644 index 00000000..a2a5bea9 --- /dev/null +++ b/examples/datavisualization/custominput/scatterdatamodifier.cpp @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" + +#include +#include +#include +#include +#include +#include +#include + +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() +{ + QVector itemList; + + // Read data items from the file to QVector + 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(",", QString::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 QVector 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 new file mode 100644 index 00000000..9ea6a5c8 --- /dev/null +++ b/examples/datavisualization/custominput/scatterdatamodifier.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef SCATTERDATAMODIFIER_H +#define SCATTERDATAMODIFIER_H + +#include "custominputhandler.h" + +#include +#include +#include +#include +#include +#include + +using namespace QtDataVisualization; + +class ScatterDataModifier : public QObject +{ + Q_OBJECT +public: + explicit ScatterDataModifier(Q3DScatter *scatter); + ~ScatterDataModifier(); + + void addData(); + void toggleCameraAnimation(); + void start(); + +public slots: + void changeShadowQuality(int quality); + void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); + void triggerSelection(); + +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/customproxy/customproxy.pro b/examples/datavisualization/customproxy/customproxy.pro new file mode 100644 index 00000000..7a347d78 --- /dev/null +++ b/examples/datavisualization/customproxy/customproxy.pro @@ -0,0 +1,20 @@ +!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 += data/raindata.txt + diff --git a/examples/datavisualization/customproxy/customproxy.qrc b/examples/datavisualization/customproxy/customproxy.qrc new file mode 100644 index 00000000..53cd4915 --- /dev/null +++ b/examples/datavisualization/customproxy/customproxy.qrc @@ -0,0 +1,5 @@ + + + data/raindata.txt + + diff --git a/examples/datavisualization/customproxy/data/raindata.txt b/examples/datavisualization/customproxy/data/raindata.txt new file mode 100644 index 00000000..531d66be --- /dev/null +++ b/examples/datavisualization/customproxy/data/raindata.txt @@ -0,0 +1,158 @@ +# 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 new file mode 100644 index 00000000..753b8951 Binary files /dev/null and b/examples/datavisualization/customproxy/doc/images/customproxy-example.png differ diff --git a/examples/datavisualization/customproxy/doc/src/customproxy.qdoc b/examples/datavisualization/customproxy/doc/src/customproxy.qdoc new file mode 100644 index 00000000..e666c709 --- /dev/null +++ b/examples/datavisualization/customproxy/doc/src/customproxy.qdoc @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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. + + Let's take a closer look at the custom classes: + + \section1 VariantDataSet + + \c VariantDataSet class provides a simple API: + + \snippet ../examples/customproxy/variantdataset.h 1 + \dots 0 + \codeline + \snippet ../examples/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 ../examples/customproxy/variantbardataproxy.h 0 + \dots 0 + \codeline + \snippet ../examples/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 ../examples/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 ../examples/customproxy/variantbardatamapping.h 0 + \dots 0 + \codeline + \snippet ../examples/customproxy/variantbardatamapping.h 1 + \dots 0 + \codeline + \snippet ../examples/customproxy/variantbardatamapping.h 2 + \dots 0 + \codeline + \snippet ../examples/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 ../examples/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 ../examples/customproxy/rainfallgraph.cpp 1 +*/ diff --git a/examples/datavisualization/customproxy/main.cpp b/examples/datavisualization/customproxy/main.cpp new file mode 100644 index 00000000..dd74721e --- /dev/null +++ b/examples/datavisualization/customproxy/main.cpp @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "rainfallgraph.h" +#include + +using namespace QtDataVisualization; + +int main(int argc, char **argv) +{ + QGuiApplication app(argc, argv); + + Q3DBars *rainfall = new Q3DBars; + rainfall->setFlags(rainfall->flags() ^ Qt::FramelessWindowHint); + rainfall->resize(1280, 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 new file mode 100644 index 00000000..e2f04923 --- /dev/null +++ b/examples/datavisualization/customproxy/rainfallgraph.cpp @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "rainfallgraph.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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(0.2, 0.2)); + + // 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")); +} + +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(",", QString::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 new file mode 100644 index 00000000..6116eb9b --- /dev/null +++ b/examples/datavisualization/customproxy/rainfallgraph.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef RAINFALLGRAPH_H +#define RAINFALLGRAPH_H + +#include "variantbardataproxy.h" +#include + +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 new file mode 100644 index 00000000..c8369b6e --- /dev/null +++ b/examples/datavisualization/customproxy/variantbardatamapping.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "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 new file mode 100644 index 00000000..3a145d9a --- /dev/null +++ b/examples/datavisualization/customproxy/variantbardatamapping.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef VARIANTBARDATAMAPPING_H +#define VARIANTBARDATAMAPPING_H + +#include + +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] +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.cpp b/examples/datavisualization/customproxy/variantbardataproxy.cpp new file mode 100644 index 00000000..cf1e1f90 --- /dev/null +++ b/examples/datavisualization/customproxy/variantbardataproxy.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "variantbardataproxy.h" + +using namespace QtDataVisualization; + +VariantBarDataProxy::VariantBarDataProxy() : + QBarDataProxy() +{ +} + +VariantBarDataProxy::VariantBarDataProxy(VariantDataSet *newSet, + VariantBarDataMapping *mapping) : + QBarDataProxy() +{ + setDataSet(newSet); + setMapping(mapping); +} + +VariantBarDataProxy::~VariantBarDataProxy() +{ + delete m_dataSet; +} + +void VariantBarDataProxy::setDataSet(VariantDataSet *newSet) +{ + if (!m_dataSet.isNull()) + QObject::disconnect(m_dataSet.data(), 0, this, 0); + + m_dataSet = newSet; + + if (!m_dataSet.isNull()) { + QObject::connect(m_dataSet.data(), &VariantDataSet::itemsAdded, this, + &VariantBarDataProxy::handleItemsAdded); + QObject::connect(m_dataSet.data(), &VariantDataSet::dataCleared, this, + &VariantBarDataProxy::handleDataCleared); + } + resolveDataSet(); +} + +VariantDataSet *VariantBarDataProxy::dataSet() +{ + return m_dataSet.data(); +} + +void VariantBarDataProxy::setMapping(VariantBarDataMapping *mapping) +{ + if (!m_mapping.isNull()) + QObject::disconnect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this, + &VariantBarDataProxy::handleMappingChanged); + + m_mapping = mapping; + + if (!m_mapping.isNull()) + QObject::connect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this, + &VariantBarDataProxy::handleMappingChanged); + + resolveDataSet(); +} + +VariantBarDataMapping *VariantBarDataProxy::mapping() +{ + return m_mapping.data(); +} + +void VariantBarDataProxy::handleItemsAdded(int index, int count) +{ + Q_UNUSED(index) + Q_UNUSED(count) + + // Resolve new items + resolveDataSet(); +} + +void VariantBarDataProxy::handleDataCleared() +{ + // Data cleared, reset array + resetArray(0); +} + +void VariantBarDataProxy::handleMappingChanged() +{ + resolveDataSet(); +} + +// Resolve entire dataset into QBarDataArray. +//! [0] +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); + return; + } + const VariantDataItemList &itemList = m_dataSet->itemList(); + + int rowIndex = m_mapping->rowIndex(); + int columnIndex = m_mapping->columnIndex(); + int valueIndex = m_mapping->valueIndex(); + const QStringList &rowList = m_mapping->rowCategories(); + const QStringList &columnList = m_mapping->columnCategories(); + + // Sort values into rows and columns + typedef QHash ColumnValueMap; + QHash itemValueMap; + foreach (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++) + (*newProxyRow)[i].setValue(itemValueMap[rowKey][columnList.at(i)]); + newProxyArray->append(newProxyRow); + } + + // Finally, reset the data array in the parent class + resetArray(newProxyArray); +} +//! [0] diff --git a/examples/datavisualization/customproxy/variantbardataproxy.h b/examples/datavisualization/customproxy/variantbardataproxy.h new file mode 100644 index 00000000..b83f8a71 --- /dev/null +++ b/examples/datavisualization/customproxy/variantbardataproxy.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef VARIANTBARDATAPROXY_H +#define VARIANTBARDATAPROXY_H + +#include "qbardataproxy.h" +#include "variantdataset.h" +#include "variantbardatamapping.h" +#include +#include +#include + +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 slots: + void handleItemsAdded(int index, int count); + void handleDataCleared(); + void handleMappingChanged(); + +private: + void resolveDataSet(); + + QPointer m_dataSet; + QPointer m_mapping; + + Q_DISABLE_COPY(VariantBarDataProxy) +}; + +#endif diff --git a/examples/datavisualization/customproxy/variantdataset.cpp b/examples/datavisualization/customproxy/variantdataset.cpp new file mode 100644 index 00000000..3576aaab --- /dev/null +++ b/examples/datavisualization/customproxy/variantdataset.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "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 new file mode 100644 index 00000000..f5eb5863 --- /dev/null +++ b/examples/datavisualization/customproxy/variantdataset.h @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef VARIANTDATASET_H +#define VARIANTDATASET_H + +#include +#include + +//! [1] +typedef QVariantList VariantDataItem; +typedef QList 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; + +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 new file mode 100644 index 00000000..4330ef4c --- /dev/null +++ b/examples/datavisualization/datavisualization.pro @@ -0,0 +1,21 @@ +TEMPLATE = subdirs +SUBDIRS += qmlbars \ + qmlscatter \ + qmlsurface \ + qmlcustominput \ + qmllegend \ + qmlmultigraph \ + qmloscilloscope \ + qmlsurfacelayers + +!android:!ios { + SUBDIRS += bars \ + custominput \ + customproxy \ + itemmodel \ + scatter \ + surface \ + rotations +} + +qtHaveModule(multimedia):!android:!ios: SUBDIRS += audiolevels diff --git a/examples/datavisualization/examples.pri b/examples/datavisualization/examples.pri new file mode 100644 index 00000000..d5f37733 --- /dev/null +++ b/examples/datavisualization/examples.pri @@ -0,0 +1,13 @@ +INCLUDEPATH += ../../../include + +LIBS += -L$$OUT_PWD/../../../lib + +TEMPLATE = app + +QT += datavisualization + +target.path = $$[QT_INSTALL_EXAMPLES]/datavisualization/$$TARGET +INSTALLS += target + +OTHER_FILES += doc/src/* \ + doc/images/* diff --git a/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png b/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png new file mode 100644 index 00000000..677b7eec Binary files /dev/null and b/examples/datavisualization/itemmodel/doc/images/itemmodel-example-2.png differ diff --git a/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png b/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png new file mode 100644 index 00000000..c042f84d Binary files /dev/null and b/examples/datavisualization/itemmodel/doc/images/itemmodel-example.png differ diff --git a/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc b/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc new file mode 100644 index 00000000..16cd1974 --- /dev/null +++ b/examples/datavisualization/itemmodel/doc/src/itemmodel.qdoc @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + + \section1 Creating the application + + First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container for it: + + \snippet ../examples/itemmodel/main.cpp 0 + + The call to QWidget::createWindowContainer is required, as all data visualization types + (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 ../examples/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 ../examples/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 ../examples/itemmodel/main.cpp 3 + + The application main is done and we can show the graph and start the event loop: + + \snippet ../examples/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 ../examples/itemmodel/main.cpp 5 + \snippet ../examples/itemmodel/main.cpp 6 + \snippet ../examples/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 ../examples/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 ../examples/itemmodel/main.cpp 9 + + Then we set up the axes: + + \snippet ../examples/itemmodel/main.cpp 10 + + Next we will set up the table widget: + + \snippet ../examples/itemmodel/main.cpp 11 + + After that all that's left is adding the data to the table widget: + + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 new file mode 100644 index 00000000..844fe3d8 --- /dev/null +++ b/examples/datavisualization/itemmodel/itemmodel.pro @@ -0,0 +1,7 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp + +QT += widgets diff --git a/examples/datavisualization/itemmodel/main.cpp b/examples/datavisualization/itemmodel/main.cpp new file mode 100644 index 00000000..2fce72aa --- /dev/null +++ b/examples/datavisualization/itemmodel/main.cpp @@ -0,0 +1,285 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#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; + QTimer *m_styleTimer; + QTimer *m_presetTimer; + QTimer *m_themeTimer; + int m_columnCount; + int m_rowCount; + QTableWidget *m_tableWidget; // not owned +}; + +GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget) + : m_graph(bargraph), + m_dataTimer(0), + m_styleTimer(0), + m_presetTimer(0), + m_themeTimer(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->columnAxis()->setTitle("Day of week"); + m_graph->valueAxis()->setTitle("Hours spent on the Internet"); + 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); + //! [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)(rand() % 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] + + 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/qmlbars/doc/images/qmlbars-example.png b/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png new file mode 100644 index 00000000..64ad6b0e Binary files /dev/null and b/examples/datavisualization/qmlbars/doc/images/qmlbars-example.png differ diff --git a/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc new file mode 100644 index 00000000..cc344c9c --- /dev/null +++ b/examples/datavisualization/qmlbars/doc/src/qmlbars.qdoc @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \example qmlbars + \title Qt Quick 2 Bars Example + \ingroup qtdatavisualization_examples + \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. + + \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}. + + \section1 Data + + The example data is 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 ../examples/qmlbars/qml/qmlbars/Data.qml 0 + \dots + + Each data item has four roles: year, month, income, and expenses. 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. + + 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: + + \snippet ../examples/qmlbars/qml/qmlbars/main.qml 3 + \dots + + The data is attached to the \c itemModel property of the ItemModelBarDataProxy inside the + series. + + Then we add another series for the expenses: + + \snippet ../examples/qmlbars/qml/qmlbars/main.qml 4 + \dots + + We 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 abbreviated month names, which we don't want + to use for our column labels: + + \snippet ../examples/qmlbars/qml/qmlbars/Axes.qml 0 + + \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: + + \snippet ../examples/qmlbars/qml/qmlbars/main.qml 0 + + The axis change is done because income and expenses have a different label format. The same could have + been achieved using a single axis and just changing the label format. + + The second interesting block is where we filter some of the rows away from the visualized data: + + \snippet ../examples/qmlbars/qml/qmlbars/main.qml 1 + + The filtering is done by setting \c autoRowCategories to false on the ItemModelBarDataProxy item and defining + the row categories explicitly. This way, only the items in specified rows 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(): + + \snippet ../examples/qmlbars/qml/qmlbars/main.qml 2 +*/ diff --git a/examples/datavisualization/qmlbars/main.cpp b/examples/datavisualization/qmlbars/main.cpp new file mode 100644 index 00000000..a6b2f4c5 --- /dev/null +++ b/examples/datavisualization/qmlbars/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + viewer.setTitle(QStringLiteral("Monthly income/expenses")); + + viewer.setSource(QUrl("qrc:/qml/qmlbars/main.qml")); + viewer.setResizeMode(QQuickView::SizeRootObjectToView); + viewer.show(); + + return app.exec(); +} diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml new file mode 100644 index 00000000..29979e1b --- /dev/null +++ b/examples/datavisualization/qmlbars/qml/qmlbars/Axes.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtDataVisualization 1.0 + +Item { + property alias column: columnAxis + property alias expenses: expensesAxis + property alias income: incomeAxis + + // For row labels we can use row labels from data proxy, so default axis + // suffices for rows. + + // 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"] + } + //! [0] + ValueAxis3D { + id: incomeAxis + min: 0 + max: 35 + labelFormat: "%.2f M\u20AC" + title: "Monthly income" + } + ValueAxis3D { + id: expensesAxis + min: 0 + max: 35 + labelFormat: "-%.2f M\u20AC" + title: "Monthly expenses" + } +} diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml new file mode 100644 index 00000000..7e0978c6 --- /dev/null +++ b/examples/datavisualization/qmlbars/qml/qmlbars/Data.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 + +Item { + property alias model: dataModel + + //! [0] + ListModel { + id: dataModel + ListElement{ year: "2006"; month: "Jan"; expenses: "4"; income: "5" } + ListElement{ year: "2006"; month: "Feb"; expenses: "5"; income: "6" } + ListElement{ year: "2006"; month: "Mar"; expenses: "7"; income: "4" } + //! [0] + ListElement{ year: "2006"; month: "Apr"; expenses: "3"; income: "2" } + ListElement{ year: "2006"; month: "May"; expenses: "4"; income: "1" } + ListElement{ year: "2006"; month: "Jun"; expenses: "2"; income: "2" } + ListElement{ year: "2006"; month: "Jul"; expenses: "1"; income: "3" } + ListElement{ year: "2006"; month: "Aug"; expenses: "5"; income: "1" } + ListElement{ year: "2006"; month: "Sep"; expenses: "2"; income: "3" } + ListElement{ year: "2006"; month: "Oct"; expenses: "5"; income: "2" } + ListElement{ year: "2006"; month: "Nov"; expenses: "8"; income: "5" } + ListElement{ year: "2006"; month: "Dec"; expenses: "3"; income: "3" } + + ListElement{ year: "2007"; month: "Jan"; expenses: "3"; income: "1" } + ListElement{ year: "2007"; month: "Feb"; expenses: "4"; income: "2" } + ListElement{ year: "2007"; month: "Mar"; expenses: "12"; income: "4" } + ListElement{ year: "2007"; month: "Apr"; expenses: "13"; income: "6" } + ListElement{ year: "2007"; month: "May"; expenses: "14"; income: "11" } + ListElement{ year: "2007"; month: "Jun"; expenses: "7"; income: "7" } + ListElement{ year: "2007"; month: "Jul"; expenses: "6"; income: "4" } + ListElement{ year: "2007"; month: "Aug"; expenses: "4"; income: "15" } + ListElement{ year: "2007"; month: "Sep"; expenses: "2"; income: "18" } + ListElement{ year: "2007"; month: "Oct"; expenses: "29"; income: "25" } + ListElement{ year: "2007"; month: "Nov"; expenses: "23"; income: "29" } + ListElement{ year: "2007"; month: "Dec"; expenses: "5"; income: "9" } + + ListElement{ year: "2008"; month: "Jan"; expenses: "3"; income: "8" } + ListElement{ year: "2008"; month: "Feb"; expenses: "8"; income: "14" } + ListElement{ year: "2008"; month: "Mar"; expenses: "10"; income: "20" } + ListElement{ year: "2008"; month: "Apr"; expenses: "12"; income: "24" } + ListElement{ year: "2008"; month: "May"; expenses: "10"; income: "19" } + ListElement{ year: "2008"; month: "Jun"; expenses: "5"; income: "8" } + ListElement{ year: "2008"; month: "Jul"; expenses: "1"; income: "4" } + ListElement{ year: "2008"; month: "Aug"; expenses: "7"; income: "12" } + ListElement{ year: "2008"; month: "Sep"; expenses: "4"; income: "16" } + ListElement{ year: "2008"; month: "Oct"; expenses: "22"; income: "33" } + ListElement{ year: "2008"; month: "Nov"; expenses: "16"; income: "25" } + ListElement{ year: "2008"; month: "Dec"; expenses: "2"; income: "7" } + + ListElement{ year: "2009"; month: "Jan"; expenses: "4"; income: "5" } + ListElement{ year: "2009"; month: "Feb"; expenses: "4"; income: "7" } + ListElement{ year: "2009"; month: "Mar"; expenses: "11"; income: "14" } + ListElement{ year: "2009"; month: "Apr"; expenses: "16"; income: "22" } + ListElement{ year: "2009"; month: "May"; expenses: "3"; income: "5" } + ListElement{ year: "2009"; month: "Jun"; expenses: "4"; income: "8" } + ListElement{ year: "2009"; month: "Jul"; expenses: "7"; income: "9" } + ListElement{ year: "2009"; month: "Aug"; expenses: "9"; income: "13" } + ListElement{ year: "2009"; month: "Sep"; expenses: "1"; income: "6" } + ListElement{ year: "2009"; month: "Oct"; expenses: "14"; income: "25" } + ListElement{ year: "2009"; month: "Nov"; expenses: "19"; income: "29" } + ListElement{ year: "2009"; month: "Dec"; expenses: "5"; income: "7" } + + ListElement{ year: "2010"; month: "Jan"; expenses: "14"; income: "22" } + ListElement{ year: "2010"; month: "Feb"; expenses: "5"; income: "7" } + ListElement{ year: "2010"; month: "Mar"; expenses: "1"; income: "9" } + ListElement{ year: "2010"; month: "Apr"; expenses: "1"; income: "12" } + ListElement{ year: "2010"; month: "May"; expenses: "5"; income: "9" } + ListElement{ year: "2010"; month: "Jun"; expenses: "5"; income: "8" } + ListElement{ year: "2010"; month: "Jul"; expenses: "3"; income: "7" } + ListElement{ year: "2010"; month: "Aug"; expenses: "1"; income: "5" } + ListElement{ year: "2010"; month: "Sep"; expenses: "2"; income: "4" } + ListElement{ year: "2010"; month: "Oct"; expenses: "10"; income: "13" } + ListElement{ year: "2010"; month: "Nov"; expenses: "12"; income: "17" } + ListElement{ year: "2010"; month: "Dec"; expenses: "6"; income: "9" } + + ListElement{ year: "2011"; month: "Jan"; expenses: "2"; income: "6" } + ListElement{ year: "2011"; month: "Feb"; expenses: "4"; income: "8" } + ListElement{ year: "2011"; month: "Mar"; expenses: "7"; income: "12" } + ListElement{ year: "2011"; month: "Apr"; expenses: "9"; income: "15" } + ListElement{ year: "2011"; month: "May"; expenses: "7"; income: "19" } + ListElement{ year: "2011"; month: "Jun"; expenses: "9"; income: "18" } + ListElement{ year: "2011"; month: "Jul"; expenses: "13"; income: "17" } + ListElement{ year: "2011"; month: "Aug"; expenses: "5"; income: "9" } + ListElement{ year: "2011"; month: "Sep"; expenses: "3"; income: "8" } + ListElement{ year: "2011"; month: "Oct"; expenses: "13"; income: "15" } + ListElement{ year: "2011"; month: "Nov"; expenses: "8"; income: "17" } + ListElement{ year: "2011"; month: "Dec"; expenses: "7"; income: "10" } + + ListElement{ year: "2012"; month: "Jan"; expenses: "12"; income: "16" } + ListElement{ year: "2012"; month: "Feb"; expenses: "24"; income: "28" } + ListElement{ year: "2012"; month: "Mar"; expenses: "27"; income: "22" } + ListElement{ year: "2012"; month: "Apr"; expenses: "29"; income: "25" } + ListElement{ year: "2012"; month: "May"; expenses: "27"; income: "29" } + ListElement{ year: "2012"; month: "Jun"; expenses: "19"; income: "18" } + ListElement{ year: "2012"; month: "Jul"; expenses: "13"; income: "17" } + ListElement{ year: "2012"; month: "Aug"; expenses: "15"; income: "19" } + ListElement{ year: "2012"; month: "Sep"; expenses: "3"; income: "8" } + ListElement{ year: "2012"; month: "Oct"; expenses: "3"; income: "6" } + ListElement{ year: "2012"; month: "Nov"; expenses: "4"; income: "8" } + ListElement{ year: "2012"; month: "Dec"; expenses: "5"; income: "9" } + } +} diff --git a/examples/datavisualization/qmlbars/qml/qmlbars/main.qml b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml new file mode 100644 index 00000000..0ff060ca --- /dev/null +++ b/examples/datavisualization/qmlbars/qml/qmlbars/main.qml @@ -0,0 +1,303 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Controls 1.0 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import QtQuick.Window 2.0 +import "." + +Item { + id: mainview + width: 1280 + height: 1024 + + property int buttonLayoutHeight: 180; + state: Screen.width < Screen.height ? "portrait" : "landscape" + + Data { + id: graphData + } + + Axes { + id: graphAxes + } + + property Bar3DSeries selectedSeries + selectedSeries: barSeries + + 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 = series.dataProxy.columnLabels[position.y]; + var currentRow = tableView.currentRow + if (currentRow === -1 || rowRole !== graphData.model.get(currentRow).year + || colRole !== graphData.model.get(currentRow).month) { + var totalRows = tableView.rowCount; + for (var i = 0; i < totalRows; i++) { + var currentRowRole = graphData.model.get(i).year + var currentColRole = graphData.model.get(i).month + if (currentRowRole === rowRole && currentColRole === colRole) { + tableView.currentRow = i + // Workaround to 5.2 row selection issue + if (typeof tableView.selection != "undefined") { + tableView.selection.clear() + tableView.selection.select(i) + } + break + } + } + } + } + + 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: Theme3D { + type: Theme3D.ThemeRetro + labelBorderEnabled: true + font.pointSize: 35 + labelBackgroundEnabled: true + colorStyle: Theme3D.ColorStyleRangeGradient + singleHighlightGradient: customGradient + + ColorGradient { + id: customGradient + ColorGradientStop { position: 1.0; color: "#FFFF00" } + ColorGradientStop { position: 0.0; color: "#808000" } + } + } + barThickness: 0.7 + barSpacing: Qt.size(0.5, 0.5) + barSpacingRelative: false + scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh + columnAxis: graphAxes.column + valueAxis: graphAxes.income + + //! [3] + Bar3DSeries { + id: barSeries + itemLabelFormat: "Income for @colLabel, @rowLabel: @valueLabel" + baseGradient: barGradient + + ItemModelBarDataProxy { + id: modelProxy + itemModel: graphData.model + rowRole: "year" + columnRole: "month" + valueRole: "income" + } + //! [3] + + ColorGradient { + id: barGradient + ColorGradientStop { position: 1.0; color: "#00FF00" } + ColorGradientStop { position: 0.0; color: "#006000" } + } + + onSelectedBarChanged: handleSelectionChange(barSeries, position) + } + + //! [4] + Bar3DSeries { + id: secondarySeries + visible: false + itemLabelFormat: "Expenses for @colLabel, @rowLabel: @valueLabel" + baseGradient: secondaryGradient + + ItemModelBarDataProxy { + id: secondaryProxy + itemModel: graphData.model + rowRole: "year" + columnRole: "month" + valueRole: "expenses" + } + //! [4] + + ColorGradient { + id: secondaryGradient + ColorGradientStop { position: 1.0; color: "#FF0000" } + ColorGradientStop { position: 0.0; color: "#600000" } + } + + onSelectedBarChanged: handleSelectionChange(secondarySeries, position) + } + } + } + + TableView { + id: tableView + anchors.top: parent.top + anchors.left: parent.left + TableViewColumn{ role: "year" ; title: "Year" ; width: tableView.width / 4 } + TableViewColumn{ role: "month" ; title: "Month" ; width: tableView.width / 4 } + TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: tableView.width / 4 } + TableViewColumn{ role: "income" ; title: "Income" ; width: tableView.width / 4 } + model: graphData.model + + //! [2] + onCurrentRowChanged: { + var rowIndex = modelProxy.rowCategoryIndex(graphData.model.get(currentRow).year) + var colIndex = modelProxy.columnCategoryIndex(graphData.model.get(currentRow).month) + 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 + spacing: 0 + + Button { + id: dataToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Show 2010 - 2012" + clip: true + //! [1] + onClicked: { + if (barGraph.rowAxis.max !== 6) { + text = "Show 2010 - 2012" + modelProxy.autoRowCategories = true + secondaryProxy.autoRowCategories = true + } else { + text = "Show all years" + // Explicitly defining row categories, since we do not want to show data for + // all years in the model, just for the selected ones. + modelProxy.autoRowCategories = false + secondaryProxy.autoRowCategories = false + modelProxy.rowCategories = ["2010", "2011", "2012"] + secondaryProxy.rowCategories = ["2010", "2011", "2012"] + } + } + //! [1] + } + + Button { + id: shadowToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Hide Shadows" + clip: true + onClicked: { + if (barGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) { + barGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium; + text = "Hide Shadows" + } else { + barGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone; + text = "Show Shadows" + } + } + } + + Button { + id: seriesToggle + Layout.fillWidth: true + Layout.fillHeight: true + text: "Show Expenses" + clip: true + //! [0] + onClicked: { + if (!secondarySeries.visible) { + text = "Show Both" + barGraph.valueAxis = graphAxes.expenses + barSeries.visible = false + secondarySeries.visible = true + } else if (!barSeries.visible){ + barSeries.visible = true + text = "Show Income" + barGraph.valueAxis = graphAxes.income + } else { + secondarySeries.visible = false + text = "Show Expenses" + barGraph.valueAxis = graphAxes.income + } + } + //! [0] + } + } + + states: [ + State { + name: "landscape" + PropertyChanges { + target: dataView + width: mainview.width / 4 * 3 + height: mainview.height + } + PropertyChanges { + target: tableView + 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: tableView.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: tableView + 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/examples/datavisualization/qmlbars/qmlbars.desktop b/examples/datavisualization/qmlbars/qmlbars.desktop new file mode 100644 index 00000000..cf59c6b8 --- /dev/null +++ b/examples/datavisualization/qmlbars/qmlbars.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlbars +Exec=/opt/qmlbars/bin/qmlbars +Icon=qmlbars64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlbars/qmlbars.pro b/examples/datavisualization/qmlbars/qmlbars.pro new file mode 100644 index 00000000..c3d48fd9 --- /dev/null +++ b/examples/datavisualization/qmlbars/qmlbars.pro @@ -0,0 +1,20 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlbars +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmlbars.qrc diff --git a/examples/datavisualization/qmlbars/qmlbars.qrc b/examples/datavisualization/qmlbars/qmlbars.qrc new file mode 100644 index 00000000..2240fbef --- /dev/null +++ b/examples/datavisualization/qmlbars/qmlbars.qrc @@ -0,0 +1,7 @@ + + + qml/qmlbars/Axes.qml + qml/qmlbars/Data.qml + qml/qmlbars/main.qml + + diff --git a/examples/datavisualization/qmlbars/qmlbars64.png b/examples/datavisualization/qmlbars/qmlbars64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlbars/qmlbars64.png differ diff --git a/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png b/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png new file mode 100644 index 00000000..1de740ea Binary files /dev/null and b/examples/datavisualization/qmlcustominput/doc/images/qmlcustominput-example.png differ diff --git a/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc b/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc new file mode 100644 index 00000000..7702dadf --- /dev/null +++ b/examples/datavisualization/qmlcustominput/doc/src/qmlcustominput.qdoc @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \example qmlcustominput + \title Qt Quick Custom Input Example + \ingroup qtdatavisualization_examples + \brief Customizing input in a Qt Quick application. + + The Qt Quick Custom Input example shows how to customize the 3D graph controls from Qt Quick using the MouseArea to capture and process mouse events in Qt Quick. + 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 + + \section1 Removing default input handling + + The default input handling mechanism is disabled by setting the inputHandler property to null. + + \snippet ../examples/qmlcustominput/qml/qmlcustominput/main.qml 0 + \dots 0 + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/qmlcustominput/qml/qmlcustominput/main.qml 7 +*/ diff --git a/examples/datavisualization/qmlcustominput/main.cpp b/examples/datavisualization/qmlcustominput/main.cpp new file mode 100644 index 00000000..9bb88836 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + 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 new file mode 100644 index 00000000..201247f1 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/Data.qml @@ -0,0 +1,1087 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 + +Item { + property alias model: dataModel + + ListModel { + id: dataModel + 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 } + + 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 } + + 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 new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..cfac0f15 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qml/qmlcustominput/main.qml @@ -0,0 +1,205 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." + +Item { + 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: scatterSeries + itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel" + mesh: Abstract3DSeries.MeshCube + + ItemModelScatterDataProxy { + itemModel: graphData.model + 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: "Hide Shadows" + + onClicked: { + if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) { + scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftMedium; + 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.desktop b/examples/datavisualization/qmlcustominput/qmlcustominput.desktop new file mode 100644 index 00000000..536f87a9 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qmlcustominput.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlcustominput +Exec=/opt/qmlcustominput/bin/qmlcustominput +Icon=qmlcustominput64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput.pro b/examples/datavisualization/qmlcustominput/qmlcustominput.pro new file mode 100644 index 00000000..07e61d72 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qmlcustominput.pro @@ -0,0 +1,21 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlcustominput +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += \ + qmlcustominput.qrc diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput.qrc b/examples/datavisualization/qmlcustominput/qmlcustominput.qrc new file mode 100644 index 00000000..5800150a --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qmlcustominput.qrc @@ -0,0 +1,7 @@ + + + qml/qmlcustominput/Data.qml + qml/qmlcustominput/main.qml + qml/qmlcustominput/NewButton.qml + + diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput64.png b/examples/datavisualization/qmlcustominput/qmlcustominput64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlcustominput/qmlcustominput64.png differ diff --git a/examples/datavisualization/qmlcustominput/qmlcustominput80.png b/examples/datavisualization/qmlcustominput/qmlcustominput80.png new file mode 100644 index 00000000..6ad8096c Binary files /dev/null and b/examples/datavisualization/qmlcustominput/qmlcustominput80.png differ diff --git a/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlcustominput/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png b/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png new file mode 100644 index 00000000..ee546077 Binary files /dev/null and b/examples/datavisualization/qmllegend/doc/images/qmllegend-example.png differ diff --git a/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc b/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc new file mode 100644 index 00000000..586ba415 --- /dev/null +++ b/examples/datavisualization/qmllegend/doc/src/qmllegend.qdoc @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/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 ../examples/qmllegend/qml/qmllegend/LegendItem.qml 0 + \dots 4 + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/qmllegend/qml/qmllegend/LegendItem.qml 4 +*/ diff --git a/examples/datavisualization/qmllegend/main.cpp b/examples/datavisualization/qmllegend/main.cpp new file mode 100644 index 00000000..5c6b8d24 --- /dev/null +++ b/examples/datavisualization/qmllegend/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + 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 new file mode 100644 index 00000000..4681c61c --- /dev/null +++ b/examples/datavisualization/qmllegend/qml/qmllegend/Data.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..50be7a8d --- /dev/null +++ b/examples/datavisualization/qmllegend/qml/qmllegend/LegendItem.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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" + + //! [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 new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmllegend/qml/qmllegend/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..6c488d6a --- /dev/null +++ b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml @@ -0,0 +1,239 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Controls 1.0 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." + +Item { + 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.top: buttonLayout.bottom + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + + 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 + + id: legendPanel + width: 200 + height: 100 + border.color: barGraph.theme.labelTextColor + border.width: 2 + 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 + onColorChanged: legendPanel.relayout() + } + LegendItem { + Layout.fillWidth: true + Layout.fillHeight: true + series: station2 + theme: barGraph.theme + onColorChanged: legendPanel.relayout() + } + LegendItem { + Layout.fillWidth: true + Layout.fillHeight: true + series: station3 + theme: barGraph.theme + onColorChanged: legendPanel.relayout() + } + } + //! [0] + + function relayout() { + // Workaround for a layout bug that causes transparent colors to use black background + // instead of what is actually under the items if just the color changes. + // Forcing a relayout by adjusting layout's available area fixes the background. + var originalWidth = border.width + border.width = originalWidth + 1 + border.width = originalWidth + } + + states: [ + State { + name: "topleft" + when: legendPanel.legendLocation === 1 + AnchorChanges { + target: legendPanel + anchors.top: dataView.top + anchors.bottom: undefined + anchors.left: dataView.left + anchors.right: undefined + } + }, + State { + name: "topright" + when: legendPanel.legendLocation === 2 + AnchorChanges { + target: legendPanel + anchors.top: dataView.top + 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.desktop b/examples/datavisualization/qmllegend/qmllegend.desktop new file mode 100644 index 00000000..6ad68edd --- /dev/null +++ b/examples/datavisualization/qmllegend/qmllegend.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmllegend +Exec=/opt/qmllegend/bin/qmllegend +Icon=qmllegend64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmllegend/qmllegend.pro b/examples/datavisualization/qmllegend/qmllegend.pro new file mode 100644 index 00000000..4bf520b2 --- /dev/null +++ b/examples/datavisualization/qmllegend/qmllegend.pro @@ -0,0 +1,23 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmllegend +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmllegend.qrc + +OTHER_FILES += doc/src/* \ + doc/images/* diff --git a/examples/datavisualization/qmllegend/qmllegend.qrc b/examples/datavisualization/qmllegend/qmllegend.qrc new file mode 100644 index 00000000..b9777b37 --- /dev/null +++ b/examples/datavisualization/qmllegend/qmllegend.qrc @@ -0,0 +1,8 @@ + + + qml/qmllegend/Data.qml + qml/qmllegend/LegendItem.qml + qml/qmllegend/main.qml + qml/qmllegend/NewButton.qml + + diff --git a/examples/datavisualization/qmllegend/qmllegend64.png b/examples/datavisualization/qmllegend/qmllegend64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmllegend/qmllegend64.png differ diff --git a/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmllegend/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png b/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png new file mode 100644 index 00000000..79073f5f Binary files /dev/null and b/examples/datavisualization/qmlmultigraph/doc/images/qmlmultigraph-example.png differ diff --git a/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc b/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc new file mode 100644 index 00000000..5fa25500 --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/doc/src/qmlmultigraph.qdoc @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/qmlmultigraph/qml/qmlmultigraph/main.qml 0 + + Each graph has a parent \c Rectangle item to provide it with a border. The color of the rectangle + is set to fully transparent, because otherwise the rectangles would hide the graphs, which are + always drawn behind all other QML elements. + + 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 new file mode 100644 index 00000000..8450e28a --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/main.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + viewer.setTitle(QStringLiteral("QML multigraph example")); + viewer.setSource(QUrl("qrc:/qml/qmlmultigraph/main.qml")); + viewer.setResizeMode(QQuickView::SizeRootObjectToView); + viewer.showExpanded(); + + return app.exec(); +} diff --git a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml new file mode 100644 index 00000000..998e4be3 --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/Data.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 + +Item { + property alias data: 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: "5.90"; } + ListElement{ row: "3"; col: "4"; longitude: "23.7"; latitude: "14.3"; pop_density: "7.32"; } + } +} + diff --git a/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..7691563a --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qml/qmlmultigraph/main.qml @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." + +Item { + 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 + color: "#00000000" // Transparent + + 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.data + // 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 + border.color: surfaceGraph.theme.gridLineColor // Let's use neighbor's border color + border.width: 2 + + 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 + color: "#00000000" // Transparent + + 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.data + // 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 + color: "#00000000" // Transparent + + 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.data + // 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 + scatterGraph.scene.activeCamera.zoomLevel = 100 + barGraph.scene.activeCamera.zoomLevel = 100 + } + + 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.desktop b/examples/datavisualization/qmlmultigraph/qmlmultigraph.desktop new file mode 100644 index 00000000..90b16a4e --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qmlmultigraph.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlmultigraph +Exec=/opt/qmlmultigraph/bin/qmlmultigraph +Icon=qmlmultigraph64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro b/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro new file mode 100644 index 00000000..2231a2d1 --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qmlmultigraph.pro @@ -0,0 +1,20 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlmultigraph +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmlmultigraph.qrc diff --git a/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc b/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc new file mode 100644 index 00000000..c5e63a1c --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qmlmultigraph.qrc @@ -0,0 +1,7 @@ + + + qml/qmlmultigraph/Data.qml + qml/qmlmultigraph/main.qml + qml/qmlmultigraph/NewButton.qml + + diff --git a/examples/datavisualization/qmlmultigraph/qmlmultigraph64.png b/examples/datavisualization/qmlmultigraph/qmlmultigraph64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlmultigraph/qmlmultigraph64.png differ diff --git a/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlmultigraph/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmloscilloscope/datasource.cpp b/examples/datavisualization/qmloscilloscope/datasource.cpp new file mode 100644 index 00000000..83ff0ff9 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/datasource.cpp @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "datasource.h" +#include + +using namespace QtDataVisualization; + +Q_DECLARE_METATYPE(QSurface3DSeries *) + +DataSource::DataSource(QObject *parent) : + QObject(parent), + m_index(-1), + m_resetArray(0) +{ + qRegisterMetaType(); +} + +DataSource::~DataSource() +{ + clearData(); +} + +//! [0] +void DataSource::generateData(int cacheCount, int rowCount, int columnCount, + float xMin, float xMax, float yMin, float yMax, + float zMin, float zMax) +{ + if (!cacheCount) + return; + + clearData(); + // Re-create the cache array + m_data.resize(cacheCount); + for (int i(0); i < cacheCount; i++) { + QSurfaceDataArray &array = m_data[i]; + array.reserve(rowCount); + for (int j(0); j < rowCount; j++) + array.append(new QSurfaceDataRow(columnCount)); + } + + float xRange = xMax - xMin; + float yRange = yMax - yMin; + float zRange = zMax - zMin; + int cacheIndexStep = columnCount / cacheCount; + float cacheStep = float(cacheIndexStep) * xRange / float(columnCount); + + // Populate caches + 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++) { + QSurfaceDataRow &row = *(cache[j]); + float rowMod = (float(j)) / float(rowCount); + float yRangeMod = yRange * rowMod; + float zRangeMod = zRange * rowMod; + float z = zRangeMod + zMin; + qreal rowColWaveAngleMul = M_PI * M_PI * rowMod; + float rowColWaveMul = yRangeMod * 0.2f; + 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 + + (0.15f * float(rand()) / float(RAND_MAX)) * yRangeMod; + + int index = k + cacheIndexAdjustment; + if (index >= columnCount) { + // Wrap over + index -= columnCount; + x -= xRange; + } + row[index] = QVector3D(x, y, z); + } + } + } +} +//! [0] + +//! [1] +void DataSource::update(QSurface3DSeries *series) +{ + if (series && m_data.size()) { + // Each iteration uses data from a different cached array + m_index++; + if (m_index > m_data.count() - 1) + m_index = 0; + + QSurfaceDataArray array = m_data.at(m_index); + int newRowCount = array.size(); + int newColumnCount = array.at(0)->size(); + + // If the first time or the dimensions of the cache array have changed, + // reconstruct the reset array + if (m_resetArray || series->dataProxy()->rowCount() != newRowCount + || series->dataProxy()->columnCount() != newColumnCount) { + m_resetArray = new QSurfaceDataArray(); + m_resetArray->reserve(newRowCount); + 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++) { + 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()); + } + + // Notify the proxy that data has changed + series->dataProxy()->resetArray(m_resetArray); + } +} +//! [1] + +//! [2] +QString DataSource::selectionLabel(QSurface3DSeries *series, QValue3DAxis *axisX, + QValue3DAxis *axisY, QValue3DAxis *axisZ) +{ + QString label; + + if (series && series->selectedPoint() != QSurface3DSeries::invalidSelectionPosition()) { + const QSurfaceDataItem *item = series->dataProxy()->itemAt(series->selectedPoint()); + QString x; + QString y; + QString z; + x.sprintf(axisX->labelFormat().toUtf8().constData(), int(item->x())); + y.sprintf(axisY->labelFormat().toUtf8().constData(), int(item->y())); + z.sprintf(axisZ->labelFormat().toUtf8().constData(), int(item->z())); + label = QStringLiteral("%1, %3: %2").arg(x).arg(y).arg(z); + } else { + label = QStringLiteral("No selection"); + } + + return label; +} +//! [2] + +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(); + } +} diff --git a/examples/datavisualization/qmloscilloscope/datasource.h b/examples/datavisualization/qmloscilloscope/datasource.h new file mode 100644 index 00000000..51d3e8e0 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/datasource.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef DATASOURCE_H +#define DATASOURCE_H + +#include +#include + +class QQuickView; + +using namespace QtDataVisualization; + +class DataSource : public QObject +{ + Q_OBJECT +public: + explicit DataSource(QObject *parent = 0); + virtual ~DataSource(); + + //! [0] +public 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); + + QString selectionLabel(QSurface3DSeries *series, QValue3DAxis *axisX, + QValue3DAxis *axisY, QValue3DAxis *axisZ); + //! [0] +private: + void clearData(); + + QVector 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 new file mode 100644 index 00000000..697f391e Binary files /dev/null and b/examples/datavisualization/qmloscilloscope/doc/images/qmloscilloscope-example.png differ diff --git a/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc b/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc new file mode 100644 index 00000000..9fdcd8d2 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/doc/src/qmloscilloscope.qdoc @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/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 ../examples/qmloscilloscope/datasource.cpp 0 + + The secod 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 ../examples/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. + + The final method, \c selectionLabel(), is used to generate a label string we can show on the + QML ui. This method utilizes the axis formats to format the label: + + \snippet ../examples/qmloscilloscope/datasource.cpp 2 + + 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 ../examples/qmloscilloscope/main.cpp 0 + + \section1 QML + + In the QML codes, we define a Surface3D graph normally and give it a Surface3DSeries: + + \snippet ../examples/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 specify an empty string for \l{Abstract3DSeries::itemLabelFormat}{itemLabelFormat}, since we want to display + the selected item information in a \c Text element instead of a 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. + When selection point changes, we update the label text using a helper function + \c updateSelectionLabel(), which calls one of the methods we defined for our \c DataSource class + to obtain the label: + + \snippet ../examples/qmloscilloscope/qml/qmloscilloscope/main.qml 1 + + 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 ../examples/qmloscilloscope/qml/qmloscilloscope/main.qml 2 + \dots 4 + \snippet ../examples/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 ../examples/qmloscilloscope/qml/qmloscilloscope/main.qml 3 +*/ diff --git a/examples/datavisualization/qmloscilloscope/main.cpp b/examples/datavisualization/qmloscilloscope/main.cpp new file mode 100644 index 00000000..dd7f7a30 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "datasource.h" +#include "qtquick2applicationviewer.h" +#include + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + 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 new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..b9284777 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 1.0 +import QtDataVisualization 1.0 +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 + + 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 + + //! [0] + Surface3DSeries { + id: surfaceSeries + drawMode: Surface3DSeries.DrawSurface; + flatShadingEnabled: false; + meshSmooth: true + itemLabelFormat: "" + + onSelectedPointChanged: mainView.updateSelectionLabel() + } + //! [0] + + //! [2] + Component.onCompleted: mainView.generateData() + //! [2] + } + } + + //! [3] + Timer { + id: refreshTimer + interval: 1000 / frequencySlider.value + running: true + repeat: true + onTriggered: { + dataSource.update(surfaceSeries) + mainView.updateSelectionLabel() + } + } + //! [3] + + Rectangle { + width: parent.width + height: flatShadingToggle.height + anchors.left: parent.left + anchors.top: parent.top + color: surfaceGraph.theme.backgroundColor + + RowLayout { + id: buttonLayout + Layout.minimumHeight: flatShadingToggle.height + anchors.fill: parent + 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: 100 + minimumValue: mainView.sampleCache * 2 + maximumValue: minimumValue * 10 + stepSize: mainView.sampleCache + updateValueWhileDragging: false + 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: 100 + 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: "Target freq: " + frequencySlider.value + " Hz" + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + } + } + } + + Rectangle { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.minimumWidth: selectionText.implicitWidth + 10 + Layout.maximumWidth: selectionText.implicitWidth + 10 + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + border.color: "gray" + border.width: 1 + radius: 4 + + Text { + id: selectionText + text: "No selection" + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } + } + + NewButton { + id: flatShadingToggle + Layout.fillHeight: true + Layout.fillWidth: true + + text: "Show Flat" + 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); + } + } + } + + //! [1] + function updateSelectionLabel() { + selectionText.text = dataSource.selectionLabel(surfaceSeries, + surfaceGraph.axisX, + surfaceGraph.axisY, + surfaceGraph.axisZ) + } + //! [1] + + //! [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.desktop b/examples/datavisualization/qmloscilloscope/qmloscilloscope.desktop new file mode 100644 index 00000000..bd8e8325 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qmloscilloscope.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmloscilloscope +Exec=/opt/qmloscilloscope/bin/qmloscilloscope +Icon=qmloscilloscope64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmloscilloscope/qmloscilloscope.pro b/examples/datavisualization/qmloscilloscope/qmloscilloscope.pro new file mode 100644 index 00000000..c1e556ae --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qmloscilloscope.pro @@ -0,0 +1,24 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +QT += datavisualization + +# Add more folders to ship with the application, here +folder_01.source = qml/qmloscilloscope +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp \ + datasource.cpp +HEADERS += datasource.h + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmloscilloscope.qrc diff --git a/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc b/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc new file mode 100644 index 00000000..a2358789 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qmloscilloscope.qrc @@ -0,0 +1,6 @@ + + + qml/qmloscilloscope/main.qml + qml/qmloscilloscope/NewButton.qml + + diff --git a/examples/datavisualization/qmloscilloscope/qmloscilloscope64.png b/examples/datavisualization/qmloscilloscope/qmloscilloscope64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmloscilloscope/qmloscilloscope64.png differ diff --git a/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmloscilloscope/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png new file mode 100644 index 00000000..65ec4816 Binary files /dev/null and b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-example.png differ diff --git a/examples/datavisualization/qmlscatter/doc/images/qmlscatter-newproject.png b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-newproject.png new file mode 100644 index 00000000..7c81cae8 Binary files /dev/null and b/examples/datavisualization/qmlscatter/doc/images/qmlscatter-newproject.png differ diff --git a/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc new file mode 100644 index 00000000..fe86d740 --- /dev/null +++ b/examples/datavisualization/qmlscatter/doc/src/qmlscatter.qdoc @@ -0,0 +1,190 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \example qmlscatter + \title Qt Quick 2 Scatter Example + \ingroup qtdatavisualization_examples + \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. + + For instructions about how to interact with the graph, see \l{Qt Data Visualization Interacting with Data}{this page}. + + \image qmlscatter-example.png + + \section1 Creating the application + + The application main is created by creating a new Qt Quick Application project in QtCreator. + The dialog shown here is from QtCreator 3.0.0, and it may look a bit different in other + versions: + + \image qmlscatter-newproject.png + + We'll modify the generated \c main.cpp a bit, as we want to add our \c main.qml file as a + resource. We do it by replacing + + \code viewer.setMainQmlFile(QStringLiteral("qml/qmlscatter/main.qml")); \endcode + + with + + \snippet ../examples/qmlscatter/main.cpp 0 + + This will make application deployment easier. + + We'll enable anti-aliasing for our application in environments that support it: + + \snippet ../examples/qmlscatter/main.cpp 2 + + We'll also change the application to be shown maximized by replacing + + \code viewer.showExpanded(); \endcode + + with + + \snippet ../examples/qmlscatter/main.cpp 1 + + We won't look into that any closer, as we'll change nothing in the generated + \c qtquick2applicationviewer files. + + Next we'll create new qml files for data (\c Data.qml) and a QtQuick.Controls button + we want to modify a bit (\c NewButton.qml), and add them to the resource file, in addition to + main.qml: + + \code + + + qml/qmlscatter/Data.qml + qml/qmlscatter/main.qml + qml/qmlscatter/NewButton.qml + + + \endcode + + Now the base for our application is done, and we can start setting up the graph. + + \section1 Setting up the graph + + Let's start modifying the generated \c {main.qml}. We can remove all previous content from it, + as it has nothing we need. + + First we'll import all the QML modules we need: + + \snippet ../examples/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 Item and call it \c mainView: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 1 + + \note The Qt Creator application wizard will set a \c Rectangle item as the main item, which + is opaque white by default. This doesn't work for us, because the graphs are rendered behind the other + QML elements. We change the main item type to \c Item, which is invisible. This way the graph is + not covered by the main item. + + Then we'll add another \c Item inside it, and call it \c dataView. This will be the item to hold + the Scatter3D graph. We'll anchor it to the parent bottom: + + \snippet ../examples/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}: + + \snippet ../examples/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}: + + \snippet ../examples/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. + + The custom theme is based on a predefined theme, but we change the font in it: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 13 + + Then it's time to 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: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 4 + + The \c seriesData item contains the data models for all three series we use in this example. + + This is the component that holds our 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}: + + \snippet ../examples/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 + \c {dataModelThree}. + + Then we need to expose the data models to be usable from \c {main.qml}. We do this by defining + them as aliases in the main data component: + + \snippet ../examples/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 + a Scatter3DSeries and call it \c {scatterSeries}: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 5 + + Then we'll set up selection label format for the series: + + \snippet ../examples/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: + + \snippet ../examples/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: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 12 + \dots + + Then we'll modify the properties of the default axes in \c scatterGraph a bit: + + \snippet ../examples/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: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 7 + + Then we'll modify \c dataView to make room for the buttons at the top: + + \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 8 + \dots + + And we're done! + + \section1 Example contents +*/ diff --git a/examples/datavisualization/qmlscatter/main.cpp b/examples/datavisualization/qmlscatter/main.cpp new file mode 100644 index 00000000..2215ca40 --- /dev/null +++ b/examples/datavisualization/qmlscatter/main.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + //! [2] + viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat()); + //! [2] + + // 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.addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(), + QString::fromLatin1("qml"))); + + viewer.setTitle(QStringLiteral("QML scatter example")); + //! [0] + viewer.setSource(QUrl("qrc:/qml/qmlscatter/main.qml")); + //! [0] + viewer.setResizeMode(QQuickView::SizeRootObjectToView); + //! [1] + viewer.showMaximized(); + //! [1] + + return app.exec(); +} diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml new file mode 100644 index 00000000..23c4e5d5 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/Data.qml @@ -0,0 +1,1099 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 + +Item { + //! [1] + property alias model: dataModel + property alias modelTwo: dataModelTwo + property alias modelThree: dataModelThree + //! [1] + + //! [0] + ListModel { + id: dataModel + ListElement{ xPos: -10.0; yPos: 5.0; zPos: -5.0 } + //! [0] + ListElement{ xPos: -9.0; yPos: 3.0; zPos: -4.5 } + ListElement{ xPos: -8.5; yPos: 4.1; zPos: -4.0 } + ListElement{ xPos: -8.0; yPos: 4.75; zPos: -3.9 } + ListElement{ xPos: -9.5; yPos: 4.9; zPos: -4.2 } + ListElement{ xPos: -9.9; yPos: 3.42; zPos: -3.5 } + ListElement{ xPos: -7.8; yPos: 3.1; zPos: -4.9 } + ListElement{ xPos: -7.3; yPos: 2.91; zPos: -4.1 } + ListElement{ xPos: -7.1 ; yPos: 3.68 ; zPos: -4.52 } + ListElement{ xPos: -8.8 ; yPos: 2.96 ; zPos: -3.6 } + ListElement{ xPos: -6.94 ; yPos: 2.4 ; zPos: -2.92 } + ListElement{ xPos: -9.02 ; yPos: 4.74 ; zPos: -4.18 } + ListElement{ xPos: -9.54 ; yPos: 3.1 ; zPos: -3.8 } + ListElement{ xPos: -6.86 ; yPos: 3.66 ; zPos: -3.58 } + ListElement{ xPos: -8.16 ; yPos: 1.82 ; zPos: -4.64 } + ListElement{ xPos: -7.4 ; yPos: 3.18 ; zPos: -4.22 } + ListElement{ xPos: -7.9 ; yPos: 3.06 ; zPos: -4.3 } + ListElement{ xPos: -8.98 ; yPos: 2.64 ; zPos: -4.44 } + ListElement{ xPos: -6.36 ; yPos: 3.96 ; zPos: -4.38 } + ListElement{ xPos: -7.18 ; yPos: 3.32 ; zPos: -4.04 } + ListElement{ xPos: -7.9 ; yPos: 3.4 ; zPos: -2.78 } + ListElement{ xPos: -7.4 ; yPos: 3.12 ; zPos: -3.1 } + ListElement{ xPos: -7.54 ; yPos: 2.8 ; zPos: -3.68 } + } + + ListModel { + id: dataModelTwo + ListElement{ xPos: 2.25 ; yPos: 1.36 ; zPos: -1.3 } + ListElement{ xPos: -2 ; yPos: -0.08 ; zPos: 1 } + ListElement{ xPos: 2.65 ; yPos: -1.2 ; zPos: 2.7 } + ListElement{ xPos: -2.55 ; yPos: 3.48 ; zPos: -0.45 } + ListElement{ xPos: -3.85 ; yPos: 0.2 ; zPos: 0.5 } + ListElement{ xPos: 2.85 ; yPos: 1.32 ; zPos: 1.05 } + ListElement{ xPos: -0.4 ; yPos: -2.36 ; zPos: -1.6 } + ListElement{ xPos: 1.5 ; yPos: 0.36 ; zPos: -0.55 } + ListElement{ xPos: 0.25 ; yPos: 0.12 ; zPos: -0.75 } + ListElement{ xPos: -2.45 ; yPos: -0.72 ; zPos: -1.1 } + ListElement{ xPos: 4.1 ; yPos: 1.92 ; zPos: -0.95 } + ListElement{ xPos: 2.05 ; yPos: 0.64 ; zPos: -0.1 } + ListElement{ xPos: 0.25 ; yPos: 0.8 ; zPos: 3.05 } + ListElement{ xPos: 1.5 ; yPos: 0.24 ; zPos: 2.25 } + ListElement{ xPos: 1.15 ; yPos: -0.4 ; zPos: 0.8 } + ListElement{ xPos: -0.05 ; yPos: 0.12 ; zPos: 0.25 } + ListElement{ xPos: 0.9 ; yPos: -0.48 ; zPos: -3.2 } + ListElement{ xPos: 3.55 ; yPos: -1.04 ; zPos: -0.95 } + ListElement{ xPos: -2.4 ; yPos: -0.96 ; zPos: -0.65 } + ListElement{ xPos: 4.25 ; yPos: 0.16 ; zPos: 2.05 } + ListElement{ xPos: -0.6 ; yPos: 1 ; zPos: -0.2 } + ListElement{ xPos: 0 ; yPos: -0.84 ; zPos: -0.95 } + ListElement{ xPos: -4.2 ; yPos: 1.44 ; zPos: 0.85 } + ListElement{ xPos: -1.5 ; yPos: -1.2 ; zPos: -1.5 } + ListElement{ xPos: -3.35 ; yPos: -1.96 ; zPos: 1.8 } + ListElement{ xPos: -2.75 ; yPos: -0.96 ; zPos: -1.2 } + ListElement{ xPos: -2.45 ; yPos: 0.28 ; zPos: -4.55 } + ListElement{ xPos: 2.7 ; yPos: -1.4 ; zPos: -0.65 } + ListElement{ xPos: 2.7 ; yPos: 2.2 ; zPos: -2.4 } + ListElement{ xPos: -0.8 ; yPos: -2.04 ; zPos: 3.75 } + ListElement{ xPos: -1 ; yPos: -1.84 ; zPos: 2.35 } + ListElement{ xPos: -3.25 ; yPos: -1.6 ; zPos: -4.4 } + ListElement{ xPos: -0.35 ; yPos: -0.56 ; zPos: -1.75 } + ListElement{ xPos: -0.8 ; yPos: -0.28 ; zPos: -0.05 } + ListElement{ xPos: 4.75 ; yPos: -1.48 ; zPos: -2.45 } + ListElement{ xPos: 4.35 ; yPos: 1.4 ; zPos: 0.8 } + ListElement{ xPos: -3.2 ; yPos: 2 ; zPos: 0.5 } + ListElement{ xPos: 2 ; yPos: 1.92 ; zPos: 0.55 } + ListElement{ xPos: -0.45 ; yPos: 0.68 ; zPos: -0.8 } + ListElement{ xPos: -2.7 ; yPos: 2 ; zPos: -2.4 } + ListElement{ xPos: -1.65 ; yPos: 1.32 ; zPos: -2.05 } + ListElement{ xPos: -1.6 ; yPos: 1.8 ; zPos: -3.65 } + ListElement{ xPos: -1.2 ; yPos: -0.72 ; zPos: 0.85 } + ListElement{ xPos: 1.4 ; yPos: 1.08 ; zPos: 2.1 } + ListElement{ xPos: -3.9 ; yPos: -1.16 ; zPos: -0.85 } + ListElement{ xPos: 3.15 ; yPos: 0.12 ; zPos: -0.95 } + ListElement{ xPos: -1.35 ; yPos: -2.64 ; zPos: -0.5 } + ListElement{ xPos: -4.15 ; yPos: 1.28 ; zPos: -4.4 } + ListElement{ xPos: -2 ; yPos: 2.48 ; zPos: -0.15 } + ListElement{ xPos: -3.4 ; yPos: 0.6 ; zPos: 0 } + ListElement{ xPos: -1.5 ; yPos: -0.96 ; zPos: 2.35 } + ListElement{ xPos: -0.75 ; yPos: 1.16 ; zPos: -0.75 } + ListElement{ xPos: -0.85 ; yPos: 0.64 ; zPos: -1.75 } + ListElement{ xPos: 0.85 ; yPos: 0.48 ; zPos: 2.9 } + ListElement{ xPos: 4.05 ; yPos: 3.24 ; zPos: -0.1 } + ListElement{ xPos: 0.65 ; yPos: 0.84 ; zPos: 0.3 } + ListElement{ xPos: -2.1 ; yPos: 0.92 ; zPos: -2.75 } + ListElement{ xPos: -0.65 ; yPos: 0.16 ; zPos: 1.6 } + ListElement{ xPos: -1.8 ; yPos: -1.48 ; zPos: -2.15 } + ListElement{ xPos: -1.6 ; yPos: 2.96 ; zPos: 1.85 } + ListElement{ xPos: -0.75 ; yPos: 0.28 ; zPos: -0.75 } + ListElement{ xPos: 2.2 ; yPos: 1.16 ; zPos: 2.65 } + ListElement{ xPos: 2.6 ; yPos: 2.92 ; zPos: -0.2 } + ListElement{ xPos: -1.65 ; yPos: 3.28 ; zPos: 2.5 } + ListElement{ xPos: -0.5 ; yPos: 2.52 ; zPos: -1.15 } + ListElement{ xPos: -1.85 ; yPos: 0.52 ; zPos: -2 } + ListElement{ xPos: 0.15 ; yPos: -2.36 ; zPos: -0.5 } + ListElement{ xPos: -3.9 ; yPos: 0.28 ; zPos: -0.25 } + ListElement{ xPos: 0.1 ; yPos: -3.88 ; zPos: -0.7 } + ListElement{ xPos: -1 ; yPos: -1.96 ; zPos: 0.95 } + ListElement{ xPos: -0.3 ; yPos: -3.52 ; zPos: -1.45 } + ListElement{ xPos: 3.2 ; yPos: -2.56 ; zPos: 2.5 } + ListElement{ xPos: 0 ; yPos: -2.44 ; zPos: 1.35 } + ListElement{ xPos: 1.45 ; yPos: -1.96 ; zPos: 0.1 } + ListElement{ xPos: 3.55 ; yPos: -2.16 ; zPos: 1.75 } + ListElement{ xPos: 2.8 ; yPos: -0.72 ; zPos: -0.3 } + ListElement{ xPos: -1.65 ; yPos: -0.6 ; zPos: 0.25 } + ListElement{ xPos: -4.35 ; yPos: -1.32 ; zPos: -2.3 } + ListElement{ xPos: 2.75 ; yPos: -1.88 ; zPos: 1.7 } + ListElement{ xPos: 2.75 ; yPos: -0.6 ; zPos: 2.45 } + ListElement{ xPos: 0.15 ; yPos: -0.88 ; zPos: -0.2 } + ListElement{ xPos: 0.15 ; yPos: 0.04 ; zPos: -0.1 } + ListElement{ xPos: -1.2 ; yPos: -2.92 ; zPos: -3 } + ListElement{ xPos: -0.7 ; yPos: 0.16 ; zPos: 3.5 } + ListElement{ xPos: -1.8 ; yPos: -2.4 ; zPos: 0.2 } + ListElement{ xPos: 1.25 ; yPos: 2.64 ; zPos: 1.65 } + ListElement{ xPos: -0.65 ; yPos: 1.32 ; zPos: -0.55 } + ListElement{ xPos: 3.85 ; yPos: 2.32 ; zPos: -1 } + ListElement{ xPos: 1.65 ; yPos: -2.28 ; zPos: 0.95 } + ListElement{ xPos: -2.45 ; yPos: -2.96 ; zPos: 3.45 } + ListElement{ xPos: -1.75 ; yPos: 0.36 ; zPos: 1.6 } + ListElement{ xPos: 1.1 ; yPos: -0.84 ; zPos: 0.35 } + ListElement{ xPos: -1.55 ; yPos: 1.6 ; zPos: -3.1 } + ListElement{ xPos: 0.4 ; yPos: -1.36 ; zPos: -1.55 } + ListElement{ xPos: -3.95 ; yPos: 0.2 ; zPos: 3.7 } + ListElement{ xPos: -1.8 ; yPos: -0.24 ; zPos: 2.2 } + ListElement{ xPos: -0.45 ; yPos: 1.64 ; zPos: 1.35 } + ListElement{ xPos: -0.6 ; yPos: -0.72 ; zPos: 2.5 } + ListElement{ xPos: -1.2 ; yPos: -3.04 ; zPos: -1.55 } + ListElement{ xPos: -0.95 ; yPos: 1.48 ; zPos: 0.95 } + ListElement{ xPos: 1.7 ; yPos: -1.36 ; zPos: 2.15 } + ListElement{ xPos: -3.9 ; yPos: -0.32 ; zPos: -2.45 } + ListElement{ xPos: 2.95 ; yPos: 3.12 ; zPos: -2.4 } + ListElement{ xPos: 3.55 ; yPos: -1.48 ; zPos: 0.15 } + ListElement{ xPos: -1.4 ; yPos: 3.24 ; zPos: 0.7 } + ListElement{ xPos: -3.3 ; yPos: -0.8 ; zPos: 0 } + ListElement{ xPos: 1.15 ; yPos: 0.36 ; zPos: -2.7 } + ListElement{ xPos: 0.4 ; yPos: 0.12 ; zPos: 1.35 } + ListElement{ xPos: 1.9 ; yPos: -3.32 ; zPos: -0.75 } + ListElement{ xPos: 0.4 ; yPos: -0.2 ; zPos: -2.4 } + ListElement{ xPos: 0.55 ; yPos: 1.56 ; zPos: 2.25 } + ListElement{ xPos: 4.35 ; yPos: -0.96 ; zPos: -0.7 } + ListElement{ xPos: 3.35 ; yPos: -1.04 ; zPos: -0.85 } + ListElement{ xPos: 1.7 ; yPos: -0.28 ; zPos: -0.25 } + ListElement{ xPos: -3.05 ; yPos: -0.44 ; zPos: 1.3 } + ListElement{ xPos: -3.95 ; yPos: -2.72 ; zPos: -3.8 } + ListElement{ xPos: 2.1 ; yPos: 1.32 ; zPos: 1.15 } + ListElement{ xPos: 1.4 ; yPos: -0.44 ; zPos: -2.85 } + ListElement{ xPos: -2.1 ; yPos: 0.04 ; zPos: 2 } + ListElement{ xPos: 2.45 ; yPos: -2.44 ; zPos: -2.85 } + ListElement{ xPos: 4.35 ; yPos: 0.24 ; zPos: 1.1 } + ListElement{ xPos: 1.8 ; yPos: 1.8 ; zPos: -0.7 } + ListElement{ xPos: 1.8 ; yPos: 2.04 ; zPos: -0.95 } + ListElement{ xPos: 1.65 ; yPos: -2.48 ; zPos: 0.35 } + ListElement{ xPos: -3.3 ; yPos: 0.28 ; zPos: -1.6 } + ListElement{ xPos: 1.85 ; yPos: 1 ; zPos: 2.25 } + ListElement{ xPos: -2 ; yPos: -0.88 ; zPos: -2.6 } + ListElement{ xPos: -0.1 ; yPos: 0.28 ; zPos: -1.75 } + ListElement{ xPos: -2.5 ; yPos: -2.76 ; zPos: -0.2 } + ListElement{ xPos: 0.3 ; yPos: -1.64 ; zPos: -0.75 } + ListElement{ xPos: 2.3 ; yPos: -1.28 ; zPos: -2.7 } + ListElement{ xPos: -1.7 ; yPos: -1.48 ; zPos: -2.6 } + ListElement{ xPos: 0.5 ; yPos: 0.24 ; zPos: -2.2 } + ListElement{ xPos: 0.45 ; yPos: -1.88 ; zPos: -0.95 } + ListElement{ xPos: -1.2 ; yPos: 0.96 ; zPos: 2.35 } + ListElement{ xPos: -0.55 ; yPos: -0.36 ; zPos: -1.8 } + ListElement{ xPos: 2.7 ; yPos: -0.56 ; zPos: -0.4 } + ListElement{ xPos: 1.1 ; yPos: 2.76 ; zPos: -2.35 } + ListElement{ xPos: -1.2 ; yPos: -2.16 ; zPos: 3.1 } + ListElement{ xPos: -0.05 ; yPos: 1.76 ; zPos: 1 } + ListElement{ xPos: 1.45 ; yPos: -0.72 ; zPos: 0.7 } + ListElement{ xPos: 0.2 ; yPos: -3.2 ; zPos: -0.25 } + ListElement{ xPos: -0.8 ; yPos: 1.08 ; zPos: -0.1 } + ListElement{ xPos: -2.45 ; yPos: 0.56 ; zPos: -0.55 } + ListElement{ xPos: 2 ; yPos: 1.12 ; zPos: 2 } + ListElement{ xPos: -1.05 ; yPos: -2.16 ; zPos: -1.8 } + ListElement{ xPos: 1.2 ; yPos: -2.12 ; zPos: -1.55 } + ListElement{ xPos: -4 ; yPos: -0.76 ; zPos: 0.2 } + ListElement{ xPos: -0.15 ; yPos: -0.2 ; zPos: -2 } + ListElement{ xPos: -2.95 ; yPos: 1.36 ; zPos: -3.65 } + ListElement{ xPos: 2.7 ; yPos: 1.16 ; zPos: 2.05 } + ListElement{ xPos: 0.95 ; yPos: -1.52 ; zPos: -1.05 } + ListElement{ xPos: -1.8 ; yPos: 2.72 ; zPos: -0.55 } + ListElement{ xPos: 0.45 ; yPos: 2.88 ; zPos: -4.4 } + ListElement{ xPos: 1.35 ; yPos: 1.08 ; zPos: -0.8 } + ListElement{ xPos: -2.7 ; yPos: -1.36 ; zPos: -2.65 } + ListElement{ xPos: 0.35 ; yPos: 2.32 ; zPos: -1.6 } + ListElement{ xPos: -0.45 ; yPos: 1.6 ; zPos: 0.1 } + ListElement{ xPos: 3.75 ; yPos: 1.12 ; zPos: -3.8 } + ListElement{ xPos: 0.5 ; yPos: 2.6 ; zPos: 0.5 } + ListElement{ xPos: -0.75 ; yPos: -3.52 ; zPos: -3.2 } + ListElement{ xPos: 0.25 ; yPos: -1.32 ; zPos: 2.25 } + ListElement{ xPos: -2.8 ; yPos: -1.6 ; zPos: -2.45 } + ListElement{ xPos: 0.15 ; yPos: -0.56 ; zPos: 3.9 } + ListElement{ xPos: 2.15 ; yPos: -1.68 ; zPos: -1.7 } + ListElement{ xPos: -4.2 ; yPos: -1.92 ; zPos: 2.35 } + ListElement{ xPos: 1.95 ; yPos: -1.32 ; zPos: 0.3 } + ListElement{ xPos: 0.5 ; yPos: 0.64 ; zPos: 0.75 } + ListElement{ xPos: 0.85 ; yPos: -0.84 ; zPos: -0.5 } + ListElement{ xPos: -2.15 ; yPos: -1.64 ; zPos: -2.3 } + ListElement{ xPos: -0.85 ; yPos: -2.84 ; zPos: -0.3 } + ListElement{ xPos: -3.1 ; yPos: -0.32 ; zPos: -0.85 } + ListElement{ xPos: 3.45 ; yPos: 0 ; zPos: 0.8 } + ListElement{ xPos: 1.4 ; yPos: 0.2 ; zPos: 0.3 } + ListElement{ xPos: 0.45 ; yPos: 1.76 ; zPos: -0.15 } + ListElement{ xPos: 0.85 ; yPos: 3.16 ; zPos: -2 } + ListElement{ xPos: 2.15 ; yPos: 0.72 ; zPos: -0.95 } + ListElement{ xPos: -2.4 ; yPos: 0.6 ; zPos: -0.5 } + ListElement{ xPos: 1.45 ; yPos: -0.4 ; zPos: -1.95 } + ListElement{ xPos: 0.6 ; yPos: -1.84 ; zPos: 1.8 } + ListElement{ xPos: 3.4 ; yPos: -0.2 ; zPos: -0.55 } + ListElement{ xPos: 0.2 ; yPos: -0.84 ; zPos: 4.6 } + ListElement{ xPos: -0.25 ; yPos: -2.4 ; zPos: 2.1 } + ListElement{ xPos: -1.15 ; yPos: -3.16 ; zPos: -3.05 } + ListElement{ xPos: 1.45 ; yPos: 0.96 ; zPos: -0.7 } + ListElement{ xPos: 0.35 ; yPos: 0.52 ; zPos: -1 } + ListElement{ xPos: 2.6 ; yPos: 0.28 ; zPos: -0.85 } + ListElement{ xPos: -1.25 ; yPos: 0.76 ; zPos: -1.6 } + ListElement{ xPos: -0.65 ; yPos: -2.16 ; zPos: 3 } + ListElement{ xPos: -0.25 ; yPos: -2.36 ; zPos: -1.8 } + ListElement{ xPos: 0.35 ; yPos: -0.8 ; zPos: 1.85 } + ListElement{ xPos: 0.05 ; yPos: 0.6 ; zPos: 0.85 } + ListElement{ xPos: -2.5 ; yPos: 2.28 ; zPos: -2.05 } + ListElement{ xPos: 1.65 ; yPos: 1.2 ; zPos: 2.1 } + ListElement{ xPos: -3 ; yPos: -0.24 ; zPos: 0.7 } + ListElement{ xPos: -2.1 ; yPos: -0.84 ; zPos: -0.2 } + ListElement{ xPos: 0.45 ; yPos: 0.96 ; zPos: 2.5 } + ListElement{ xPos: -2.4 ; yPos: 1.28 ; zPos: 2.75 } + ListElement{ xPos: -1.7 ; yPos: -3.2 ; zPos: -2.3 } + ListElement{ xPos: 0.95 ; yPos: -0.08 ; zPos: 0.3 } + ListElement{ xPos: 1.4 ; yPos: 0.88 ; zPos: 0.45 } + ListElement{ xPos: 2.1 ; yPos: 1.08 ; zPos: 0.2 } + ListElement{ xPos: -2.1 ; yPos: -0.2 ; zPos: -0.6 } + ListElement{ xPos: 0.5 ; yPos: 1.24 ; zPos: -0.45 } + ListElement{ xPos: 2.55 ; yPos: -0.56 ; zPos: -2.65 } + ListElement{ xPos: -4.5 ; yPos: -0.48 ; zPos: -1.25 } + ListElement{ xPos: 3.45 ; yPos: -0.44 ; zPos: 2.2 } + ListElement{ xPos: -0.25 ; yPos: 0.64 ; zPos: 1.65 } + ListElement{ xPos: 1.25 ; yPos: -0.6 ; zPos: -0.35 } + ListElement{ xPos: 1.95 ; yPos: -1.56 ; zPos: -4.1 } + ListElement{ xPos: 2.75 ; yPos: -1 ; zPos: 3.3 } + ListElement{ xPos: 3.05 ; yPos: 1.04 ; zPos: -0.9 } + ListElement{ xPos: -2.95 ; yPos: 1.4 ; zPos: -2.25 } + ListElement{ xPos: 1.3 ; yPos: 0.36 ; zPos: -2.9 } + ListElement{ xPos: 0.4 ; yPos: -2.48 ; zPos: 3.25 } + ListElement{ xPos: -1.15 ; yPos: 0.36 ; zPos: 0.45 } + ListElement{ xPos: -2.25 ; yPos: 0.04 ; zPos: 0.65 } + ListElement{ xPos: -1.85 ; yPos: -0.96 ; zPos: 4.25 } + ListElement{ xPos: 1.5 ; yPos: 0.04 ; zPos: -3.85 } + ListElement{ xPos: 0.05 ; yPos: 0.68 ; zPos: -2.45 } + ListElement{ xPos: -0.1 ; yPos: -0.48 ; zPos: 1.9 } + ListElement{ xPos: 2.1 ; yPos: -1.52 ; zPos: -4 } + ListElement{ xPos: 3.4 ; yPos: 0 ; zPos: -2.05 } + ListElement{ xPos: 0.7 ; yPos: 2.68 ; zPos: -0.85 } + ListElement{ xPos: 1.6 ; yPos: 1.68 ; zPos: -0.8 } + ListElement{ xPos: 2.1 ; yPos: -2.44 ; zPos: 1.2 } + ListElement{ xPos: -0.15 ; yPos: -1.88 ; zPos: -0.35 } + ListElement{ xPos: -0.35 ; yPos: 1.76 ; zPos: 1.6 } + ListElement{ xPos: -2.15 ; yPos: 0.08 ; zPos: 0.75 } + ListElement{ xPos: -0.15 ; yPos: -3.36 ; zPos: 0.35 } + ListElement{ xPos: 2.7 ; yPos: -2.84 ; zPos: 0.35 } + ListElement{ xPos: -1.35 ; yPos: 0 ; zPos: -0.5 } + ListElement{ xPos: -0.35 ; yPos: -2.56 ; zPos: -0.9 } + ListElement{ xPos: -2.75 ; yPos: -3.56 ; zPos: 1.55 } + ListElement{ xPos: -2.5 ; yPos: -0.68 ; zPos: 2.7 } + ListElement{ xPos: 1.35 ; yPos: 0.6 ; zPos: -2.2 } + ListElement{ xPos: -1.3 ; yPos: -0.24 ; zPos: -1.65 } + ListElement{ xPos: -1.4 ; yPos: -1.44 ; zPos: 4.45 } + ListElement{ xPos: -1.8 ; yPos: 3.64 ; zPos: 2.05 } + ListElement{ xPos: -0.65 ; yPos: 0.08 ; zPos: 3.9 } + ListElement{ xPos: 2.25 ; yPos: 2.96 ; zPos: -2.35 } + ListElement{ xPos: 1.3 ; yPos: 1.64 ; zPos: -0.05 } + ListElement{ xPos: 1.75 ; yPos: 2.24 ; zPos: -2.85 } + ListElement{ xPos: -0.05 ; yPos: -1.56 ; zPos: -0.05 } + ListElement{ xPos: -3.85 ; yPos: -0.8 ; zPos: -0.3 } + ListElement{ xPos: 0.95 ; yPos: 0.32 ; zPos: -2.5 } + ListElement{ xPos: -2.4 ; yPos: 0.4 ; zPos: -3.55 } + ListElement{ xPos: 3.7 ; yPos: 2.36 ; zPos: 3.6 } + ListElement{ xPos: 0.55 ; yPos: 0.88 ; zPos: 3.15 } + ListElement{ xPos: -1 ; yPos: -1.36 ; zPos: -2.1 } + ListElement{ xPos: 2.05 ; yPos: 0.44 ; zPos: -0.8 } + ListElement{ xPos: -4.75 ; yPos: 1.8 ; zPos: -1.7 } + ListElement{ xPos: 0.15 ; yPos: 2.64 ; zPos: -2.2 } + ListElement{ xPos: -2.05 ; yPos: -2.56 ; zPos: 1.15 } + ListElement{ xPos: -3.7 ; yPos: 2.12 ; zPos: 1.3 } + ListElement{ xPos: 1.05 ; yPos: 0 ; zPos: 4 } + ListElement{ xPos: -0.7 ; yPos: -0.88 ; zPos: 1.35 } + ListElement{ xPos: 0.95 ; yPos: -1.84 ; zPos: 0.1 } + ListElement{ xPos: 0.75 ; yPos: 1.16 ; zPos: 4.25 } + ListElement{ xPos: -1.3 ; yPos: 0.72 ; zPos: 0.65 } + ListElement{ xPos: 3 ; yPos: -0.08 ; zPos: -1.75 } + ListElement{ xPos: 2.85 ; yPos: -0.68 ; zPos: 0.65 } + ListElement{ xPos: -0.4 ; yPos: 3.04 ; zPos: -2.35 } + ListElement{ xPos: 3.05 ; yPos: -0.6 ; zPos: -0.6 } + ListElement{ xPos: -0.85 ; yPos: -0.44 ; zPos: 0.35 } + ListElement{ xPos: 0 ; yPos: -1.92 ; zPos: 0 } + ListElement{ xPos: -1.25 ; yPos: -1.44 ; zPos: 1.9 } + ListElement{ xPos: -1.6 ; yPos: 0.04 ; zPos: -0.7 } + ListElement{ xPos: 1.45 ; yPos: -1 ; zPos: -3.4 } + ListElement{ xPos: -2.8 ; yPos: -1.24 ; zPos: -3 } + ListElement{ xPos: 0.2 ; yPos: -0.68 ; zPos: -3.7 } + ListElement{ xPos: 3.35 ; yPos: 0.68 ; zPos: -1.9 } + ListElement{ xPos: -2.3 ; yPos: 1.08 ; zPos: -1 } + ListElement{ xPos: 1.5 ; yPos: 1.8 ; zPos: -1.2 } + ListElement{ xPos: 1.55 ; yPos: 3.64 ; zPos: 1.35 } + ListElement{ xPos: 1.15 ; yPos: -1.36 ; zPos: 0.75 } + ListElement{ xPos: -1.95 ; yPos: 0.08 ; zPos: -0.85 } + ListElement{ xPos: -2.25 ; yPos: -0.52 ; zPos: 1.05 } + ListElement{ xPos: -2.6 ; yPos: -1.32 ; zPos: 1.05 } + ListElement{ xPos: -0.4 ; yPos: -1.52 ; zPos: 2.45 } + ListElement{ xPos: -0.05 ; yPos: 0.64 ; zPos: -2.85 } + ListElement{ xPos: 4.45 ; yPos: -0.24 ; zPos: -0.15 } + ListElement{ xPos: 3.45 ; yPos: 1.72 ; zPos: -1.1 } + ListElement{ xPos: 3.3 ; yPos: -1.72 ; zPos: -0.25 } + ListElement{ xPos: 1.7 ; yPos: 2.76 ; zPos: 2 } + ListElement{ xPos: 2.1 ; yPos: -2.88 ; zPos: -1.75 } + ListElement{ xPos: -3.7 ; yPos: -0.04 ; zPos: 0.25 } + ListElement{ xPos: -0.45 ; yPos: -3 ; zPos: -2.95 } + ListElement{ xPos: 3.1 ; yPos: -2.32 ; zPos: 0.1 } + ListElement{ xPos: 0.7 ; yPos: -2.88 ; zPos: -3.45 } + ListElement{ xPos: 2.9 ; yPos: 0.4 ; zPos: -0.65 } + ListElement{ xPos: -1.8 ; yPos: -2.48 ; zPos: -3.5 } + ListElement{ xPos: 1.65 ; yPos: 3.16 ; zPos: 2.15 } + ListElement{ xPos: -1.25 ; yPos: -0.76 ; zPos: 2.15 } + ListElement{ xPos: 3.55 ; yPos: 0.28 ; zPos: 2.4 } + ListElement{ xPos: 0.25 ; yPos: 0.52 ; zPos: 2.3 } + ListElement{ xPos: -1.7 ; yPos: -1.36 ; zPos: -2.5 } + ListElement{ xPos: 3.8 ; yPos: 1.04 ; zPos: 0.45 } + ListElement{ xPos: 2.45 ; yPos: -0.72 ; zPos: -4.05 } + ListElement{ xPos: -0.85 ; yPos: 0.16 ; zPos: -0.55 } + ListElement{ xPos: 0.65 ; yPos: 0.52 ; zPos: 3.3 } + ListElement{ xPos: 0.85 ; yPos: -0.08 ; zPos: 0.6 } + ListElement{ xPos: -0.1 ; yPos: 1.12 ; zPos: -3.15 } + ListElement{ xPos: -2.95 ; yPos: 0.24 ; zPos: 0.8 } + ListElement{ xPos: 0.2 ; yPos: -0.6 ; zPos: -0.45 } + ListElement{ xPos: 0.15 ; yPos: 2.52 ; zPos: 1.5 } + ListElement{ xPos: 0.65 ; yPos: -1.4 ; zPos: -1.5 } + ListElement{ xPos: 4.75 ; yPos: 1.76 ; zPos: 1.15 } + ListElement{ xPos: -1.75 ; yPos: -1.44 ; zPos: -3.6 } + ListElement{ xPos: 0.85 ; yPos: 0.04 ; zPos: -0.3 } + ListElement{ xPos: -0.55 ; yPos: -0.28 ; zPos: -1.85 } + ListElement{ xPos: -4.05 ; yPos: 0.52 ; zPos: -2.35 } + ListElement{ xPos: -0.35 ; yPos: -0.96 ; zPos: 0.8 } + ListElement{ xPos: -1.8 ; yPos: -0.04 ; zPos: 0.05 } + ListElement{ xPos: -2 ; yPos: 0.12 ; zPos: -2.5 } + ListElement{ xPos: -1.85 ; yPos: -1.04 ; zPos: -1.2 } + ListElement{ xPos: -1 ; yPos: -3.44 ; zPos: -1 } + ListElement{ xPos: 2.25 ; yPos: 0.16 ; zPos: -0.05 } + ListElement{ xPos: -1.3 ; yPos: 0.24 ; zPos: -1.5 } + ListElement{ xPos: -0.05 ; yPos: -0.48 ; zPos: 1.7 } + ListElement{ xPos: -2.5 ; yPos: 0.28 ; zPos: -2.1 } + ListElement{ xPos: 3.9 ; yPos: -0.44 ; zPos: -0.85 } + ListElement{ xPos: -0.3 ; yPos: -1.96 ; zPos: 1.3 } + ListElement{ xPos: 1.35 ; yPos: 2.92 ; zPos: -1.15 } + ListElement{ xPos: -2.2 ; yPos: -2.2 ; zPos: -0.45 } + ListElement{ xPos: -0.2 ; yPos: -0.12 ; zPos: 0.15 } + ListElement{ xPos: 0.7 ; yPos: 1.4 ; zPos: -3 } + ListElement{ xPos: -0.3 ; yPos: 3.16 ; zPos: 2.65 } + ListElement{ xPos: -1.1 ; yPos: -1.44 ; zPos: 0.45 } + ListElement{ xPos: 0.25 ; yPos: -1.04 ; zPos: 4.3 } + ListElement{ xPos: -2.2 ; yPos: -2.48 ; zPos: 0.4 } + ListElement{ xPos: 0.95 ; yPos: -3.4 ; zPos: -1.2 } + ListElement{ xPos: 2.75 ; yPos: -1.6 ; zPos: -1.95 } + ListElement{ xPos: 0.75 ; yPos: -1.84 ; zPos: -0.15 } + ListElement{ xPos: -0.75 ; yPos: -1.84 ; zPos: 0.35 } + ListElement{ xPos: -2.85 ; yPos: -2.12 ; zPos: -0.95 } + ListElement{ xPos: -0.8 ; yPos: -2.84 ; zPos: -0.15 } + ListElement{ xPos: -1.95 ; yPos: -0.44 ; zPos: 2.1 } + ListElement{ xPos: -1.05 ; yPos: -2.48 ; zPos: -1.25 } + ListElement{ xPos: -2.6 ; yPos: -1.48 ; zPos: 0.8 } + ListElement{ xPos: 2.5 ; yPos: -1.08 ; zPos: 1.9 } + ListElement{ xPos: 0.45 ; yPos: 2.52 ; zPos: 0.45 } + ListElement{ xPos: 1.55 ; yPos: -0.16 ; zPos: 0.25 } + ListElement{ xPos: -2.9 ; yPos: 0.36 ; zPos: 0.35 } + ListElement{ xPos: 2.95 ; yPos: -1.56 ; zPos: -2.7 } + ListElement{ xPos: 3.4 ; yPos: -1.76 ; zPos: 3.05 } + ListElement{ xPos: 1.75 ; yPos: -2.84 ; zPos: 0.5 } + ListElement{ xPos: -0.95 ; yPos: 0.64 ; zPos: 1.1 } + ListElement{ xPos: 2 ; yPos: 2.04 ; zPos: 0.1 } + ListElement{ xPos: -0.15 ; yPos: -0.08 ; zPos: -0.9 } + ListElement{ xPos: 2.2 ; yPos: -1.2 ; zPos: 2.8 } + ListElement{ xPos: -0.8 ; yPos: 2.68 ; zPos: -0.3 } + ListElement{ xPos: 3.4 ; yPos: 0.84 ; zPos: -2.65 } + ListElement{ xPos: -0.25 ; yPos: -0.24 ; zPos: 0.45 } + ListElement{ xPos: 2.7 ; yPos: 1.64 ; zPos: -1.95 } + ListElement{ xPos: 1.35 ; yPos: -2.96 ; zPos: 0.65 } + ListElement{ xPos: -1.45 ; yPos: -0.2 ; zPos: 0.8 } + ListElement{ xPos: 1.45 ; yPos: 1.64 ; zPos: -3.45 } + ListElement{ xPos: -1.1 ; yPos: 3.08 ; zPos: 1.1 } + ListElement{ xPos: 0.8 ; yPos: 1.88 ; zPos: -2.1 } + ListElement{ xPos: 1.15 ; yPos: 3.04 ; zPos: -0.75 } + ListElement{ xPos: -0.45 ; yPos: 1.36 ; zPos: -0.15 } + ListElement{ xPos: -2.8 ; yPos: -1.24 ; zPos: 2.55 } + ListElement{ xPos: 4.4 ; yPos: 2.04 ; zPos: 1.25 } + ListElement{ xPos: -0.95 ; yPos: 1.24 ; zPos: 3.65 } + ListElement{ xPos: 3.45 ; yPos: 1.32 ; zPos: 2.5 } + ListElement{ xPos: -3 ; yPos: 1.12 ; zPos: -1.2 } + ListElement{ xPos: -2.45 ; yPos: 0.68 ; zPos: 4.35 } + ListElement{ xPos: 0.55 ; yPos: -0.12 ; zPos: -3.95 } + ListElement{ xPos: -0.35 ; yPos: 3.08 ; zPos: -0.3 } + ListElement{ xPos: 1.35 ; yPos: -2.92 ; zPos: -3.3 } + ListElement{ xPos: 0.5 ; yPos: -0.2 ; zPos: 0.95 } + ListElement{ xPos: 1.2 ; yPos: -0.24 ; zPos: -0.75 } + ListElement{ xPos: -1.2 ; yPos: 2.16 ; zPos: 3.35 } + ListElement{ xPos: -3.35 ; yPos: 2.36 ; zPos: 3.45 } + ListElement{ xPos: 0.95 ; yPos: -0.88 ; zPos: 1.25 } + ListElement{ xPos: 0.1 ; yPos: 1.24 ; zPos: 0 } + ListElement{ xPos: 1.8 ; yPos: 1.56 ; zPos: -1.05 } + ListElement{ xPos: -1.35 ; yPos: 3.8 ; zPos: -1.45 } + ListElement{ xPos: 1.45 ; yPos: -2.64 ; zPos: 0.5 } + ListElement{ xPos: 2.05 ; yPos: 1.16 ; zPos: 1.4 } + ListElement{ xPos: 2.9 ; yPos: -2.4 ; zPos: 0.15 } + ListElement{ xPos: -1.1 ; yPos: 0.76 ; zPos: -1.65 } + ListElement{ xPos: -2.5 ; yPos: -2.4 ; zPos: 1.05 } + ListElement{ xPos: 3.55 ; yPos: -1.8 ; zPos: -2.55 } + ListElement{ xPos: -0.8 ; yPos: 1.24 ; zPos: -3.75 } + ListElement{ xPos: -1.35 ; yPos: -2.48 ; zPos: 2.85 } + ListElement{ xPos: -2.1 ; yPos: 1.48 ; zPos: -0.15 } + ListElement{ xPos: -0.45 ; yPos: 2.68 ; zPos: 2.85 } + ListElement{ xPos: 0.8 ; yPos: 1.4 ; zPos: -3.35 } + ListElement{ xPos: -2.2 ; yPos: -2.24 ; zPos: 0.35 } + ListElement{ xPos: 1.4 ; yPos: -2.32 ; zPos: 0.55 } + ListElement{ xPos: 3.65 ; yPos: 1.12 ; zPos: -4.5 } + ListElement{ xPos: 0.1 ; yPos: -0.68 ; zPos: 1.85 } + ListElement{ xPos: -1.95 ; yPos: -0.56 ; zPos: -2.05 } + ListElement{ xPos: 1.85 ; yPos: 1.32 ; zPos: -4.4 } + ListElement{ xPos: -0.6 ; yPos: 0.64 ; zPos: -0.3 } + ListElement{ xPos: -1.55 ; yPos: 1.52 ; zPos: -3.75 } + ListElement{ xPos: 1.85 ; yPos: 0.48 ; zPos: 0.65 } + ListElement{ xPos: 3.35 ; yPos: 2.52 ; zPos: 1.9 } + ListElement{ xPos: 0.4 ; yPos: 1.4 ; zPos: -1.3 } + ListElement{ xPos: -2.7 ; yPos: 0.84 ; zPos: 1.6 } + ListElement{ xPos: -0.5 ; yPos: 1 ; zPos: 0.4 } + ListElement{ xPos: 2.25 ; yPos: -1 ; zPos: 1.25 } + ListElement{ xPos: 1.7 ; yPos: 2.4 ; zPos: -0.95 } + ListElement{ xPos: -3.55 ; yPos: 1.04 ; zPos: 3.95 } + ListElement{ xPos: 0.9 ; yPos: 1.28 ; zPos: 2.05 } + ListElement{ xPos: -3.15 ; yPos: 1.96 ; zPos: -0.3 } + ListElement{ xPos: 1.35 ; yPos: -0.92 ; zPos: -1 } + ListElement{ xPos: -3.1 ; yPos: -3.08 ; zPos: 0.9 } + ListElement{ xPos: 1.25 ; yPos: -2.44 ; zPos: 2.25 } + ListElement{ xPos: -3.8 ; yPos: 0.76 ; zPos: -1.05 } + ListElement{ xPos: -1.05 ; yPos: -3.8 ; zPos: -0.8 } + ListElement{ xPos: -4 ; yPos: 1.24 ; zPos: -2.6 } + ListElement{ xPos: 2.45 ; yPos: -1.84 ; zPos: 0.35 } + ListElement{ xPos: -1.5 ; yPos: 2.16 ; zPos: 4.3 } + ListElement{ xPos: 2.1 ; yPos: -1.8 ; zPos: -0.95 } + ListElement{ xPos: -1.8 ; yPos: -0.2 ; zPos: 0.2 } + ListElement{ xPos: 0.75 ; yPos: 1.04 ; zPos: -1.3 } + ListElement{ xPos: 2.85 ; yPos: 1.6 ; zPos: -2.05 } + ListElement{ xPos: -2 ; yPos: -0.2 ; zPos: -2.15 } + ListElement{ xPos: 1.75 ; yPos: 2.28 ; zPos: 0.75 } + ListElement{ xPos: 1.95 ; yPos: -0.68 ; zPos: -2.3 } + ListElement{ xPos: -0.8 ; yPos: 1.08 ; zPos: 1.65 } + ListElement{ xPos: -1.85 ; yPos: 1.8 ; zPos: -0.75 } + ListElement{ xPos: -3.05 ; yPos: 2.44 ; zPos: 0.35 } + ListElement{ xPos: -0.4 ; yPos: -3 ; zPos: -2.85 } + ListElement{ xPos: -0.95 ; yPos: 0.64 ; zPos: 2.15 } + ListElement{ xPos: -1.35 ; yPos: -0.2 ; zPos: -0.8 } + ListElement{ xPos: 2.1 ; yPos: -0.04 ; zPos: 0.65 } + ListElement{ xPos: 2.6 ; yPos: 0.2 ; zPos: 2.75 } + ListElement{ xPos: 1.65 ; yPos: -0.16 ; zPos: 1.65 } + ListElement{ xPos: -1.85 ; yPos: 0.68 ; zPos: 1.95 } + ListElement{ xPos: -3.05 ; yPos: -2.28 ; zPos: 0.1 } + ListElement{ xPos: 3.4 ; yPos: -1.88 ; zPos: 3 } + ListElement{ xPos: -0.75 ; yPos: 0.36 ; zPos: 1.5 } + ListElement{ xPos: 2.9 ; yPos: -1 ; zPos: -1.85 } + ListElement{ xPos: 0.4 ; yPos: 1.08 ; zPos: 0.8 } + ListElement{ xPos: -1.05 ; yPos: 1.04 ; zPos: 2.15 } + ListElement{ xPos: 2.6 ; yPos: -2.08 ; zPos: -0.1 } + ListElement{ xPos: 0 ; yPos: -2.84 ; zPos: -0.95 } + ListElement{ xPos: 0.4 ; yPos: 1.88 ; zPos: 2.05 } + ListElement{ xPos: -3.1 ; yPos: -2.76 ; zPos: -2.75 } + ListElement{ xPos: -2.65 ; yPos: 3.52 ; zPos: -1.2 } + ListElement{ xPos: -4.3 ; yPos: -0.28 ; zPos: 3 } + ListElement{ xPos: -2.8 ; yPos: -2.56 ; zPos: -2.85 } + ListElement{ xPos: -0.15 ; yPos: 2.72 ; zPos: -2.8 } + ListElement{ xPos: -0.95 ; yPos: -0.6 ; zPos: 1.05 } + ListElement{ xPos: 1.9 ; yPos: 2.56 ; zPos: 1.25 } + ListElement{ xPos: -0.85 ; yPos: 0.24 ; zPos: 0.05 } + ListElement{ xPos: 2.4 ; yPos: 2.56 ; zPos: -1.2 } + ListElement{ xPos: 2.35 ; yPos: -1.08 ; zPos: 2.7 } + ListElement{ xPos: -2.1 ; yPos: -0.76 ; zPos: 2.8 } + ListElement{ xPos: 1.4 ; yPos: 1 ; zPos: 2.35 } + ListElement{ xPos: -0.9 ; yPos: 1.72 ; zPos: 4.1 } + ListElement{ xPos: 3.7 ; yPos: -1.4 ; zPos: 2.05 } + ListElement{ xPos: -0.25 ; yPos: 0.76 ; zPos: -1.4 } + ListElement{ xPos: -1.6 ; yPos: 0.32 ; zPos: 0.05 } + ListElement{ xPos: 2.5 ; yPos: -3.08 ; zPos: 0.85 } + ListElement{ xPos: 0.05 ; yPos: -1.96 ; zPos: 1.55 } + ListElement{ xPos: -3.7 ; yPos: 0.84 ; zPos: -0.25 } + ListElement{ xPos: 2.35 ; yPos: 0.6 ; zPos: -1.5 } + ListElement{ xPos: 1.1 ; yPos: 2.64 ; zPos: -1.45 } + ListElement{ xPos: 2.55 ; yPos: -1.56 ; zPos: 2.05 } + ListElement{ xPos: -2.15 ; yPos: 3.56 ; zPos: 3.25 } + ListElement{ xPos: -0.55 ; yPos: -1.24 ; zPos: 2.65 } + ListElement{ xPos: -0.3 ; yPos: 1.32 ; zPos: 0.85 } + ListElement{ xPos: -1.9 ; yPos: 1.24 ; zPos: 1.15 } + ListElement{ xPos: 0.35 ; yPos: -2.44 ; zPos: -1.35 } + ListElement{ xPos: 2.9 ; yPos: -1.08 ; zPos: -4.3 } + ListElement{ xPos: 1.8 ; yPos: -0.44 ; zPos: 1.25 } + ListElement{ xPos: -0.6 ; yPos: -1.08 ; zPos: -0.6 } + ListElement{ xPos: -0.3 ; yPos: -0.88 ; zPos: -1.45 } + ListElement{ xPos: -1 ; yPos: 2.12 ; zPos: 2.3 } + ListElement{ xPos: 3.15 ; yPos: 0.52 ; zPos: -2.8 } + ListElement{ xPos: 0.45 ; yPos: 2.48 ; zPos: -1.3 } + ListElement{ xPos: 0.5 ; yPos: -0.84 ; zPos: 0.7 } + ListElement{ xPos: -0.6 ; yPos: -0.44 ; zPos: -1.35 } + ListElement{ xPos: -1.7 ; yPos: -0.12 ; zPos: -2.55 } + ListElement{ xPos: -0.5 ; yPos: 0.52 ; zPos: 1.4 } + ListElement{ xPos: 4 ; yPos: -1.68 ; zPos: -0.1 } + ListElement{ xPos: 1.4 ; yPos: -1.64 ; zPos: 1.35 } + ListElement{ xPos: 0.05 ; yPos: 0.28 ; zPos: -2.2 } + ListElement{ xPos: 1.55 ; yPos: -1.2 ; zPos: 0.45 } + ListElement{ xPos: 3.1 ; yPos: 3.64 ; zPos: 1.45 } + ListElement{ xPos: -1.55 ; yPos: 2.16 ; zPos: 0.15 } + ListElement{ xPos: 3.9 ; yPos: -2.56 ; zPos: -1.25 } + ListElement{ xPos: 4.15 ; yPos: 0.64 ; zPos: 2.65 } + ListElement{ xPos: -2.8 ; yPos: 0.56 ; zPos: -1.35 } + ListElement{ xPos: 1.3 ; yPos: 1.28 ; zPos: 0.8 } + ListElement{ xPos: -2.3 ; yPos: -3.08 ; zPos: 1.2 } + ListElement{ xPos: 0.5 ; yPos: -0.36 ; zPos: -2.4 } + ListElement{ xPos: 0.6 ; yPos: 0.52 ; zPos: 2.75 } + ListElement{ xPos: 3.9 ; yPos: -0.52 ; zPos: -4.25 } + ListElement{ xPos: -0.5 ; yPos: 1.28 ; zPos: -0.05 } + ListElement{ xPos: -0.25 ; yPos: -3.84 ; zPos: 3.15 } + ListElement{ xPos: -0.9 ; yPos: -1.72 ; zPos: -3.15 } + ListElement{ xPos: 0.85 ; yPos: 0.84 ; zPos: -1.7 } + ListElement{ xPos: -3.35 ; yPos: 0.72 ; zPos: 2.15 } + ListElement{ xPos: -1.6 ; yPos: 0.6 ; zPos: 1.65 } + ListElement{ xPos: -3.6 ; yPos: 0.8 ; zPos: 2.6 } + ListElement{ xPos: -0.7 ; yPos: 1.96 ; zPos: -0.9 } + ListElement{ xPos: -2.4 ; yPos: 1.32 ; zPos: -2.75 } + ListElement{ xPos: -1.75 ; yPos: 0.72 ; zPos: -0.85 } + ListElement{ xPos: -2.7 ; yPos: 0.6 ; zPos: -2.5 } + ListElement{ xPos: -2.2 ; yPos: -3.4 ; zPos: -1.85 } + ListElement{ xPos: 0.85 ; yPos: 2.2 ; zPos: -3.75 } + ListElement{ xPos: -3.85 ; yPos: 2.44 ; zPos: 4.3 } + ListElement{ xPos: -3.65 ; yPos: 0.52 ; zPos: 0.2 } + ListElement{ xPos: -4.35 ; yPos: -0.52 ; zPos: 1.5 } + ListElement{ xPos: 1.45 ; yPos: -0.08 ; zPos: -0.4 } + ListElement{ xPos: 1.85 ; yPos: -0.76 ; zPos: -4.6 } + ListElement{ xPos: 0.95 ; yPos: 0.52 ; zPos: -1 } + ListElement{ xPos: -2.5 ; yPos: -0.88 ; zPos: -0.3 } + ListElement{ xPos: -2.9 ; yPos: 1.68 ; zPos: -1.15 } + ListElement{ xPos: -3.2 ; yPos: 0.2 ; zPos: 1.1 } + ListElement{ xPos: 0.9 ; yPos: -0.2 ; zPos: 0.7 } + ListElement{ xPos: 3.6 ; yPos: 1.08 ; zPos: -2.15 } + ListElement{ xPos: -0.8 ; yPos: 1.72 ; zPos: 2.85 } + ListElement{ xPos: 0.3 ; yPos: 1.76 ; zPos: 0.9 } + ListElement{ xPos: -1.3 ; yPos: -0.56 ; zPos: -2.3 } + ListElement{ xPos: -2.8 ; yPos: 0.4 ; zPos: 4.2 } + ListElement{ xPos: 1 ; yPos: -0.32 ; zPos: 0.35 } + ListElement{ xPos: -0.6 ; yPos: -0.24 ; zPos: 4.05 } + ListElement{ xPos: -2 ; yPos: -1.84 ; zPos: -2.2 } + ListElement{ xPos: -1.95 ; yPos: -0.8 ; zPos: 1.85 } + ListElement{ xPos: -0.05 ; yPos: -0.16 ; zPos: 3.85 } + ListElement{ xPos: 0.15 ; yPos: -2.64 ; zPos: 1.7 } + ListElement{ xPos: -3.85 ; yPos: 1.4 ; zPos: 0.1 } + ListElement{ xPos: 0.25 ; yPos: 1 ; zPos: -2.45 } + ListElement{ xPos: -4.1 ; yPos: 0 ; zPos: -0.1 } + ListElement{ xPos: -1.4 ; yPos: -0.32 ; zPos: -0.8 } + ListElement{ xPos: -1.9 ; yPos: -1.84 ; zPos: -3 } + ListElement{ xPos: 0.35 ; yPos: 1.32 ; zPos: -3.95 } + ListElement{ xPos: -2.6 ; yPos: -1.04 ; zPos: 4.25 } + ListElement{ xPos: -3.1 ; yPos: -0.96 ; zPos: -1.65 } + ListElement{ xPos: -0.55 ; yPos: -1.16 ; zPos: 4.05 } + ListElement{ xPos: -3.1 ; yPos: -1 ; zPos: -0.5 } + ListElement{ xPos: 2.25 ; yPos: 1.24 ; zPos: 3.4 } + ListElement{ xPos: -1.2 ; yPos: -1.24 ; zPos: -4.05 } + ListElement{ xPos: 3.05 ; yPos: 1.92 ; zPos: 1 } + ListElement{ xPos: 0.55 ; yPos: -2.76 ; zPos: -3.25 } + ListElement{ xPos: -2.05 ; yPos: 1.6 ; zPos: 0.6 } + ListElement{ xPos: -0.45 ; yPos: 0.12 ; zPos: -0.15 } + ListElement{ xPos: 2.1 ; yPos: 2.96 ; zPos: 1.1 } + ListElement{ xPos: 0.05 ; yPos: -2.08 ; zPos: -0.7 } + ListElement{ xPos: -3.15 ; yPos: 1.08 ; zPos: -0.1 } + ListElement{ xPos: -1.95 ; yPos: 0.44 ; zPos: 0.6 } + ListElement{ xPos: 0.15 ; yPos: -0.32 ; zPos: 2.85 } + ListElement{ xPos: 0.55 ; yPos: 1 ; zPos: 0.55 } + ListElement{ xPos: -2.05 ; yPos: 1.84 ; zPos: -1 } + ListElement{ xPos: -0.25 ; yPos: 0.36 ; zPos: 1.2 } + ListElement{ xPos: 4.6 ; yPos: -0.2 ; zPos: 0.6 } + ListElement{ xPos: -1.95 ; yPos: -0.8 ; zPos: 0.05 } + ListElement{ xPos: -0.35 ; yPos: -1.04 ; zPos: 0.8 } + ListElement{ xPos: 0.7 ; yPos: 3.04 ; zPos: -3.55 } + ListElement{ xPos: -0.15 ; yPos: 1.12 ; zPos: -2.5 } + ListElement{ xPos: -0.5 ; yPos: -1.68 ; zPos: 1.5 } + ListElement{ xPos: 1 ; yPos: -0.44 ; zPos: -1.5 } + ListElement{ xPos: 4.05 ; yPos: -1.32 ; zPos: 2.85 } + ListElement{ xPos: 1.6 ; yPos: -1.56 ; zPos: 2.15 } + ListElement{ xPos: 0.3 ; yPos: -1.16 ; zPos: 1.25 } + ListElement{ xPos: -2.65 ; yPos: -1.28 ; zPos: 0.45 } + ListElement{ xPos: 0 ; yPos: 1.52 ; zPos: -1.35 } + ListElement{ xPos: 1.3 ; yPos: 1.68 ; zPos: -2.75 } + ListElement{ xPos: 1.25 ; yPos: 0.4 ; zPos: 0.3 } + ListElement{ xPos: -0.95 ; yPos: 3.68 ; zPos: 1.75 } + ListElement{ xPos: -3.55 ; yPos: 0.48 ; zPos: 1.15 } + ListElement{ xPos: -1.7 ; yPos: -2.64 ; zPos: -3.3 } + ListElement{ xPos: -2.2 ; yPos: -2.4 ; zPos: 1.05 } + ListElement{ xPos: 0.1 ; yPos: 0.44 ; zPos: -1.05 } + ListElement{ xPos: 2.05 ; yPos: 0.4 ; zPos: 0.8 } + ListElement{ xPos: 0.4 ; yPos: 0.04 ; zPos: 4.2 } + ListElement{ xPos: -1.25 ; yPos: 0.76 ; zPos: 0.45 } + ListElement{ xPos: 1.6 ; yPos: 2.04 ; zPos: -2.95 } + ListElement{ xPos: -2.05 ; yPos: -0.44 ; zPos: 1.35 } + ListElement{ xPos: -3.25 ; yPos: 0.44 ; zPos: 2.15 } + ListElement{ xPos: -1.75 ; yPos: 0.04 ; zPos: 2.35 } + ListElement{ xPos: -4.15 ; yPos: 0.68 ; zPos: 0.8 } + ListElement{ xPos: -1.6 ; yPos: 1.12 ; zPos: 0.55 } + ListElement{ xPos: -0.15 ; yPos: 3.4 ; zPos: 3.05 } + ListElement{ xPos: -0.2 ; yPos: 0.04 ; zPos: -1.45 } + ListElement{ xPos: 2.9 ; yPos: -0.36 ; zPos: 1.45 } + ListElement{ xPos: -1.4 ; yPos: 1.56 ; zPos: 1 } + ListElement{ xPos: 3.4 ; yPos: -1.2 ; zPos: -4.2 } + ListElement{ xPos: -1.1 ; yPos: 0.6 ; zPos: 1.55 } + ListElement{ xPos: -0.35 ; yPos: 1.52 ; zPos: -0.35 } + ListElement{ xPos: 0.3 ; yPos: 0.96 ; zPos: 1.8 } + ListElement{ xPos: 2.5 ; yPos: -1.84 ; zPos: 1.65 } + ListElement{ xPos: -0.6 ; yPos: 2.24 ; zPos: -2.9 } + ListElement{ xPos: -0.25 ; yPos: -2.32 ; zPos: -0.7 } + ListElement{ xPos: 3.35 ; yPos: -2.24 ; zPos: 1.5 } + ListElement{ xPos: 1.6 ; yPos: 1.96 ; zPos: 3.9 } + ListElement{ xPos: 1.8 ; yPos: 0.68 ; zPos: -1.55 } + ListElement{ xPos: 2.7 ; yPos: 1.76 ; zPos: -2.9 } + ListElement{ xPos: -2.35 ; yPos: -0.6 ; zPos: -3.9 } + ListElement{ xPos: -1.85 ; yPos: 1.96 ; zPos: -1.2 } + ListElement{ xPos: -4.05 ; yPos: 1.12 ; zPos: -2.75 } + ListElement{ xPos: -2.85 ; yPos: -1.36 ; zPos: 0.65 } + ListElement{ xPos: -1.75 ; yPos: 2.12 ; zPos: -1.35 } + ListElement{ xPos: -2.95 ; yPos: -0.08 ; zPos: 3.65 } + ListElement{ xPos: -2.4 ; yPos: 2 ; zPos: 4.5 } + ListElement{ xPos: -0.05 ; yPos: 0.04 ; zPos: 0.35 } + ListElement{ xPos: -3.2 ; yPos: 0.16 ; zPos: 1.1 } + ListElement{ xPos: 3 ; yPos: 2.32 ; zPos: 1.3 } + ListElement{ xPos: 4.9 ; yPos: -1.88 ; zPos: 0.45 } + ListElement{ xPos: -2.35 ; yPos: -1.44 ; zPos: -0.7 } + ListElement{ xPos: 2.4 ; yPos: -0.6 ; zPos: 0.1 } + ListElement{ xPos: 1 ; yPos: 1.6 ; zPos: 1 } + ListElement{ xPos: 1.3 ; yPos: -0.4 ; zPos: -0.4 } + ListElement{ xPos: -0.9 ; yPos: -2.72 ; zPos: -3.6 } + ListElement{ xPos: 1.2 ; yPos: -0.44 ; zPos: 2.1 } + ListElement{ xPos: 0.65 ; yPos: 3 ; zPos: -1.55 } + ListElement{ xPos: -1.55 ; yPos: -2.64 ; zPos: 0.55 } + ListElement{ xPos: 1.9 ; yPos: -0.32 ; zPos: -2.1 } + ListElement{ xPos: 1.35 ; yPos: -2.84 ; zPos: -0.4 } + ListElement{ xPos: 0.25 ; yPos: -2.68 ; zPos: -0.2 } + ListElement{ xPos: -2.05 ; yPos: -1.6 ; zPos: -3.05 } + ListElement{ xPos: 1.65 ; yPos: -0.44 ; zPos: -0.75 } + ListElement{ xPos: -1.25 ; yPos: 0.96 ; zPos: -4.15 } + ListElement{ xPos: -4.2 ; yPos: -0.56 ; zPos: 1.45 } + ListElement{ xPos: 0.95 ; yPos: -2.4 ; zPos: -1.6 } + ListElement{ xPos: -0.05 ; yPos: 0.88 ; zPos: 3.15 } + ListElement{ xPos: -1.65 ; yPos: -0.88 ; zPos: -3.85 } + ListElement{ xPos: 0.35 ; yPos: 0.2 ; zPos: 4.25 } + ListElement{ xPos: 0.8 ; yPos: 0.84 ; zPos: 3.1 } + ListElement{ xPos: 1.85 ; yPos: -2.16 ; zPos: -2.2 } + ListElement{ xPos: -2.05 ; yPos: 0.16 ; zPos: -0.4 } + ListElement{ xPos: 0.85 ; yPos: 1.84 ; zPos: -1.45 } + ListElement{ xPos: 1.6 ; yPos: 1.56 ; zPos: -1.45 } + ListElement{ xPos: 1.25 ; yPos: -0.84 ; zPos: -2.95 } + ListElement{ xPos: -1.9 ; yPos: 2.32 ; zPos: -1.8 } + ListElement{ xPos: -0.6 ; yPos: 2.4 ; zPos: -3.65 } + ListElement{ xPos: 4.45 ; yPos: 0.52 ; zPos: 3 } + ListElement{ xPos: 2.7 ; yPos: 0.28 ; zPos: -1.8 } + ListElement{ xPos: 0.35 ; yPos: -2.56 ; zPos: 3.9 } + ListElement{ xPos: -0.95 ; yPos: -1.28 ; zPos: 1.6 } + ListElement{ xPos: 0.4 ; yPos: -0.2 ; zPos: -2.15 } + ListElement{ xPos: -0.05 ; yPos: -1.08 ; zPos: -4.1 } + ListElement{ xPos: 3.1 ; yPos: -1.2 ; zPos: -3.85 } + ListElement{ xPos: 0.75 ; yPos: 0.12 ; zPos: -3.1 } + ListElement{ xPos: -1.65 ; yPos: -1.16 ; zPos: -1.65 } + ListElement{ xPos: -1.65 ; yPos: 3.84 ; zPos: 4.65 } + ListElement{ xPos: 2.8 ; yPos: -2.6 ; zPos: -1.65 } + ListElement{ xPos: 1.2 ; yPos: -2.76 ; zPos: -2.2 } + ListElement{ xPos: 0.4 ; yPos: 3.04 ; zPos: 3.45 } + ListElement{ xPos: -3.6 ; yPos: 1.04 ; zPos: -0.6 } + ListElement{ xPos: 2.25 ; yPos: 1.64 ; zPos: 2.9 } + ListElement{ xPos: -3.05 ; yPos: -0.76 ; zPos: -2.3 } + ListElement{ xPos: -2.85 ; yPos: 2.12 ; zPos: -0.65 } + ListElement{ xPos: -0.1 ; yPos: 0.08 ; zPos: -1.6 } + ListElement{ xPos: -1.55 ; yPos: -1.36 ; zPos: 2.2 } + ListElement{ xPos: -0.4 ; yPos: 1.56 ; zPos: -0.3 } + ListElement{ xPos: 0.3 ; yPos: -2.36 ; zPos: 1.35 } + ListElement{ xPos: 0.2 ; yPos: -0.6 ; zPos: 1.6 } + ListElement{ xPos: -0.65 ; yPos: 1.96 ; zPos: -3.1 } + ListElement{ xPos: 0.6 ; yPos: -1.04 ; zPos: 2.5 } + ListElement{ xPos: -2 ; yPos: -1.08 ; zPos: -0.85 } + ListElement{ xPos: 1.45 ; yPos: -2.56 ; zPos: -2.6 } + ListElement{ xPos: -2.45 ; yPos: 0.04 ; zPos: -2.85 } + ListElement{ xPos: -0.05 ; yPos: -1.24 ; zPos: -1.25 } + ListElement{ xPos: -2.95 ; yPos: -1.8 ; zPos: -2.05 } + ListElement{ xPos: 4.3 ; yPos: -0.96 ; zPos: 3.5 } + ListElement{ xPos: 2.15 ; yPos: -1.6 ; zPos: -0.8 } + ListElement{ xPos: -1.2 ; yPos: -1 ; zPos: 1.75 } + ListElement{ xPos: -1.5 ; yPos: -1.28 ; zPos: -0.25 } + ListElement{ xPos: 2.5 ; yPos: -2.6 ; zPos: -0.3 } + ListElement{ xPos: -1.6 ; yPos: -0.36 ; zPos: 3.15 } + ListElement{ xPos: -0.1 ; yPos: -0.64 ; zPos: -3.6 } + ListElement{ xPos: -1.9 ; yPos: 1.88 ; zPos: 2.1 } + ListElement{ xPos: -2.85 ; yPos: -2.28 ; zPos: -1.55 } + ListElement{ xPos: -1.3 ; yPos: -0.48 ; zPos: -2.2 } + ListElement{ xPos: 0.5 ; yPos: 0.28 ; zPos: 0.65 } + ListElement{ xPos: -1.1 ; yPos: 0.24 ; zPos: -2.25 } + ListElement{ xPos: 1.75 ; yPos: -1.4 ; zPos: 0.3 } + ListElement{ xPos: 1.5 ; yPos: -1.32 ; zPos: -2.8 } + ListElement{ xPos: -0.95 ; yPos: 2.08 ; zPos: -0.3 } + ListElement{ xPos: 2.75 ; yPos: 0.24 ; zPos: 0.75 } + ListElement{ xPos: 0.75 ; yPos: 0.56 ; zPos: -1.5 } + ListElement{ xPos: 1.1 ; yPos: -3.76 ; zPos: 0 } + ListElement{ xPos: 0.3 ; yPos: -1.2 ; zPos: 2.6 } + ListElement{ xPos: -0.25 ; yPos: 2.68 ; zPos: -3 } + ListElement{ xPos: 1.8 ; yPos: -0.76 ; zPos: 4.4 } + ListElement{ xPos: 0 ; yPos: 0 ; zPos: -1.9 } + ListElement{ xPos: -1.6 ; yPos: -0.12 ; zPos: -2.4 } + ListElement{ xPos: -1.25 ; yPos: 2.36 ; zPos: -2.9 } + ListElement{ xPos: 2.65 ; yPos: 0.04 ; zPos: 0.1 } + ListElement{ xPos: -3.35 ; yPos: 0.08 ; zPos: -1.3 } + ListElement{ xPos: 3.35 ; yPos: 0.04 ; zPos: 2.8 } + ListElement{ xPos: 4.45 ; yPos: 1.24 ; zPos: -0.95 } + ListElement{ xPos: -0.1 ; yPos: -1.52 ; zPos: -4.6 } + ListElement{ xPos: 1.1 ; yPos: 1.72 ; zPos: -3.2 } + ListElement{ xPos: -0.45 ; yPos: 1.92 ; zPos: 1.2 } + ListElement{ xPos: -0.7 ; yPos: -0.16 ; zPos: 0.8 } + ListElement{ xPos: 2.3 ; yPos: 0.2 ; zPos: 2.75 } + ListElement{ xPos: 1.7 ; yPos: 2.08 ; zPos: -0.95 } + ListElement{ xPos: 2.1 ; yPos: 1.56 ; zPos: 1.2 } + ListElement{ xPos: 3.05 ; yPos: -1.56 ; zPos: -0.45 } + ListElement{ xPos: 0.1 ; yPos: -3.08 ; zPos: -1.3 } + ListElement{ xPos: 1.65 ; yPos: -0.32 ; zPos: -0.8 } + ListElement{ xPos: 2.05 ; yPos: -1.8 ; zPos: 1.8 } + ListElement{ xPos: -0.55 ; yPos: 1.52 ; zPos: -0.8 } + ListElement{ xPos: -2.05 ; yPos: 1.52 ; zPos: 2.3 } + ListElement{ xPos: -2.35 ; yPos: -3.28 ; zPos: 3.5 } + ListElement{ xPos: -2.25 ; yPos: 2.56 ; zPos: -1.9 } + ListElement{ xPos: 0.3 ; yPos: -3.28 ; zPos: 3.4 } + ListElement{ xPos: 0.95 ; yPos: -1.68 ; zPos: -1.8 } + ListElement{ xPos: 2 ; yPos: 2.2 ; zPos: -0.05 } + ListElement{ xPos: 3 ; yPos: 2.92 ; zPos: -2.1 } + ListElement{ xPos: 2.55 ; yPos: 3.12 ; zPos: 2.95 } + ListElement{ xPos: -0.5 ; yPos: -2.8 ; zPos: -0.3 } + ListElement{ xPos: 0.35 ; yPos: 0.64 ; zPos: 0.35 } + ListElement{ xPos: -1.15 ; yPos: -0.16 ; zPos: -0.45 } + ListElement{ xPos: -2.4 ; yPos: -0.88 ; zPos: -0.3 } + ListElement{ xPos: 1.55 ; yPos: -1.48 ; zPos: -0.5 } + ListElement{ xPos: -0.85 ; yPos: -2.08 ; zPos: -1.1 } + ListElement{ xPos: 0.5 ; yPos: -0.8 ; zPos: 1.35 } + ListElement{ xPos: -2.15 ; yPos: 1.04 ; zPos: -3.25 } + ListElement{ xPos: -0.65 ; yPos: -1.32 ; zPos: -3.1 } + ListElement{ xPos: 0.35 ; yPos: -0.84 ; zPos: -1.7 } + ListElement{ xPos: -2.1 ; yPos: 0.96 ; zPos: 2.5 } + ListElement{ xPos: 1 ; yPos: -0.6 ; zPos: -3.15 } + ListElement{ xPos: -1.35 ; yPos: 0.76 ; zPos: 3.45 } + ListElement{ xPos: -3.05 ; yPos: -1.2 ; zPos: 1.45 } + ListElement{ xPos: -1.6 ; yPos: 0.8 ; zPos: -1.9 } + ListElement{ xPos: 0.7 ; yPos: 1.68 ; zPos: 2.3 } + ListElement{ xPos: 0 ; yPos: -0.76 ; zPos: -0.95 } + ListElement{ xPos: -2.3 ; yPos: -0.16 ; zPos: -1.25 } + ListElement{ xPos: -0.55 ; yPos: -2.28 ; zPos: 1.5 } + ListElement{ xPos: 0 ; yPos: -0.24 ; zPos: 0.55 } + ListElement{ xPos: -0.4 ; yPos: -0.92 ; zPos: -0.7 } + ListElement{ xPos: -2.6 ; yPos: -1.64 ; zPos: -0.9 } + ListElement{ xPos: 0.25 ; yPos: -1.24 ; zPos: 0.9 } + ListElement{ xPos: 0.7 ; yPos: 2.88 ; zPos: 0.4 } + ListElement{ xPos: -0.6 ; yPos: -1.84 ; zPos: -2.4 } + ListElement{ xPos: 0.5 ; yPos: 2.8 ; zPos: 1.6 } + ListElement{ xPos: -3.2 ; yPos: 3.28 ; zPos: -3.45 } + ListElement{ xPos: -1.45 ; yPos: 2.52 ; zPos: 2.7 } + ListElement{ xPos: 1 ; yPos: -2.68 ; zPos: 3 } + ListElement{ xPos: -0.6 ; yPos: -2.56 ; zPos: 1.35 } + ListElement{ xPos: 1.95 ; yPos: -1.48 ; zPos: -3.85 } + ListElement{ xPos: 3.85 ; yPos: 0.08 ; zPos: -1.65 } + ListElement{ xPos: -1.1 ; yPos: -1.6 ; zPos: -1.05 } + ListElement{ xPos: 1.25 ; yPos: -0.04 ; zPos: 1.35 } + ListElement{ xPos: 2.9 ; yPos: 2.08 ; zPos: 0.2 } + ListElement{ xPos: 0.7 ; yPos: 2.52 ; zPos: 0.65 } + ListElement{ xPos: -1.85 ; yPos: -1.8 ; zPos: 1.05 } + ListElement{ xPos: 1.6 ; yPos: 1.12 ; zPos: -3.05 } + ListElement{ xPos: -2.8 ; yPos: 0.12 ; zPos: 0.5 } + ListElement{ xPos: -1.4 ; yPos: 1.64 ; zPos: -1.95 } + ListElement{ xPos: 2.35 ; yPos: 0.4 ; zPos: -0.95 } + ListElement{ xPos: 0.95 ; yPos: -0.28 ; zPos: -0.8 } + ListElement{ xPos: -1.5 ; yPos: -1.76 ; zPos: 2.5 } + ListElement{ xPos: -3.05 ; yPos: 2.44 ; zPos: -0.2 } + ListElement{ xPos: -0.6 ; yPos: 1.12 ; zPos: -0.5 } + ListElement{ xPos: -1.7 ; yPos: -0.72 ; zPos: -1.05 } + ListElement{ xPos: 0.45 ; yPos: 0.84 ; zPos: -0.1 } + ListElement{ xPos: -3.5 ; yPos: 0.36 ; zPos: 1.1 } + ListElement{ xPos: 0.2 ; yPos: -2.08 ; zPos: 0.25 } + ListElement{ xPos: -2.1 ; yPos: 0.72 ; zPos: 0.85 } + ListElement{ xPos: -2.45 ; yPos: -0.72 ; zPos: -0.8 } + ListElement{ xPos: 4.25 ; yPos: 1.84 ; zPos: -0.55 } + ListElement{ xPos: 0.1 ; yPos: -1.32 ; zPos: -1.45 } + ListElement{ xPos: -3.65 ; yPos: 0.36 ; zPos: 0.3 } + ListElement{ xPos: 0.9 ; yPos: 0.32 ; zPos: -3.6 } + ListElement{ xPos: -0.25 ; yPos: 1.84 ; zPos: 0 } + ListElement{ xPos: 3.5 ; yPos: 0.92 ; zPos: -2.1 } + ListElement{ xPos: 0.65 ; yPos: 2.36 ; zPos: 4 } + ListElement{ xPos: 0.55 ; yPos: -1.08 ; zPos: 0.2 } + ListElement{ xPos: 1 ; yPos: 0.04 ; zPos: -3.75 } + ListElement{ xPos: 0.05 ; yPos: 0.52 ; zPos: -3.8 } + ListElement{ xPos: 3.45 ; yPos: 0.56 ; zPos: 4.2 } + ListElement{ xPos: -0.25 ; yPos: 2.36 ; zPos: -3.55 } + ListElement{ xPos: 1.95 ; yPos: 1.28 ; zPos: 4.25 } + ListElement{ xPos: 1.8 ; yPos: 3.12 ; zPos: 0.65 } + ListElement{ xPos: -3.35 ; yPos: 0.8 ; zPos: -1 } + ListElement{ xPos: 2.4 ; yPos: -0.16 ; zPos: 1.25 } + ListElement{ xPos: 2.5 ; yPos: 0.96 ; zPos: 1.45 } + ListElement{ xPos: 0.8 ; yPos: -0.16 ; zPos: -0.55 } + ListElement{ xPos: -3.45 ; yPos: -0.08 ; zPos: 0.85 } + ListElement{ xPos: -3.4 ; yPos: 0.8 ; zPos: 1.35 } + ListElement{ xPos: -0.8 ; yPos: 0.24 ; zPos: -1.2 } + ListElement{ xPos: 3.6 ; yPos: 1.16 ; zPos: -0.1 } + ListElement{ xPos: -1.45 ; yPos: -3.08 ; zPos: -0.3 } + ListElement{ xPos: -3.65 ; yPos: -1.04 ; zPos: 0.15 } + ListElement{ xPos: 1.35 ; yPos: -0.76 ; zPos: 0.55 } + ListElement{ xPos: -2.75 ; yPos: -1 ; zPos: -1.55 } + ListElement{ xPos: 1.6 ; yPos: 2.04 ; zPos: 0.9 } + ListElement{ xPos: 3 ; yPos: -3.24 ; zPos: 0.1 } + ListElement{ xPos: -4.25 ; yPos: 0.56 ; zPos: -4.35 } + ListElement{ xPos: -2.6 ; yPos: -0.44 ; zPos: 0.5 } + ListElement{ xPos: 0.2 ; yPos: -0.64 ; zPos: -0.35 } + ListElement{ xPos: -3.2 ; yPos: -3.52 ; zPos: 1 } + ListElement{ xPos: -0.7 ; yPos: -1.84 ; zPos: -2.45 } + ListElement{ xPos: -4.1 ; yPos: 0.12 ; zPos: 3.85 } + ListElement{ xPos: -4.05 ; yPos: 0.04 ; zPos: -0.3 } + ListElement{ xPos: 2 ; yPos: 2.32 ; zPos: 1.2 } + ListElement{ xPos: -0.35 ; yPos: 1 ; zPos: -0.7 } + ListElement{ xPos: -0.9 ; yPos: 0.36 ; zPos: 1.55 } + ListElement{ xPos: -0.05 ; yPos: 2.4 ; zPos: -4.35 } + ListElement{ xPos: 1.5 ; yPos: -0.96 ; zPos: -3.4 } + ListElement{ xPos: -2.8 ; yPos: 2.08 ; zPos: -1.75 } + ListElement{ xPos: -0.2 ; yPos: 0.72 ; zPos: 0.9 } + ListElement{ xPos: -1.1 ; yPos: -1.68 ; zPos: 0.1 } + ListElement{ xPos: -1.2 ; yPos: -0.32 ; zPos: -0.85 } + ListElement{ xPos: 0.75 ; yPos: 0.56 ; zPos: 3.95 } + ListElement{ xPos: 1.15 ; yPos: 2.8 ; zPos: 0.65 } + ListElement{ xPos: -2.55 ; yPos: -2.56 ; zPos: 0.75 } + ListElement{ xPos: 0.95 ; yPos: 0.84 ; zPos: -0.85 } + ListElement{ xPos: -2.15 ; yPos: 0.24 ; zPos: -3.1 } + ListElement{ xPos: 0.35 ; yPos: -1.68 ; zPos: 0.45 } + ListElement{ xPos: -0.75 ; yPos: -2.4 ; zPos: -0.35 } + ListElement{ xPos: 0.2 ; yPos: 2.04 ; zPos: 0.1 } + ListElement{ xPos: -2.4 ; yPos: 0.68 ; zPos: 1.8 } + ListElement{ xPos: 1.9 ; yPos: 0.88 ; zPos: 1.45 } + ListElement{ xPos: 0.25 ; yPos: 1.92 ; zPos: -1.7 } + ListElement{ xPos: -0.95 ; yPos: -0.6 ; zPos: -2 } + ListElement{ xPos: 0.2 ; yPos: -2.44 ; zPos: 1.05 } + ListElement{ xPos: 0.3 ; yPos: -0.6 ; zPos: -3.35 } + ListElement{ xPos: 0.05 ; yPos: 0.52 ; zPos: -3.3 } + ListElement{ xPos: -0.05 ; yPos: -0.88 ; zPos: -0.8 } + ListElement{ xPos: 0.45 ; yPos: 2.84 ; zPos: -1.9 } + ListElement{ xPos: 2.85 ; yPos: -0.68 ; zPos: -2.45 } + ListElement{ xPos: -1.05 ; yPos: -1.92 ; zPos: 0.9 } + ListElement{ xPos: -2.75 ; yPos: -0.16 ; zPos: -1.55 } + ListElement{ xPos: 1.9 ; yPos: 1 ; zPos: 3.15 } + ListElement{ xPos: -2.25 ; yPos: 0.8 ; zPos: -4.35 } + ListElement{ xPos: 1.8 ; yPos: -0.72 ; zPos: -3.8 } + ListElement{ xPos: -3.25 ; yPos: -1.16 ; zPos: -1.85 } + ListElement{ xPos: -1.6 ; yPos: -2.32 ; zPos: -0.8 } + ListElement{ xPos: 3.1 ; yPos: 0.32 ; zPos: 2.15 } + ListElement{ xPos: -1.05 ; yPos: -0.56 ; zPos: -3.45 } + ListElement{ xPos: 0.75 ; yPos: -1.08 ; zPos: -0.25 } + ListElement{ xPos: -0.45 ; yPos: -2.24 ; zPos: 2.5 } + ListElement{ xPos: 0.2 ; yPos: 0.12 ; zPos: 0 } + ListElement{ xPos: -1 ; yPos: 1.56 ; zPos: -1.6 } + ListElement{ xPos: 1.3 ; yPos: -2.84 ; zPos: -0.25 } + ListElement{ xPos: 0.55 ; yPos: 1.36 ; zPos: 2.95 } + ListElement{ xPos: -1.9 ; yPos: -0.88 ; zPos: 0.05 } + ListElement{ xPos: -1.9 ; yPos: 0.56 ; zPos: -0.7 } + ListElement{ xPos: -1.25 ; yPos: -0.52 ; zPos: 2.35 } + ListElement{ xPos: 2.1 ; yPos: -0.72 ; zPos: -1.4 } + ListElement{ xPos: -0.9 ; yPos: -0.72 ; zPos: -2.05 } + ListElement{ xPos: 0.9 ; yPos: -0.96 ; zPos: -3 } + ListElement{ xPos: 2.7 ; yPos: -2.36 ; zPos: 1.25 } + ListElement{ xPos: 3.3 ; yPos: -1 ; zPos: -3.55 } + ListElement{ xPos: -0.75 ; yPos: -1.96 ; zPos: 2 } + ListElement{ xPos: -0.45 ; yPos: 0.52 ; zPos: -0.1 } + ListElement{ xPos: 0.8 ; yPos: 0 ; zPos: -3.3 } + ListElement{ xPos: -0.45 ; yPos: -0.44 ; zPos: -2.8 } + ListElement{ xPos: -3.2 ; yPos: 3.12 ; zPos: 0.5 } + ListElement{ xPos: -3.1 ; yPos: 2.84 ; zPos: -0.45 } + ListElement{ xPos: 0.2 ; yPos: -1.2 ; zPos: 0.9 } + ListElement{ xPos: -0.65 ; yPos: -1.4 ; zPos: -1.35 } + ListElement{ xPos: -0.45 ; yPos: 1.84 ; zPos: -0.95 } + ListElement{ xPos: -1.3 ; yPos: 0.8 ; zPos: -1 } + ListElement{ xPos: 2.35 ; yPos: -0.28 ; zPos: 1.55 } + ListElement{ xPos: 2 ; yPos: -2.4 ; zPos: 1.2 } + ListElement{ xPos: 1.2 ; yPos: -1.72 ; zPos: -0.4 } + ListElement{ xPos: -2 ; yPos: 3.04 ; zPos: 1.9 } + ListElement{ xPos: -1.85 ; yPos: -0.16 ; zPos: -2.9 } + ListElement{ xPos: -0.95 ; yPos: -2.76 ; zPos: 2.5 } + ListElement{ xPos: 2.55 ; yPos: -0.64 ; zPos: 3.25 } + ListElement{ xPos: -0.6 ; yPos: -0.72 ; zPos: -1.45 } + ListElement{ xPos: 0.8 ; yPos: 0.16 ; zPos: 2.2 } + ListElement{ xPos: 0.6 ; yPos: 0.04 ; zPos: 3.2 } + ListElement{ xPos: -3.75 ; yPos: -0.24 ; zPos: 0.2 } + ListElement{ xPos: 0.4 ; yPos: -0.32 ; zPos: 0.6 } + ListElement{ xPos: -2.1 ; yPos: -3.68 ; zPos: 0.2 } + ListElement{ xPos: 0.45 ; yPos: -2.44 ; zPos: 3 } + ListElement{ xPos: 0.5 ; yPos: -1.8 ; zPos: -1.9 } + ListElement{ xPos: 0 ; yPos: 1.8 ; zPos: -1.25 } + ListElement{ xPos: 2.6 ; yPos: 2.2 ; zPos: -4.25 } + ListElement{ xPos: 0.25 ; yPos: 2.28 ; zPos: -0.4 } + ListElement{ xPos: -0.3 ; yPos: -1.24 ; zPos: 0.7 } + ListElement{ xPos: 0.1 ; yPos: -3 ; zPos: 0.05 } + ListElement{ xPos: -1.2 ; yPos: -0.76 ; zPos: 2.65 } + ListElement{ xPos: 2.8 ; yPos: 0.44 ; zPos: 0.55 } + ListElement{ xPos: 2.6 ; yPos: -0.68 ; zPos: 0.2 } + ListElement{ xPos: 1.75 ; yPos: -0.16 ; zPos: -3.6 } + ListElement{ xPos: -0.55 ; yPos: -0.16 ; zPos: 2.3 } + ListElement{ xPos: 0.1 ; yPos: -1.72 ; zPos: -0.4 } + ListElement{ xPos: 3.6 ; yPos: -0.84 ; zPos: -0.2 } + ListElement{ xPos: -1.4 ; yPos: -1.48 ; zPos: -2.7 } + ListElement{ xPos: 1.1 ; yPos: -0.2 ; zPos: -2.75 } + ListElement{ xPos: -1.85 ; yPos: 1.76 ; zPos: -0.85 } + ListElement{ xPos: 0.05 ; yPos: -0.4 ; zPos: 1.05 } + ListElement{ xPos: -1.25 ; yPos: 0.52 ; zPos: -0.3 } + ListElement{ xPos: -0.85 ; yPos: -0.24 ; zPos: 1.9 } + ListElement{ xPos: -1.95 ; yPos: -0.08 ; zPos: -1.95 } + ListElement{ xPos: -2.7 ; yPos: -0.52 ; zPos: -0.35 } + ListElement{ xPos: 0.1 ; yPos: 0.16 ; zPos: 4.1 } + ListElement{ xPos: -0.6 ; yPos: -0.52 ; zPos: -1.2 } + ListElement{ xPos: -2.3 ; yPos: -0.4 ; zPos: -2.85 } + ListElement{ xPos: -0.35 ; yPos: -1.2 ; zPos: -1.85 } + ListElement{ xPos: 1.7 ; yPos: -0.2 ; zPos: 3.35 } + ListElement{ xPos: 2.75 ; yPos: -2.32 ; zPos: 3.15 } + ListElement{ xPos: 2.85 ; yPos: 0.44 ; zPos: 0.9 } + ListElement{ xPos: -2.1 ; yPos: 0.4 ; zPos: 1 } + ListElement{ xPos: 4.45 ; yPos: -0.4 ; zPos: -3.75 } + ListElement{ xPos: 0.7 ; yPos: -1.44 ; zPos: 0.85 } + ListElement{ xPos: -0.85 ; yPos: 1.76 ; zPos: 1.05 } + ListElement{ xPos: -0.4 ; yPos: -0.92 ; zPos: -2.4 } + ListElement{ xPos: -1 ; yPos: -0.28 ; zPos: -1.6 } + ListElement{ xPos: -0.75 ; yPos: 0.56 ; zPos: -0.75 } + ListElement{ xPos: 0.55 ; yPos: 1.72 ; zPos: -0.2 } + ListElement{ xPos: 2.75 ; yPos: -0.24 ; zPos: -0.5 } + ListElement{ xPos: -2.2 ; yPos: -1.04 ; zPos: -4.05 } + ListElement{ xPos: 3.35 ; yPos: -0.56 ; zPos: -2.9 } + ListElement{ xPos: 2.4 ; yPos: -0.32 ; zPos: -1.55 } + ListElement{ xPos: 0.85 ; yPos: -0.88 ; zPos: -2.1 } + ListElement{ xPos: 0.4 ; yPos: 0.24 ; zPos: -0.45 } + ListElement{ xPos: -4.1 ; yPos: -0.72 ; zPos: 0.35 } + ListElement{ xPos: -0.5 ; yPos: 0.04 ; zPos: -0.95 } + ListElement{ xPos: -2.8 ; yPos: 2.92 ; zPos: 0.95 } + ListElement{ xPos: -1.65 ; yPos: 0.96 ; zPos: 1.25 } + ListElement{ xPos: 1.45 ; yPos: 0.84 ; zPos: 0.25 } + ListElement{ xPos: 2.2 ; yPos: -1.76 ; zPos: 0 } + ListElement{ xPos: -0.75 ; yPos: 1.08 ; zPos: -2.1 } + ListElement{ xPos: -3.15 ; yPos: -0.16 ; zPos: -1.1 } + ListElement{ xPos: 2.55 ; yPos: -1.6 ; zPos: 1.1 } + ListElement{ xPos: 0.15 ; yPos: 1.84 ; zPos: 0.4 } + ListElement{ xPos: -1.5 ; yPos: 2.04 ; zPos: 3.2 } + ListElement{ xPos: -1.05 ; yPos: -0.84 ; zPos: -1.9 } + ListElement{ xPos: 0.1 ; yPos: -2.96 ; zPos: -0.2 } + ListElement{ xPos: 2.6 ; yPos: 0.68 ; zPos: -2.6 } + ListElement{ xPos: -0.4 ; yPos: -0.36 ; zPos: -1.05 } + ListElement{ xPos: 1.1 ; yPos: 0.04 ; zPos: -2.4 } + ListElement{ xPos: -2.3 ; yPos: 1.4 ; zPos: -0.1 } + ListElement{ xPos: 0.85 ; yPos: -1.2 ; zPos: 1.5 } + ListElement{ xPos: 0.1 ; yPos: 0.24 ; zPos: -2.75 } + ListElement{ xPos: 1.15 ; yPos: 1.32 ; zPos: -1.7 } + ListElement{ xPos: 0.35 ; yPos: -1.6 ; zPos: -2.75 } + ListElement{ xPos: 0.35 ; yPos: -1.36 ; zPos: 2.55 } + ListElement{ xPos: -1.65 ; yPos: -0.28 ; zPos: 2.75 } + ListElement{ xPos: -3.8 ; yPos: -3.28 ; zPos: 2.55 } + ListElement{ xPos: -2.6 ; yPos: 1.08 ; zPos: -0.45 } + ListElement{ xPos: 1.6 ; yPos: -2.2 ; zPos: 2.45 } + ListElement{ xPos: -0.75 ; yPos: 1.16 ; zPos: -1.9 } + ListElement{ xPos: -2.05 ; yPos: 3.04 ; zPos: 1.9 } + ListElement{ xPos: -0.6 ; yPos: 2.88 ; zPos: 1 } + ListElement{ xPos: 3.25 ; yPos: -2 ; zPos: -0.35 } + ListElement{ xPos: -0.7 ; yPos: 1.36 ; zPos: 1.85 } + ListElement{ xPos: 0.85 ; yPos: 1.08 ; zPos: 0.95 } + ListElement{ xPos: 1.15 ; yPos: 1.32 ; zPos: 3.4 } + ListElement{ xPos: 3.6 ; yPos: 0.44 ; zPos: -0.4 } + ListElement{ xPos: 0.9 ; yPos: 2.12 ; zPos: 1.95 } + ListElement{ xPos: -0.6 ; yPos: -0.24 ; zPos: 1.05 } + ListElement{ xPos: -1.6 ; yPos: 0.64 ; zPos: -1.3 } + ListElement{ xPos: -1.3 ; yPos: -0.6 ; zPos: -1.95 } + ListElement{ xPos: -0.1 ; yPos: 0.36 ; zPos: -1.25 } + ListElement{ xPos: 1 ; yPos: -1.48 ; zPos: 0.95 } + ListElement{ xPos: 1.2 ; yPos: -1.92 ; zPos: -0.9 } + ListElement{ xPos: 0.1 ; yPos: 2.2 ; zPos: -0.4 } + ListElement{ xPos: -2.85 ; yPos: 0.64 ; zPos: 0.55 } + ListElement{ xPos: -1.6 ; yPos: 2.56 ; zPos: -2.2 } + ListElement{ xPos: -3.2 ; yPos: -0.08 ; zPos: -0.65 } + ListElement{ xPos: 3.15 ; yPos: -0.76 ; zPos: 1.15 } + ListElement{ xPos: 1.2 ; yPos: 0.6 ; zPos: -2.6 } + ListElement{ xPos: 2.65 ; yPos: -3.52 ; zPos: 1.5 } + ListElement{ xPos: -1.85 ; yPos: -1.76 ; zPos: -1.7 } + ListElement{ xPos: -1.55 ; yPos: 1.2 ; zPos: 2.15 } + ListElement{ xPos: -0.55 ; yPos: 2.88 ; zPos: -2.85 } + ListElement{ xPos: -3.1 ; yPos: -0.28 ; zPos: -3.35 } + ListElement{ xPos: 2.45 ; yPos: 0.08 ; zPos: -2.2 } + ListElement{ xPos: -2.05 ; yPos: 0.88 ; zPos: -0.65 } + ListElement{ xPos: 1.1 ; yPos: -0.56 ; zPos: -3.65 } + ListElement{ xPos: -0.5 ; yPos: -0.68 ; zPos: 0.3 } + ListElement{ xPos: 0.4 ; yPos: 0.88 ; zPos: -1.65 } + ListElement{ xPos: 1.65 ; yPos: 0.16 ; zPos: 0.75 } + ListElement{ xPos: -0.2 ; yPos: 1.72 ; zPos: 0.6 } + ListElement{ xPos: 1.15 ; yPos: -0.48 ; zPos: 0.1 } + ListElement{ xPos: 0.05 ; yPos: 1.04 ; zPos: 2.15 } + ListElement{ xPos: 0.15 ; yPos: -0.64 ; zPos: -1.3 } + ListElement{ xPos: 1.7 ; yPos: -1.88 ; zPos: -2.85 } + ListElement{ xPos: 3.35 ; yPos: 1.28 ; zPos: -1.05 } + ListElement{ xPos: -3.7 ; yPos: -2.88 ; zPos: -1.05 } + ListElement{ xPos: -1.7 ; yPos: 3.08 ; zPos: 0.15 } + ListElement{ xPos: 3 ; yPos: -2.52 ; zPos: -2.45 } + ListElement{ xPos: -0.15 ; yPos: 0.16 ; zPos: -0.3 } + ListElement{ xPos: -2.15 ; yPos: -0.8 ; zPos: 1.25 } + ListElement{ xPos: -1.95 ; yPos: -0.84 ; zPos: -3.1 } + ListElement{ xPos: -0.2 ; yPos: -0.8 ; zPos: -3.55 } + ListElement{ xPos: 0.4 ; yPos: 0.32 ; zPos: -1.55 } + ListElement{ xPos: 1.9 ; yPos: -2.84 ; zPos: -0.55 } + ListElement{ xPos: 1.05 ; yPos: 1.32 ; zPos: 0.6 } + ListElement{ xPos: 2.4 ; yPos: 1 ; zPos: 2.35 } + ListElement{ xPos: -0.7 ; yPos: 0.28 ; zPos: -1.3 } + ListElement{ xPos: 0.85 ; yPos: 0.96 ; zPos: -2.7 } + ListElement{ xPos: -0.85 ; yPos: -0.88 ; zPos: 1.1 } + ListElement{ xPos: 1.5 ; yPos: 0.28 ; zPos: -3.1 } + ListElement{ xPos: 1.9 ; yPos: 0.28 ; zPos: -1.75 } + ListElement{ xPos: 0.2 ; yPos: -2.04 ; zPos: -0.85 } + ListElement{ xPos: -1.5 ; yPos: 2.04 ; zPos: -1.35 } + ListElement{ xPos: -0.7 ; yPos: 1.24 ; zPos: 1.95 } + ListElement{ xPos: 1.65 ; yPos: -1.04 ; zPos: -0.95 } + ListElement{ xPos: -2.35 ; yPos: -1.76 ; zPos: -0.2 } + ListElement{ xPos: 0.85 ; yPos: -2.92 ; zPos: 3.4 } + ListElement{ xPos: -0.7 ; yPos: 2.52 ; zPos: 1 } + ListElement{ xPos: -3.4 ; yPos: 0.6 ; zPos: 0.9 } + } + + ListModel { + id: dataModelThree + ListElement{ xPos: 8.0; yPos: -2.0; zPos: 4.0 } + ListElement{ xPos: 7.8; yPos: -2.2; zPos: 5.0 } + ListElement{ xPos: 7.6; yPos: -2.4; zPos: 4.5 } + ListElement{ xPos: 9.4; yPos: -2.6; zPos: 3.8 } + ListElement{ xPos: 7.2; yPos: -2.8; zPos: 4.8 } + ListElement{ xPos: 9.0; yPos: -2.3; zPos: 4.1 } + ListElement{ xPos: 6.9; yPos: -3.3; zPos: 4.9 } + ListElement{ xPos: 6.7; yPos: -3.5; zPos: 3.5 } + ListElement{ xPos: 6.5; yPos: -3.7; zPos: 3.3 } + ListElement{ xPos: 6.3; yPos: -3.4; zPos: 3.7 } + ListElement{ xPos: 7.9 ; yPos: -3.32 ; zPos: 2.48 } + ListElement{ xPos: 6.2 ; yPos: -4.04 ; zPos: 3.4 } + ListElement{ xPos: 9.06 ; yPos: -4.6 ; zPos: 4.08 } + ListElement{ xPos: 5.98 ; yPos: -2.26 ; zPos: 2.82 } + ListElement{ xPos: 5.46 ; yPos: -3.9 ; zPos: 3.2 } + ListElement{ xPos: 8.14 ; yPos: -3.34 ; zPos: 3.42 } + ListElement{ xPos: 6.84 ; yPos: -5.0 ; zPos: 2.36 } + ListElement{ xPos: 7.6 ; yPos: -3.82 ; zPos: 2.78 } + ListElement{ xPos: 7.1 ; yPos: -3.94 ; zPos: 2.7 } + ListElement{ xPos: 6.02 ; yPos: -4.36 ; zPos: 2.56 } + ListElement{ xPos: 8.64 ; yPos: -3.04 ; zPos: 2.62 } + ListElement{ xPos: 7.82 ; yPos: -3.68 ; zPos: 2.96 } + ListElement{ xPos: 7.1 ; yPos: -3.6 ; zPos: 4.22 } + ListElement{ xPos: 8.6 ; yPos: -3.88 ; zPos: 3.9 } + ListElement{ xPos: 8.46 ; yPos: -4.2 ; zPos: 3.32 } + ListElement{ xPos: 6.98 ; yPos: -3.94 ; zPos: 3.1 } + ListElement{ xPos: 7.36 ; yPos: -4.24 ; zPos: 1.72 } + ListElement{ xPos: 9.42 ; yPos: -4.52 ; zPos: 2.62 } + ListElement{ xPos: 6.04 ; yPos: -4.48 ; zPos: 2.74 } + ListElement{ xPos: 10.0 ; yPos: -3.92 ; zPos: 3.82 } + ListElement{ xPos: 6.76 ; yPos: -3.5 ; zPos: 2.92 } + ListElement{ xPos: 7 ; yPos: -4.42 ; zPos: 2.62 } + ListElement{ xPos: 5.32 ; yPos: -3.28 ; zPos: 3.34 } + ListElement{ xPos: 6.4 ; yPos: -4.6 ; zPos: 2.4 } + ListElement{ xPos: 5.66 ; yPos: -4.98 ; zPos: 3.72 } + } +} diff --git a/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml b/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..beb4ccaa --- /dev/null +++ b/examples/datavisualization/qmlscatter/qml/qmlscatter/main.qml @@ -0,0 +1,229 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +//! [0] +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." +//! [0] + +//! [1] +Item { + id: mainView + //! [1] + + //! [4] + Data { + id: seriesData + } + //! [4] + + //! [13] + Theme3D { + id: themeIsabelle + type: Theme3D.ThemeIsabelle + font.family: "Lucida Handwriting" + font.pointSize: 40 + } + //! [13] + + Theme3D { + id: themeArmyBlue + type: Theme3D.ThemeArmyBlue + } + + //! [8] + //! [9] + Item { + id: dataView + anchors.bottom: parent.bottom + //! [9] + width: parent.width + height: parent.height - buttonLayout.height + //! [8] + + //! [2] + Scatter3D { + id: scatterGraph + width: dataView.width + height: dataView.height + //! [2] + //! [3] + theme: themeIsabelle + shadowQuality: AbstractGraph3D.ShadowQualitySoftLow + //! [3] + //! [6] + axisX.segmentCount: 3 + axisX.subSegmentCount: 2 + axisX.labelFormat: "%.2f" + axisZ.segmentCount: 2 + axisZ.subSegmentCount: 2 + axisZ.labelFormat: "%.2f" + axisY.segmentCount: 2 + axisY.subSegmentCount: 2 + axisY.labelFormat: "%.2f" + //! [6] + //! [5] + Scatter3DSeries { + id: scatterSeries + //! [5] + //! [10] + itemLabelFormat: "Series 1: X:@xLabel Y:@yLabel Z:@zLabel" + //! [10] + + //! [11] + ItemModelScatterDataProxy { + itemModel: seriesData.model + xPosRole: "xPos" + yPosRole: "yPos" + zPosRole: "zPos" + } + //! [11] + } + + //! [12] + Scatter3DSeries { + id: scatterSeriesTwo + itemLabelFormat: "Series 2: X:@xLabel Y:@yLabel Z:@zLabel" + itemSize: 0.1 + mesh: Abstract3DSeries.MeshCube + //! [12] + + ItemModelScatterDataProxy { + itemModel: seriesData.modelTwo + xPosRole: "xPos" + yPosRole: "yPos" + zPosRole: "zPos" + } + } + Scatter3DSeries { + id: scatterSeriesThree + itemLabelFormat: "Series 3: X:@xLabel Y:@yLabel Z:@zLabel" + itemSize: 0.2 + mesh: Abstract3DSeries.MeshMinimal + + ItemModelScatterDataProxy { + itemModel: seriesData.modelThree + xPosRole: "xPos" + yPosRole: "yPos" + zPosRole: "zPos" + } + } + } + } + + RowLayout { + id: buttonLayout + Layout.minimumHeight: cameraToggle.height + width: parent.width + anchors.left: parent.left + spacing: 0 + //! [7] + NewButton { + id: shadowToggle + Layout.fillHeight: true + Layout.fillWidth: true + text: "Hide Shadows" + onClicked: { + if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) { + scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftLow; + 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; + } + } + } + + 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; + } + } + } + + 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"; + } + } + } + + 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"; + } + } + } + + NewButton { + id: exitButton + Layout.fillHeight: true + Layout.fillWidth: true + text: "Quit" + onClicked: Qt.quit(0); + } + } +} diff --git a/examples/datavisualization/qmlscatter/qmlscatter.desktop b/examples/datavisualization/qmlscatter/qmlscatter.desktop new file mode 100644 index 00000000..0f9e5498 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qmlscatter.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlscatter +Exec=/opt/qmlscatter/bin/qmlscatter +Icon=qmlscatter64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlscatter/qmlscatter.pro b/examples/datavisualization/qmlscatter/qmlscatter.pro new file mode 100644 index 00000000..166b26a0 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qmlscatter.pro @@ -0,0 +1,20 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlscatter +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmlscatter.qrc diff --git a/examples/datavisualization/qmlscatter/qmlscatter.qrc b/examples/datavisualization/qmlscatter/qmlscatter.qrc new file mode 100644 index 00000000..225d78b0 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qmlscatter.qrc @@ -0,0 +1,7 @@ + + + qml/qmlscatter/Data.qml + qml/qmlscatter/main.qml + qml/qmlscatter/NewButton.qml + + diff --git a/examples/datavisualization/qmlscatter/qmlscatter64.png b/examples/datavisualization/qmlscatter/qmlscatter64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlscatter/qmlscatter64.png differ diff --git a/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png b/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png new file mode 100644 index 00000000..d8d394fa Binary files /dev/null and b/examples/datavisualization/qmlsurface/doc/images/qmlsurface-example.png differ diff --git a/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc b/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc new file mode 100644 index 00000000..00ef03d4 --- /dev/null +++ b/examples/datavisualization/qmlsurface/doc/src/qmlsurface.qdoc @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/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 ../examples/qmlsurface/qml/qmlsurface/Data.qml 0 + \dots 4 + + Then we set up a Surface3DSeries with a ItemModelSurfaceDataProxy: + + \snippet ../examples/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 ../examples/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 ../examples/qmlsurface/qml/qmlsurface/main.qml 0 + + This element is set into the \c baseGradients property in the \c theme used in Surface3D: + + \snippet ../examples/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 ../examples/qmlsurface/qml/qmlsurface/main.qml 1 + + Second button is for surface shading mode, which is controlled with this code: + + \snippet ../examples/qmlsurface/qml/qmlsurface/main.qml 2 + + Third button is for series visibility, which is controlled with this code: + + \snippet ../examples/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 ../examples/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 new file mode 100644 index 00000000..051a0125 Binary files /dev/null and b/examples/datavisualization/qmlsurface/heightmap.png differ diff --git a/examples/datavisualization/qmlsurface/main.cpp b/examples/datavisualization/qmlsurface/main.cpp new file mode 100644 index 00000000..3c31dee4 --- /dev/null +++ b/examples/datavisualization/qmlsurface/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.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 new file mode 100644 index 00000000..5fd4ece8 --- /dev/null +++ b/examples/datavisualization/qmlsurface/qml/qmlsurface/Data.qml @@ -0,0 +1,10029 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmlsurface/qml/qmlsurface/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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 new file mode 100644 index 00000000..1fcedeea --- /dev/null +++ b/examples/datavisualization/qmlsurface/qml/qmlsurface/main.qml @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." + +Item { + id: mainview + width: 1280 + height: 720 + + property int buttonMaximumWidth: surfaceGridToggle.width + property int buttonMinimumHeight: seriesToggle.height + + Data { + id: surfaceData + } + + Item { + id: surfaceView + width: mainview.width - buttonLayout.width + height: mainview.height + anchors.right: mainview.right; + + //! [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] + + onFlatShadingSupportedChanged: { + flatShadingToggle.text = "Flat not supported" + } + } + } + } + + // TODO: Kept outside until surface supports multiple added series (QTRD-2579) + //! [4] + Surface3DSeries { + id: heightSeries + flatShadingEnabled: false + drawMode: Surface3DSeries.DrawSurface + + HeightMapSurfaceDataProxy { + heightMapFile: ":/heightmaps/image" + // We don't want the default data values set by heightmap proxy. + minZValue: 30 + maxZValue: 60 + minXValue: 67 + maxXValue: 97 + } + } + //! [4] + ColumnLayout { + id: buttonLayout + anchors.top: parent.top + anchors.left: parent.left + spacing: 0 + + NewButton { + id: surfaceGridToggle + Layout.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + text: "Show Surface Grid" + //! [1] + onClicked: { + if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) { + surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe; + heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe; + text = "Show Surface Grid" + } else { + surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe; + heightSeries.drawMode |= Surface3DSeries.DrawWireframe; + text = "Hide Surface Grid" + } + } + //! [1] + } + + NewButton { + id: surfaceToggle + Layout.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + text: "Hide Surface" + //! [8] + onClicked: { + if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface) { + surfaceSeries.drawMode &= ~Surface3DSeries.DrawSurface; + heightSeries.drawMode &= ~Surface3DSeries.DrawSurface; + text = "Show Surface" + } else { + surfaceSeries.drawMode |= Surface3DSeries.DrawSurface; + heightSeries.drawMode |= Surface3DSeries.DrawSurface; + text = "Hide Surface" + } + } + //! [8] + } + + NewButton { + id: flatShadingToggle + Layout.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + + text: "Show Flat" + 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.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + 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.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + 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.maximumWidth: buttonMaximumWidth + Layout.fillWidth: true + Layout.minimumHeight: buttonMinimumHeight + text: "Switch to Height Map Series" + //! [3] + onClicked: { + if (surfaceplot.seriesList[0] === heightSeries) { + surfaceplot.axisY.max = 500.0 + surfaceplot.seriesList = [surfaceSeries] + middleGradient.position = 0.25 + text = "Switch to Height Map Series" + } else { + surfaceplot.axisY.max = 250.0 + surfaceplot.seriesList = [heightSeries] + middleGradient.position = 0.50 + text = "Switch to Item Model Series" + } + } + //! [3] + } + } +} diff --git a/examples/datavisualization/qmlsurface/qmlsurface.desktop b/examples/datavisualization/qmlsurface/qmlsurface.desktop new file mode 100644 index 00000000..66dd0a72 --- /dev/null +++ b/examples/datavisualization/qmlsurface/qmlsurface.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlsurface +Exec=/opt/qmlsurface/bin/qmlsurface +Icon=qmlsurface64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlsurface/qmlsurface.pro b/examples/datavisualization/qmlsurface/qmlsurface.pro new file mode 100644 index 00000000..34be257a --- /dev/null +++ b/examples/datavisualization/qmlsurface/qmlsurface.pro @@ -0,0 +1,20 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlsurface +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmlsurface.qrc diff --git a/examples/datavisualization/qmlsurface/qmlsurface.qrc b/examples/datavisualization/qmlsurface/qmlsurface.qrc new file mode 100644 index 00000000..c27f2d56 --- /dev/null +++ b/examples/datavisualization/qmlsurface/qmlsurface.qrc @@ -0,0 +1,10 @@ + + + qml/qmlsurface/main.qml + qml/qmlsurface/Data.qml + qml/qmlsurface/NewButton.qml + + + heightmap.png + + diff --git a/examples/datavisualization/qmlsurface/qmlsurface64.png b/examples/datavisualization/qmlsurface/qmlsurface64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlsurface/qmlsurface64.png differ diff --git a/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png b/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png new file mode 100644 index 00000000..a5b179fb Binary files /dev/null and b/examples/datavisualization/qmlsurfacelayers/doc/images/qmlsurfacelayers-example.png differ diff --git a/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc b/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc new file mode 100644 index 00000000..eab9f17f --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/doc/src/qmlsurfacelayers.qdoc @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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}. + + \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 ../examples/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 ../examples/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 ../examples/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 2 + \dots + + \section1 Controlling the graph + + Let's add some checkboxes to control the visibility of layers: + + \snippet ../examples/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 ../examples/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 4 + \dots 0 + + Let's add some more checkboxes to control how the layers are displayed, when visible: + + \snippet ../examples/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml 5 + + In addition to these we have two 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 ../examples/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 new file mode 100644 index 00000000..9138c710 Binary files /dev/null and b/examples/datavisualization/qmlsurfacelayers/layer_1.png differ diff --git a/examples/datavisualization/qmlsurfacelayers/layer_2.png b/examples/datavisualization/qmlsurfacelayers/layer_2.png new file mode 100644 index 00000000..796df64d Binary files /dev/null and b/examples/datavisualization/qmlsurfacelayers/layer_2.png differ diff --git a/examples/datavisualization/qmlsurfacelayers/layer_3.png b/examples/datavisualization/qmlsurfacelayers/layer_3.png new file mode 100644 index 00000000..61631ae8 Binary files /dev/null and b/examples/datavisualization/qmlsurfacelayers/layer_3.png differ diff --git a/examples/datavisualization/qmlsurfacelayers/main.cpp b/examples/datavisualization/qmlsurfacelayers/main.cpp new file mode 100644 index 00000000..bb0c5649 --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "qtquick2applicationviewer.h" +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + QGuiApplication app(argc, argv); + + QtQuick2ApplicationViewer viewer; + + // Enable antialiasing + 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.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 new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/NewButton.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +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/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml new file mode 100644 index 00000000..22c527a2 --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qml/qmlsurfacelayers/main.qml @@ -0,0 +1,234 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.0 +import QtQuick.Controls 1.0 +import QtDataVisualization 1.0 +import "." + +Item { + id: mainview + width: 1280 + height: 720 + + 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.0; color: "red" } + ColorGradientStop { position: 0.15; color: "black" } + } + + ColorGradient { + id: layerThreeGradient + ColorGradientStop { position: 0.315; color: "blue" } + ColorGradientStop { position: 0.33; color: "white" } + } + //! [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 { + title: "Layer Selection" + Layout.fillWidth: true + Column { + CheckBox { + id: layerOneToggle + text: "Show Ground Layer" + checked: true + } + + CheckBox { + id: layerTwoToggle + text: "Show Tectonic Layer" + checked: true + } + + CheckBox { + id: layerThreeToggle + text: "Show Sea Layer" + checked: true + } + } + } + //! [3] + + //! [5] + GroupBox { + title: "Layer Style" + Layout.fillWidth: true + Column { + CheckBox { + id: layerOneGrid + text: "Show Ground as Grid" + onCheckedChanged: { + if (checked) + layerOneSeries.drawMode = Surface3DSeries.DrawWireframe + else + layerOneSeries.drawMode = Surface3DSeries.DrawSurface + } + } + + CheckBox { + id: layerTwoGrid + text: "Show Tectonic as Grid" + onCheckedChanged: { + if (checked) + layerTwoSeries.drawMode = Surface3DSeries.DrawWireframe + else + layerTwoSeries.drawMode = Surface3DSeries.DrawSurface + } + } + + CheckBox { + id: layerThreeGrid + text: "Show Sea as Grid" + onCheckedChanged: { + if (checked) + layerThreeSeries.drawMode = Surface3DSeries.DrawWireframe + else + layerThreeSeries.drawMode = Surface3DSeries.DrawSurface + } + } + } + } + //! [5] + + //! [6] + NewButton { + id: sliceButton + text: "Slice All Layers" + 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 + text: "Show Shadows" + Layout.fillWidth: true + Layout.minimumHeight: 40 + onClicked: { + if (surfaceLayers.shadowQuality === AbstractGraph3D.ShadowQualityNone) { + surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityLow + text = "Hide Shadows" + } else { + surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityNone + text = "Show Shadows" + } + } + } + } +} diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.desktop b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.desktop new file mode 100644 index 00000000..bdd5c776 --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=qmlsurfacelayers +Exec=/opt/qmlsurfacelayers/bin/qmlsurfacelayers +Icon=qmlsurfacelayers64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro new file mode 100644 index 00000000..3cc8d65c --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.pro @@ -0,0 +1,20 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +# Add more folders to ship with the application, here +folder_01.source = qml/qmlsurfacelayers +folder_01.target = qml +DEPLOYMENTFOLDERS = folder_01 + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qtquick2applicationviewer/qtquick2applicationviewer.pri) +qtcAddDeployment() + +RESOURCES += qmlsurfacelayers.qrc diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc new file mode 100644 index 00000000..028a91db --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers.qrc @@ -0,0 +1,11 @@ + + + qml/qmlsurfacelayers/main.qml + qml/qmlsurfacelayers/NewButton.qml + + + layer_1.png + layer_2.png + layer_3.png + + diff --git a/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers64.png b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers64.png new file mode 100644 index 00000000..707d5c4e Binary files /dev/null and b/examples/datavisualization/qmlsurfacelayers/qmlsurfacelayers64.png differ diff --git a/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.cpp new file mode 100644 index 00000000..10709d7a --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.cpp @@ -0,0 +1,81 @@ +// checksum 0x4f6f version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qtquick2applicationviewer.h" + +#include +#include +#include + +class QtQuick2ApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QtQuick2ApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path) +{ +#if defined(Q_OS_MAC) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("%1/../Resources/%2") + .arg(QCoreApplication::applicationDirPath(), path); +#elif defined(Q_OS_BLACKBERRY) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = + QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif + return path; +} + +QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent) + : QQuickView(parent) + , d(new QtQuick2ApplicationViewerPrivate()) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QQuickView::SizeRootObjectToView); +} + +QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer() +{ + delete d; +} + +void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else + setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif +} + +void QtQuick2ApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path)); +} + +void QtQuick2ApplicationViewer::showExpanded() +{ +#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX) + showFullScreen(); +#else + show(); +#endif +} diff --git a/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.h new file mode 100644 index 00000000..cf66f140 --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.h @@ -0,0 +1,33 @@ +// checksum 0xfde6 version 0x90005 +/* + This file was generated by the Qt Quick 2 Application wizard of Qt Creator. + QtQuick2ApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QTQUICK2APPLICATIONVIEWER_H +#define QTQUICK2APPLICATIONVIEWER_H + +#include + +class QtQuick2ApplicationViewer : public QQuickView +{ + Q_OBJECT + +public: + explicit QtQuick2ApplicationViewer(QWindow *parent = 0); + virtual ~QtQuick2ApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + void showExpanded(); + +private: + class QtQuick2ApplicationViewerPrivate *d; +}; + +#endif // QTQUICK2APPLICATIONVIEWER_H diff --git a/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.pri new file mode 100644 index 00000000..e5f7990f --- /dev/null +++ b/examples/datavisualization/qmlsurfacelayers/qtquick2applicationviewer/qtquick2applicationviewer.pri @@ -0,0 +1,180 @@ +# checksum 0x7b0d version 0x90005 +# This file was generated by the Qt Quick 2 Application wizard of Qt Creator. +# The code below adds the QtQuick2ApplicationViewer to the project and handles +# the activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += qml quick + +SOURCES += $$PWD/qtquick2applicationviewer.cpp +HEADERS += $$PWD/qtquick2applicationviewer.h +INCLUDEPATH += $$PWD +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Android and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +android-no-sdk { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + target.path = /data/user/qt + + export(target.path) + INSTALLS += target +} else:android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + target ~= s,\\\\\\.?\\\\,\\, + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + targetFullPath ~= s,/\\.?/,/, + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + !isEmpty(target.path) { + installPrefix = $${target.path} + } else { + installPrefix = /opt/$${TARGET} + } + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + isEmpty(target.path) { + target.path = $${installPrefix}/bin + export(target.path) + } + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/examples/datavisualization/rotations/doc/images/rotations-example.png b/examples/datavisualization/rotations/doc/images/rotations-example.png new file mode 100644 index 00000000..74bebbf7 Binary files /dev/null and b/examples/datavisualization/rotations/doc/images/rotations-example.png differ diff --git a/examples/datavisualization/rotations/doc/src/rotations.qdoc b/examples/datavisualization/rotations/doc/src/rotations.qdoc new file mode 100644 index 00000000..2de29195 --- /dev/null +++ b/examples/datavisualization/rotations/doc/src/rotations.qdoc @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + + \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 ../examples/rotations/scatterdatamodifier.cpp 0 + \snippet ../examples/rotations/scatterdatamodifier.cpp 1 + \snippet ../examples/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 ../examples/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 ../examples/rotations/scatterdatamodifier.cpp 4 + + \section1 Example contents +*/ diff --git a/examples/datavisualization/rotations/main.cpp b/examples/datavisualization/rotations/main.cpp new file mode 100644 index 00000000..3ddb7b55 --- /dev/null +++ b/examples/datavisualization/rotations/main.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + Q3DScatter *graph = new Q3DScatter(); + QWidget *container = QWidget::createWindowContainer(graph); + + 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 new file mode 100644 index 00000000..63101413 --- /dev/null +++ b/examples/datavisualization/rotations/mesh/largesphere.obj @@ -0,0 +1,1938 @@ +# 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 new file mode 100644 index 00000000..481fc1d1 --- /dev/null +++ b/examples/datavisualization/rotations/mesh/narrowarrow.obj @@ -0,0 +1,413 @@ +# 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 new file mode 100644 index 00000000..bd3e6de8 --- /dev/null +++ b/examples/datavisualization/rotations/rotations.pro @@ -0,0 +1,10 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp scatterdatamodifier.cpp +HEADERS += scatterdatamodifier.h + +QT += widgets + +RESOURCES += rotations.qrc diff --git a/examples/datavisualization/rotations/rotations.qrc b/examples/datavisualization/rotations/rotations.qrc new file mode 100644 index 00000000..bf66ebeb --- /dev/null +++ b/examples/datavisualization/rotations/rotations.qrc @@ -0,0 +1,6 @@ + + + mesh/narrowarrow.obj + mesh/largesphere.obj + + diff --git a/examples/datavisualization/rotations/scatterdatamodifier.cpp b/examples/datavisualization/rotations/scatterdatamodifier.cpp new file mode 100644 index 00000000..d916ffbd --- /dev/null +++ b/examples/datavisualization/rotations/scatterdatamodifier.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" +#include +#include +#include +#include +#include +#include +#include + +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 QScatter3DSeries), + 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->setItemSize(0.2f); + m_sun->setName(QStringLiteral("Sun")); + m_sun->setItemLabelFormat(QStringLiteral("@seriesName")); + m_sun->setMesh(QAbstract3DSeries::MeshUserDefined); + m_sun->setUserDefinedMesh(QStringLiteral(":/mesh/largesphere.obj")); + m_sun->setBaseColor(QColor(0xff, 0xBB, 0x00)); + m_sun->dataProxy()->addItem(QScatterDataItem(QVector3D())); + + m_graph->addSeries(m_magneticField); + m_graph->addSeries(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 origo + //! [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 origo 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_graph->seriesList().at(1)->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 new file mode 100644 index 00000000..9df1f26a --- /dev/null +++ b/examples/datavisualization/rotations/scatterdatamodifier.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef SCATTERDATAMODIFIER_H +#define SCATTERDATAMODIFIER_H + +#include +#include +#include + +using namespace QtDataVisualization; + +class ScatterDataModifier : public QObject +{ + Q_OBJECT +public: + explicit ScatterDataModifier(Q3DScatter *scatter); + ~ScatterDataModifier(); + + void generateData(); + +public 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; + QScatter3DSeries *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 new file mode 100644 index 00000000..82c13855 Binary files /dev/null and b/examples/datavisualization/scatter/doc/images/scatter-example.png differ diff --git a/examples/datavisualization/scatter/doc/src/scatter.qdoc b/examples/datavisualization/scatter/doc/src/scatter.qdoc new file mode 100644 index 00000000..91227184 --- /dev/null +++ b/examples/datavisualization/scatter/doc/src/scatter.qdoc @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + + \section1 Creating the application + + First, in main.cpp, we create a QApplication, instantiate Q3DScatter, and a window container + for it: + + \snippet ../examples/scatter/main.cpp 0 + + The call to QWidget::createWindowContainer is required, as all data visualization types + (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 ../examples/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 ../examples/scatter/main.cpp 2 + + The application main is done. We can show the graph and start the event loop: + + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/scatter/scatterdatamodifier.cpp 3 + + The actual data addition is done in \c addData() method. First we configure the axes: + + \snippet ../examples/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 ../examples/scatter/scatterdatamodifier.cpp 5 + + and populate it: + + \snippet ../examples/scatter/scatterdatamodifier.cpp 6 + + Finally we tell the proxy to start using the data we gave it: + + \snippet ../examples/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 ../examples/scatter/main.cpp 4 + + And add them to the vertical layout we created earlier: + + \snippet ../examples/scatter/main.cpp 5 + + Now, let's connect them to methods in ScatterDataModifier: + + \snippet ../examples/scatter/main.cpp 6 + + Here are the methods in ScatterDataModifier the signals were connected to: + + \snippet ../examples/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 new file mode 100644 index 00000000..d1dad77d --- /dev/null +++ b/examples/datavisualization/scatter/main.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + //! [0] + QApplication app(argc, argv); + Q3DScatter *graph = new Q3DScatter(); + QWidget *container = QWidget::createWindowContainer(graph); + //! [0] + + 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 new file mode 100644 index 00000000..55baa808 --- /dev/null +++ b/examples/datavisualization/scatter/scatter.pro @@ -0,0 +1,8 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp scatterdatamodifier.cpp +HEADERS += scatterdatamodifier.h + +QT += widgets diff --git a/examples/datavisualization/scatter/scatterdatamodifier.cpp b/examples/datavisualization/scatter/scatterdatamodifier.cpp new file mode 100644 index 00000000..fcba54be --- /dev/null +++ b/examples/datavisualization/scatter/scatterdatamodifier.cpp @@ -0,0 +1,203 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" +#include +#include +#include +#include +#include +#include +#include +#include + +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(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)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f, + (float)(rand() % 100) / 100.0f - (float)(rand() % 100) / 100.0f, + (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f); +} diff --git a/examples/datavisualization/scatter/scatterdatamodifier.h b/examples/datavisualization/scatter/scatterdatamodifier.h new file mode 100644 index 00000000..7cfe7ff8 --- /dev/null +++ b/examples/datavisualization/scatter/scatterdatamodifier.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef SCATTERDATAMODIFIER_H +#define SCATTERDATAMODIFIER_H + +#include +#include +#include + +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 slots: + void changeStyle(int style); + void changeTheme(int theme); + void changeShadowQuality(int quality); + void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); + +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 new file mode 100644 index 00000000..c323df78 Binary files /dev/null and b/examples/datavisualization/surface/doc/images/surface-example.png differ diff --git a/examples/datavisualization/surface/doc/src/surface.qdoc b/examples/datavisualization/surface/doc/src/surface.qdoc new file mode 100644 index 00000000..5397b503 --- /dev/null +++ b/examples/datavisualization/surface/doc/src/surface.qdoc @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +/*! + \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 + + \section1 Creating the application + + First, in \c main.cpp, we create a QApplication, instantiate Q3DSurface, and a window container + for it: + + \snippet ../examples/surface/main.cpp 0 + + The call to QWidget::createWindowContainer is required, as all data visualization types + (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 ../examples/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 ../examples/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 ../examples/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 ../examples/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. Finally we make sure the correct series is added to the + graph: + + \snippet ../examples/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 ../examples/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 ../examples/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 ../examples/surface/surfacegraph.cpp 8 + + The ranges are set for the axes like this: + + \snippet ../examples/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 ../examples/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 ../examples/surface/surfacegraph.cpp 7 +*/ diff --git a/examples/datavisualization/surface/main.cpp b/examples/datavisualization/surface/main.cpp new file mode 100644 index 00000000..4e82eca8 --- /dev/null +++ b/examples/datavisualization/surface/main.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "surfacegraph.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + //! [0] + QApplication app(argc, argv); + Q3DSurface *graph = new Q3DSurface(); + QWidget *container = QWidget::createWindowContainer(graph); + //! [0] + + 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 new file mode 100644 index 00000000..9138c710 Binary files /dev/null and b/examples/datavisualization/surface/mountain.png differ diff --git a/examples/datavisualization/surface/surface.pro b/examples/datavisualization/surface/surface.pro new file mode 100644 index 00000000..d84e1d8d --- /dev/null +++ b/examples/datavisualization/surface/surface.pro @@ -0,0 +1,12 @@ +!include( ../examples.pri ) { + error( "Couldn't find the examples.pri file!" ) +} + +SOURCES += main.cpp \ + surfacegraph.cpp + +HEADERS += surfacegraph.h + +QT += widgets + +RESOURCES += surface.qrc diff --git a/examples/datavisualization/surface/surface.qrc b/examples/datavisualization/surface/surface.qrc new file mode 100644 index 00000000..e4a7c38b --- /dev/null +++ b/examples/datavisualization/surface/surface.qrc @@ -0,0 +1,5 @@ + + + mountain.png + + diff --git a/examples/datavisualization/surface/surfacegraph.cpp b/examples/datavisualization/surface/surfacegraph.cpp new file mode 100644 index 00000000..d7524fbc --- /dev/null +++ b/examples/datavisualization/surface/surfacegraph.cpp @@ -0,0 +1,265 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "surfacegraph.h" + +#include +#include +#include +#include + +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->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 new file mode 100644 index 00000000..8047be11 --- /dev/null +++ b/examples/datavisualization/surface/surfacegraph.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef SURFACEGRAPH_H +#define SURFACEGRAPH_H + +#include +#include +#include +#include +#include + +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 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 -- cgit v1.2.3