Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
Qt for Python
Logo
Qt for Python
  • Getting Started
  • Commercial Use
  • Building from Source
  • Package Details
  • Modules API
  • Tools
  • Tutorials
  • Examples
    • Extending QML - Creating a New Type
    • Extending QML - Connecting to C++ Methods and Signals
    • Extending QML - Adding Property Bindings
    • Extending QML - Using Custom Property Types
    • Extending QML - Using List Property Types
    • Extending QML - Plugins Example
    • Extending QML (advanced) - BirthdayParty Base Project
    • Extending QML (advanced) - Inheritance and Coercion
    • Extending QML (advanced) - Default Properties
    • Extending QML (advanced) - Grouped Properties
    • Extending QML (advanced) - Attached Properties
    • Extending QML (advanced) - Property Value Source
    • Extending QML - Adding Types Example
    • Extending QML - Binding Example
    • QAbstractListModel in QML
    • Extending QML - Extension Objects Example
    • Extending QML - Methods Example
    • Extending QML - Object and List Property Types Example
    • Calling Python Methods from QML
    • Receiving return values from Python in QML
    • Handling QML Signals in Python
    • Directly Connecting QML Component Signals to Python Functions
    • Text Properties Example
    • Using Model Example
    • Object List Model Example
    • OpenGL under QML Squircle
    • Scene Graph Painted Item Example
    • QQuickRenderControl OpenGL Example
    • Scene Graph - Custom Geometry
    • String List Model Example
    • Qt Quick Examples - Window and Screen
    • Qt Quick Controls 2 - Gallery
    • Qt Quick Controls - Contact List
    • Qt Quick Controls - Filesystem Explorer
    • Widgets Gallery Example
    • Address Book Example
    • Anchor Layout Example
    • Animated Tiles Example
    • Application Chooser Example
    • Application Example
    • Basic Drawing Example
    • Basic Sort/Filter Model Example
    • Basic Layouts Example
    • Blur Picker Effect Example
    • Border Layout Example
    • Cannon Example
    • Character Map Example
    • Classwizard Example
    • Colliding Mice Example
    • Concentric Circles Examples
    • Diagram Scene Example
    • Digital Clock Example
    • Dir View Example
    • Dock Widget Example
    • Drag and Drop Robot Example
    • Draggable Text Example
    • Drop Site Example
    • Dynamic Layouts Example
    • Easing Example
    • Editable Tree Model Example
    • Elastic Nodes Example
    • Extension Example
    • Fetch More Example
    • Flow Layout Example
    • GNU gettext Example
    • Image Viewer Example
    • JSON Model Example
    • License Wizard Example
    • Lighting Example
    • Qt Linguist Example
    • MDI Example
    • Model View Tutorial Examples
    • Order Form Example
    • Painter Example
    • Plot Example
    • QRegularExpression Example
    • Screenshot Example
    • Simple RHI Widget Example
    • SpinBox Delegate Example
    • Standard Dialogs Example
    • Star Delegate Example
    • States Example
    • Syntax Highlighter Example
    • System Tray Icon Example
    • Tab Dialog Example
    • Tetrix
    • TextEdit Example
    • TextObject Example
    • Thread Signals Examples
    • Trivial Wizard Example
    • Task Menu Extension Example
    • UILoader Example
    • MIME Type Browser Example
    • Settings Editor Example
    • IPC: Shared Memory
    • Mandelbrot Threads Example
    • Async “Eratosthenes” Example
    • Async “Minimal” Example
    • Blocking Fortune Client Example
    • Downloader Example
    • Fortune Client Example
    • Fortune Server Example
    • Google Suggest Example
    • Loopback Example
    • Threaded Fortune Server Example
    • SQL Books Example
    • D-Bus List Names Example
    • D-Bus Ping Pong Example
    • DOM Bookmarks Example
    • Analog Clock Window Example
    • RHI Window Example
    • Context Info Example
    • Hello GL2 Example
    • Texture Example
    • Threaded QOpenGLWidget Example
    • Sample Bindings Example
    • Using CMake
    • Scriptable Application Example
    • WigglyWidget Example
    • Media Player Example
    • RESTful API client
    • Document Viewer Example
    • OSM Buildings
    • Simple HTTP Server Example
    • Widget Graph Gallery
    • Simple Bar Graph
    • HelloGraphs Example
    • Minimal Surface Example
    • Graph Gallery
    • Surface Graph Gallery
    • Bars 3D Example
    • Surface Example
    • Surface Example
    • Surface Example
    • Area Chart Example
    • Audio Example
    • Bar Chart Example
    • Callout Example
    • Chart Themes Example
    • Donut Chart Breakdown Example
    • Dynamic Spline Example
    • Legend Example
    • Line and Bar Chart Example
    • Line Chart Example
    • Logarithmic Axis Example
    • Memory Usag Example
    • Model Data Example
    • Nested Donuts Example
    • Percent Bar Chart Example
    • Pie Chart Example
    • Selected Point Configuration Example
    • Light Markers and Points Selection Example
    • QML Polar Chart Example
    • Temperature Records Example
    • Zoom Line Chart Example
    • Audio Output Example
    • Audio Source Example
    • Camera Example
    • Player Example
    • Screen Capture Example
    • Nano Browser Example
    • WebEngine Markdown Editor Example
    • WebEngine Notifications Example
    • Simple Browser
    • Qt Widgets Nano Browser Example
    • Ax Viewer Example
    • Bluetooth Scanner Example
    • Bluetooth Low Energy Heart Rate Game
    • Bluetooth Low Energy Heart Rate Server
    • Bluetooth Low Energy Scanner Example
    • Networkx viewer Example
    • OpenCV Face Detection Example
    • Pandas Simple Example
    • Scikit Image Example
    • Matplotlib Widget 3D Example
    • Matplotlib Widget Gaussian Example
    • Map Viewer Example
    • Reddit Example
    • PDF Viewer Example
    • PDF Viewer Example
    • Custom Geometry Example
    • Introduction Example Qt Quick 3D
    • Procedural Texture Example
    • Model-View Server Example
    • Spatial Audio Panning Example
    • Hello Speak
    • Simple Qt 3D Example
    • CAN Bus example
    • Modbus Client example
    • Terminal Example
    • Move Blocks Example
    • StateMachine Ping Pong Example
    • StateMachine Rogue Example
    • Traffic Light Example
    • WebChannel Standalone Example
    • Finance Manager Example - Part 1
    • Finance Manager Example - Part 2
    • Finance Manager Example - Part 3
    • Minibrowser Example
  • Videos
  • Deployment
  • Considerations
  • Developer Notes
  • Release Notes
  • Module Index
Back to top

Surface Graph Gallery¶

Surface Graph Gallery demonstrates three different custom features with Surface3D graphs. The features have their own tabs in the application.

Surface Graph Gallery Screenshot

Download this example

# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
from __future__ import annotations

from math import sin, pi

from PySide6.QtCore import QObject, QRandomGenerator, Slot
from PySide6.QtQml import QmlElement
from PySide6.QtGui import QVector3D
from PySide6.QtDataVisualization import QSurfaceDataItem, QSurface3DSeries


QML_IMPORT_NAME = "SurfaceGallery"
QML_IMPORT_MAJOR_VERSION = 1


@QmlElement
class DataSource(QObject):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.m_index = -1
        self.m_resetArray = None
        self.m_data = []

    @Slot(int, int, int, float, float, float, float, float, float)
    def generateData(self, cacheCount, rowCount, columnCount,
                     xMin, xMax, yMin, yMax, zMin, zMax):
        if not cacheCount or not rowCount or not columnCount:
            return

        self.clearData()

        xRange = xMax - xMin
        yRange = yMax - yMin
        zRange = zMax - zMin
        cacheIndexStep = columnCount / cacheCount
        cacheStep = float(cacheIndexStep) * xRange / float(columnCount)

        # Populate caches
        self.m_data = []
        rand_gen = QRandomGenerator.global_()
        for i in range(0, cacheCount):
            cache = []
            cacheXAdjustment = cacheStep * i
            cacheIndexAdjustment = cacheIndexStep * i
            for j in range(0, rowCount):
                row = []
                rowMod = (float(j)) / float(rowCount)
                yRangeMod = yRange * rowMod
                zRangeMod = zRange * rowMod
                z = zRangeMod + zMin
                rowColWaveAngleMul = pi * pi * rowMod
                rowColWaveMul = yRangeMod * 0.2
                for k in range(0, columnCount):
                    colMod = (float(k)) / float(columnCount)
                    xRangeMod = xRange * colMod
                    x = xRangeMod + xMin + cacheXAdjustment
                    colWave = sin((2.0 * pi * colMod) - (1.0 / 2.0 * pi)) + 1.0
                    rand_nr = rand_gen.generateDouble() * 0.15
                    y = ((colWave * ((sin(rowColWaveAngleMul * colMod) + 1.0)))
                         * rowColWaveMul + rand_nr * yRangeMod)

                    index = k + cacheIndexAdjustment
                    if index >= columnCount:
                        # Wrap over
                        index -= columnCount
                        x -= xRange

                    row.append(QSurfaceDataItem(QVector3D(x, y, z)))
                cache.append(row)
            self.m_data.append(cache)

    @Slot(QSurface3DSeries)
    def update(self, series):
        if series and self.m_data:
            # Each iteration uses data from a different cached array
            self.m_index += 1
            if self.m_index > len(self.m_data) - 1:
                self.m_index = 0

            array = self.m_data[self.m_index]
            newRowCount = len(array)
            newColumnCount = len(array[0])

            # Copy items from our cache to the reset array
            self.m_resetArray = []
            for i in range(0, newRowCount):
                sourceRow = array[i]
                row = []
                for j in range(0, newColumnCount):
                    row.append(QSurfaceDataItem(sourceRow[j].position()))
                self.m_resetArray.append(row)

            # Notify the proxy that data has changed
            series.dataProxy().resetArray(self.m_resetArray)

    @Slot()
    def clearData(self):
        self.m_data = []
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
from __future__ import annotations

"""PySide6 port of the Qt DataVisualization qmlsurfacegallery example from Qt v6.x"""

import os
import sys
from pathlib import Path

from PySide6.QtCore import QCoreApplication, QUrl
from PySide6.QtGui import QGuiApplication
from PySide6.QtQuick import QQuickView
from PySide6.QtDataVisualization import qDefaultSurfaceFormat

from datasource import DataSource  # noqa: F401
import rc_qmlsurfacegallery  # noqa: F401


if __name__ == "__main__":
    os.environ["QSG_RHI_BACKEND"] = "opengl"
    app = QGuiApplication(sys.argv)

    viewer = QQuickView()

    # Enable antialiasing in direct rendering mode
    viewer.setFormat(qDefaultSurfaceFormat(True))

    viewer.engine().quit.connect(QCoreApplication.quit)

    viewer.setTitle("Surface Graph Gallery")

    qml_file = Path(__file__).resolve().parent / "qml" / "qmlsurfacegallery" / "main.qml"
    viewer.setSource(QUrl.fromLocalFile(qml_file))
    viewer.setResizeMode(QQuickView.ResizeMode.SizeRootObjectToView)
    viewer.show()

    ex = app.exec()
    del viewer
    sys.exit(ex)
<RCC>
    <qresource prefix="/">
        <file>qml/qmlsurfacegallery/heightmap.png</file>
    </qresource>
</RCC>
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick

Item {
    property alias model: dataModel

    ListModel {
        id: dataModel
        ListElement{ radius: "0"; angle: "0"; value: "50"; }
        ListElement{ radius: "0"; angle: "5"; value: "54.3578"; }
        ListElement{ radius: "0"; angle: "10"; value: "58.6824"; }
        ListElement{ radius: "0"; angle: "15"; value: "62.941"; }
        ListElement{ radius: "0"; angle: "20"; value: "67.101"; }
        ListElement{ radius: "0"; angle: "25"; value: "71.1309"; }
        ListElement{ radius: "0"; angle: "30"; value: "75"; }
        ListElement{ radius: "0"; angle: "35"; value: "78.6788"; }
        ListElement{ radius: "0"; angle: "40"; value: "82.1394"; }
        ListElement{ radius: "0"; angle: "45"; value: "85.3553"; }
        ListElement{ radius: "0"; angle: "50"; value: "88.3022"; }
        ListElement{ radius: "0"; angle: "55"; value: "90.9576"; }
        ListElement{ radius: "0"; angle: "60"; value: "93.3013"; }
        ListElement{ radius: "0"; angle: "65"; value: "95.3154"; }
        ListElement{ radius: "0"; angle: "70"; value: "96.9846"; }
        ListElement{ radius: "0"; angle: "75"; value: "98.2963"; }
        ListElement{ radius: "0"; angle: "80"; value: "99.2404"; }
        ListElement{ radius: "0"; angle: "85"; value: "99.8097"; }
        ListElement{ radius: "0"; angle: "90"; value: "100"; }
        ListElement{ radius: "0"; angle: "95"; value: "99.8097"; }
        ListElement{ radius: "0"; angle: "100"; value: "99.2404"; }
        ListElement{ radius: "0"; angle: "105"; value: "98.2963"; }
        ListElement{ radius: "0"; angle: "110"; value: "96.9846"; }
        ListElement{ radius: "0"; angle: "115"; value: "95.3154"; }
        ListElement{ radius: "0"; angle: "120"; value: "93.3013"; }
        ListElement{ radius: "0"; angle: "125"; value: "90.9576"; }
        ListElement{ radius: "0"; angle: "130"; value: "88.3022"; }
        ListElement{ radius: "0"; angle: "135"; value: "85.3553"; }
        ListElement{ radius: "0"; angle: "140"; value: "82.1394"; }
        ListElement{ radius: "0"; angle: "145"; value: "78.6788"; }
        ListElement{ radius: "0"; angle: "150"; value: "75"; }
        ListElement{ radius: "0"; angle: "155"; value: "71.1309"; }
        ListElement{ radius: "0"; angle: "160"; value: "67.101"; }
        ListElement{ radius: "0"; angle: "165"; value: "62.941"; }
        ListElement{ radius: "0"; angle: "170"; value: "58.6824"; }
        ListElement{ radius: "0"; angle: "175"; value: "54.3578"; }
        ListElement{ radius: "0"; angle: "180"; value: "50"; }
        ListElement{ radius: "0"; angle: "185"; value: "45.6422"; }
        ListElement{ radius: "0"; angle: "190"; value: "41.3176"; }
        ListElement{ radius: "0"; angle: "195"; value: "37.059"; }
        ListElement{ radius: "0"; angle: "200"; value: "32.899"; }
        ListElement{ radius: "0"; angle: "205"; value: "28.8691"; }
        ListElement{ radius: "0"; angle: "210"; value: "25"; }
        ListElement{ radius: "0"; angle: "215"; value: "21.3212"; }
        ListElement{ radius: "0"; angle: "220"; value: "17.8606"; }
        ListElement{ radius: "0"; angle: "225"; value: "14.6447"; }
        ListElement{ radius: "0"; angle: "230"; value: "11.6978"; }
        ListElement{ radius: "0"; angle: "235"; value: "9.0424"; }
        ListElement{ radius: "0"; angle: "240"; value: "6.69873"; }
        ListElement{ radius: "0"; angle: "245"; value: "4.68461"; }
        ListElement{ radius: "0"; angle: "250"; value: "3.01537"; }
        ListElement{ radius: "0"; angle: "255"; value: "1.70371"; }
        ListElement{ radius: "0"; angle: "260"; value: "0.759612"; }
        ListElement{ radius: "0"; angle: "265"; value: "0.190265"; }
        ListElement{ radius: "0"; angle: "270"; value: "0"; }
        ListElement{ radius: "0"; angle: "275"; value: "0.190265"; }
        ListElement{ radius: "0"; angle: "280"; value: "0.759612"; }
        ListElement{ radius: "0"; angle: "285"; value: "1.70371"; }
        ListElement{ radius: "0"; angle: "290"; value: "3.01537"; }
        ListElement{ radius: "0"; angle: "295"; value: "4.68461"; }
        ListElement{ radius: "0"; angle: "300"; value: "6.69873"; }
        ListElement{ radius: "0"; angle: "305"; value: "9.0424"; }
        ListElement{ radius: "0"; angle: "310"; value: "11.6978"; }
        ListElement{ radius: "0"; angle: "315"; value: "14.6447"; }
        ListElement{ radius: "0"; angle: "320"; value: "17.8606"; }
        ListElement{ radius: "0"; angle: "325"; value: "21.3212"; }
        ListElement{ radius: "0"; angle: "330"; value: "25"; }
        ListElement{ radius: "0"; angle: "335"; value: "28.8691"; }
        ListElement{ radius: "0"; angle: "340"; value: "32.899"; }
        ListElement{ radius: "0"; angle: "345"; value: "37.059"; }
        ListElement{ radius: "0"; angle: "350"; value: "41.3176"; }
        ListElement{ radius: "0"; angle: "355"; value: "45.6422"; }
        ListElement{ radius: "0"; angle: "360"; value: "50"; }
        ListElement{ radius: "5"; angle: "0"; value: "49.3844"; }
        ListElement{ radius: "5"; angle: "5"; value: "53.7422"; }
        ListElement{ radius: "5"; angle: "10"; value: "58.0668"; }
        ListElement{ radius: "5"; angle: "15"; value: "62.3254"; }
        ListElement{ radius: "5"; angle: "20"; value: "66.4854"; }
        ListElement{ radius: "5"; angle: "25"; value: "70.5153"; }
        ListElement{ radius: "5"; angle: "30"; value: "74.3844"; }
        ListElement{ radius: "5"; angle: "35"; value: "78.0632"; }
        ListElement{ radius: "5"; angle: "40"; value: "81.5238"; }
        ListElement{ radius: "5"; angle: "45"; value: "84.7398"; }
        ListElement{ radius: "5"; angle: "50"; value: "87.6866"; }
        ListElement{ radius: "5"; angle: "55"; value: "90.342"; }
        ListElement{ radius: "5"; angle: "60"; value: "92.6857"; }
        ListElement{ radius: "5"; angle: "65"; value: "94.6998"; }
        ListElement{ radius: "5"; angle: "70"; value: "96.369"; }
        ListElement{ radius: "5"; angle: "75"; value: "97.6807"; }
        ListElement{ radius: "5"; angle: "80"; value: "98.6248"; }
        ListElement{ radius: "5"; angle: "85"; value: "99.1942"; }
        ListElement{ radius: "5"; angle: "90"; value: "99.3844"; }
        ListElement{ radius: "5"; angle: "95"; value: "99.1942"; }
        ListElement{ radius: "5"; angle: "100"; value: "98.6248"; }
        ListElement{ radius: "5"; angle: "105"; value: "97.6807"; }
        ListElement{ radius: "5"; angle: "110"; value: "96.369"; }
        ListElement{ radius: "5"; angle: "115"; value: "94.6998"; }
        ListElement{ radius: "5"; angle: "120"; value: "92.6857"; }
        ListElement{ radius: "5"; angle: "125"; value: "90.342"; }
        ListElement{ radius: "5"; angle: "130"; value: "87.6866"; }
        ListElement{ radius: "5"; angle: "135"; value: "84.7398"; }
        ListElement{ radius: "5"; angle: "140"; value: "81.5238"; }
        ListElement{ radius: "5"; angle: "145"; value: "78.0632"; }
        ListElement{ radius: "5"; angle: "150"; value: "74.3844"; }
        ListElement{ radius: "5"; angle: "155"; value: "70.5153"; }
        ListElement{ radius: "5"; angle: "160"; value: "66.4854"; }
        ListElement{ radius: "5"; angle: "165"; value: "62.3254"; }
        ListElement{ radius: "5"; angle: "170"; value: "58.0668"; }
        ListElement{ radius: "5"; angle: "175"; value: "53.7422"; }
        ListElement{ radius: "5"; angle: "180"; value: "49.3844"; }
        ListElement{ radius: "5"; angle: "185"; value: "45.0266"; }
        ListElement{ radius: "5"; angle: "190"; value: "40.702"; }
        ListElement{ radius: "5"; angle: "195"; value: "36.4435"; }
        ListElement{ radius: "5"; angle: "200"; value: "32.2834"; }
        ListElement{ radius: "5"; angle: "205"; value: "28.2535"; }
        ListElement{ radius: "5"; angle: "210"; value: "24.3844"; }
        ListElement{ radius: "5"; angle: "215"; value: "20.7056"; }
        ListElement{ radius: "5"; angle: "220"; value: "17.245"; }
        ListElement{ radius: "5"; angle: "225"; value: "14.0291"; }
        ListElement{ radius: "5"; angle: "230"; value: "11.0822"; }
        ListElement{ radius: "5"; angle: "235"; value: "8.42681"; }
        ListElement{ radius: "5"; angle: "240"; value: "6.08315"; }
        ListElement{ radius: "5"; angle: "245"; value: "4.06903"; }
        ListElement{ radius: "5"; angle: "250"; value: "2.39979"; }
        ListElement{ radius: "5"; angle: "255"; value: "1.08813"; }
        ListElement{ radius: "5"; angle: "260"; value: "0.144029"; }
        ListElement{ radius: "5"; angle: "265"; value: "-0.425318"; }
        ListElement{ radius: "5"; angle: "270"; value: "-0.615583"; }
        ListElement{ radius: "5"; angle: "275"; value: "-0.425318"; }
        ListElement{ radius: "5"; angle: "280"; value: "0.144029"; }
        ListElement{ radius: "5"; angle: "285"; value: "1.08813"; }
        ListElement{ radius: "5"; angle: "290"; value: "2.39979"; }
        ListElement{ radius: "5"; angle: "295"; value: "4.06903"; }
        ListElement{ radius: "5"; angle: "300"; value: "6.08315"; }
        ListElement{ radius: "5"; angle: "305"; value: "8.42681"; }
        ListElement{ radius: "5"; angle: "310"; value: "11.0822"; }
        ListElement{ radius: "5"; angle: "315"; value: "14.0291"; }
        ListElement{ radius: "5"; angle: "320"; value: "17.245"; }
        ListElement{ radius: "5"; angle: "325"; value: "20.7056"; }
        ListElement{ radius: "5"; angle: "330"; value: "24.3844"; }
        ListElement{ radius: "5"; angle: "335"; value: "28.2535"; }
        ListElement{ radius: "5"; angle: "340"; value: "32.2834"; }
        ListElement{ radius: "5"; angle: "345"; value: "36.4435"; }
        ListElement{ radius: "5"; angle: "350"; value: "40.702"; }
        ListElement{ radius: "5"; angle: "355"; value: "45.0266"; }
        ListElement{ radius: "5"; angle: "360"; value: "49.3844"; }
        ListElement{ radius: "10"; angle: "0"; value: "47.5528"; }
        ListElement{ radius: "10"; angle: "5"; value: "51.9106"; }
        ListElement{ radius: "10"; angle: "10"; value: "56.2352"; }
        ListElement{ radius: "10"; angle: "15"; value: "60.4938"; }
        ListElement{ radius: "10"; angle: "20"; value: "64.6538"; }
        ListElement{ radius: "10"; angle: "25"; value: "68.6837"; }
        ListElement{ radius: "10"; angle: "30"; value: "72.5528"; }
        ListElement{ radius: "10"; angle: "35"; value: "76.2316"; }
        ListElement{ radius: "10"; angle: "40"; value: "79.6922"; }
        ListElement{ radius: "10"; angle: "45"; value: "82.9082"; }
        ListElement{ radius: "10"; angle: "50"; value: "85.855"; }
        ListElement{ radius: "10"; angle: "55"; value: "88.5104"; }
        ListElement{ radius: "10"; angle: "60"; value: "90.8541"; }
        ListElement{ radius: "10"; angle: "65"; value: "92.8682"; }
        ListElement{ radius: "10"; angle: "70"; value: "94.5375"; }
        ListElement{ radius: "10"; angle: "75"; value: "95.8491"; }
        ListElement{ radius: "10"; angle: "80"; value: "96.7932"; }
        ListElement{ radius: "10"; angle: "85"; value: "97.3626"; }
        ListElement{ radius: "10"; angle: "90"; value: "97.5528"; }
        ListElement{ radius: "10"; angle: "95"; value: "97.3626"; }
        ListElement{ radius: "10"; angle: "100"; value: "96.7932"; }
        ListElement{ radius: "10"; angle: "105"; value: "95.8491"; }
        ListElement{ radius: "10"; angle: "110"; value: "94.5375"; }
        ListElement{ radius: "10"; angle: "115"; value: "92.8682"; }
        ListElement{ radius: "10"; angle: "120"; value: "90.8541"; }
        ListElement{ radius: "10"; angle: "125"; value: "88.5104"; }
        ListElement{ radius: "10"; angle: "130"; value: "85.855"; }
        ListElement{ radius: "10"; angle: "135"; value: "82.9082"; }
        ListElement{ radius: "10"; angle: "140"; value: "79.6922"; }
        ListElement{ radius: "10"; angle: "145"; value: "76.2316"; }
        ListElement{ radius: "10"; angle: "150"; value: "72.5528"; }
        ListElement{ radius: "10"; angle: "155"; value: "68.6837"; }
        ListElement{ radius: "10"; angle: "160"; value: "64.6538"; }
        ListElement{ radius: "10"; angle: "165"; value: "60.4938"; }
        ListElement{ radius: "10"; angle: "170"; value: "56.2352"; }
        ListElement{ radius: "10"; angle: "175"; value: "51.9106"; }
        ListElement{ radius: "10"; angle: "180"; value: "47.5528"; }
        ListElement{ radius: "10"; angle: "185"; value: "43.195"; }
        ListElement{ radius: "10"; angle: "190"; value: "38.8704"; }
        ListElement{ radius: "10"; angle: "195"; value: "34.6119"; }
        ListElement{ radius: "10"; angle: "200"; value: "30.4518"; }
        ListElement{ radius: "10"; angle: "205"; value: "26.4219"; }
        ListElement{ radius: "10"; angle: "210"; value: "22.5528"; }
        ListElement{ radius: "10"; angle: "215"; value: "18.874"; }
        ListElement{ radius: "10"; angle: "220"; value: "15.4134"; }
        ListElement{ radius: "10"; angle: "225"; value: "12.1975"; }
        ListElement{ radius: "10"; angle: "230"; value: "9.2506"; }
        ListElement{ radius: "10"; angle: "235"; value: "6.59522"; }
        ListElement{ radius: "10"; angle: "240"; value: "4.25156"; }
        ListElement{ radius: "10"; angle: "245"; value: "2.23744"; }
        ListElement{ radius: "10"; angle: "250"; value: "0.568195"; }
        ListElement{ radius: "10"; angle: "255"; value: "-0.743465"; }
        ListElement{ radius: "10"; angle: "260"; value: "-1.68756"; }
        ListElement{ radius: "10"; angle: "265"; value: "-2.25691"; }
        ListElement{ radius: "10"; angle: "270"; value: "-2.44717"; }
        ListElement{ radius: "10"; angle: "275"; value: "-2.25691"; }
        ListElement{ radius: "10"; angle: "280"; value: "-1.68756"; }
        ListElement{ radius: "10"; angle: "285"; value: "-0.743465"; }
        ListElement{ radius: "10"; angle: "290"; value: "0.568195"; }
        ListElement{ radius: "10"; angle: "295"; value: "2.23744"; }
        ListElement{ radius: "10"; angle: "300"; value: "4.25156"; }
        ListElement{ radius: "10"; angle: "305"; value: "6.59522"; }
        ListElement{ radius: "10"; angle: "310"; value: "9.2506"; }
        ListElement{ radius: "10"; angle: "315"; value: "12.1975"; }
        ListElement{ radius: "10"; angle: "320"; value: "15.4134"; }
        ListElement{ radius: "10"; angle: "325"; value: "18.874"; }
        ListElement{ radius: "10"; angle: "330"; value: "22.5528"; }
        ListElement{ radius: "10"; angle: "335"; value: "26.4219"; }
        ListElement{ radius: "10"; angle: "340"; value: "30.4518"; }
        ListElement{ radius: "10"; angle: "345"; value: "34.6119"; }
        ListElement{ radius: "10"; angle: "350"; value: "38.8704"; }
        ListElement{ radius: "10"; angle: "355"; value: "43.195"; }
        ListElement{ radius: "10"; angle: "360"; value: "47.5528"; }
        ListElement{ radius: "15"; angle: "0"; value: "44.5503"; }
        ListElement{ radius: "15"; angle: "5"; value: "48.9081"; }
        ListElement{ radius: "15"; angle: "10"; value: "53.2327"; }
        ListElement{ radius: "15"; angle: "15"; value: "57.4913"; }
        ListElement{ radius: "15"; angle: "20"; value: "61.6513"; }
        ListElement{ radius: "15"; angle: "25"; value: "65.6812"; }
        ListElement{ radius: "15"; angle: "30"; value: "69.5503"; }
        ListElement{ radius: "15"; angle: "35"; value: "73.2291"; }
        ListElement{ radius: "15"; angle: "40"; value: "76.6897"; }
        ListElement{ radius: "15"; angle: "45"; value: "79.9057"; }
        ListElement{ radius: "15"; angle: "50"; value: "82.8525"; }
        ListElement{ radius: "15"; angle: "55"; value: "85.5079"; }
        ListElement{ radius: "15"; angle: "60"; value: "87.8516"; }
        ListElement{ radius: "15"; angle: "65"; value: "89.8657"; }
        ListElement{ radius: "15"; angle: "70"; value: "91.535"; }
        ListElement{ radius: "15"; angle: "75"; value: "92.8466"; }
        ListElement{ radius: "15"; angle: "80"; value: "93.7907"; }
        ListElement{ radius: "15"; angle: "85"; value: "94.3601"; }
        ListElement{ radius: "15"; angle: "90"; value: "94.5503"; }
        ListElement{ radius: "15"; angle: "95"; value: "94.3601"; }
        ListElement{ radius: "15"; angle: "100"; value: "93.7907"; }
        ListElement{ radius: "15"; angle: "105"; value: "92.8466"; }
        ListElement{ radius: "15"; angle: "110"; value: "91.535"; }
        ListElement{ radius: "15"; angle: "115"; value: "89.8657"; }
        ListElement{ radius: "15"; angle: "120"; value: "87.8516"; }
        ListElement{ radius: "15"; angle: "125"; value: "85.5079"; }
        ListElement{ radius: "15"; angle: "130"; value: "82.8525"; }
        ListElement{ radius: "15"; angle: "135"; value: "79.9057"; }
        ListElement{ radius: "15"; angle: "140"; value: "76.6897"; }
        ListElement{ radius: "15"; angle: "145"; value: "73.2291"; }
        ListElement{ radius: "15"; angle: "150"; value: "69.5503"; }
        ListElement{ radius: "15"; angle: "155"; value: "65.6812"; }
        ListElement{ radius: "15"; angle: "160"; value: "61.6513"; }
        ListElement{ radius: "15"; angle: "165"; value: "57.4913"; }
        ListElement{ radius: "15"; angle: "170"; value: "53.2327"; }
        ListElement{ radius: "15"; angle: "175"; value: "48.9081"; }
        ListElement{ radius: "15"; angle: "180"; value: "44.5503"; }
        ListElement{ radius: "15"; angle: "185"; value: "40.1925"; }
        ListElement{ radius: "15"; angle: "190"; value: "35.8679"; }
        ListElement{ radius: "15"; angle: "195"; value: "31.6094"; }
        ListElement{ radius: "15"; angle: "200"; value: "27.4493"; }
        ListElement{ radius: "15"; angle: "205"; value: "23.4194"; }
        ListElement{ radius: "15"; angle: "210"; value: "19.5503"; }
        ListElement{ radius: "15"; angle: "215"; value: "15.8715"; }
        ListElement{ radius: "15"; angle: "220"; value: "12.4109"; }
        ListElement{ radius: "15"; angle: "225"; value: "9.19499"; }
        ListElement{ radius: "15"; angle: "230"; value: "6.2481"; }
        ListElement{ radius: "15"; angle: "235"; value: "3.59272"; }
        ListElement{ radius: "15"; angle: "240"; value: "1.24906"; }
        ListElement{ radius: "15"; angle: "245"; value: "-0.765063"; }
        ListElement{ radius: "15"; angle: "250"; value: "-2.4343"; }
        ListElement{ radius: "15"; angle: "255"; value: "-3.74597"; }
        ListElement{ radius: "15"; angle: "260"; value: "-4.69006"; }
        ListElement{ radius: "15"; angle: "265"; value: "-5.25941"; }
        ListElement{ radius: "15"; angle: "270"; value: "-5.44967"; }
        ListElement{ radius: "15"; angle: "275"; value: "-5.25941"; }
        ListElement{ radius: "15"; angle: "280"; value: "-4.69006"; }
        ListElement{ radius: "15"; angle: "285"; value: "-3.74597"; }
        ListElement{ radius: "15"; angle: "290"; value: "-2.4343"; }
        ListElement{ radius: "15"; angle: "295"; value: "-0.765063"; }
        ListElement{ radius: "15"; angle: "300"; value: "1.24906"; }
        ListElement{ radius: "15"; angle: "305"; value: "3.59272"; }
        ListElement{ radius: "15"; angle: "310"; value: "6.2481"; }
        ListElement{ radius: "15"; angle: "315"; value: "9.19499"; }
        ListElement{ radius: "15"; angle: "320"; value: "12.4109"; }
        ListElement{ radius: "15"; angle: "325"; value: "15.8715"; }
        ListElement{ radius: "15"; angle: "330"; value: "19.5503"; }
        ListElement{ radius: "15"; angle: "335"; value: "23.4194"; }
        ListElement{ radius: "15"; angle: "340"; value: "27.4493"; }
        ListElement{ radius: "15"; angle: "345"; value: "31.6094"; }
        ListElement{ radius: "15"; angle: "350"; value: "35.8679"; }
        ListElement{ radius: "15"; angle: "355"; value: "40.1925"; }
        ListElement{ radius: "15"; angle: "360"; value: "44.5503"; }
        ListElement{ radius: "20"; angle: "0"; value: "40.4508"; }
        ListElement{ radius: "20"; angle: "5"; value: "44.8086"; }
        ListElement{ radius: "20"; angle: "10"; value: "49.1333"; }
        ListElement{ radius: "20"; angle: "15"; value: "53.3918"; }
        ListElement{ radius: "20"; angle: "20"; value: "57.5519"; }
        ListElement{ radius: "20"; angle: "25"; value: "61.5818"; }
        ListElement{ radius: "20"; angle: "30"; value: "65.4508"; }
        ListElement{ radius: "20"; angle: "35"; value: "69.1297"; }
        ListElement{ radius: "20"; angle: "40"; value: "72.5902"; }
        ListElement{ radius: "20"; angle: "45"; value: "75.8062"; }
        ListElement{ radius: "20"; angle: "50"; value: "78.7531"; }
        ListElement{ radius: "20"; angle: "55"; value: "81.4085"; }
        ListElement{ radius: "20"; angle: "60"; value: "83.7521"; }
        ListElement{ radius: "20"; angle: "65"; value: "85.7662"; }
        ListElement{ radius: "20"; angle: "70"; value: "87.4355"; }
        ListElement{ radius: "20"; angle: "75"; value: "88.7471"; }
        ListElement{ radius: "20"; angle: "80"; value: "89.6912"; }
        ListElement{ radius: "20"; angle: "85"; value: "90.2606"; }
        ListElement{ radius: "20"; angle: "90"; value: "90.4508"; }
        ListElement{ radius: "20"; angle: "95"; value: "90.2606"; }
        ListElement{ radius: "20"; angle: "100"; value: "89.6912"; }
        ListElement{ radius: "20"; angle: "105"; value: "88.7471"; }
        ListElement{ radius: "20"; angle: "110"; value: "87.4355"; }
        ListElement{ radius: "20"; angle: "115"; value: "85.7662"; }
        ListElement{ radius: "20"; angle: "120"; value: "83.7521"; }
        ListElement{ radius: "20"; angle: "125"; value: "81.4085"; }
        ListElement{ radius: "20"; angle: "130"; value: "78.7531"; }
        ListElement{ radius: "20"; angle: "135"; value: "75.8062"; }
        ListElement{ radius: "20"; angle: "140"; value: "72.5902"; }
        ListElement{ radius: "20"; angle: "145"; value: "69.1297"; }
        ListElement{ radius: "20"; angle: "150"; value: "65.4508"; }
        ListElement{ radius: "20"; angle: "155"; value: "61.5818"; }
        ListElement{ radius: "20"; angle: "160"; value: "57.5519"; }
        ListElement{ radius: "20"; angle: "165"; value: "53.3918"; }
        ListElement{ radius: "20"; angle: "170"; value: "49.1333"; }
        ListElement{ radius: "20"; angle: "175"; value: "44.8086"; }
        ListElement{ radius: "20"; angle: "180"; value: "40.4508"; }
        ListElement{ radius: "20"; angle: "185"; value: "36.0931"; }
        ListElement{ radius: "20"; angle: "190"; value: "31.7684"; }
        ListElement{ radius: "20"; angle: "195"; value: "27.5099"; }
        ListElement{ radius: "20"; angle: "200"; value: "23.3498"; }
        ListElement{ radius: "20"; angle: "205"; value: "19.3199"; }
        ListElement{ radius: "20"; angle: "210"; value: "15.4508"; }
        ListElement{ radius: "20"; angle: "215"; value: "11.772"; }
        ListElement{ radius: "20"; angle: "220"; value: "8.31147"; }
        ListElement{ radius: "20"; angle: "225"; value: "5.09551"; }
        ListElement{ radius: "20"; angle: "230"; value: "2.14863"; }
        ListElement{ radius: "20"; angle: "235"; value: "-0.506752"; }
        ListElement{ radius: "20"; angle: "240"; value: "-2.85042"; }
        ListElement{ radius: "20"; angle: "245"; value: "-4.86454"; }
        ListElement{ radius: "20"; angle: "250"; value: "-6.53378"; }
        ListElement{ radius: "20"; angle: "255"; value: "-7.84544"; }
        ListElement{ radius: "20"; angle: "260"; value: "-8.78954"; }
        ListElement{ radius: "20"; angle: "265"; value: "-9.35889"; }
        ListElement{ radius: "20"; angle: "270"; value: "-9.54915"; }
        ListElement{ radius: "20"; angle: "275"; value: "-9.35889"; }
        ListElement{ radius: "20"; angle: "280"; value: "-8.78954"; }
        ListElement{ radius: "20"; angle: "285"; value: "-7.84544"; }
        ListElement{ radius: "20"; angle: "290"; value: "-6.53378"; }
        ListElement{ radius: "20"; angle: "295"; value: "-4.86454"; }
        ListElement{ radius: "20"; angle: "300"; value: "-2.85042"; }
        ListElement{ radius: "20"; angle: "305"; value: "-0.506752"; }
        ListElement{ radius: "20"; angle: "310"; value: "2.14863"; }
        ListElement{ radius: "20"; angle: "315"; value: "5.09551"; }
        ListElement{ radius: "20"; angle: "320"; value: "8.31147"; }
        ListElement{ radius: "20"; angle: "325"; value: "11.772"; }
        ListElement{ radius: "20"; angle: "330"; value: "15.4508"; }
        ListElement{ radius: "20"; angle: "335"; value: "19.3199"; }
        ListElement{ radius: "20"; angle: "340"; value: "23.3498"; }
        ListElement{ radius: "20"; angle: "345"; value: "27.5099"; }
        ListElement{ radius: "20"; angle: "350"; value: "31.7684"; }
        ListElement{ radius: "20"; angle: "355"; value: "36.0931"; }
        ListElement{ radius: "20"; angle: "360"; value: "40.4508"; }
        ListElement{ radius: "25"; angle: "0"; value: "35.3553"; }
        ListElement{ radius: "25"; angle: "5"; value: "39.7131"; }
        ListElement{ radius: "25"; angle: "10"; value: "44.0377"; }
        ListElement{ radius: "25"; angle: "15"; value: "48.2963"; }
        ListElement{ radius: "25"; angle: "20"; value: "52.4563"; }
        ListElement{ radius: "25"; angle: "25"; value: "56.4863"; }
        ListElement{ radius: "25"; angle: "30"; value: "60.3553"; }
        ListElement{ radius: "25"; angle: "35"; value: "64.0342"; }
        ListElement{ radius: "25"; angle: "40"; value: "67.4947"; }
        ListElement{ radius: "25"; angle: "45"; value: "70.7107"; }
        ListElement{ radius: "25"; angle: "50"; value: "73.6576"; }
        ListElement{ radius: "25"; angle: "55"; value: "76.3129"; }
        ListElement{ radius: "25"; angle: "60"; value: "78.6566"; }
        ListElement{ radius: "25"; angle: "65"; value: "80.6707"; }
        ListElement{ radius: "25"; angle: "70"; value: "82.34"; }
        ListElement{ radius: "25"; angle: "75"; value: "83.6516"; }
        ListElement{ radius: "25"; angle: "80"; value: "84.5957"; }
        ListElement{ radius: "25"; angle: "85"; value: "85.1651"; }
        ListElement{ radius: "25"; angle: "90"; value: "85.3553"; }
        ListElement{ radius: "25"; angle: "95"; value: "85.1651"; }
        ListElement{ radius: "25"; angle: "100"; value: "84.5957"; }
        ListElement{ radius: "25"; angle: "105"; value: "83.6516"; }
        ListElement{ radius: "25"; angle: "110"; value: "82.34"; }
        ListElement{ radius: "25"; angle: "115"; value: "80.6707"; }
        ListElement{ radius: "25"; angle: "120"; value: "78.6566"; }
        ListElement{ radius: "25"; angle: "125"; value: "76.3129"; }
        ListElement{ radius: "25"; angle: "130"; value: "73.6576"; }
        ListElement{ radius: "25"; angle: "135"; value: "70.7107"; }
        ListElement{ radius: "25"; angle: "140"; value: "67.4947"; }
        ListElement{ radius: "25"; angle: "145"; value: "64.0342"; }
        ListElement{ radius: "25"; angle: "150"; value: "60.3553"; }
        ListElement{ radius: "25"; angle: "155"; value: "56.4863"; }
        ListElement{ radius: "25"; angle: "160"; value: "52.4563"; }
        ListElement{ radius: "25"; angle: "165"; value: "48.2963"; }
        ListElement{ radius: "25"; angle: "170"; value: "44.0377"; }
        ListElement{ radius: "25"; angle: "175"; value: "39.7131"; }
        ListElement{ radius: "25"; angle: "180"; value: "35.3553"; }
        ListElement{ radius: "25"; angle: "185"; value: "30.9976"; }
        ListElement{ radius: "25"; angle: "190"; value: "26.6729"; }
        ListElement{ radius: "25"; angle: "195"; value: "22.4144"; }
        ListElement{ radius: "25"; angle: "200"; value: "18.2543"; }
        ListElement{ radius: "25"; angle: "205"; value: "14.2244"; }
        ListElement{ radius: "25"; angle: "210"; value: "10.3553"; }
        ListElement{ radius: "25"; angle: "215"; value: "6.67652"; }
        ListElement{ radius: "25"; angle: "220"; value: "3.21596"; }
        ListElement{ radius: "25"; angle: "225"; value: "5.55112e-15"; }
        ListElement{ radius: "25"; angle: "230"; value: "-2.94688"; }
        ListElement{ radius: "25"; angle: "235"; value: "-5.60226"; }
        ListElement{ radius: "25"; angle: "240"; value: "-7.94593"; }
        ListElement{ radius: "25"; angle: "245"; value: "-9.96005"; }
        ListElement{ radius: "25"; angle: "250"; value: "-11.6293"; }
        ListElement{ radius: "25"; angle: "255"; value: "-12.941"; }
        ListElement{ radius: "25"; angle: "260"; value: "-13.885"; }
        ListElement{ radius: "25"; angle: "265"; value: "-14.4544"; }
        ListElement{ radius: "25"; angle: "270"; value: "-14.6447"; }
        ListElement{ radius: "25"; angle: "275"; value: "-14.4544"; }
        ListElement{ radius: "25"; angle: "280"; value: "-13.885"; }
        ListElement{ radius: "25"; angle: "285"; value: "-12.941"; }
        ListElement{ radius: "25"; angle: "290"; value: "-11.6293"; }
        ListElement{ radius: "25"; angle: "295"; value: "-9.96005"; }
        ListElement{ radius: "25"; angle: "300"; value: "-7.94593"; }
        ListElement{ radius: "25"; angle: "305"; value: "-5.60226"; }
        ListElement{ radius: "25"; angle: "310"; value: "-2.94688"; }
        ListElement{ radius: "25"; angle: "315"; value: "-5.55112e-15"; }
        ListElement{ radius: "25"; angle: "320"; value: "3.21596"; }
        ListElement{ radius: "25"; angle: "325"; value: "6.67652"; }
        ListElement{ radius: "25"; angle: "330"; value: "10.3553"; }
        ListElement{ radius: "25"; angle: "335"; value: "14.2244"; }
        ListElement{ radius: "25"; angle: "340"; value: "18.2543"; }
        ListElement{ radius: "25"; angle: "345"; value: "22.4144"; }
        ListElement{ radius: "25"; angle: "350"; value: "26.6729"; }
        ListElement{ radius: "25"; angle: "355"; value: "30.9976"; }
        ListElement{ radius: "25"; angle: "360"; value: "35.3553"; }
        ListElement{ radius: "30"; angle: "0"; value: "29.3893"; }
        ListElement{ radius: "30"; angle: "5"; value: "33.747"; }
        ListElement{ radius: "30"; angle: "10"; value: "38.0717"; }
        ListElement{ radius: "30"; angle: "15"; value: "42.3302"; }
        ListElement{ radius: "30"; angle: "20"; value: "46.4903"; }
        ListElement{ radius: "30"; angle: "25"; value: "50.5202"; }
        ListElement{ radius: "30"; angle: "30"; value: "54.3893"; }
        ListElement{ radius: "30"; angle: "35"; value: "58.0681"; }
        ListElement{ radius: "30"; angle: "40"; value: "61.5286"; }
        ListElement{ radius: "30"; angle: "45"; value: "64.7446"; }
        ListElement{ radius: "30"; angle: "50"; value: "67.6915"; }
        ListElement{ radius: "30"; angle: "55"; value: "70.3469"; }
        ListElement{ radius: "30"; angle: "60"; value: "72.6905"; }
        ListElement{ radius: "30"; angle: "65"; value: "74.7047"; }
        ListElement{ radius: "30"; angle: "70"; value: "76.3739"; }
        ListElement{ radius: "30"; angle: "75"; value: "77.6856"; }
        ListElement{ radius: "30"; angle: "80"; value: "78.6297"; }
        ListElement{ radius: "30"; angle: "85"; value: "79.199"; }
        ListElement{ radius: "30"; angle: "90"; value: "79.3893"; }
        ListElement{ radius: "30"; angle: "95"; value: "79.199"; }
        ListElement{ radius: "30"; angle: "100"; value: "78.6297"; }
        ListElement{ radius: "30"; angle: "105"; value: "77.6856"; }
        ListElement{ radius: "30"; angle: "110"; value: "76.3739"; }
        ListElement{ radius: "30"; angle: "115"; value: "74.7047"; }
        ListElement{ radius: "30"; angle: "120"; value: "72.6905"; }
        ListElement{ radius: "30"; angle: "125"; value: "70.3469"; }
        ListElement{ radius: "30"; angle: "130"; value: "67.6915"; }
        ListElement{ radius: "30"; angle: "135"; value: "64.7446"; }
        ListElement{ radius: "30"; angle: "140"; value: "61.5286"; }
        ListElement{ radius: "30"; angle: "145"; value: "58.0681"; }
        ListElement{ radius: "30"; angle: "150"; value: "54.3893"; }
        ListElement{ radius: "30"; angle: "155"; value: "50.5202"; }
        ListElement{ radius: "30"; angle: "160"; value: "46.4903"; }
        ListElement{ radius: "30"; angle: "165"; value: "42.3302"; }
        ListElement{ radius: "30"; angle: "170"; value: "38.0717"; }
        ListElement{ radius: "30"; angle: "175"; value: "33.747"; }
        ListElement{ radius: "30"; angle: "180"; value: "29.3893"; }
        ListElement{ radius: "30"; angle: "185"; value: "25.0315"; }
        ListElement{ radius: "30"; angle: "190"; value: "20.7069"; }
        ListElement{ radius: "30"; angle: "195"; value: "16.4483"; }
        ListElement{ radius: "30"; angle: "200"; value: "12.2883"; }
        ListElement{ radius: "30"; angle: "205"; value: "8.25835"; }
        ListElement{ radius: "30"; angle: "210"; value: "4.38926"; }
        ListElement{ radius: "30"; angle: "215"; value: "0.710441"; }
        ListElement{ radius: "30"; angle: "220"; value: "-2.75012"; }
        ListElement{ radius: "30"; angle: "225"; value: "-5.96608"; }
        ListElement{ radius: "30"; angle: "230"; value: "-8.91296"; }
        ListElement{ radius: "30"; angle: "235"; value: "-11.5683"; }
        ListElement{ radius: "30"; angle: "240"; value: "-13.912"; }
        ListElement{ radius: "30"; angle: "245"; value: "-15.9261"; }
        ListElement{ radius: "30"; angle: "250"; value: "-17.5954"; }
        ListElement{ radius: "30"; angle: "255"; value: "-18.907"; }
        ListElement{ radius: "30"; angle: "260"; value: "-19.8511"; }
        ListElement{ radius: "30"; angle: "265"; value: "-20.4205"; }
        ListElement{ radius: "30"; angle: "270"; value: "-20.6107"; }
        ListElement{ radius: "30"; angle: "275"; value: "-20.4205"; }
        ListElement{ radius: "30"; angle: "280"; value: "-19.8511"; }
        ListElement{ radius: "30"; angle: "285"; value: "-18.907"; }
        ListElement{ radius: "30"; angle: "290"; value: "-17.5954"; }
        ListElement{ radius: "30"; angle: "295"; value: "-15.9261"; }
        ListElement{ radius: "30"; angle: "300"; value: "-13.912"; }
        ListElement{ radius: "30"; angle: "305"; value: "-11.5683"; }
        ListElement{ radius: "30"; angle: "310"; value: "-8.91296"; }
        ListElement{ radius: "30"; angle: "315"; value: "-5.96608"; }
        ListElement{ radius: "30"; angle: "320"; value: "-2.75012"; }
        ListElement{ radius: "30"; angle: "325"; value: "0.710441"; }
        ListElement{ radius: "30"; angle: "330"; value: "4.38926"; }
        ListElement{ radius: "30"; angle: "335"; value: "8.25835"; }
        ListElement{ radius: "30"; angle: "340"; value: "12.2883"; }
        ListElement{ radius: "30"; angle: "345"; value: "16.4483"; }
        ListElement{ radius: "30"; angle: "350"; value: "20.7069"; }
        ListElement{ radius: "30"; angle: "355"; value: "25.0315"; }
        ListElement{ radius: "30"; angle: "360"; value: "29.3893"; }
        ListElement{ radius: "35"; angle: "0"; value: "22.6995"; }
        ListElement{ radius: "35"; angle: "5"; value: "27.0573"; }
        ListElement{ radius: "35"; angle: "10"; value: "31.3819"; }
        ListElement{ radius: "35"; angle: "15"; value: "35.6405"; }
        ListElement{ radius: "35"; angle: "20"; value: "39.8005"; }
        ListElement{ radius: "35"; angle: "25"; value: "43.8304"; }
        ListElement{ radius: "35"; angle: "30"; value: "47.6995"; }
        ListElement{ radius: "35"; angle: "35"; value: "51.3783"; }
        ListElement{ radius: "35"; angle: "40"; value: "54.8389"; }
        ListElement{ radius: "35"; angle: "45"; value: "58.0549"; }
        ListElement{ radius: "35"; angle: "50"; value: "61.0017"; }
        ListElement{ radius: "35"; angle: "55"; value: "63.6571"; }
        ListElement{ radius: "35"; angle: "60"; value: "66.0008"; }
        ListElement{ radius: "35"; angle: "65"; value: "68.0149"; }
        ListElement{ radius: "35"; angle: "70"; value: "69.6842"; }
        ListElement{ radius: "35"; angle: "75"; value: "70.9958"; }
        ListElement{ radius: "35"; angle: "80"; value: "71.9399"; }
        ListElement{ radius: "35"; angle: "85"; value: "72.5093"; }
        ListElement{ radius: "35"; angle: "90"; value: "72.6995"; }
        ListElement{ radius: "35"; angle: "95"; value: "72.5093"; }
        ListElement{ radius: "35"; angle: "100"; value: "71.9399"; }
        ListElement{ radius: "35"; angle: "105"; value: "70.9958"; }
        ListElement{ radius: "35"; angle: "110"; value: "69.6842"; }
        ListElement{ radius: "35"; angle: "115"; value: "68.0149"; }
        ListElement{ radius: "35"; angle: "120"; value: "66.0008"; }
        ListElement{ radius: "35"; angle: "125"; value: "63.6571"; }
        ListElement{ radius: "35"; angle: "130"; value: "61.0017"; }
        ListElement{ radius: "35"; angle: "135"; value: "58.0549"; }
        ListElement{ radius: "35"; angle: "140"; value: "54.8389"; }
        ListElement{ radius: "35"; angle: "145"; value: "51.3783"; }
        ListElement{ radius: "35"; angle: "150"; value: "47.6995"; }
        ListElement{ radius: "35"; angle: "155"; value: "43.8304"; }
        ListElement{ radius: "35"; angle: "160"; value: "39.8005"; }
        ListElement{ radius: "35"; angle: "165"; value: "35.6405"; }
        ListElement{ radius: "35"; angle: "170"; value: "31.3819"; }
        ListElement{ radius: "35"; angle: "175"; value: "27.0573"; }
        ListElement{ radius: "35"; angle: "180"; value: "22.6995"; }
        ListElement{ radius: "35"; angle: "185"; value: "18.3417"; }
        ListElement{ radius: "35"; angle: "190"; value: "14.0171"; }
        ListElement{ radius: "35"; angle: "195"; value: "9.75857"; }
        ListElement{ radius: "35"; angle: "200"; value: "5.59852"; }
        ListElement{ radius: "35"; angle: "205"; value: "1.56861"; }
        ListElement{ radius: "35"; angle: "210"; value: "-2.30048"; }
        ListElement{ radius: "35"; angle: "215"; value: "-5.9793"; }
        ListElement{ radius: "35"; angle: "220"; value: "-9.43986"; }
        ListElement{ radius: "35"; angle: "225"; value: "-12.6558"; }
        ListElement{ radius: "35"; angle: "230"; value: "-15.6027"; }
        ListElement{ radius: "35"; angle: "235"; value: "-18.2581"; }
        ListElement{ radius: "35"; angle: "240"; value: "-20.6017"; }
        ListElement{ radius: "35"; angle: "245"; value: "-22.6159"; }
        ListElement{ radius: "35"; angle: "250"; value: "-24.2851"; }
        ListElement{ radius: "35"; angle: "255"; value: "-25.5968"; }
        ListElement{ radius: "35"; angle: "260"; value: "-26.5409"; }
        ListElement{ radius: "35"; angle: "265"; value: "-27.1102"; }
        ListElement{ radius: "35"; angle: "270"; value: "-27.3005"; }
        ListElement{ radius: "35"; angle: "275"; value: "-27.1102"; }
        ListElement{ radius: "35"; angle: "280"; value: "-26.5409"; }
        ListElement{ radius: "35"; angle: "285"; value: "-25.5968"; }
        ListElement{ radius: "35"; angle: "290"; value: "-24.2851"; }
        ListElement{ radius: "35"; angle: "295"; value: "-22.6159"; }
        ListElement{ radius: "35"; angle: "300"; value: "-20.6017"; }
        ListElement{ radius: "35"; angle: "305"; value: "-18.2581"; }
        ListElement{ radius: "35"; angle: "310"; value: "-15.6027"; }
        ListElement{ radius: "35"; angle: "315"; value: "-12.6558"; }
        ListElement{ radius: "35"; angle: "320"; value: "-9.43986"; }
        ListElement{ radius: "35"; angle: "325"; value: "-5.9793"; }
        ListElement{ radius: "35"; angle: "330"; value: "-2.30048"; }
        ListElement{ radius: "35"; angle: "335"; value: "1.56861"; }
        ListElement{ radius: "35"; angle: "340"; value: "5.59852"; }
        ListElement{ radius: "35"; angle: "345"; value: "9.75857"; }
        ListElement{ radius: "35"; angle: "350"; value: "14.0171"; }
        ListElement{ radius: "35"; angle: "355"; value: "18.3417"; }
        ListElement{ radius: "35"; angle: "360"; value: "22.6995"; }
        ListElement{ radius: "40"; angle: "0"; value: "15.4508"; }
        ListElement{ radius: "40"; angle: "5"; value: "19.8086"; }
        ListElement{ radius: "40"; angle: "10"; value: "24.1333"; }
        ListElement{ radius: "40"; angle: "15"; value: "28.3918"; }
        ListElement{ radius: "40"; angle: "20"; value: "32.5519"; }
        ListElement{ radius: "40"; angle: "25"; value: "36.5818"; }
        ListElement{ radius: "40"; angle: "30"; value: "40.4508"; }
        ListElement{ radius: "40"; angle: "35"; value: "44.1297"; }
        ListElement{ radius: "40"; angle: "40"; value: "47.5902"; }
        ListElement{ radius: "40"; angle: "45"; value: "50.8062"; }
        ListElement{ radius: "40"; angle: "50"; value: "53.7531"; }
        ListElement{ radius: "40"; angle: "55"; value: "56.4085"; }
        ListElement{ radius: "40"; angle: "60"; value: "58.7521"; }
        ListElement{ radius: "40"; angle: "65"; value: "60.7662"; }
        ListElement{ radius: "40"; angle: "70"; value: "62.4355"; }
        ListElement{ radius: "40"; angle: "75"; value: "63.7471"; }
        ListElement{ radius: "40"; angle: "80"; value: "64.6912"; }
        ListElement{ radius: "40"; angle: "85"; value: "65.2606"; }
        ListElement{ radius: "40"; angle: "90"; value: "65.4508"; }
        ListElement{ radius: "40"; angle: "95"; value: "65.2606"; }
        ListElement{ radius: "40"; angle: "100"; value: "64.6912"; }
        ListElement{ radius: "40"; angle: "105"; value: "63.7471"; }
        ListElement{ radius: "40"; angle: "110"; value: "62.4355"; }
        ListElement{ radius: "40"; angle: "115"; value: "60.7662"; }
        ListElement{ radius: "40"; angle: "120"; value: "58.7521"; }
        ListElement{ radius: "40"; angle: "125"; value: "56.4085"; }
        ListElement{ radius: "40"; angle: "130"; value: "53.7531"; }
        ListElement{ radius: "40"; angle: "135"; value: "50.8062"; }
        ListElement{ radius: "40"; angle: "140"; value: "47.5902"; }
        ListElement{ radius: "40"; angle: "145"; value: "44.1297"; }
        ListElement{ radius: "40"; angle: "150"; value: "40.4508"; }
        ListElement{ radius: "40"; angle: "155"; value: "36.5818"; }
        ListElement{ radius: "40"; angle: "160"; value: "32.5519"; }
        ListElement{ radius: "40"; angle: "165"; value: "28.3918"; }
        ListElement{ radius: "40"; angle: "170"; value: "24.1333"; }
        ListElement{ radius: "40"; angle: "175"; value: "19.8086"; }
        ListElement{ radius: "40"; angle: "180"; value: "15.4508"; }
        ListElement{ radius: "40"; angle: "185"; value: "11.0931"; }
        ListElement{ radius: "40"; angle: "190"; value: "6.76844"; }
        ListElement{ radius: "40"; angle: "195"; value: "2.5099"; }
        ListElement{ radius: "40"; angle: "200"; value: "-1.65016"; }
        ListElement{ radius: "40"; angle: "205"; value: "-5.68006"; }
        ListElement{ radius: "40"; angle: "210"; value: "-9.54915"; }
        ListElement{ radius: "40"; angle: "215"; value: "-13.228"; }
        ListElement{ radius: "40"; angle: "220"; value: "-16.6885"; }
        ListElement{ radius: "40"; angle: "225"; value: "-19.9045"; }
        ListElement{ radius: "40"; angle: "230"; value: "-22.8514"; }
        ListElement{ radius: "40"; angle: "235"; value: "-25.5068"; }
        ListElement{ radius: "40"; angle: "240"; value: "-27.8504"; }
        ListElement{ radius: "40"; angle: "245"; value: "-29.8645"; }
        ListElement{ radius: "40"; angle: "250"; value: "-31.5338"; }
        ListElement{ radius: "40"; angle: "255"; value: "-32.8454"; }
        ListElement{ radius: "40"; angle: "260"; value: "-33.7895"; }
        ListElement{ radius: "40"; angle: "265"; value: "-34.3589"; }
        ListElement{ radius: "40"; angle: "270"; value: "-34.5492"; }
        ListElement{ radius: "40"; angle: "275"; value: "-34.3589"; }
        ListElement{ radius: "40"; angle: "280"; value: "-33.7895"; }
        ListElement{ radius: "40"; angle: "285"; value: "-32.8454"; }
        ListElement{ radius: "40"; angle: "290"; value: "-31.5338"; }
        ListElement{ radius: "40"; angle: "295"; value: "-29.8645"; }
        ListElement{ radius: "40"; angle: "300"; value: "-27.8504"; }
        ListElement{ radius: "40"; angle: "305"; value: "-25.5068"; }
        ListElement{ radius: "40"; angle: "310"; value: "-22.8514"; }
        ListElement{ radius: "40"; angle: "315"; value: "-19.9045"; }
        ListElement{ radius: "40"; angle: "320"; value: "-16.6885"; }
        ListElement{ radius: "40"; angle: "325"; value: "-13.228"; }
        ListElement{ radius: "40"; angle: "330"; value: "-9.54915"; }
        ListElement{ radius: "40"; angle: "335"; value: "-5.68006"; }
        ListElement{ radius: "40"; angle: "340"; value: "-1.65016"; }
        ListElement{ radius: "40"; angle: "345"; value: "2.5099"; }
        ListElement{ radius: "40"; angle: "350"; value: "6.76844"; }
        ListElement{ radius: "40"; angle: "355"; value: "11.0931"; }
        ListElement{ radius: "40"; angle: "360"; value: "15.4508"; }
        ListElement{ radius: "45"; angle: "0"; value: "7.82172"; }
        ListElement{ radius: "45"; angle: "5"; value: "12.1795"; }
        ListElement{ radius: "45"; angle: "10"; value: "16.5041"; }
        ListElement{ radius: "45"; angle: "15"; value: "20.7627"; }
        ListElement{ radius: "45"; angle: "20"; value: "24.9227"; }
        ListElement{ radius: "45"; angle: "25"; value: "28.9526"; }
        ListElement{ radius: "45"; angle: "30"; value: "32.8217"; }
        ListElement{ radius: "45"; angle: "35"; value: "36.5005"; }
        ListElement{ radius: "45"; angle: "40"; value: "39.9611"; }
        ListElement{ radius: "45"; angle: "45"; value: "43.1771"; }
        ListElement{ radius: "45"; angle: "50"; value: "46.1239"; }
        ListElement{ radius: "45"; angle: "55"; value: "48.7793"; }
        ListElement{ radius: "45"; angle: "60"; value: "51.123"; }
        ListElement{ radius: "45"; angle: "65"; value: "53.1371"; }
        ListElement{ radius: "45"; angle: "70"; value: "54.8064"; }
        ListElement{ radius: "45"; angle: "75"; value: "56.118"; }
        ListElement{ radius: "45"; angle: "80"; value: "57.0621"; }
        ListElement{ radius: "45"; angle: "85"; value: "57.6315"; }
        ListElement{ radius: "45"; angle: "90"; value: "57.8217"; }
        ListElement{ radius: "45"; angle: "95"; value: "57.6315"; }
        ListElement{ radius: "45"; angle: "100"; value: "57.0621"; }
        ListElement{ radius: "45"; angle: "105"; value: "56.118"; }
        ListElement{ radius: "45"; angle: "110"; value: "54.8064"; }
        ListElement{ radius: "45"; angle: "115"; value: "53.1371"; }
        ListElement{ radius: "45"; angle: "120"; value: "51.123"; }
        ListElement{ radius: "45"; angle: "125"; value: "48.7793"; }
        ListElement{ radius: "45"; angle: "130"; value: "46.1239"; }
        ListElement{ radius: "45"; angle: "135"; value: "43.1771"; }
        ListElement{ radius: "45"; angle: "140"; value: "39.9611"; }
        ListElement{ radius: "45"; angle: "145"; value: "36.5005"; }
        ListElement{ radius: "45"; angle: "150"; value: "32.8217"; }
        ListElement{ radius: "45"; angle: "155"; value: "28.9526"; }
        ListElement{ radius: "45"; angle: "160"; value: "24.9227"; }
        ListElement{ radius: "45"; angle: "165"; value: "20.7627"; }
        ListElement{ radius: "45"; angle: "170"; value: "16.5041"; }
        ListElement{ radius: "45"; angle: "175"; value: "12.1795"; }
        ListElement{ radius: "45"; angle: "180"; value: "7.82172"; }
        ListElement{ radius: "45"; angle: "185"; value: "3.46394"; }
        ListElement{ radius: "45"; angle: "190"; value: "-0.860686"; }
        ListElement{ radius: "45"; angle: "195"; value: "-5.11923"; }
        ListElement{ radius: "45"; angle: "200"; value: "-9.27928"; }
        ListElement{ radius: "45"; angle: "205"; value: "-13.3092"; }
        ListElement{ radius: "45"; angle: "210"; value: "-17.1783"; }
        ListElement{ radius: "45"; angle: "215"; value: "-20.8571"; }
        ListElement{ radius: "45"; angle: "220"; value: "-24.3177"; }
        ListElement{ radius: "45"; angle: "225"; value: "-27.5336"; }
        ListElement{ radius: "45"; angle: "230"; value: "-30.4805"; }
        ListElement{ radius: "45"; angle: "235"; value: "-33.1359"; }
        ListElement{ radius: "45"; angle: "240"; value: "-35.4795"; }
        ListElement{ radius: "45"; angle: "245"; value: "-37.4937"; }
        ListElement{ radius: "45"; angle: "250"; value: "-39.1629"; }
        ListElement{ radius: "45"; angle: "255"; value: "-40.4746"; }
        ListElement{ radius: "45"; angle: "260"; value: "-41.4187"; }
        ListElement{ radius: "45"; angle: "265"; value: "-41.988"; }
        ListElement{ radius: "45"; angle: "270"; value: "-42.1783"; }
        ListElement{ radius: "45"; angle: "275"; value: "-41.988"; }
        ListElement{ radius: "45"; angle: "280"; value: "-41.4187"; }
        ListElement{ radius: "45"; angle: "285"; value: "-40.4746"; }
        ListElement{ radius: "45"; angle: "290"; value: "-39.1629"; }
        ListElement{ radius: "45"; angle: "295"; value: "-37.4937"; }
        ListElement{ radius: "45"; angle: "300"; value: "-35.4795"; }
        ListElement{ radius: "45"; angle: "305"; value: "-33.1359"; }
        ListElement{ radius: "45"; angle: "310"; value: "-30.4805"; }
        ListElement{ radius: "45"; angle: "315"; value: "-27.5336"; }
        ListElement{ radius: "45"; angle: "320"; value: "-24.3177"; }
        ListElement{ radius: "45"; angle: "325"; value: "-20.8571"; }
        ListElement{ radius: "45"; angle: "330"; value: "-17.1783"; }
        ListElement{ radius: "45"; angle: "335"; value: "-13.3092"; }
        ListElement{ radius: "45"; angle: "340"; value: "-9.27928"; }
        ListElement{ radius: "45"; angle: "345"; value: "-5.11923"; }
        ListElement{ radius: "45"; angle: "350"; value: "-0.860686"; }
        ListElement{ radius: "45"; angle: "355"; value: "3.46394"; }
        ListElement{ radius: "45"; angle: "360"; value: "7.82172"; }
        ListElement{ radius: "50"; angle: "0"; value: "3.06162e-15"; }
        ListElement{ radius: "50"; angle: "5"; value: "4.35779"; }
        ListElement{ radius: "50"; angle: "10"; value: "8.68241"; }
        ListElement{ radius: "50"; angle: "15"; value: "12.941"; }
        ListElement{ radius: "50"; angle: "20"; value: "17.101"; }
        ListElement{ radius: "50"; angle: "25"; value: "21.1309"; }
        ListElement{ radius: "50"; angle: "30"; value: "25"; }
        ListElement{ radius: "50"; angle: "35"; value: "28.6788"; }
        ListElement{ radius: "50"; angle: "40"; value: "32.1394"; }
        ListElement{ radius: "50"; angle: "45"; value: "35.3553"; }
        ListElement{ radius: "50"; angle: "50"; value: "38.3022"; }
        ListElement{ radius: "50"; angle: "55"; value: "40.9576"; }
        ListElement{ radius: "50"; angle: "60"; value: "43.3013"; }
        ListElement{ radius: "50"; angle: "65"; value: "45.3154"; }
        ListElement{ radius: "50"; angle: "70"; value: "46.9846"; }
        ListElement{ radius: "50"; angle: "75"; value: "48.2963"; }
        ListElement{ radius: "50"; angle: "80"; value: "49.2404"; }
        ListElement{ radius: "50"; angle: "85"; value: "49.8097"; }
        ListElement{ radius: "50"; angle: "90"; value: "50"; }
        ListElement{ radius: "50"; angle: "95"; value: "49.8097"; }
        ListElement{ radius: "50"; angle: "100"; value: "49.2404"; }
        ListElement{ radius: "50"; angle: "105"; value: "48.2963"; }
        ListElement{ radius: "50"; angle: "110"; value: "46.9846"; }
        ListElement{ radius: "50"; angle: "115"; value: "45.3154"; }
        ListElement{ radius: "50"; angle: "120"; value: "43.3013"; }
        ListElement{ radius: "50"; angle: "125"; value: "40.9576"; }
        ListElement{ radius: "50"; angle: "130"; value: "38.3022"; }
        ListElement{ radius: "50"; angle: "135"; value: "35.3553"; }
        ListElement{ radius: "50"; angle: "140"; value: "32.1394"; }
        ListElement{ radius: "50"; angle: "145"; value: "28.6788"; }
        ListElement{ radius: "50"; angle: "150"; value: "25"; }
        ListElement{ radius: "50"; angle: "155"; value: "21.1309"; }
        ListElement{ radius: "50"; angle: "160"; value: "17.101"; }
        ListElement{ radius: "50"; angle: "165"; value: "12.941"; }
        ListElement{ radius: "50"; angle: "170"; value: "8.68241"; }
        ListElement{ radius: "50"; angle: "175"; value: "4.35779"; }
        ListElement{ radius: "50"; angle: "180"; value: "9.18485e-15"; }
        ListElement{ radius: "50"; angle: "185"; value: "-4.35779"; }
        ListElement{ radius: "50"; angle: "190"; value: "-8.68241"; }
        ListElement{ radius: "50"; angle: "195"; value: "-12.941"; }
        ListElement{ radius: "50"; angle: "200"; value: "-17.101"; }
        ListElement{ radius: "50"; angle: "205"; value: "-21.1309"; }
        ListElement{ radius: "50"; angle: "210"; value: "-25"; }
        ListElement{ radius: "50"; angle: "215"; value: "-28.6788"; }
        ListElement{ radius: "50"; angle: "220"; value: "-32.1394"; }
        ListElement{ radius: "50"; angle: "225"; value: "-35.3553"; }
        ListElement{ radius: "50"; angle: "230"; value: "-38.3022"; }
        ListElement{ radius: "50"; angle: "235"; value: "-40.9576"; }
        ListElement{ radius: "50"; angle: "240"; value: "-43.3013"; }
        ListElement{ radius: "50"; angle: "245"; value: "-45.3154"; }
        ListElement{ radius: "50"; angle: "250"; value: "-46.9846"; }
        ListElement{ radius: "50"; angle: "255"; value: "-48.2963"; }
        ListElement{ radius: "50"; angle: "260"; value: "-49.2404"; }
        ListElement{ radius: "50"; angle: "265"; value: "-49.8097"; }
        ListElement{ radius: "50"; angle: "270"; value: "-50"; }
        ListElement{ radius: "50"; angle: "275"; value: "-49.8097"; }
        ListElement{ radius: "50"; angle: "280"; value: "-49.2404"; }
        ListElement{ radius: "50"; angle: "285"; value: "-48.2963"; }
        ListElement{ radius: "50"; angle: "290"; value: "-46.9846"; }
        ListElement{ radius: "50"; angle: "295"; value: "-45.3154"; }
        ListElement{ radius: "50"; angle: "300"; value: "-43.3013"; }
        ListElement{ radius: "50"; angle: "305"; value: "-40.9576"; }
        ListElement{ radius: "50"; angle: "310"; value: "-38.3022"; }
        ListElement{ radius: "50"; angle: "315"; value: "-35.3553"; }
        ListElement{ radius: "50"; angle: "320"; value: "-32.1394"; }
        ListElement{ radius: "50"; angle: "325"; value: "-28.6788"; }
        ListElement{ radius: "50"; angle: "330"; value: "-25"; }
        ListElement{ radius: "50"; angle: "335"; value: "-21.1309"; }
        ListElement{ radius: "50"; angle: "340"; value: "-17.101"; }
        ListElement{ radius: "50"; angle: "345"; value: "-12.941"; }
        ListElement{ radius: "50"; angle: "350"; value: "-8.68241"; }
        ListElement{ radius: "50"; angle: "355"; value: "-4.35779"; }
        ListElement{ radius: "50"; angle: "360"; value: "-9.18485e-15"; }
        ListElement{ radius: "55"; angle: "0"; value: "-7.82172"; }
        ListElement{ radius: "55"; angle: "5"; value: "-3.46394"; }
        ListElement{ radius: "55"; angle: "10"; value: "0.860686"; }
        ListElement{ radius: "55"; angle: "15"; value: "5.11923"; }
        ListElement{ radius: "55"; angle: "20"; value: "9.27928"; }
        ListElement{ radius: "55"; angle: "25"; value: "13.3092"; }
        ListElement{ radius: "55"; angle: "30"; value: "17.1783"; }
        ListElement{ radius: "55"; angle: "35"; value: "20.8571"; }
        ListElement{ radius: "55"; angle: "40"; value: "24.3177"; }
        ListElement{ radius: "55"; angle: "45"; value: "27.5336"; }
        ListElement{ radius: "55"; angle: "50"; value: "30.4805"; }
        ListElement{ radius: "55"; angle: "55"; value: "33.1359"; }
        ListElement{ radius: "55"; angle: "60"; value: "35.4795"; }
        ListElement{ radius: "55"; angle: "65"; value: "37.4937"; }
        ListElement{ radius: "55"; angle: "70"; value: "39.1629"; }
        ListElement{ radius: "55"; angle: "75"; value: "40.4746"; }
        ListElement{ radius: "55"; angle: "80"; value: "41.4187"; }
        ListElement{ radius: "55"; angle: "85"; value: "41.988"; }
        ListElement{ radius: "55"; angle: "90"; value: "42.1783"; }
        ListElement{ radius: "55"; angle: "95"; value: "41.988"; }
        ListElement{ radius: "55"; angle: "100"; value: "41.4187"; }
        ListElement{ radius: "55"; angle: "105"; value: "40.4746"; }
        ListElement{ radius: "55"; angle: "110"; value: "39.1629"; }
        ListElement{ radius: "55"; angle: "115"; value: "37.4937"; }
        ListElement{ radius: "55"; angle: "120"; value: "35.4795"; }
        ListElement{ radius: "55"; angle: "125"; value: "33.1359"; }
        ListElement{ radius: "55"; angle: "130"; value: "30.4805"; }
        ListElement{ radius: "55"; angle: "135"; value: "27.5336"; }
        ListElement{ radius: "55"; angle: "140"; value: "24.3177"; }
        ListElement{ radius: "55"; angle: "145"; value: "20.8571"; }
        ListElement{ radius: "55"; angle: "150"; value: "17.1783"; }
        ListElement{ radius: "55"; angle: "155"; value: "13.3092"; }
        ListElement{ radius: "55"; angle: "160"; value: "9.27928"; }
        ListElement{ radius: "55"; angle: "165"; value: "5.11923"; }
        ListElement{ radius: "55"; angle: "170"; value: "0.860686"; }
        ListElement{ radius: "55"; angle: "175"; value: "-3.46394"; }
        ListElement{ radius: "55"; angle: "180"; value: "-7.82172"; }
        ListElement{ radius: "55"; angle: "185"; value: "-12.1795"; }
        ListElement{ radius: "55"; angle: "190"; value: "-16.5041"; }
        ListElement{ radius: "55"; angle: "195"; value: "-20.7627"; }
        ListElement{ radius: "55"; angle: "200"; value: "-24.9227"; }
        ListElement{ radius: "55"; angle: "205"; value: "-28.9526"; }
        ListElement{ radius: "55"; angle: "210"; value: "-32.8217"; }
        ListElement{ radius: "55"; angle: "215"; value: "-36.5005"; }
        ListElement{ radius: "55"; angle: "220"; value: "-39.9611"; }
        ListElement{ radius: "55"; angle: "225"; value: "-43.1771"; }
        ListElement{ radius: "55"; angle: "230"; value: "-46.1239"; }
        ListElement{ radius: "55"; angle: "235"; value: "-48.7793"; }
        ListElement{ radius: "55"; angle: "240"; value: "-51.123"; }
        ListElement{ radius: "55"; angle: "245"; value: "-53.1371"; }
        ListElement{ radius: "55"; angle: "250"; value: "-54.8064"; }
        ListElement{ radius: "55"; angle: "255"; value: "-56.118"; }
        ListElement{ radius: "55"; angle: "260"; value: "-57.0621"; }
        ListElement{ radius: "55"; angle: "265"; value: "-57.6315"; }
        ListElement{ radius: "55"; angle: "270"; value: "-57.8217"; }
        ListElement{ radius: "55"; angle: "275"; value: "-57.6315"; }
        ListElement{ radius: "55"; angle: "280"; value: "-57.0621"; }
        ListElement{ radius: "55"; angle: "285"; value: "-56.118"; }
        ListElement{ radius: "55"; angle: "290"; value: "-54.8064"; }
        ListElement{ radius: "55"; angle: "295"; value: "-53.1371"; }
        ListElement{ radius: "55"; angle: "300"; value: "-51.123"; }
        ListElement{ radius: "55"; angle: "305"; value: "-48.7793"; }
        ListElement{ radius: "55"; angle: "310"; value: "-46.1239"; }
        ListElement{ radius: "55"; angle: "315"; value: "-43.1771"; }
        ListElement{ radius: "55"; angle: "320"; value: "-39.9611"; }
        ListElement{ radius: "55"; angle: "325"; value: "-36.5005"; }
        ListElement{ radius: "55"; angle: "330"; value: "-32.8217"; }
        ListElement{ radius: "55"; angle: "335"; value: "-28.9526"; }
        ListElement{ radius: "55"; angle: "340"; value: "-24.9227"; }
        ListElement{ radius: "55"; angle: "345"; value: "-20.7627"; }
        ListElement{ radius: "55"; angle: "350"; value: "-16.5041"; }
        ListElement{ radius: "55"; angle: "355"; value: "-12.1795"; }
        ListElement{ radius: "55"; angle: "360"; value: "-7.82172"; }
        ListElement{ radius: "60"; angle: "0"; value: "-15.4508"; }
        ListElement{ radius: "60"; angle: "5"; value: "-11.0931"; }
        ListElement{ radius: "60"; angle: "10"; value: "-6.76844"; }
        ListElement{ radius: "60"; angle: "15"; value: "-2.5099"; }
        ListElement{ radius: "60"; angle: "20"; value: "1.65016"; }
        ListElement{ radius: "60"; angle: "25"; value: "5.68006"; }
        ListElement{ radius: "60"; angle: "30"; value: "9.54915"; }
        ListElement{ radius: "60"; angle: "35"; value: "13.228"; }
        ListElement{ radius: "60"; angle: "40"; value: "16.6885"; }
        ListElement{ radius: "60"; angle: "45"; value: "19.9045"; }
        ListElement{ radius: "60"; angle: "50"; value: "22.8514"; }
        ListElement{ radius: "60"; angle: "55"; value: "25.5068"; }
        ListElement{ radius: "60"; angle: "60"; value: "27.8504"; }
        ListElement{ radius: "60"; angle: "65"; value: "29.8645"; }
        ListElement{ radius: "60"; angle: "70"; value: "31.5338"; }
        ListElement{ radius: "60"; angle: "75"; value: "32.8454"; }
        ListElement{ radius: "60"; angle: "80"; value: "33.7895"; }
        ListElement{ radius: "60"; angle: "85"; value: "34.3589"; }
        ListElement{ radius: "60"; angle: "90"; value: "34.5492"; }
        ListElement{ radius: "60"; angle: "95"; value: "34.3589"; }
        ListElement{ radius: "60"; angle: "100"; value: "33.7895"; }
        ListElement{ radius: "60"; angle: "105"; value: "32.8454"; }
        ListElement{ radius: "60"; angle: "110"; value: "31.5338"; }
        ListElement{ radius: "60"; angle: "115"; value: "29.8645"; }
        ListElement{ radius: "60"; angle: "120"; value: "27.8504"; }
        ListElement{ radius: "60"; angle: "125"; value: "25.5068"; }
        ListElement{ radius: "60"; angle: "130"; value: "22.8514"; }
        ListElement{ radius: "60"; angle: "135"; value: "19.9045"; }
        ListElement{ radius: "60"; angle: "140"; value: "16.6885"; }
        ListElement{ radius: "60"; angle: "145"; value: "13.228"; }
        ListElement{ radius: "60"; angle: "150"; value: "9.54915"; }
        ListElement{ radius: "60"; angle: "155"; value: "5.68006"; }
        ListElement{ radius: "60"; angle: "160"; value: "1.65016"; }
        ListElement{ radius: "60"; angle: "165"; value: "-2.5099"; }
        ListElement{ radius: "60"; angle: "170"; value: "-6.76844"; }
        ListElement{ radius: "60"; angle: "175"; value: "-11.0931"; }
        ListElement{ radius: "60"; angle: "180"; value: "-15.4508"; }
        ListElement{ radius: "60"; angle: "185"; value: "-19.8086"; }
        ListElement{ radius: "60"; angle: "190"; value: "-24.1333"; }
        ListElement{ radius: "60"; angle: "195"; value: "-28.3918"; }
        ListElement{ radius: "60"; angle: "200"; value: "-32.5519"; }
        ListElement{ radius: "60"; angle: "205"; value: "-36.5818"; }
        ListElement{ radius: "60"; angle: "210"; value: "-40.4508"; }
        ListElement{ radius: "60"; angle: "215"; value: "-44.1297"; }
        ListElement{ radius: "60"; angle: "220"; value: "-47.5902"; }
        ListElement{ radius: "60"; angle: "225"; value: "-50.8062"; }
        ListElement{ radius: "60"; angle: "230"; value: "-53.7531"; }
        ListElement{ radius: "60"; angle: "235"; value: "-56.4085"; }
        ListElement{ radius: "60"; angle: "240"; value: "-58.7521"; }
        ListElement{ radius: "60"; angle: "245"; value: "-60.7662"; }
        ListElement{ radius: "60"; angle: "250"; value: "-62.4355"; }
        ListElement{ radius: "60"; angle: "255"; value: "-63.7471"; }
        ListElement{ radius: "60"; angle: "260"; value: "-64.6912"; }
        ListElement{ radius: "60"; angle: "265"; value: "-65.2606"; }
        ListElement{ radius: "60"; angle: "270"; value: "-65.4508"; }
        ListElement{ radius: "60"; angle: "275"; value: "-65.2606"; }
        ListElement{ radius: "60"; angle: "280"; value: "-64.6912"; }
        ListElement{ radius: "60"; angle: "285"; value: "-63.7471"; }
        ListElement{ radius: "60"; angle: "290"; value: "-62.4355"; }
        ListElement{ radius: "60"; angle: "295"; value: "-60.7662"; }
        ListElement{ radius: "60"; angle: "300"; value: "-58.7521"; }
        ListElement{ radius: "60"; angle: "305"; value: "-56.4085"; }
        ListElement{ radius: "60"; angle: "310"; value: "-53.7531"; }
        ListElement{ radius: "60"; angle: "315"; value: "-50.8062"; }
        ListElement{ radius: "60"; angle: "320"; value: "-47.5902"; }
        ListElement{ radius: "60"; angle: "325"; value: "-44.1297"; }
        ListElement{ radius: "60"; angle: "330"; value: "-40.4508"; }
        ListElement{ radius: "60"; angle: "335"; value: "-36.5818"; }
        ListElement{ radius: "60"; angle: "340"; value: "-32.5519"; }
        ListElement{ radius: "60"; angle: "345"; value: "-28.3918"; }
        ListElement{ radius: "60"; angle: "350"; value: "-24.1333"; }
        ListElement{ radius: "60"; angle: "355"; value: "-19.8086"; }
        ListElement{ radius: "60"; angle: "360"; value: "-15.4508"; }
        ListElement{ radius: "65"; angle: "0"; value: "-22.6995"; }
        ListElement{ radius: "65"; angle: "5"; value: "-18.3417"; }
        ListElement{ radius: "65"; angle: "10"; value: "-14.0171"; }
        ListElement{ radius: "65"; angle: "15"; value: "-9.75857"; }
        ListElement{ radius: "65"; angle: "20"; value: "-5.59852"; }
        ListElement{ radius: "65"; angle: "25"; value: "-1.56861"; }
        ListElement{ radius: "65"; angle: "30"; value: "2.30048"; }
        ListElement{ radius: "65"; angle: "35"; value: "5.9793"; }
        ListElement{ radius: "65"; angle: "40"; value: "9.43986"; }
        ListElement{ radius: "65"; angle: "45"; value: "12.6558"; }
        ListElement{ radius: "65"; angle: "50"; value: "15.6027"; }
        ListElement{ radius: "65"; angle: "55"; value: "18.2581"; }
        ListElement{ radius: "65"; angle: "60"; value: "20.6017"; }
        ListElement{ radius: "65"; angle: "65"; value: "22.6159"; }
        ListElement{ radius: "65"; angle: "70"; value: "24.2851"; }
        ListElement{ radius: "65"; angle: "75"; value: "25.5968"; }
        ListElement{ radius: "65"; angle: "80"; value: "26.5409"; }
        ListElement{ radius: "65"; angle: "85"; value: "27.1102"; }
        ListElement{ radius: "65"; angle: "90"; value: "27.3005"; }
        ListElement{ radius: "65"; angle: "95"; value: "27.1102"; }
        ListElement{ radius: "65"; angle: "100"; value: "26.5409"; }
        ListElement{ radius: "65"; angle: "105"; value: "25.5968"; }
        ListElement{ radius: "65"; angle: "110"; value: "24.2851"; }
        ListElement{ radius: "65"; angle: "115"; value: "22.6159"; }
        ListElement{ radius: "65"; angle: "120"; value: "20.6017"; }
        ListElement{ radius: "65"; angle: "125"; value: "18.2581"; }
        ListElement{ radius: "65"; angle: "130"; value: "15.6027"; }
        ListElement{ radius: "65"; angle: "135"; value: "12.6558"; }
        ListElement{ radius: "65"; angle: "140"; value: "9.43986"; }
        ListElement{ radius: "65"; angle: "145"; value: "5.9793"; }
        ListElement{ radius: "65"; angle: "150"; value: "2.30048"; }
        ListElement{ radius: "65"; angle: "155"; value: "-1.56861"; }
        ListElement{ radius: "65"; angle: "160"; value: "-5.59852"; }
        ListElement{ radius: "65"; angle: "165"; value: "-9.75857"; }
        ListElement{ radius: "65"; angle: "170"; value: "-14.0171"; }
        ListElement{ radius: "65"; angle: "175"; value: "-18.3417"; }
        ListElement{ radius: "65"; angle: "180"; value: "-22.6995"; }
        ListElement{ radius: "65"; angle: "185"; value: "-27.0573"; }
        ListElement{ radius: "65"; angle: "190"; value: "-31.3819"; }
        ListElement{ radius: "65"; angle: "195"; value: "-35.6405"; }
        ListElement{ radius: "65"; angle: "200"; value: "-39.8005"; }
        ListElement{ radius: "65"; angle: "205"; value: "-43.8304"; }
        ListElement{ radius: "65"; angle: "210"; value: "-47.6995"; }
        ListElement{ radius: "65"; angle: "215"; value: "-51.3783"; }
        ListElement{ radius: "65"; angle: "220"; value: "-54.8389"; }
        ListElement{ radius: "65"; angle: "225"; value: "-58.0549"; }
        ListElement{ radius: "65"; angle: "230"; value: "-61.0017"; }
        ListElement{ radius: "65"; angle: "235"; value: "-63.6571"; }
        ListElement{ radius: "65"; angle: "240"; value: "-66.0008"; }
        ListElement{ radius: "65"; angle: "245"; value: "-68.0149"; }
        ListElement{ radius: "65"; angle: "250"; value: "-69.6842"; }
        ListElement{ radius: "65"; angle: "255"; value: "-70.9958"; }
        ListElement{ radius: "65"; angle: "260"; value: "-71.9399"; }
        ListElement{ radius: "65"; angle: "265"; value: "-72.5093"; }
        ListElement{ radius: "65"; angle: "270"; value: "-72.6995"; }
        ListElement{ radius: "65"; angle: "275"; value: "-72.5093"; }
        ListElement{ radius: "65"; angle: "280"; value: "-71.9399"; }
        ListElement{ radius: "65"; angle: "285"; value: "-70.9958"; }
        ListElement{ radius: "65"; angle: "290"; value: "-69.6842"; }
        ListElement{ radius: "65"; angle: "295"; value: "-68.0149"; }
        ListElement{ radius: "65"; angle: "300"; value: "-66.0008"; }
        ListElement{ radius: "65"; angle: "305"; value: "-63.6571"; }
        ListElement{ radius: "65"; angle: "310"; value: "-61.0017"; }
        ListElement{ radius: "65"; angle: "315"; value: "-58.0549"; }
        ListElement{ radius: "65"; angle: "320"; value: "-54.8389"; }
        ListElement{ radius: "65"; angle: "325"; value: "-51.3783"; }
        ListElement{ radius: "65"; angle: "330"; value: "-47.6995"; }
        ListElement{ radius: "65"; angle: "335"; value: "-43.8304"; }
        ListElement{ radius: "65"; angle: "340"; value: "-39.8005"; }
        ListElement{ radius: "65"; angle: "345"; value: "-35.6405"; }
        ListElement{ radius: "65"; angle: "350"; value: "-31.3819"; }
        ListElement{ radius: "65"; angle: "355"; value: "-27.0573"; }
        ListElement{ radius: "65"; angle: "360"; value: "-22.6995"; }
        ListElement{ radius: "70"; angle: "0"; value: "-29.3893"; }
        ListElement{ radius: "70"; angle: "5"; value: "-25.0315"; }
        ListElement{ radius: "70"; angle: "10"; value: "-20.7069"; }
        ListElement{ radius: "70"; angle: "15"; value: "-16.4483"; }
        ListElement{ radius: "70"; angle: "20"; value: "-12.2883"; }
        ListElement{ radius: "70"; angle: "25"; value: "-8.25835"; }
        ListElement{ radius: "70"; angle: "30"; value: "-4.38926"; }
        ListElement{ radius: "70"; angle: "35"; value: "-0.710441"; }
        ListElement{ radius: "70"; angle: "40"; value: "2.75012"; }
        ListElement{ radius: "70"; angle: "45"; value: "5.96608"; }
        ListElement{ radius: "70"; angle: "50"; value: "8.91296"; }
        ListElement{ radius: "70"; angle: "55"; value: "11.5683"; }
        ListElement{ radius: "70"; angle: "60"; value: "13.912"; }
        ListElement{ radius: "70"; angle: "65"; value: "15.9261"; }
        ListElement{ radius: "70"; angle: "70"; value: "17.5954"; }
        ListElement{ radius: "70"; angle: "75"; value: "18.907"; }
        ListElement{ radius: "70"; angle: "80"; value: "19.8511"; }
        ListElement{ radius: "70"; angle: "85"; value: "20.4205"; }
        ListElement{ radius: "70"; angle: "90"; value: "20.6107"; }
        ListElement{ radius: "70"; angle: "95"; value: "20.4205"; }
        ListElement{ radius: "70"; angle: "100"; value: "19.8511"; }
        ListElement{ radius: "70"; angle: "105"; value: "18.907"; }
        ListElement{ radius: "70"; angle: "110"; value: "17.5954"; }
        ListElement{ radius: "70"; angle: "115"; value: "15.9261"; }
        ListElement{ radius: "70"; angle: "120"; value: "13.912"; }
        ListElement{ radius: "70"; angle: "125"; value: "11.5683"; }
        ListElement{ radius: "70"; angle: "130"; value: "8.91296"; }
        ListElement{ radius: "70"; angle: "135"; value: "5.96608"; }
        ListElement{ radius: "70"; angle: "140"; value: "2.75012"; }
        ListElement{ radius: "70"; angle: "145"; value: "-0.710441"; }
        ListElement{ radius: "70"; angle: "150"; value: "-4.38926"; }
        ListElement{ radius: "70"; angle: "155"; value: "-8.25835"; }
        ListElement{ radius: "70"; angle: "160"; value: "-12.2883"; }
        ListElement{ radius: "70"; angle: "165"; value: "-16.4483"; }
        ListElement{ radius: "70"; angle: "170"; value: "-20.7069"; }
        ListElement{ radius: "70"; angle: "175"; value: "-25.0315"; }
        ListElement{ radius: "70"; angle: "180"; value: "-29.3893"; }
        ListElement{ radius: "70"; angle: "185"; value: "-33.747"; }
        ListElement{ radius: "70"; angle: "190"; value: "-38.0717"; }
        ListElement{ radius: "70"; angle: "195"; value: "-42.3302"; }
        ListElement{ radius: "70"; angle: "200"; value: "-46.4903"; }
        ListElement{ radius: "70"; angle: "205"; value: "-50.5202"; }
        ListElement{ radius: "70"; angle: "210"; value: "-54.3893"; }
        ListElement{ radius: "70"; angle: "215"; value: "-58.0681"; }
        ListElement{ radius: "70"; angle: "220"; value: "-61.5286"; }
        ListElement{ radius: "70"; angle: "225"; value: "-64.7446"; }
        ListElement{ radius: "70"; angle: "230"; value: "-67.6915"; }
        ListElement{ radius: "70"; angle: "235"; value: "-70.3469"; }
        ListElement{ radius: "70"; angle: "240"; value: "-72.6905"; }
        ListElement{ radius: "70"; angle: "245"; value: "-74.7047"; }
        ListElement{ radius: "70"; angle: "250"; value: "-76.3739"; }
        ListElement{ radius: "70"; angle: "255"; value: "-77.6856"; }
        ListElement{ radius: "70"; angle: "260"; value: "-78.6297"; }
        ListElement{ radius: "70"; angle: "265"; value: "-79.199"; }
        ListElement{ radius: "70"; angle: "270"; value: "-79.3893"; }
        ListElement{ radius: "70"; angle: "275"; value: "-79.199"; }
        ListElement{ radius: "70"; angle: "280"; value: "-78.6297"; }
        ListElement{ radius: "70"; angle: "285"; value: "-77.6856"; }
        ListElement{ radius: "70"; angle: "290"; value: "-76.3739"; }
        ListElement{ radius: "70"; angle: "295"; value: "-74.7047"; }
        ListElement{ radius: "70"; angle: "300"; value: "-72.6905"; }
        ListElement{ radius: "70"; angle: "305"; value: "-70.3469"; }
        ListElement{ radius: "70"; angle: "310"; value: "-67.6915"; }
        ListElement{ radius: "70"; angle: "315"; value: "-64.7446"; }
        ListElement{ radius: "70"; angle: "320"; value: "-61.5286"; }
        ListElement{ radius: "70"; angle: "325"; value: "-58.0681"; }
        ListElement{ radius: "70"; angle: "330"; value: "-54.3893"; }
        ListElement{ radius: "70"; angle: "335"; value: "-50.5202"; }
        ListElement{ radius: "70"; angle: "340"; value: "-46.4903"; }
        ListElement{ radius: "70"; angle: "345"; value: "-42.3302"; }
        ListElement{ radius: "70"; angle: "350"; value: "-38.0717"; }
        ListElement{ radius: "70"; angle: "355"; value: "-33.747"; }
        ListElement{ radius: "70"; angle: "360"; value: "-29.3893"; }
        ListElement{ radius: "75"; angle: "0"; value: "-35.3553"; }
        ListElement{ radius: "75"; angle: "5"; value: "-30.9976"; }
        ListElement{ radius: "75"; angle: "10"; value: "-26.6729"; }
        ListElement{ radius: "75"; angle: "15"; value: "-22.4144"; }
        ListElement{ radius: "75"; angle: "20"; value: "-18.2543"; }
        ListElement{ radius: "75"; angle: "25"; value: "-14.2244"; }
        ListElement{ radius: "75"; angle: "30"; value: "-10.3553"; }
        ListElement{ radius: "75"; angle: "35"; value: "-6.67652"; }
        ListElement{ radius: "75"; angle: "40"; value: "-3.21596"; }
        ListElement{ radius: "75"; angle: "45"; value: "5.55112e-15"; }
        ListElement{ radius: "75"; angle: "50"; value: "2.94688"; }
        ListElement{ radius: "75"; angle: "55"; value: "5.60226"; }
        ListElement{ radius: "75"; angle: "60"; value: "7.94593"; }
        ListElement{ radius: "75"; angle: "65"; value: "9.96005"; }
        ListElement{ radius: "75"; angle: "70"; value: "11.6293"; }
        ListElement{ radius: "75"; angle: "75"; value: "12.941"; }
        ListElement{ radius: "75"; angle: "80"; value: "13.885"; }
        ListElement{ radius: "75"; angle: "85"; value: "14.4544"; }
        ListElement{ radius: "75"; angle: "90"; value: "14.6447"; }
        ListElement{ radius: "75"; angle: "95"; value: "14.4544"; }
        ListElement{ radius: "75"; angle: "100"; value: "13.885"; }
        ListElement{ radius: "75"; angle: "105"; value: "12.941"; }
        ListElement{ radius: "75"; angle: "110"; value: "11.6293"; }
        ListElement{ radius: "75"; angle: "115"; value: "9.96005"; }
        ListElement{ radius: "75"; angle: "120"; value: "7.94593"; }
        ListElement{ radius: "75"; angle: "125"; value: "5.60226"; }
        ListElement{ radius: "75"; angle: "130"; value: "2.94688"; }
        ListElement{ radius: "75"; angle: "135"; value: "5.55112e-15"; }
        ListElement{ radius: "75"; angle: "140"; value: "-3.21596"; }
        ListElement{ radius: "75"; angle: "145"; value: "-6.67652"; }
        ListElement{ radius: "75"; angle: "150"; value: "-10.3553"; }
        ListElement{ radius: "75"; angle: "155"; value: "-14.2244"; }
        ListElement{ radius: "75"; angle: "160"; value: "-18.2543"; }
        ListElement{ radius: "75"; angle: "165"; value: "-22.4144"; }
        ListElement{ radius: "75"; angle: "170"; value: "-26.6729"; }
        ListElement{ radius: "75"; angle: "175"; value: "-30.9976"; }
        ListElement{ radius: "75"; angle: "180"; value: "-35.3553"; }
        ListElement{ radius: "75"; angle: "185"; value: "-39.7131"; }
        ListElement{ radius: "75"; angle: "190"; value: "-44.0377"; }
        ListElement{ radius: "75"; angle: "195"; value: "-48.2963"; }
        ListElement{ radius: "75"; angle: "200"; value: "-52.4563"; }
        ListElement{ radius: "75"; angle: "205"; value: "-56.4863"; }
        ListElement{ radius: "75"; angle: "210"; value: "-60.3553"; }
        ListElement{ radius: "75"; angle: "215"; value: "-64.0342"; }
        ListElement{ radius: "75"; angle: "220"; value: "-67.4947"; }
        ListElement{ radius: "75"; angle: "225"; value: "-70.7107"; }
        ListElement{ radius: "75"; angle: "230"; value: "-73.6576"; }
        ListElement{ radius: "75"; angle: "235"; value: "-76.3129"; }
        ListElement{ radius: "75"; angle: "240"; value: "-78.6566"; }
        ListElement{ radius: "75"; angle: "245"; value: "-80.6707"; }
        ListElement{ radius: "75"; angle: "250"; value: "-82.34"; }
        ListElement{ radius: "75"; angle: "255"; value: "-83.6516"; }
        ListElement{ radius: "75"; angle: "260"; value: "-84.5957"; }
        ListElement{ radius: "75"; angle: "265"; value: "-85.1651"; }
        ListElement{ radius: "75"; angle: "270"; value: "-85.3553"; }
        ListElement{ radius: "75"; angle: "275"; value: "-85.1651"; }
        ListElement{ radius: "75"; angle: "280"; value: "-84.5957"; }
        ListElement{ radius: "75"; angle: "285"; value: "-83.6516"; }
        ListElement{ radius: "75"; angle: "290"; value: "-82.34"; }
        ListElement{ radius: "75"; angle: "295"; value: "-80.6707"; }
        ListElement{ radius: "75"; angle: "300"; value: "-78.6566"; }
        ListElement{ radius: "75"; angle: "305"; value: "-76.3129"; }
        ListElement{ radius: "75"; angle: "310"; value: "-73.6576"; }
        ListElement{ radius: "75"; angle: "315"; value: "-70.7107"; }
        ListElement{ radius: "75"; angle: "320"; value: "-67.4947"; }
        ListElement{ radius: "75"; angle: "325"; value: "-64.0342"; }
        ListElement{ radius: "75"; angle: "330"; value: "-60.3553"; }
        ListElement{ radius: "75"; angle: "335"; value: "-56.4863"; }
        ListElement{ radius: "75"; angle: "340"; value: "-52.4563"; }
        ListElement{ radius: "75"; angle: "345"; value: "-48.2963"; }
        ListElement{ radius: "75"; angle: "350"; value: "-44.0377"; }
        ListElement{ radius: "75"; angle: "355"; value: "-39.7131"; }
        ListElement{ radius: "75"; angle: "360"; value: "-35.3553"; }
        ListElement{ radius: "80"; angle: "0"; value: "-40.4508"; }
        ListElement{ radius: "80"; angle: "5"; value: "-36.0931"; }
        ListElement{ radius: "80"; angle: "10"; value: "-31.7684"; }
        ListElement{ radius: "80"; angle: "15"; value: "-27.5099"; }
        ListElement{ radius: "80"; angle: "20"; value: "-23.3498"; }
        ListElement{ radius: "80"; angle: "25"; value: "-19.3199"; }
        ListElement{ radius: "80"; angle: "30"; value: "-15.4508"; }
        ListElement{ radius: "80"; angle: "35"; value: "-11.772"; }
        ListElement{ radius: "80"; angle: "40"; value: "-8.31147"; }
        ListElement{ radius: "80"; angle: "45"; value: "-5.09551"; }
        ListElement{ radius: "80"; angle: "50"; value: "-2.14863"; }
        ListElement{ radius: "80"; angle: "55"; value: "0.506752"; }
        ListElement{ radius: "80"; angle: "60"; value: "2.85042"; }
        ListElement{ radius: "80"; angle: "65"; value: "4.86454"; }
        ListElement{ radius: "80"; angle: "70"; value: "6.53378"; }
        ListElement{ radius: "80"; angle: "75"; value: "7.84544"; }
        ListElement{ radius: "80"; angle: "80"; value: "8.78954"; }
        ListElement{ radius: "80"; angle: "85"; value: "9.35889"; }
        ListElement{ radius: "80"; angle: "90"; value: "9.54915"; }
        ListElement{ radius: "80"; angle: "95"; value: "9.35889"; }
        ListElement{ radius: "80"; angle: "100"; value: "8.78954"; }
        ListElement{ radius: "80"; angle: "105"; value: "7.84544"; }
        ListElement{ radius: "80"; angle: "110"; value: "6.53378"; }
        ListElement{ radius: "80"; angle: "115"; value: "4.86454"; }
        ListElement{ radius: "80"; angle: "120"; value: "2.85042"; }
        ListElement{ radius: "80"; angle: "125"; value: "0.506752"; }
        ListElement{ radius: "80"; angle: "130"; value: "-2.14863"; }
        ListElement{ radius: "80"; angle: "135"; value: "-5.09551"; }
        ListElement{ radius: "80"; angle: "140"; value: "-8.31147"; }
        ListElement{ radius: "80"; angle: "145"; value: "-11.772"; }
        ListElement{ radius: "80"; angle: "150"; value: "-15.4508"; }
        ListElement{ radius: "80"; angle: "155"; value: "-19.3199"; }
        ListElement{ radius: "80"; angle: "160"; value: "-23.3498"; }
        ListElement{ radius: "80"; angle: "165"; value: "-27.5099"; }
        ListElement{ radius: "80"; angle: "170"; value: "-31.7684"; }
        ListElement{ radius: "80"; angle: "175"; value: "-36.0931"; }
        ListElement{ radius: "80"; angle: "180"; value: "-40.4508"; }
        ListElement{ radius: "80"; angle: "185"; value: "-44.8086"; }
        ListElement{ radius: "80"; angle: "190"; value: "-49.1333"; }
        ListElement{ radius: "80"; angle: "195"; value: "-53.3918"; }
        ListElement{ radius: "80"; angle: "200"; value: "-57.5519"; }
        ListElement{ radius: "80"; angle: "205"; value: "-61.5818"; }
        ListElement{ radius: "80"; angle: "210"; value: "-65.4508"; }
        ListElement{ radius: "80"; angle: "215"; value: "-69.1297"; }
        ListElement{ radius: "80"; angle: "220"; value: "-72.5902"; }
        ListElement{ radius: "80"; angle: "225"; value: "-75.8062"; }
        ListElement{ radius: "80"; angle: "230"; value: "-78.7531"; }
        ListElement{ radius: "80"; angle: "235"; value: "-81.4085"; }
        ListElement{ radius: "80"; angle: "240"; value: "-83.7521"; }
        ListElement{ radius: "80"; angle: "245"; value: "-85.7662"; }
        ListElement{ radius: "80"; angle: "250"; value: "-87.4355"; }
        ListElement{ radius: "80"; angle: "255"; value: "-88.7471"; }
        ListElement{ radius: "80"; angle: "260"; value: "-89.6912"; }
        ListElement{ radius: "80"; angle: "265"; value: "-90.2606"; }
        ListElement{ radius: "80"; angle: "270"; value: "-90.4508"; }
        ListElement{ radius: "80"; angle: "275"; value: "-90.2606"; }
        ListElement{ radius: "80"; angle: "280"; value: "-89.6912"; }
        ListElement{ radius: "80"; angle: "285"; value: "-88.7471"; }
        ListElement{ radius: "80"; angle: "290"; value: "-87.4355"; }
        ListElement{ radius: "80"; angle: "295"; value: "-85.7662"; }
        ListElement{ radius: "80"; angle: "300"; value: "-83.7521"; }
        ListElement{ radius: "80"; angle: "305"; value: "-81.4085"; }
        ListElement{ radius: "80"; angle: "310"; value: "-78.7531"; }
        ListElement{ radius: "80"; angle: "315"; value: "-75.8062"; }
        ListElement{ radius: "80"; angle: "320"; value: "-72.5902"; }
        ListElement{ radius: "80"; angle: "325"; value: "-69.1297"; }
        ListElement{ radius: "80"; angle: "330"; value: "-65.4508"; }
        ListElement{ radius: "80"; angle: "335"; value: "-61.5818"; }
        ListElement{ radius: "80"; angle: "340"; value: "-57.5519"; }
        ListElement{ radius: "80"; angle: "345"; value: "-53.3918"; }
        ListElement{ radius: "80"; angle: "350"; value: "-49.1333"; }
        ListElement{ radius: "80"; angle: "355"; value: "-44.8086"; }
        ListElement{ radius: "80"; angle: "360"; value: "-40.4508"; }
        ListElement{ radius: "85"; angle: "0"; value: "-44.5503"; }
        ListElement{ radius: "85"; angle: "5"; value: "-40.1925"; }
        ListElement{ radius: "85"; angle: "10"; value: "-35.8679"; }
        ListElement{ radius: "85"; angle: "15"; value: "-31.6094"; }
        ListElement{ radius: "85"; angle: "20"; value: "-27.4493"; }
        ListElement{ radius: "85"; angle: "25"; value: "-23.4194"; }
        ListElement{ radius: "85"; angle: "30"; value: "-19.5503"; }
        ListElement{ radius: "85"; angle: "35"; value: "-15.8715"; }
        ListElement{ radius: "85"; angle: "40"; value: "-12.4109"; }
        ListElement{ radius: "85"; angle: "45"; value: "-9.19499"; }
        ListElement{ radius: "85"; angle: "50"; value: "-6.2481"; }
        ListElement{ radius: "85"; angle: "55"; value: "-3.59272"; }
        ListElement{ radius: "85"; angle: "60"; value: "-1.24906"; }
        ListElement{ radius: "85"; angle: "65"; value: "0.765063"; }
        ListElement{ radius: "85"; angle: "70"; value: "2.4343"; }
        ListElement{ radius: "85"; angle: "75"; value: "3.74597"; }
        ListElement{ radius: "85"; angle: "80"; value: "4.69006"; }
        ListElement{ radius: "85"; angle: "85"; value: "5.25941"; }
        ListElement{ radius: "85"; angle: "90"; value: "5.44967"; }
        ListElement{ radius: "85"; angle: "95"; value: "5.25941"; }
        ListElement{ radius: "85"; angle: "100"; value: "4.69006"; }
        ListElement{ radius: "85"; angle: "105"; value: "3.74597"; }
        ListElement{ radius: "85"; angle: "110"; value: "2.4343"; }
        ListElement{ radius: "85"; angle: "115"; value: "0.765063"; }
        ListElement{ radius: "85"; angle: "120"; value: "-1.24906"; }
        ListElement{ radius: "85"; angle: "125"; value: "-3.59272"; }
        ListElement{ radius: "85"; angle: "130"; value: "-6.2481"; }
        ListElement{ radius: "85"; angle: "135"; value: "-9.19499"; }
        ListElement{ radius: "85"; angle: "140"; value: "-12.4109"; }
        ListElement{ radius: "85"; angle: "145"; value: "-15.8715"; }
        ListElement{ radius: "85"; angle: "150"; value: "-19.5503"; }
        ListElement{ radius: "85"; angle: "155"; value: "-23.4194"; }
        ListElement{ radius: "85"; angle: "160"; value: "-27.4493"; }
        ListElement{ radius: "85"; angle: "165"; value: "-31.6094"; }
        ListElement{ radius: "85"; angle: "170"; value: "-35.8679"; }
        ListElement{ radius: "85"; angle: "175"; value: "-40.1925"; }
        ListElement{ radius: "85"; angle: "180"; value: "-44.5503"; }
        ListElement{ radius: "85"; angle: "185"; value: "-48.9081"; }
        ListElement{ radius: "85"; angle: "190"; value: "-53.2327"; }
        ListElement{ radius: "85"; angle: "195"; value: "-57.4913"; }
        ListElement{ radius: "85"; angle: "200"; value: "-61.6513"; }
        ListElement{ radius: "85"; angle: "205"; value: "-65.6812"; }
        ListElement{ radius: "85"; angle: "210"; value: "-69.5503"; }
        ListElement{ radius: "85"; angle: "215"; value: "-73.2291"; }
        ListElement{ radius: "85"; angle: "220"; value: "-76.6897"; }
        ListElement{ radius: "85"; angle: "225"; value: "-79.9057"; }
        ListElement{ radius: "85"; angle: "230"; value: "-82.8525"; }
        ListElement{ radius: "85"; angle: "235"; value: "-85.5079"; }
        ListElement{ radius: "85"; angle: "240"; value: "-87.8516"; }
        ListElement{ radius: "85"; angle: "245"; value: "-89.8657"; }
        ListElement{ radius: "85"; angle: "250"; value: "-91.535"; }
        ListElement{ radius: "85"; angle: "255"; value: "-92.8466"; }
        ListElement{ radius: "85"; angle: "260"; value: "-93.7907"; }
        ListElement{ radius: "85"; angle: "265"; value: "-94.3601"; }
        ListElement{ radius: "85"; angle: "270"; value: "-94.5503"; }
        ListElement{ radius: "85"; angle: "275"; value: "-94.3601"; }
        ListElement{ radius: "85"; angle: "280"; value: "-93.7907"; }
        ListElement{ radius: "85"; angle: "285"; value: "-92.8466"; }
        ListElement{ radius: "85"; angle: "290"; value: "-91.535"; }
        ListElement{ radius: "85"; angle: "295"; value: "-89.8657"; }
        ListElement{ radius: "85"; angle: "300"; value: "-87.8516"; }
        ListElement{ radius: "85"; angle: "305"; value: "-85.5079"; }
        ListElement{ radius: "85"; angle: "310"; value: "-82.8525"; }
        ListElement{ radius: "85"; angle: "315"; value: "-79.9057"; }
        ListElement{ radius: "85"; angle: "320"; value: "-76.6897"; }
        ListElement{ radius: "85"; angle: "325"; value: "-73.2291"; }
        ListElement{ radius: "85"; angle: "330"; value: "-69.5503"; }
        ListElement{ radius: "85"; angle: "335"; value: "-65.6812"; }
        ListElement{ radius: "85"; angle: "340"; value: "-61.6513"; }
        ListElement{ radius: "85"; angle: "345"; value: "-57.4913"; }
        ListElement{ radius: "85"; angle: "350"; value: "-53.2327"; }
        ListElement{ radius: "85"; angle: "355"; value: "-48.9081"; }
        ListElement{ radius: "85"; angle: "360"; value: "-44.5503"; }
        ListElement{ radius: "90"; angle: "0"; value: "-47.5528"; }
        ListElement{ radius: "90"; angle: "5"; value: "-43.195"; }
        ListElement{ radius: "90"; angle: "10"; value: "-38.8704"; }
        ListElement{ radius: "90"; angle: "15"; value: "-34.6119"; }
        ListElement{ radius: "90"; angle: "20"; value: "-30.4518"; }
        ListElement{ radius: "90"; angle: "25"; value: "-26.4219"; }
        ListElement{ radius: "90"; angle: "30"; value: "-22.5528"; }
        ListElement{ radius: "90"; angle: "35"; value: "-18.874"; }
        ListElement{ radius: "90"; angle: "40"; value: "-15.4134"; }
        ListElement{ radius: "90"; angle: "45"; value: "-12.1975"; }
        ListElement{ radius: "90"; angle: "50"; value: "-9.2506"; }
        ListElement{ radius: "90"; angle: "55"; value: "-6.59522"; }
        ListElement{ radius: "90"; angle: "60"; value: "-4.25156"; }
        ListElement{ radius: "90"; angle: "65"; value: "-2.23744"; }
        ListElement{ radius: "90"; angle: "70"; value: "-0.568195"; }
        ListElement{ radius: "90"; angle: "75"; value: "0.743465"; }
        ListElement{ radius: "90"; angle: "80"; value: "1.68756"; }
        ListElement{ radius: "90"; angle: "85"; value: "2.25691"; }
        ListElement{ radius: "90"; angle: "90"; value: "2.44717"; }
        ListElement{ radius: "90"; angle: "95"; value: "2.25691"; }
        ListElement{ radius: "90"; angle: "100"; value: "1.68756"; }
        ListElement{ radius: "90"; angle: "105"; value: "0.743465"; }
        ListElement{ radius: "90"; angle: "110"; value: "-0.568195"; }
        ListElement{ radius: "90"; angle: "115"; value: "-2.23744"; }
        ListElement{ radius: "90"; angle: "120"; value: "-4.25156"; }
        ListElement{ radius: "90"; angle: "125"; value: "-6.59522"; }
        ListElement{ radius: "90"; angle: "130"; value: "-9.2506"; }
        ListElement{ radius: "90"; angle: "135"; value: "-12.1975"; }
        ListElement{ radius: "90"; angle: "140"; value: "-15.4134"; }
        ListElement{ radius: "90"; angle: "145"; value: "-18.874"; }
        ListElement{ radius: "90"; angle: "150"; value: "-22.5528"; }
        ListElement{ radius: "90"; angle: "155"; value: "-26.4219"; }
        ListElement{ radius: "90"; angle: "160"; value: "-30.4518"; }
        ListElement{ radius: "90"; angle: "165"; value: "-34.6119"; }
        ListElement{ radius: "90"; angle: "170"; value: "-38.8704"; }
        ListElement{ radius: "90"; angle: "175"; value: "-43.195"; }
        ListElement{ radius: "90"; angle: "180"; value: "-47.5528"; }
        ListElement{ radius: "90"; angle: "185"; value: "-51.9106"; }
        ListElement{ radius: "90"; angle: "190"; value: "-56.2352"; }
        ListElement{ radius: "90"; angle: "195"; value: "-60.4938"; }
        ListElement{ radius: "90"; angle: "200"; value: "-64.6538"; }
        ListElement{ radius: "90"; angle: "205"; value: "-68.6837"; }
        ListElement{ radius: "90"; angle: "210"; value: "-72.5528"; }
        ListElement{ radius: "90"; angle: "215"; value: "-76.2316"; }
        ListElement{ radius: "90"; angle: "220"; value: "-79.6922"; }
        ListElement{ radius: "90"; angle: "225"; value: "-82.9082"; }
        ListElement{ radius: "90"; angle: "230"; value: "-85.855"; }
        ListElement{ radius: "90"; angle: "235"; value: "-88.5104"; }
        ListElement{ radius: "90"; angle: "240"; value: "-90.8541"; }
        ListElement{ radius: "90"; angle: "245"; value: "-92.8682"; }
        ListElement{ radius: "90"; angle: "250"; value: "-94.5375"; }
        ListElement{ radius: "90"; angle: "255"; value: "-95.8491"; }
        ListElement{ radius: "90"; angle: "260"; value: "-96.7932"; }
        ListElement{ radius: "90"; angle: "265"; value: "-97.3626"; }
        ListElement{ radius: "90"; angle: "270"; value: "-97.5528"; }
        ListElement{ radius: "90"; angle: "275"; value: "-97.3626"; }
        ListElement{ radius: "90"; angle: "280"; value: "-96.7932"; }
        ListElement{ radius: "90"; angle: "285"; value: "-95.8491"; }
        ListElement{ radius: "90"; angle: "290"; value: "-94.5375"; }
        ListElement{ radius: "90"; angle: "295"; value: "-92.8682"; }
        ListElement{ radius: "90"; angle: "300"; value: "-90.8541"; }
        ListElement{ radius: "90"; angle: "305"; value: "-88.5104"; }
        ListElement{ radius: "90"; angle: "310"; value: "-85.855"; }
        ListElement{ radius: "90"; angle: "315"; value: "-82.9082"; }
        ListElement{ radius: "90"; angle: "320"; value: "-79.6922"; }
        ListElement{ radius: "90"; angle: "325"; value: "-76.2316"; }
        ListElement{ radius: "90"; angle: "330"; value: "-72.5528"; }
        ListElement{ radius: "90"; angle: "335"; value: "-68.6837"; }
        ListElement{ radius: "90"; angle: "340"; value: "-64.6538"; }
        ListElement{ radius: "90"; angle: "345"; value: "-60.4938"; }
        ListElement{ radius: "90"; angle: "350"; value: "-56.2352"; }
        ListElement{ radius: "90"; angle: "355"; value: "-51.9106"; }
        ListElement{ radius: "90"; angle: "360"; value: "-47.5528"; }
        ListElement{ radius: "95"; angle: "0"; value: "-49.3844"; }
        ListElement{ radius: "95"; angle: "5"; value: "-45.0266"; }
        ListElement{ radius: "95"; angle: "10"; value: "-40.702"; }
        ListElement{ radius: "95"; angle: "15"; value: "-36.4435"; }
        ListElement{ radius: "95"; angle: "20"; value: "-32.2834"; }
        ListElement{ radius: "95"; angle: "25"; value: "-28.2535"; }
        ListElement{ radius: "95"; angle: "30"; value: "-24.3844"; }
        ListElement{ radius: "95"; angle: "35"; value: "-20.7056"; }
        ListElement{ radius: "95"; angle: "40"; value: "-17.245"; }
        ListElement{ radius: "95"; angle: "45"; value: "-14.0291"; }
        ListElement{ radius: "95"; angle: "50"; value: "-11.0822"; }
        ListElement{ radius: "95"; angle: "55"; value: "-8.42681"; }
        ListElement{ radius: "95"; angle: "60"; value: "-6.08315"; }
        ListElement{ radius: "95"; angle: "65"; value: "-4.06903"; }
        ListElement{ radius: "95"; angle: "70"; value: "-2.39979"; }
        ListElement{ radius: "95"; angle: "75"; value: "-1.08813"; }
        ListElement{ radius: "95"; angle: "80"; value: "-0.144029"; }
        ListElement{ radius: "95"; angle: "85"; value: "0.425318"; }
        ListElement{ radius: "95"; angle: "90"; value: "0.615583"; }
        ListElement{ radius: "95"; angle: "95"; value: "0.425318"; }
        ListElement{ radius: "95"; angle: "100"; value: "-0.144029"; }
        ListElement{ radius: "95"; angle: "105"; value: "-1.08813"; }
        ListElement{ radius: "95"; angle: "110"; value: "-2.39979"; }
        ListElement{ radius: "95"; angle: "115"; value: "-4.06903"; }
        ListElement{ radius: "95"; angle: "120"; value: "-6.08315"; }
        ListElement{ radius: "95"; angle: "125"; value: "-8.42681"; }
        ListElement{ radius: "95"; angle: "130"; value: "-11.0822"; }
        ListElement{ radius: "95"; angle: "135"; value: "-14.0291"; }
        ListElement{ radius: "95"; angle: "140"; value: "-17.245"; }
        ListElement{ radius: "95"; angle: "145"; value: "-20.7056"; }
        ListElement{ radius: "95"; angle: "150"; value: "-24.3844"; }
        ListElement{ radius: "95"; angle: "155"; value: "-28.2535"; }
        ListElement{ radius: "95"; angle: "160"; value: "-32.2834"; }
        ListElement{ radius: "95"; angle: "165"; value: "-36.4435"; }
        ListElement{ radius: "95"; angle: "170"; value: "-40.702"; }
        ListElement{ radius: "95"; angle: "175"; value: "-45.0266"; }
        ListElement{ radius: "95"; angle: "180"; value: "-49.3844"; }
        ListElement{ radius: "95"; angle: "185"; value: "-53.7422"; }
        ListElement{ radius: "95"; angle: "190"; value: "-58.0668"; }
        ListElement{ radius: "95"; angle: "195"; value: "-62.3254"; }
        ListElement{ radius: "95"; angle: "200"; value: "-66.4854"; }
        ListElement{ radius: "95"; angle: "205"; value: "-70.5153"; }
        ListElement{ radius: "95"; angle: "210"; value: "-74.3844"; }
        ListElement{ radius: "95"; angle: "215"; value: "-78.0632"; }
        ListElement{ radius: "95"; angle: "220"; value: "-81.5238"; }
        ListElement{ radius: "95"; angle: "225"; value: "-84.7398"; }
        ListElement{ radius: "95"; angle: "230"; value: "-87.6866"; }
        ListElement{ radius: "95"; angle: "235"; value: "-90.342"; }
        ListElement{ radius: "95"; angle: "240"; value: "-92.6857"; }
        ListElement{ radius: "95"; angle: "245"; value: "-94.6998"; }
        ListElement{ radius: "95"; angle: "250"; value: "-96.369"; }
        ListElement{ radius: "95"; angle: "255"; value: "-97.6807"; }
        ListElement{ radius: "95"; angle: "260"; value: "-98.6248"; }
        ListElement{ radius: "95"; angle: "265"; value: "-99.1942"; }
        ListElement{ radius: "95"; angle: "270"; value: "-99.3844"; }
        ListElement{ radius: "95"; angle: "275"; value: "-99.1942"; }
        ListElement{ radius: "95"; angle: "280"; value: "-98.6248"; }
        ListElement{ radius: "95"; angle: "285"; value: "-97.6807"; }
        ListElement{ radius: "95"; angle: "290"; value: "-96.369"; }
        ListElement{ radius: "95"; angle: "295"; value: "-94.6998"; }
        ListElement{ radius: "95"; angle: "300"; value: "-92.6857"; }
        ListElement{ radius: "95"; angle: "305"; value: "-90.342"; }
        ListElement{ radius: "95"; angle: "310"; value: "-87.6866"; }
        ListElement{ radius: "95"; angle: "315"; value: "-84.7398"; }
        ListElement{ radius: "95"; angle: "320"; value: "-81.5238"; }
        ListElement{ radius: "95"; angle: "325"; value: "-78.0632"; }
        ListElement{ radius: "95"; angle: "330"; value: "-74.3844"; }
        ListElement{ radius: "95"; angle: "335"; value: "-70.5153"; }
        ListElement{ radius: "95"; angle: "340"; value: "-66.4854"; }
        ListElement{ radius: "95"; angle: "345"; value: "-62.3254"; }
        ListElement{ radius: "95"; angle: "350"; value: "-58.0668"; }
        ListElement{ radius: "95"; angle: "355"; value: "-53.7422"; }
        ListElement{ radius: "95"; angle: "360"; value: "-49.3844"; }
        ListElement{ radius: "100"; angle: "0"; value: "-50"; }
        ListElement{ radius: "100"; angle: "5"; value: "-45.6422"; }
        ListElement{ radius: "100"; angle: "10"; value: "-41.3176"; }
        ListElement{ radius: "100"; angle: "15"; value: "-37.059"; }
        ListElement{ radius: "100"; angle: "20"; value: "-32.899"; }
        ListElement{ radius: "100"; angle: "25"; value: "-28.8691"; }
        ListElement{ radius: "100"; angle: "30"; value: "-25"; }
        ListElement{ radius: "100"; angle: "35"; value: "-21.3212"; }
        ListElement{ radius: "100"; angle: "40"; value: "-17.8606"; }
        ListElement{ radius: "100"; angle: "45"; value: "-14.6447"; }
        ListElement{ radius: "100"; angle: "50"; value: "-11.6978"; }
        ListElement{ radius: "100"; angle: "55"; value: "-9.0424"; }
        ListElement{ radius: "100"; angle: "60"; value: "-6.69873"; }
        ListElement{ radius: "100"; angle: "65"; value: "-4.68461"; }
        ListElement{ radius: "100"; angle: "70"; value: "-3.01537"; }
        ListElement{ radius: "100"; angle: "75"; value: "-1.70371"; }
        ListElement{ radius: "100"; angle: "80"; value: "-0.759612"; }
        ListElement{ radius: "100"; angle: "85"; value: "-0.190265"; }
        ListElement{ radius: "100"; angle: "90"; value: "0"; }
        ListElement{ radius: "100"; angle: "95"; value: "-0.190265"; }
        ListElement{ radius: "100"; angle: "100"; value: "-0.759612"; }
        ListElement{ radius: "100"; angle: "105"; value: "-1.70371"; }
        ListElement{ radius: "100"; angle: "110"; value: "-3.01537"; }
        ListElement{ radius: "100"; angle: "115"; value: "-4.68461"; }
        ListElement{ radius: "100"; angle: "120"; value: "-6.69873"; }
        ListElement{ radius: "100"; angle: "125"; value: "-9.0424"; }
        ListElement{ radius: "100"; angle: "130"; value: "-11.6978"; }
        ListElement{ radius: "100"; angle: "135"; value: "-14.6447"; }
        ListElement{ radius: "100"; angle: "140"; value: "-17.8606"; }
        ListElement{ radius: "100"; angle: "145"; value: "-21.3212"; }
        ListElement{ radius: "100"; angle: "150"; value: "-25"; }
        ListElement{ radius: "100"; angle: "155"; value: "-28.8691"; }
        ListElement{ radius: "100"; angle: "160"; value: "-32.899"; }
        ListElement{ radius: "100"; angle: "165"; value: "-37.059"; }
        ListElement{ radius: "100"; angle: "170"; value: "-41.3176"; }
        ListElement{ radius: "100"; angle: "175"; value: "-45.6422"; }
        ListElement{ radius: "100"; angle: "180"; value: "-50"; }
        ListElement{ radius: "100"; angle: "185"; value: "-54.3578"; }
        ListElement{ radius: "100"; angle: "190"; value: "-58.6824"; }
        ListElement{ radius: "100"; angle: "195"; value: "-62.941"; }
        ListElement{ radius: "100"; angle: "200"; value: "-67.101"; }
        ListElement{ radius: "100"; angle: "205"; value: "-71.1309"; }
        ListElement{ radius: "100"; angle: "210"; value: "-75"; }
        ListElement{ radius: "100"; angle: "215"; value: "-78.6788"; }
        ListElement{ radius: "100"; angle: "220"; value: "-82.1394"; }
        ListElement{ radius: "100"; angle: "225"; value: "-85.3553"; }
        ListElement{ radius: "100"; angle: "230"; value: "-88.3022"; }
        ListElement{ radius: "100"; angle: "235"; value: "-90.9576"; }
        ListElement{ radius: "100"; angle: "240"; value: "-93.3013"; }
        ListElement{ radius: "100"; angle: "245"; value: "-95.3154"; }
        ListElement{ radius: "100"; angle: "250"; value: "-96.9846"; }
        ListElement{ radius: "100"; angle: "255"; value: "-98.2963"; }
        ListElement{ radius: "100"; angle: "260"; value: "-99.2404"; }
        ListElement{ radius: "100"; angle: "265"; value: "-99.8097"; }
        ListElement{ radius: "100"; angle: "270"; value: "-100"; }
        ListElement{ radius: "100"; angle: "275"; value: "-99.8097"; }
        ListElement{ radius: "100"; angle: "280"; value: "-99.2404"; }
        ListElement{ radius: "100"; angle: "285"; value: "-98.2963"; }
        ListElement{ radius: "100"; angle: "290"; value: "-96.9846"; }
        ListElement{ radius: "100"; angle: "295"; value: "-95.3154"; }
        ListElement{ radius: "100"; angle: "300"; value: "-93.3013"; }
        ListElement{ radius: "100"; angle: "305"; value: "-90.9576"; }
        ListElement{ radius: "100"; angle: "310"; value: "-88.3022"; }
        ListElement{ radius: "100"; angle: "315"; value: "-85.3553"; }
        ListElement{ radius: "100"; angle: "320"; value: "-82.1394"; }
        ListElement{ radius: "100"; angle: "325"; value: "-78.6788"; }
        ListElement{ radius: "100"; angle: "330"; value: "-75"; }
        ListElement{ radius: "100"; angle: "335"; value: "-71.1309"; }
        ListElement{ radius: "100"; angle: "340"; value: "-67.101"; }
        ListElement{ radius: "100"; angle: "345"; value: "-62.941"; }
        ListElement{ radius: "100"; angle: "350"; value: "-58.6824"; }
        ListElement{ radius: "100"; angle: "355"; value: "-54.3578"; }
        ListElement{ radius: "100"; angle: "360"; value: "-50"; }
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization

Rectangle {
    id: heightMapView
    color: surfacePlot.theme.windowColor

    required property bool portraitMode

    property real buttonWidth: heightMapView.portraitMode ? (heightMapView.width - 35) / 2
                                                          : (heightMapView.width - 40) / 3

    Item {
        id: surfaceView
        anchors.top: buttons.bottom
        anchors.bottom: heightMapView.bottom
        anchors.left: heightMapView.left
        anchors.right: heightMapView.right

        //! [1]
        ColorGradient {
            id: surfaceGradient
            ColorGradientStop { position: 0.0; color: "darkgreen"}
            ColorGradientStop { position: 0.15; color: "darkslategray" }
            ColorGradientStop { position: 0.7; color: "peru" }
            ColorGradientStop { position: 1.0; color: "white" }
        }
        //! [1]

        Surface3D {
            id: surfacePlot
            width: surfaceView.width
            height: surfaceView.height
            aspectRatio: 3.0
            //! [2]
            theme: Theme3D {
                type: Theme3D.ThemeStoneMoss
                font.family: "STCaiyun"
                font.pointSize: 35
                colorStyle: Theme3D.ColorStyleRangeGradient
                baseGradients: [surfaceGradient] // Use the custom gradient
            }
            //! [2]
            shadowQuality: AbstractGraph3D.ShadowQualityMedium
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
            axisX.segmentCount: 3
            axisX.subSegmentCount: 3
            axisX.labelFormat: "%i"
            axisZ.segmentCount: 3
            axisZ.subSegmentCount: 3
            axisZ.labelFormat: "%i"
            axisY.segmentCount: 2
            axisY.subSegmentCount: 2
            axisY.labelFormat: "%i"
            axisY.title: "Height (m)"
            axisX.title: "Longitude 175.x\"E"
            axisZ.title: "Latitude -39.x\"N"
            axisY.titleVisible: true
            axisX.titleVisible: true
            axisZ.titleVisible: true

            //! [0]
            Surface3DSeries {
                id: heightSeries
                flatShadingEnabled: false
                drawMode: Surface3DSeries.DrawSurface

                HeightMapSurfaceDataProxy {
                    heightMapFile: ":/qml/qmlsurfacegallery/heightmap.png"
                    // We don't want the default data values set by heightmap proxy, but use
                    // actual coordinate and height values instead
                    autoScaleY: true
                    minYValue: 740
                    maxYValue: 2787
                    minZValue: -374 // ~ -39.374411"N
                    maxZValue: -116 // ~ -39.115971"N
                    minXValue: 472  // ~ 175.471767"E
                    maxXValue: 781  // ~ 175.780758"E
                }

                onDrawModeChanged: heightMapView.checkState()
            }
            //! [0]
        }
    }

    Item {
        id: buttons
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.margins: 10
        height: heightMapView.portraitMode ? surfaceGridToggle.implicitHeight * 3 + 20
                                           : surfaceGridToggle.implicitHeight * 2 + 15
        opacity: 0.5

        Button {
            id: surfaceGridToggle
            anchors.margins: 5
            anchors.left: parent.left
            anchors.top: parent.top
            width: heightMapView.buttonWidth // Calculated elsewhere based on screen orientation
            text: "Show Surface\nGrid"
            //! [3]
            onClicked: {
                if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
                    heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                else
                    heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
            }
            //! [3]
        }

        Button {
            id: surfaceGridColor
            anchors.margins: 5
            anchors.left: surfaceGridToggle.right
            anchors.top: parent.top
            width: heightMapView.buttonWidth
            text: "Red surface\ngrid color"
            //! [4]
            onClicked: {
                if (Qt.colorEqual(heightSeries.wireframeColor, "#000000")) {
                    heightSeries.wireframeColor = "red";
                    text = "Black surface\ngrid color";
                } else {
                    heightSeries.wireframeColor = "black";
                    text = "Red surface\ngrid color";
                }
            }
            //! [4]
        }

        Button {
            id: surfaceToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? parent.left : surfaceGridColor.right
            anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : parent.top
            width: heightMapView.buttonWidth
            text: "Hide\nSurface"
            //! [5]
            onClicked: {
                if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
                    heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
                else
                    heightSeries.drawMode |= Surface3DSeries.DrawSurface;
            }
            //! [5]
        }

        Button {
            id: flatShadingToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? surfaceToggle.right : parent.left
            anchors.top: heightMapView.portraitMode ? surfaceGridColor.bottom : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: heightSeries.flatShadingSupported ? "Show\nFlat" : "Flat not\nsupported"
            enabled: heightSeries.flatShadingSupported
            //! [6]
            onClicked: {
                if (heightSeries.flatShadingEnabled) {
                    heightSeries.flatShadingEnabled = false;
                    text = "Show\nFlat"
                } else {
                    heightSeries.flatShadingEnabled = true;
                    text = "Show\nSmooth"
                }
            }
            //! [6]
        }

        Button {
            id: backgroundToggle
            anchors.margins: 5
            anchors.left: heightMapView.portraitMode ? parent.left : flatShadingToggle.right
            anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
                                                    : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: "Hide\nBackground"
            onClicked: {
                if (surfacePlot.theme.backgroundEnabled) {
                    surfacePlot.theme.backgroundEnabled = false;
                    text = "Show\nBackground";
                } else {
                    surfacePlot.theme.backgroundEnabled = true;
                    text = "Hide\nBackground";
                }
            }
        }

        Button {
            id: gridToggle
            anchors.margins: 5
            anchors.left: backgroundToggle.right
            anchors.top: heightMapView.portraitMode ? flatShadingToggle.bottom
                                                    : surfaceToggle.bottom
            width: heightMapView.buttonWidth
            text: "Hide\nGrid"
            onClicked: {
                if (surfacePlot.theme.gridEnabled) {
                    surfacePlot.theme.gridEnabled = false;
                    text = "Show\nGrid";
                } else {
                    surfacePlot.theme.gridEnabled = true;
                    text = "Hide\nGrid";
                }
            }
        }
    }

    function checkState() {
        if (heightSeries.drawMode & Surface3DSeries.DrawSurface)
            surfaceToggle.text = "Hide\nSurface";
        else
            surfaceToggle.text = "Show\nSurface";

        if (heightSeries.drawMode & Surface3DSeries.DrawWireframe)
            surfaceGridToggle.text = "Hide Surface\nGrid";
        else
            surfaceGridToggle.text = "Show Surface\nGrid";
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization
//! [0]
import SurfaceGallery
//! [0]

Item {
    id: oscilloscopeView

    property int sampleColumns: sampleSlider.value
    property int sampleRows: sampleColumns / 2
    property int sampleCache: 24

    required property bool portraitMode

    property real controlWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
                                                              : oscilloscopeView.width / 4 - 6.66

    property real buttonWidth: oscilloscopeView.portraitMode ? oscilloscopeView.width - 10
                                                             : oscilloscopeView.width / 3 - 7.5

    onSampleRowsChanged: {
        surfaceSeries.selectedPoint = surfaceSeries.invalidSelectionPosition
        generateData()
    }

    //![1]
    DataSource {
        id: dataSource
    }
    //![1]

    Item {
        id: dataView
        anchors.bottom: parent.bottom
        width: parent.width
        height: parent.height - controlArea.height

        //! [2]
        Surface3D {
            id: surfaceGraph
            anchors.fill: parent

            Surface3DSeries {
                id: surfaceSeries
                drawMode: Surface3DSeries.DrawSurfaceAndWireframe
                itemLabelFormat: "@xLabel, @zLabel: @yLabel"
                //! [2]
                //! [3]
                itemLabelVisible: false
                //! [3]

                //! [4]
                onItemLabelChanged: {
                    if (surfaceSeries.selectedPoint == surfaceSeries.invalidSelectionPosition)
                        selectionText.text = "No selection";
                    else
                        selectionText.text = surfaceSeries.itemLabel;
                }
                //! [4]
            }

            shadowQuality: AbstractGraph3D.ShadowQualityNone
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
            theme: Theme3D {
                type: Theme3D.ThemeIsabelle
                backgroundEnabled: false
            }
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetFrontHigh

            axisX.labelFormat: "%d ms"
            axisY.labelFormat: "%d W"
            axisZ.labelFormat: "%d mV"
            axisX.min: 0
            axisY.min: 0
            axisZ.min: 0
            axisX.max: 1000
            axisY.max: 100
            axisZ.max: 800
            axisX.segmentCount: 4
            axisY.segmentCount: 4
            axisZ.segmentCount: 4
            measureFps: true
            renderingMode: AbstractGraph3D.RenderDirectToBackground

            onCurrentFpsChanged: (fps)=> {
                                     if (fps > 10)
                                     fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps);
                                     else
                                     fpsText.text = "FPS: " + Math.round(surfaceGraph.currentFps * 10.0) / 10.0;
                                 }

            //! [5]
            Component.onCompleted: oscilloscopeView.generateData();
            //! [5]
        }
    }

    //! [7]
    Timer {
        id: refreshTimer
        interval: 1000 / frequencySlider.value
        running: true
        repeat: true
        onTriggered: dataSource.update(surfaceSeries);
    }
    //! [7]

    Rectangle {
        id: controlArea
        height: oscilloscopeView.portraitMode ? flatShadingToggle.implicitHeight * 7
                                              : flatShadingToggle.implicitHeight * 2
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        color: surfaceGraph.theme.backgroundColor

        // Samples
        Rectangle {
            id: samples
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: parent.left
            anchors.top: parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Row {
                anchors.centerIn: parent
                spacing: 10
                padding: 5

                Slider {
                    id: sampleSlider
                    from: oscilloscopeView.sampleCache * 2
                    to: from * 10
                    stepSize: oscilloscopeView.sampleCache

                    background: Rectangle {
                        x: sampleSlider.leftPadding
                        y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 200
                        implicitHeight: 4
                        width: sampleSlider.availableWidth
                        height: implicitHeight
                        radius: 2
                        color: surfaceGraph.theme.gridLineColor

                        Rectangle {
                            width: sampleSlider.visualPosition * parent.width
                            height: parent.height
                            color: surfaceGraph.theme.labelTextColor
                            radius: 2
                        }
                    }

                    handle: Rectangle {
                        x: sampleSlider.leftPadding + sampleSlider.visualPosition
                           * (sampleSlider.availableWidth - width)
                        y: sampleSlider.topPadding + sampleSlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 20
                        implicitHeight: 20
                        radius: 10
                        color: sampleSlider.pressed ? surfaceGraph.theme.gridLineColor
                                                    : surfaceGraph.theme.windowColor
                        border.color: sampleSlider.pressed ? surfaceGraph.theme.labelTextColor
                                                           : surfaceGraph.theme.gridLineColor
                    }

                    Component.onCompleted: value = from;
                }

                Text {
                    id: samplesText
                    text: "Samples: " + (oscilloscopeView.sampleRows * oscilloscopeView.sampleColumns)
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    color: surfaceGraph.theme.labelTextColor
                }
            }
        }

        // Frequency
        Rectangle {
            id: frequency
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : samples.right
            anchors.top: oscilloscopeView.portraitMode ? samples.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Row {
                anchors.centerIn: parent
                spacing: 10
                padding: 5

                Slider {
                    id: frequencySlider
                    from: 2
                    to: 60
                    stepSize: 2
                    value: 30

                    background: Rectangle {
                        x: frequencySlider.leftPadding
                        y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 200
                        implicitHeight: 4
                        width: frequencySlider.availableWidth
                        height: implicitHeight
                        radius: 2
                        color: surfaceGraph.theme.gridLineColor

                        Rectangle {
                            width: frequencySlider.visualPosition * parent.width
                            height: parent.height
                            color: surfaceGraph.theme.labelTextColor
                            radius: 2
                        }
                    }

                    handle: Rectangle {
                        x: frequencySlider.leftPadding + frequencySlider.visualPosition
                           * (frequencySlider.availableWidth - width)
                        y: frequencySlider.topPadding + frequencySlider.availableHeight / 2
                           - height / 2
                        implicitWidth: 20
                        implicitHeight: 20
                        radius: 10
                        color: frequencySlider.pressed ? surfaceGraph.theme.gridLineColor
                                                       : surfaceGraph.theme.windowColor
                        border.color: frequencySlider.pressed ? surfaceGraph.theme.labelTextColor
                                                              : surfaceGraph.theme.gridLineColor
                    }
                }

                Text {
                    id: frequencyText
                    text: "Freq: " + frequencySlider.value + " Hz"
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHCenter
                    color: surfaceGraph.theme.labelTextColor
                }
            }
        }

        // FPS
        Rectangle {
            id: fpsindicator
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : frequency.right
            anchors.top: oscilloscopeView.portraitMode ? frequency.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Text {
                id: fpsText
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                color: surfaceGraph.theme.labelTextColor
            }
        }

        // Selection
        Rectangle {
            id: selection
            width: oscilloscopeView.controlWidth
            height: flatShadingToggle.implicitHeight
            anchors.left: oscilloscopeView.portraitMode ? parent.left : fpsindicator.right
            anchors.top: oscilloscopeView.portraitMode ? fpsindicator.bottom : parent.top
            anchors.margins: 5

            color: surfaceGraph.theme.windowColor
            border.color: surfaceGraph.theme.gridLineColor
            border.width: 1
            radius: 4

            Text {
                id: selectionText
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                text: "No selection"
                color: surfaceGraph.theme.labelTextColor
            }
        }

        // Flat shading
        Button {
            id: flatShadingToggle
            width: oscilloscopeView.buttonWidth
            anchors.left: parent.left
            anchors.top: selection.bottom
            anchors.margins: 5

            text: surfaceSeries.flatShadingSupported ? "Show\nSmooth" : "Flat\nnot supported"
            enabled: surfaceSeries.flatShadingSupported

            onClicked: {
                if (surfaceSeries.flatShadingEnabled) {
                    surfaceSeries.flatShadingEnabled = false;
                    text = "Show\nFlat"
                } else {
                    surfaceSeries.flatShadingEnabled = true;
                    text = "Show\nSmooth"
                }
            }

            contentItem: Text {
                text: flatShadingToggle.text
                opacity: flatShadingToggle.enabled ? 1.0 : 0.3
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                opacity: flatShadingToggle.enabled ? 1 : 0.3
                color: flatShadingToggle.down ? surfaceGraph.theme.gridLineColor
                                              : surfaceGraph.theme.windowColor
                border.color: flatShadingToggle.down ? surfaceGraph.theme.labelTextColor
                                                     : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }

        // Surface grid
        Button {
            id: surfaceGridToggle
            width: oscilloscopeView.buttonWidth
            anchors.left: oscilloscopeView.portraitMode ? parent.left : flatShadingToggle.right
            anchors.top: oscilloscopeView.portraitMode ? flatShadingToggle.bottom : selection.bottom
            anchors.margins: 5

            text: "Hide\nSurface Grid"

            onClicked: {
                if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                    text = "Show\nSurface Grid";
                } else {
                    surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
                    text = "Hid\nSurface Grid";
                }
            }

            contentItem: Text {
                text: surfaceGridToggle.text
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                color: surfaceGridToggle.down ? surfaceGraph.theme.gridLineColor
                                              : surfaceGraph.theme.windowColor
                border.color: surfaceGridToggle.down ? surfaceGraph.theme.labelTextColor
                                                     : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }

        // Exit
        Button {
            id: exitButton
            width: oscilloscopeView.buttonWidth
            height: surfaceGridToggle.height
            anchors.left: oscilloscopeView.portraitMode ? parent.left : surfaceGridToggle.right
            anchors.top: oscilloscopeView.portraitMode ? surfaceGridToggle.bottom : selection.bottom
            anchors.margins: 5

            text: "Quit"

            onClicked: Qt.quit();

            contentItem: Text {
                text: exitButton.text
                color: surfaceGraph.theme.labelTextColor
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                elide: Text.ElideRight
            }

            background: Rectangle {
                color: exitButton.down ? surfaceGraph.theme.gridLineColor
                                       : surfaceGraph.theme.windowColor
                border.color: exitButton.down ? surfaceGraph.theme.labelTextColor
                                              : surfaceGraph.theme.gridLineColor
                border.width: 1
                radius: 2
            }
        }
    }

    //! [6]
    function generateData() {
        dataSource.generateData(oscilloscopeView.sampleCache, oscilloscopeView.sampleRows,
                                oscilloscopeView.sampleColumns,
                                surfaceGraph.axisX.min, surfaceGraph.axisX.max,
                                surfaceGraph.axisY.min, surfaceGraph.axisY.max,
                                surfaceGraph.axisZ.min, surfaceGraph.axisZ.max);
    }
    //! [6]
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtDataVisualization

Rectangle {
    id: spectrogramView
    color: surfaceGraph.theme.windowColor

    required property bool portraitMode

    property real buttonWidth: spectrogramView.portraitMode ? (spectrogramView.width - 35) / 2
                                                            : (spectrogramView.width - 50) / 5

    SpectrogramData {
        id: surfaceData
    }

    Item {
        id: surfaceView
        anchors.top: buttons.bottom
        anchors.left: parent.left
        anchors.right: legend.left
        anchors.bottom: parent.bottom

        ColorGradient {
            id: surfaceGradient
            ColorGradientStop { position: 0.0; color: "black" }
            ColorGradientStop { position: 0.2; color: "red" }
            ColorGradientStop { position: 0.5; color: "blue" }
            ColorGradientStop { position: 0.8; color: "yellow" }
            ColorGradientStop { position: 1.0; color: "white" }
        }

        ValueAxis3D {
            id: xAxis
            segmentCount: 8
            labelFormat: "%i\u00B0"
            title: "Angle"
            titleVisible: true
            titleFixed: false
        }

        ValueAxis3D {
            id: yAxis
            segmentCount: 8
            labelFormat: "%i \%"
            title: "Value"
            titleVisible: true
            labelAutoRotation: 0
            titleFixed: false
        }

        ValueAxis3D {
            id: zAxis
            segmentCount: 5
            labelFormat: "%i nm"
            title: "Radius"
            titleVisible: true
            titleFixed: false
        }

        Theme3D {
            id: customTheme
            type: Theme3D.ThemeQt
            // Don't show specular spotlight as we don't want it to distort the colors
            lightStrength: 0.0
            ambientLightStrength: 1.0
            backgroundEnabled: false
            gridLineColor: "#AAAAAA"
            windowColor: "#EEEEEE"
        }

        //! [0]
        Surface3D {
            id: surfaceGraph
            anchors.fill: parent

            Surface3DSeries {
                id: surfaceSeries
                flatShadingEnabled: false
                drawMode: Surface3DSeries.DrawSurface
                baseGradient: surfaceGradient
                colorStyle: Theme3D.ColorStyleRangeGradient
                itemLabelFormat: "(@xLabel, @zLabel): @yLabel"

                ItemModelSurfaceDataProxy {
                    itemModel: surfaceData.model
                    rowRole: "radius"
                    columnRole: "angle"
                    yPosRole: "value"
                }
            }
            //! [0]

            //! [1]
            // Remove the perspective and view the graph from top down to achieve 2D effect
            orthoProjection: true
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetDirectlyAbove
            //! [1]

            //! [2]
            flipHorizontalGrid: true
            //! [2]

            //! [4]
            radialLabelOffset: 0.01
            //! [4]

            //! [5]
            inputHandler: TouchInputHandler3D {
                rotationEnabled: !surfaceGraph.orthoProjection
            }
            //! [5]

            theme: customTheme
            shadowQuality: AbstractGraph3D.ShadowQualityNone
            selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndColumn
            axisX: xAxis
            axisY: yAxis
            axisZ: zAxis

            aspectRatio: 1.0
            horizontalAspectRatio: 1.0
            scene.activeCamera.zoomLevel: 140
        }
    }

    Item {
        id: buttons
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        height: spectrogramView.portraitMode ? (polarToggle.height + 10) * 3
                                             : polarToggle.height + 30
        anchors.margins: 10

        //! [3]
        Button {
            id: polarToggle
            anchors.margins: 5
            anchors.left: parent.left
            anchors.top: parent.top
            width: spectrogramView.buttonWidth // Calculated elsewhere based on screen orientation
            text: "Switch to\n" + (surfaceGraph.polar ? "cartesian" : "polar")
            onClicked: surfaceGraph.polar = !surfaceGraph.polar;
        }
        //! [3]

        Button {
            id: orthoToggle
            anchors.margins: 5
            anchors.left: polarToggle.right
            anchors.top: parent.top
            width: spectrogramView.buttonWidth
            text: "Switch to\n" + (surfaceGraph.orthoProjection ? "perspective" : "orthographic")
            onClicked: {
                if (surfaceGraph.orthoProjection) {
                    surfaceGraph.orthoProjection = false;
                    xAxis.labelAutoRotation = 30;
                    yAxis.labelAutoRotation = 30;
                    zAxis.labelAutoRotation = 30;
                } else {
                    surfaceGraph.orthoProjection = true;
                    surfaceGraph.scene.activeCamera.cameraPreset
                            = Camera3D.CameraPresetDirectlyAbove;
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                    xAxis.labelAutoRotation = 0;
                    yAxis.labelAutoRotation = 0;
                    zAxis.labelAutoRotation = 0;
                }
            }
        }

        Button {
            id: flipGridToggle
            anchors.margins: 5
            anchors.left: spectrogramView.portraitMode ? parent.left : orthoToggle.right
            anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle axis\ngrid on top"
            onClicked: surfaceGraph.flipHorizontalGrid = !surfaceGraph.flipHorizontalGrid;
        }

        Button {
            id: labelOffsetToggle
            anchors.margins: 5
            anchors.left: flipGridToggle.right
            anchors.top: spectrogramView.portraitMode ? orthoToggle.bottom : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle radial\nlabel position"
            visible: surfaceGraph.polar
            onClicked: {
                if (surfaceGraph.radialLabelOffset >= 1.0)
                    surfaceGraph.radialLabelOffset = 0.01;
                else
                    surfaceGraph.radialLabelOffset = 1.0;
            }
        }

        Button {
            id: surfaceGridToggle
            anchors.margins: 5
            anchors.left: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? parent.left
                                                                                    : flipGridToggle.right)
                                                       : (labelOffsetToggle.visible ? labelOffsetToggle.right
                                                                                    : flipGridToggle.right)
            anchors.top: spectrogramView.portraitMode ? (labelOffsetToggle.visible ? labelOffsetToggle.bottom
                                                                                   : orthoToggle.bottom)
                                                      : parent.top
            width: spectrogramView.buttonWidth
            text: "Toggle\nsurface grid"
            visible: !surfaceGraph.orthoProjection
            onClicked: {
                if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
                    surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
                else
                    surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
            }
        }
    }

    Item {
        id: legend
        anchors.bottom: parent.bottom
        anchors.top: buttons.bottom
        anchors.right: parent.right
        width: spectrogramView.portraitMode ? 100 : 125

        Rectangle {
            id: gradient
            anchors.margins: 20
            anchors.bottom: legend.bottom
            anchors.top: legend.top
            anchors.right: legend.right
            border.color: "black"
            border.width: 1
            width: spectrogramView.portraitMode ? 25 : 50
            rotation: 180
            gradient: Gradient {
                GradientStop { position: 0.0; color: "black" }
                GradientStop { position: 0.2; color: "red" }
                GradientStop { position: 0.5; color: "blue" }
                GradientStop { position: 0.8; color: "yellow" }
                GradientStop { position: 1.0; color: "white" }
            }
        }

        Text {
            anchors.verticalCenter: gradient.bottom
            anchors.right: gradient.left
            anchors.margins: 2
            text: surfaceGraph.axisY.min  + "%"
        }

        Text {
            anchors.verticalCenter: gradient.verticalCenter
            anchors.right: gradient.left
            anchors.margins: 2
            text: (surfaceGraph.axisY.max + surfaceGraph.axisY.min) / 2  + "%"
        }

        Text {
            anchors.verticalCenter: gradient.top
            anchors.right: gradient.left
            anchors.margins: 2
            text: surfaceGraph.axisY.max + "%"
        }
    }
}
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Item {
    id: mainView
    width: 1280
    height: 1024
    visible: true

    property bool portraitMode: width < height

    TabBar {
        id: tabBar
        width: parent.width

        TabButton {
            text: "Height Map"
        }

        TabButton {
            text: "Spectrogram"
        }

        TabButton {
            text: "Oscilloscope"
        }
    }

    StackLayout {
        anchors.top: tabBar.bottom
        anchors.bottom: parent.bottom
        width: parent.width
        currentIndex: tabBar.currentIndex

        SurfaceHeightMap {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }

        SurfaceSpectrogram {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }

        SurfaceOscilloscope {
            Layout.fillHeight: true
            Layout.fillWidth: true
            portraitMode: mainView.portraitMode
        }
    }
}
Next
Bars 3D Example
Previous
Graph Gallery
Copyright © 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 (https://www.gnu.org/licenses/fdl.html) as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
Made with Sphinx and @pradyunsg's Furo