You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.2 KiB
72 lines
2.2 KiB
6 years ago
|
/****************************************************************************
|
||
|
*
|
||
|
* (c) 2009-2016 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.3
|
||
|
import QtQuick.Controls 1.2
|
||
|
import QtLocation 5.3
|
||
|
import QtPositioning 5.3
|
||
|
|
||
|
import QGroundControl 1.0
|
||
|
import QGroundControl.ScreenTools 1.0
|
||
|
import QGroundControl.Palette 1.0
|
||
|
import QGroundControl.Controls 1.0
|
||
|
import QGroundControl.FlightMap 1.0
|
||
|
|
||
|
MapQuickItem {
|
||
|
property color arrowColor: "white"
|
||
|
property var fromCoord: QtPositioning.coordinate()
|
||
|
property var toCoord: QtPositioning.coordinate()
|
||
|
property bool exitPosition: false
|
||
|
|
||
|
property var _map: parent
|
||
|
property real _arrowSize: 20
|
||
|
property real _arrowHeading: 0
|
||
|
|
||
|
function _updateArrowDetails() {
|
||
|
if (fromCoord && fromCoord.isValid && toCoord && toCoord.isValid) {
|
||
|
_arrowHeading = fromCoord.azimuthTo(toCoord)
|
||
|
var lineDistanceQuarter = fromCoord.distanceTo(toCoord) / 4
|
||
|
coordinate = fromCoord.atDistanceAndAzimuth(lineDistanceQuarter * (exitPosition ? 3 : 1), _arrowHeading)
|
||
|
} else {
|
||
|
coordinate = QtPositioning.coordinate()
|
||
|
_arrowHeading = 0
|
||
|
}
|
||
|
}
|
||
|
|
||
|
onFromCoordChanged: _updateArrowDetails()
|
||
|
onToCoordChanged: _updateArrowDetails()
|
||
|
|
||
|
sourceItem: Canvas {
|
||
|
x: -_arrowSize
|
||
|
y: 0
|
||
|
width: _arrowSize * 2
|
||
|
height: _arrowSize
|
||
|
|
||
|
onPaint: {
|
||
|
var ctx = getContext("2d");
|
||
|
ctx.lineWidth = 2
|
||
|
ctx.strokeStyle = arrowColor
|
||
|
ctx.beginPath();
|
||
|
ctx.moveTo(_arrowSize, 0);
|
||
|
ctx.lineTo(_arrowSize * 2, _arrowSize)
|
||
|
ctx.stroke();
|
||
|
ctx.beginPath();
|
||
|
ctx.moveTo(_arrowSize, 0);
|
||
|
ctx.lineTo(0, _arrowSize)
|
||
|
ctx.stroke();
|
||
|
}
|
||
|
|
||
|
transform: Rotation {
|
||
|
origin.x: width / 2
|
||
|
origin.y: 0
|
||
|
angle: _arrowHeading
|
||
|
}
|
||
|
}
|
||
|
}
|