ProximityRadarVideoView.qml 3.29 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

import QtQuick                  2.12
import QtLocation               5.3
import QtPositioning            5.3
import QtGraphicalEffects       1.0

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controls      1.0
19
import QGroundControl.FlightDisplay 1.0
20 21 22

Item {
    id:             _root
23 24
    anchors.fill:   parent
    visible:        proximityValues.telemetryAvailable
25

26 27
    property var    vehicle     ///< Vehicle object, undefined for ADSB vehicle
    property real   range:  6   ///< Default 6m view
28

29 30
    property var _minlength:    Math.min(_root.width,_root.height)
    property var _ratio:        (_minlength / 2) / _root.range
31

32 33 34 35 36
    ProximityRadarValues {
        id:                     proximityValues
        vehicle:                _root.vehicle
        onRotationValueChanged: _sectorViewEllipsoid.requestPaint()
    }
37 38

    Canvas{
39 40 41 42
        id:             _sectorViewEllipsoid
        anchors.fill:   _root
        opacity:        0.5

43
        onPaint: {
44 45 46 47 48 49 50 51 52 53 54 55 56 57
            var ctx = getContext("2d");
            ctx.reset();
            ctx.translate(width/2, height/2)
            ctx.strokeStyle = Qt.rgba(1, 0, 0, 1);
            ctx.lineWidth = width/100;
            ctx.scale(_root.width  / _minlength, _root.height / _minlength);
            ctx.rotate(-Math.PI/2 - Math.PI/8);
            for (var i=0; i<proximityValues.rgRotationValues.length; i++) {
                var rotationValue = proximityValues.rgRotationValues[i]
                if (!isNaN(rotationValue)) {
                    var a=Math.PI/4 * i;
                    ctx.beginPath();
                    ctx.arc(0, 0, rotationValue * _ratio, 0 + a + Math.PI/50, Math.PI/4 + a - Math.PI/50, false);
                    ctx.stroke();
58 59
                }
            }
60
        }
61 62
    }

63 64 65 66 67
    Item {
        anchors.fill: parent

        Repeater{
            model: proximityValues.rgRotationValues.length
68

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
            QGCLabel{
                x:                      (_sectorViewEllipsoid.width / 2) - (width / 2)
                y:                      (_sectorViewEllipsoid.height / 2) - (height / 2)
                text:                   proximityValues.rgRotationValueStrings[index]
                font.family:            ScreenTools.demiboldFontFamily
                visible:                !isNaN(proximityValues.rgRotationValues[index])

                transform: Translate {
                    x: Math.cos(-Math.PI/2 + Math.PI/4 * index) * (proximityValues.rgRotationValues[index] * _ratio)
                    y: Math.sin(-Math.PI/2 + Math.PI/4 * index) * (proximityValues.rgRotationValues[index] * _ratio)
                }
            }
        }
        transform: Scale {
            origin.x:       _sectorViewEllipsoid.width / 2
            origin.y:       _sectorViewEllipsoid.height / 2
            xScale:         _root.width  / _minlength
            yScale:         _root.height / _minlength
87
        }
88
    }
89 90 91

}