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.
71 lines
2.3 KiB
71 lines
2.3 KiB
/**************************************************************************** |
|
* |
|
* (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 int arrowPosition: 1 ///< 1: first quarter, 2: halfway, 3: last quarter |
|
|
|
property var _map: parent |
|
property real _arrowSize: 15 |
|
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 * arrowPosition, _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 |
|
} |
|
} |
|
}
|
|
|