Unverified Commit c850bd92 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7781 from DonLakeFlyer/FlyArrows

Fly View direction arrows
parents e1e6df46 3c0f9347
...@@ -244,6 +244,17 @@ FlightMap { ...@@ -244,6 +244,17 @@ FlightMap {
} }
} }
MapItemView {
model: mainIsMap ? _missionController.directionArrows : undefined
delegate: MapLineArrow {
fromCoord: object ? object.coordinate1 : undefined
toCoord: object ? object.coordinate2 : undefined
arrowPosition: 2
z: QGroundControl.zOrderWaypointLines
}
}
// Allow custom builds to add map items // Allow custom builds to add map items
CustomMapItems { CustomMapItems {
map: flightMap map: flightMap
......
...@@ -1101,7 +1101,7 @@ CoordinateVector* MissionController::_addWaypointLineSegment(CoordVectHashTable& ...@@ -1101,7 +1101,7 @@ CoordinateVector* MissionController::_addWaypointLineSegment(CoordVectHashTable&
void MissionController::_recalcWaypointLines(void) void MissionController::_recalcWaypointLines(void)
{ {
int segmentCount = 0; int segmentCount = 0;
CoordinateVector* lastCoordVector = nullptr; VisualItemPair lastSegmentVisualItemPair;
bool firstCoordinateItem = true; bool firstCoordinateItem = true;
VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0)); VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0));
...@@ -1138,16 +1138,19 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1138,16 +1138,19 @@ void MissionController::_recalcWaypointLines(void)
if (item->specifiesCoordinate() && !item->isStandaloneCoordinate()) { if (item->specifiesCoordinate() && !item->isStandaloneCoordinate()) {
if (lastCoordinateItem != _settingsItem || (homePositionValid && linkStartToHome)) { if (lastCoordinateItem != _settingsItem || (homePositionValid && linkStartToHome)) {
if (!_flyView) { // Direction arrows are added to the first segment and every 5 segments in the middle.
VisualItemPair pair(lastCoordinateItem, item); bool addDirectionArrow = false;
lastCoordVector = _addWaypointLineSegment(old_table, pair); if (firstCoordinateItem || !lastCoordinateItem->isSimpleItem() || !item->isSimpleItem()) {
segmentCount++; addDirectionArrow = true;
if (firstCoordinateItem || !lastCoordinateItem->isSimpleItem() || !item->isSimpleItem()) { } else if (segmentCount > 5) {
_directionArrows.append(lastCoordVector); segmentCount = 0;
} else if (segmentCount > 5) { addDirectionArrow = true;
segmentCount = 0; }
_directionArrows.append(lastCoordVector); segmentCount++;
}
lastSegmentVisualItemPair = VisualItemPair(lastCoordinateItem, item);
if (!_flyView || addDirectionArrow) {
_directionArrows.append(_addWaypointLineSegment(old_table, lastSegmentVisualItemPair));
} }
} }
firstCoordinateItem = false; firstCoordinateItem = false;
...@@ -1161,15 +1164,36 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1161,15 +1164,36 @@ void MissionController::_recalcWaypointLines(void)
} }
if (linkEndToHome && lastCoordinateItem != _settingsItem && homePositionValid) { if (linkEndToHome && lastCoordinateItem != _settingsItem && homePositionValid) {
if (!_flyView) { lastSegmentVisualItemPair = VisualItemPair(lastCoordinateItem, _settingsItem);
VisualItemPair pair(lastCoordinateItem, _settingsItem); if (_flyView) {
lastCoordVector = _addWaypointLineSegment(old_table, pair);
} else {
_waypointPath.append(QVariant::fromValue(_settingsItem->coordinate())); _waypointPath.append(QVariant::fromValue(_settingsItem->coordinate()));
} }
_addWaypointLineSegment(old_table, lastSegmentVisualItemPair);
} }
{ // Add direction arrow to last segment
if (lastSegmentVisualItemPair.first) {
CoordinateVector* coordVector = nullptr;
// The pair may not be in the hash, this can happen in the fly view where only segments with arrows on them are added to ahsh.
// check for that first and add if needed
if (_linesTable.contains(lastSegmentVisualItemPair)) {
// Pair exists in the new table already just reuse it
coordVector = _linesTable[lastSegmentVisualItemPair];
} else if (old_table.contains(lastSegmentVisualItemPair)) {
// Pair already exists in old table, pull from old to new and reuse
_linesTable[lastSegmentVisualItemPair] = coordVector = old_table.take(lastSegmentVisualItemPair);
} else {
// Create a new segment. Since this is the fly view there is no need to wire change signals.
coordVector = new CoordinateVector(lastSegmentVisualItemPair.first->isSimpleItem() ? lastSegmentVisualItemPair.first->coordinate() : lastSegmentVisualItemPair.first->exitCoordinate(), lastSegmentVisualItemPair.second->coordinate(), this);
_linesTable[lastSegmentVisualItemPair] = coordVector;
}
_directionArrows.append(coordVector);
}
if (!_flyView) {
// Create a temporary QObjectList and replace the model data // Create a temporary QObjectList and replace the model data
QObjectList objs; QObjectList objs;
objs.reserve(_linesTable.count()); objs.reserve(_linesTable.count());
...@@ -1184,10 +1208,6 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1184,10 +1208,6 @@ void MissionController::_recalcWaypointLines(void)
// Anything left in the old table is an obsolete line object that can go // Anything left in the old table is an obsolete line object that can go
qDeleteAll(old_table); qDeleteAll(old_table);
if (lastCoordVector) {
_directionArrows.append(lastCoordVector);
}
_recalcMissionFlightStatus(); _recalcMissionFlightStatus();
if (_waypointPath.count() == 0) { if (_waypointPath.count() == 0) {
......
...@@ -7,10 +7,6 @@ ...@@ -7,10 +7,6 @@
* *
****************************************************************************/ ****************************************************************************/
/// @file
/// @author Don Gagne <don@thegagnes.com>
#include "CoordinateVector.h" #include "CoordinateVector.h"
CoordinateVector::CoordinateVector(QObject* parent) CoordinateVector::CoordinateVector(QObject* parent)
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
* *
****************************************************************************/ ****************************************************************************/
#ifndef CoordinateVector_H #ifndef CoordinateVector_H
#define CoordinateVector_H #define CoordinateVector_H
...@@ -24,7 +23,10 @@ public: ...@@ -24,7 +23,10 @@ public:
Q_PROPERTY(QGeoCoordinate coordinate1 MEMBER _coordinate1 NOTIFY coordinate1Changed) Q_PROPERTY(QGeoCoordinate coordinate1 MEMBER _coordinate1 NOTIFY coordinate1Changed)
Q_PROPERTY(QGeoCoordinate coordinate2 MEMBER _coordinate2 NOTIFY coordinate2Changed) Q_PROPERTY(QGeoCoordinate coordinate2 MEMBER _coordinate2 NOTIFY coordinate2Changed)
QGeoCoordinate coordinate1(void) const { return _coordinate1; }
QGeoCoordinate coordinate2(void) const { return _coordinate2; }
void setCoordinates(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2); void setCoordinates(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2);
public slots: public slots:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment