QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ObstacleDistanceOverlay.qml
Go to the documentation of this file.
1import QtQuick
2
3import QGroundControl
4
5Canvas {
6 id: canvas
7 anchors.fill: parent
8 visible: QGroundControl.settingsManager.flyViewSettings.showObstacleDistanceOverlay.value > 0 && _activeVehicle && _activeVehicle.objectAvoidance.available
9
10 property var showText: true
11 property var interval: 200
12 property var _ranges: []
13 property var _incrementDeg: 0
14 property var _offsetDeg: 0
15 property var _heading: 0
16 property var _maxRadiusMeters: 0
17 property var _rangesLen: 0
18 property var _degToRangeIdx: function(deg, useHeading) {
19 return rangeIdx(deg, _incrementDeg, _offsetDeg, _rangesLen, useHeading ? _heading : 0)
20 }
21 property var _rangeToShow: function(range) {
22 const feets = QGroundControl.settingsManager.unitsSettings.horizontalDistanceUnits.value === UnitsSettings.HorizontalDistanceUnitsFeet
23 range = feets ? range * 3.2808399 : range
24 return range.toFixed(2)
25 }
26
27 // Converts degrees to index from ranges
28 function rangeIdx(deg, increment, offset, len, heading) {
29 var degrees = deg + offset - heading
30 if (degrees > 360) degrees = degrees - 360
31 if (degrees < 0) degrees = degrees + 360;
32 const i = degrees / increment
33 return (len + Math.ceil(i)) % len
34 }
35
36 Timer {
37 interval: canvas.interval
38 running: true
39 repeat: true
40 onTriggered: canvas.requestPaint()
41 }
42
43 onPaint: {
44 if (!_activeVehicle)
45 return
46
47 var ctx = getContext("2d");
48 ctx.reset()
49
50 _ranges = _activeVehicle.objectAvoidance.distances
51 _incrementDeg = _activeVehicle.objectAvoidance.increment
52 if (_ranges.length == 0 || _incrementDeg == 0)
53 return
54
55 _offsetDeg = _activeVehicle.objectAvoidance.angleOffset
56 _heading = _activeVehicle.heading.value
57 _maxRadiusMeters = _activeVehicle.objectAvoidance.maxDistance / 100
58 _rangesLen = 360.0 / _incrementDeg
59 if (_rangesLen > _ranges.length)
60 _rangesLen = _ranges.length
61
62 paintObstacleOverlay(ctx)
63 }
64}