Commit 35118d54 authored by Don Gagne's avatar Don Gagne

Fix line to home logic

parent 4c863206
...@@ -446,6 +446,7 @@ void MissionController::_recalcWaypointLines(void) ...@@ -446,6 +446,7 @@ void MissionController::_recalcWaypointLines(void)
_waypointLines.clear(); _waypointLines.clear();
bool linkBackToHome = false;
for (int i=1; i<_missionItems->count(); i++) { for (int i=1; i<_missionItems->count(); i++) {
MissionItem* item = qobject_cast<MissionItem*>(_missionItems->get(i)); MissionItem* item = qobject_cast<MissionItem*>(_missionItems->get(i));
...@@ -453,6 +454,10 @@ void MissionController::_recalcWaypointLines(void) ...@@ -453,6 +454,10 @@ void MissionController::_recalcWaypointLines(void)
item->setAzimuth(0.0); item->setAzimuth(0.0);
item->setDistance(-1.0); item->setDistance(-1.0);
if (firstCoordinateItem && item->command() == MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF) {
linkBackToHome = true;
}
if (item->specifiesCoordinate()) { if (item->specifiesCoordinate()) {
double absoluteAltitude = item->coordinate().altitude(); double absoluteAltitude = item->coordinate().altitude();
if (item->relativeAltitude()) { if (item->relativeAltitude()) {
...@@ -462,23 +467,8 @@ void MissionController::_recalcWaypointLines(void) ...@@ -462,23 +467,8 @@ void MissionController::_recalcWaypointLines(void)
maxAltSeen = std::max(maxAltSeen, absoluteAltitude); maxAltSeen = std::max(maxAltSeen, absoluteAltitude);
if (!item->standaloneCoordinate()) { if (!item->standaloneCoordinate()) {
if (firstCoordinateItem) { firstCoordinateItem = false;
if (item->command() == MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF) { if (!lastCoordinateItem->homePosition() || (showHomePosition && linkBackToHome)) {
// The first coordinate we hit is a takeoff command so link back to home position
if (showHomePosition) {
double azimuth, distance, altDifference;
_waypointLines.append(new CoordinateVector(homeItem->coordinate(), item->coordinate()));
_calcPrevWaypointValues(homeAlt, item, homeItem, &azimuth, &distance, &altDifference);
item->setAltDifference(altDifference);
item->setAzimuth(azimuth);
item->setDistance(distance);
}
} else {
// First coordiante is not a takeoff command, it does not link backwards to anything
}
firstCoordinateItem = false;
} else if (!lastCoordinateItem->homePosition() || showHomePosition) {
double azimuth, distance, altDifference; double azimuth, distance, altDifference;
// Subsequent coordinate items link to last coordinate item. If the last coordinate item // Subsequent coordinate items link to last coordinate item. If the last coordinate item
......
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