|
|
@ -371,7 +371,8 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i) |
|
|
|
newItem->setMissionFlightStatus(_missionFlightStatus); |
|
|
|
newItem->setMissionFlightStatus(_missionFlightStatus); |
|
|
|
_visualItems->insert(i, newItem); |
|
|
|
_visualItems->insert(i, newItem); |
|
|
|
|
|
|
|
|
|
|
|
_recalcAll(); |
|
|
|
// We send the click coordinate through here to be able to set the planned home position from the user click location if needed
|
|
|
|
|
|
|
|
_recalcAllWithClickCoordinate(coordinate); |
|
|
|
|
|
|
|
|
|
|
|
return newItem->sequenceNumber(); |
|
|
|
return newItem->sequenceNumber(); |
|
|
|
} |
|
|
|
} |
|
|
@ -1517,8 +1518,10 @@ void MissionController::_recalcChildItems(void) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void MissionController::_setPlannedHomePositionFromFirstCoordinate(void) |
|
|
|
void MissionController::_setPlannedHomePositionFromFirstCoordinate(const QGeoCoordinate& clickCoordinate) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
QGeoCoordinate firstCoordinate; |
|
|
|
|
|
|
|
|
|
|
|
if (_settingsItem->coordinate().isValid()) { |
|
|
|
if (_settingsItem->coordinate().isValid()) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
@ -1528,24 +1531,40 @@ void MissionController::_setPlannedHomePositionFromFirstCoordinate(void) |
|
|
|
VisualMissionItem* item = _visualItems->value<VisualMissionItem*>(i); |
|
|
|
VisualMissionItem* item = _visualItems->value<VisualMissionItem*>(i); |
|
|
|
|
|
|
|
|
|
|
|
if (item->specifiesCoordinate()) { |
|
|
|
if (item->specifiesCoordinate()) { |
|
|
|
QGeoCoordinate plannedHomeCoord = item->coordinate().atDistanceAndAzimuth(30, 0); |
|
|
|
firstCoordinate = item->coordinate(); |
|
|
|
plannedHomeCoord.setAltitude(0); |
|
|
|
break; |
|
|
|
_settingsItem->setCoordinate(plannedHomeCoord); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// No item specifying a coordinate was found, in this case it we have a clickCoordinate use that
|
|
|
|
|
|
|
|
if (!firstCoordinate.isValid()) { |
|
|
|
|
|
|
|
firstCoordinate = clickCoordinate; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (firstCoordinate.isValid()) { |
|
|
|
|
|
|
|
QGeoCoordinate plannedHomeCoord = firstCoordinate.atDistanceAndAzimuth(30, 0); |
|
|
|
|
|
|
|
plannedHomeCoord.setAltitude(0); |
|
|
|
|
|
|
|
_settingsItem->setCoordinate(plannedHomeCoord); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void MissionController::_recalcAll(void) |
|
|
|
/// @param clickCoordinate The location of the user click when inserting a new item
|
|
|
|
|
|
|
|
void MissionController::_recalcAllWithClickCoordinate(QGeoCoordinate& clickCoordinate) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!_flyView) { |
|
|
|
if (!_flyView) { |
|
|
|
_setPlannedHomePositionFromFirstCoordinate(); |
|
|
|
_setPlannedHomePositionFromFirstCoordinate(clickCoordinate); |
|
|
|
} |
|
|
|
} |
|
|
|
_recalcSequence(); |
|
|
|
_recalcSequence(); |
|
|
|
_recalcChildItems(); |
|
|
|
_recalcChildItems(); |
|
|
|
_recalcWaypointLines(); |
|
|
|
_recalcWaypointLines(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MissionController::_recalcAll(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QGeoCoordinate emptyCoord; |
|
|
|
|
|
|
|
_recalcAllWithClickCoordinate(emptyCoord); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// Initializes a new set of mission items
|
|
|
|
/// Initializes a new set of mission items
|
|
|
|
void MissionController::_initAllVisualItems(void) |
|
|
|
void MissionController::_initAllVisualItems(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|