Commit c0bb343a authored by Matthias Straehl's avatar Matthias Straehl

For VTOL and FW set default landing heading to takeoff heading when...

For VTOL and FW set default landing heading to takeoff heading when TakeoffMissionItem is added in PlanView
parent 979e9922
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "SimpleMissionItem.h" #include "SimpleMissionItem.h"
#include "PlanMasterController.h" #include "PlanMasterController.h"
#include "FlightPathSegment.h" #include "FlightPathSegment.h"
#include "TakeoffMissionItem.h"
#include <QPolygonF> #include <QPolygonF>
...@@ -29,6 +30,15 @@ LandingComplexItem::LandingComplexItem(PlanMasterController* masterController, b ...@@ -29,6 +30,15 @@ LandingComplexItem::LandingComplexItem(PlanMasterController* masterController, b
qgcApp()->addCompressedSignal(QMetaMethod::fromSignal(&LandingComplexItem::_updateFlightPathSegmentsSignal)); qgcApp()->addCompressedSignal(QMetaMethod::fromSignal(&LandingComplexItem::_updateFlightPathSegmentsSignal));
} }
void LandingComplexItem::setLandingHeadingToTakeoffHeading()
{
TakeoffMissionItem* takeoffMissionItem = _missionController->takeoffMissionItem();
if (takeoffMissionItem && takeoffMissionItem->specifiesCoordinate()) {
qreal heading = takeoffMissionItem->launchCoordinate().azimuthTo(takeoffMissionItem->coordinate());
landingHeading()->setRawValue(heading);
}
}
double LandingComplexItem::complexDistance(void) const double LandingComplexItem::complexDistance(void) const
{ {
return loiterCoordinate().distanceTo(loiterTangentCoordinate()) + loiterTangentCoordinate().distanceTo(landingCoordinate()); return loiterCoordinate().distanceTo(loiterTangentCoordinate()) + loiterTangentCoordinate().distanceTo(landingCoordinate());
......
...@@ -40,6 +40,8 @@ public: ...@@ -40,6 +40,8 @@ public:
Q_PROPERTY(QGeoCoordinate landingCoordinate READ landingCoordinate WRITE setLandingCoordinate NOTIFY landingCoordinateChanged) Q_PROPERTY(QGeoCoordinate landingCoordinate READ landingCoordinate WRITE setLandingCoordinate NOTIFY landingCoordinateChanged)
Q_PROPERTY(bool landingCoordSet MEMBER _landingCoordSet NOTIFY landingCoordSetChanged) Q_PROPERTY(bool landingCoordSet MEMBER _landingCoordSet NOTIFY landingCoordSetChanged)
Q_INVOKABLE void setLandingHeadingToTakeoffHeading();
virtual Fact* loiterAltitude (void) = 0; virtual Fact* loiterAltitude (void) = 0;
virtual Fact* loiterRadius (void) = 0; virtual Fact* loiterRadius (void) = 0;
virtual Fact* landingAltitude (void) = 0; virtual Fact* landingAltitude (void) = 0;
......
...@@ -166,6 +166,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -166,6 +166,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_visualItems->deleteLater(); _visualItems->deleteLater();
_visualItems = nullptr; _visualItems = nullptr;
_settingsItem = nullptr; _settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_updateContainsItems(); // This will clear containsItems which will be set again below. This will re-pop Start Mission confirmation. _updateContainsItems(); // This will clear containsItems which will be set again below. This will re-pop Start Mission confirmation.
QmlObjectListModel* newControllerMissionItems = new QmlObjectListModel(this); QmlObjectListModel* newControllerMissionItems = new QmlObjectListModel(this);
...@@ -192,9 +193,9 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -192,9 +193,9 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
SimpleMissionItem* simpleItem = new SimpleMissionItem(_masterController, _flyView, *missionItem, this); SimpleMissionItem* simpleItem = new SimpleMissionItem(_masterController, _flyView, *missionItem, this);
if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(simpleItem->command()))) { if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(simpleItem->command()))) {
// This needs to be a TakeoffMissionItem // This needs to be a TakeoffMissionItem
TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(*missionItem, _masterController, _flyView, settingsItem, this); _takeoffMissionItem = new TakeoffMissionItem(*missionItem, _masterController, _flyView, settingsItem, this);
simpleItem->deleteLater(); simpleItem->deleteLater();
simpleItem = takeoffItem; simpleItem = _takeoffMissionItem;
} }
newControllerMissionItems->append(simpleItem); newControllerMissionItems->append(simpleItem);
} }
...@@ -359,34 +360,34 @@ VisualMissionItem* MissionController::insertSimpleMissionItem(QGeoCoordinate coo ...@@ -359,34 +360,34 @@ VisualMissionItem* MissionController::insertSimpleMissionItem(QGeoCoordinate coo
VisualMissionItem* MissionController::insertTakeoffItem(QGeoCoordinate /*coordinate*/, int visualItemIndex, bool makeCurrentItem) VisualMissionItem* MissionController::insertTakeoffItem(QGeoCoordinate /*coordinate*/, int visualItemIndex, bool makeCurrentItem)
{ {
int sequenceNumber = _nextSequenceNumber(); int sequenceNumber = _nextSequenceNumber();
TakeoffMissionItem * newItem = new TakeoffMissionItem(_controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF, _masterController, _flyView, _settingsItem, this); _takeoffMissionItem = new TakeoffMissionItem(_controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF, _masterController, _flyView, _settingsItem, this);
newItem->setSequenceNumber(sequenceNumber); _takeoffMissionItem->setSequenceNumber(sequenceNumber);
_initVisualItem(newItem); _initVisualItem(_takeoffMissionItem);
if (newItem->specifiesAltitude()) { if (_takeoffMissionItem->specifiesAltitude()) {
double prevAltitude; double prevAltitude;
int prevAltitudeMode; int prevAltitudeMode;
if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltitudeMode)) { if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltitudeMode)) {
newItem->altitude()->setRawValue(prevAltitude); _takeoffMissionItem->altitude()->setRawValue(prevAltitude);
newItem->setAltitudeMode(static_cast<QGroundControlQmlGlobal::AltitudeMode>(prevAltitudeMode)); _takeoffMissionItem->setAltitudeMode(static_cast<QGroundControlQmlGlobal::AltitudeMode>(prevAltitudeMode));
} }
} }
if (visualItemIndex == -1) { if (visualItemIndex == -1) {
_visualItems->append(newItem); _visualItems->append(_takeoffMissionItem);
} else { } else {
_visualItems->insert(visualItemIndex, newItem); _visualItems->insert(visualItemIndex, _takeoffMissionItem);
} }
_recalcAll(); _recalcAll();
if (makeCurrentItem) { if (makeCurrentItem) {
setCurrentPlanViewSeqNum(newItem->sequenceNumber(), true); setCurrentPlanViewSeqNum(_takeoffMissionItem->sequenceNumber(), true);
} }
_firstItemAdded(); _firstItemAdded();
return newItem; return _takeoffMissionItem;
} }
VisualMissionItem* MissionController::insertLandItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem) VisualMissionItem* MissionController::insertLandItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem)
...@@ -536,6 +537,10 @@ void MissionController::removeVisualItem(int viIndex) ...@@ -536,6 +537,10 @@ void MissionController::removeVisualItem(int viIndex)
bool removeSurveyStyle = _visualItems->value<SurveyComplexItem*>(viIndex) || _visualItems->value<CorridorScanComplexItem*>(viIndex); bool removeSurveyStyle = _visualItems->value<SurveyComplexItem*>(viIndex) || _visualItems->value<CorridorScanComplexItem*>(viIndex);
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->removeAt(viIndex)); VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->removeAt(viIndex));
if (item == _takeoffMissionItem) {
_takeoffMissionItem = nullptr;
}
_deinitVisualItem(item); _deinitVisualItem(item);
item->deleteLater(); item->deleteLater();
...@@ -591,6 +596,7 @@ void MissionController::removeAll(void) ...@@ -591,6 +596,7 @@ void MissionController::removeAll(void)
_visualItems->clearAndDeleteContents(); _visualItems->clearAndDeleteContents();
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = nullptr; _settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_visualItems = new QmlObjectListModel(this); _visualItems = new QmlObjectListModel(this);
_addMissionSettings(_visualItems); _addMissionSettings(_visualItems);
_initAllVisualItems(); _initAllVisualItems();
...@@ -983,8 +989,9 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI ...@@ -983,8 +989,9 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI
if (_visualItems) { if (_visualItems) {
_deinitAllVisualItems(); _deinitAllVisualItems();
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = nullptr;
} }
_settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_visualItems = loadedVisualItems; _visualItems = loadedVisualItems;
...@@ -1859,6 +1866,11 @@ void MissionController::_initAllVisualItems(void) ...@@ -1859,6 +1866,11 @@ void MissionController::_initAllVisualItems(void)
for (int i=0; i<_visualItems->count(); i++) { for (int i=0; i<_visualItems->count(); i++) {
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->get(i)); VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
_initVisualItem(item); _initVisualItem(item);
TakeoffMissionItem* takeoffItem = qobject_cast<TakeoffMissionItem*>(item);
if (takeoffItem) {
_takeoffMissionItem = takeoffItem;
}
} }
_recalcAll(); _recalcAll();
......
...@@ -22,12 +22,12 @@ ...@@ -22,12 +22,12 @@
class FlightPathSegment; class FlightPathSegment;
class VisualMissionItem; class VisualMissionItem;
class MissionItem; class MissionItem;
class MissionSettingsItem;
class AppSettings; class AppSettings;
class MissionManager; class MissionManager;
class SimpleMissionItem; class SimpleMissionItem;
class ComplexMissionItem; class ComplexMissionItem;
class MissionSettingsItem; class MissionSettingsItem;
class TakeoffMissionItem;
class QDomDocument; class QDomDocument;
class PlanViewSettings; class PlanViewSettings;
...@@ -86,6 +86,7 @@ public: ...@@ -86,6 +86,7 @@ public:
Q_PROPERTY(int currentPlanViewSeqNum READ currentPlanViewSeqNum NOTIFY currentPlanViewSeqNumChanged) Q_PROPERTY(int currentPlanViewSeqNum READ currentPlanViewSeqNum NOTIFY currentPlanViewSeqNumChanged)
Q_PROPERTY(int currentPlanViewVIIndex READ currentPlanViewVIIndex NOTIFY currentPlanViewVIIndexChanged) Q_PROPERTY(int currentPlanViewVIIndex READ currentPlanViewVIIndex NOTIFY currentPlanViewVIIndexChanged)
Q_PROPERTY(VisualMissionItem* currentPlanViewItem READ currentPlanViewItem NOTIFY currentPlanViewItemChanged) Q_PROPERTY(VisualMissionItem* currentPlanViewItem READ currentPlanViewItem NOTIFY currentPlanViewItemChanged)
Q_PROPERTY(TakeoffMissionItem* takeoffMissionItem READ takeoffMissionItem NOTIFY takeoffMissionItemChanged)
Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged) Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged)
Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged) Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged)
Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged) Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged)
...@@ -225,6 +226,7 @@ public: ...@@ -225,6 +226,7 @@ public:
QStringList complexMissionItemNames (void) const; QStringList complexMissionItemNames (void) const;
QGeoCoordinate plannedHomePosition (void) const; QGeoCoordinate plannedHomePosition (void) const;
VisualMissionItem* currentPlanViewItem (void) const { return _currentPlanViewItem; } VisualMissionItem* currentPlanViewItem (void) const { return _currentPlanViewItem; }
TakeoffMissionItem* takeoffMissionItem (void) const { return _takeoffMissionItem; }
double progressPct (void) const { return _progressPct; } double progressPct (void) const { return _progressPct; }
QString surveyComplexItemName (void) const; QString surveyComplexItemName (void) const;
QString corridorScanComplexItemName (void) const; QString corridorScanComplexItemName (void) const;
...@@ -280,6 +282,7 @@ signals: ...@@ -280,6 +282,7 @@ signals:
void currentPlanViewSeqNumChanged (void); void currentPlanViewSeqNumChanged (void);
void currentPlanViewVIIndexChanged (void); void currentPlanViewVIIndexChanged (void);
void currentPlanViewItemChanged (void); void currentPlanViewItemChanged (void);
void takeoffMissionItemChanged (void);
void missionBoundingCubeChanged (void); void missionBoundingCubeChanged (void);
void missionItemCountChanged (int missionItemCount); void missionItemCountChanged (int missionItemCount);
void onlyInsertTakeoffValidChanged (void); void onlyInsertTakeoffValidChanged (void);
...@@ -379,6 +382,7 @@ private: ...@@ -379,6 +382,7 @@ private:
int _currentPlanViewSeqNum = -1; int _currentPlanViewSeqNum = -1;
int _currentPlanViewVIIndex = -1; int _currentPlanViewVIIndex = -1;
VisualMissionItem* _currentPlanViewItem = nullptr; VisualMissionItem* _currentPlanViewItem = nullptr;
TakeoffMissionItem* _takeoffMissionItem = nullptr;
QTimer _updateTimer; QTimer _updateTimer;
QGCGeoBoundingCube _travelBoundingCube; QGCGeoBoundingCube _travelBoundingCube;
QGeoCoordinate _takeoffCoordinate; QGeoCoordinate _takeoffCoordinate;
......
...@@ -289,6 +289,7 @@ Rectangle { ...@@ -289,6 +289,7 @@ Rectangle {
onClicked: { onClicked: {
missionItem.landingCoordinate = activeVehicle.coordinate missionItem.landingCoordinate = activeVehicle.coordinate
missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue
missionItem.setLandingHeadingToTakeoffHeading()
} }
} }
} }
......
...@@ -189,6 +189,7 @@ Item { ...@@ -189,6 +189,7 @@ Item {
coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces) coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces) coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
_missionItem.landingCoordinate = coordinate _missionItem.landingCoordinate = coordinate
_missionItem.setLandingHeadingToTakeoffHeading()
} }
} }
} }
......
...@@ -276,6 +276,7 @@ Rectangle { ...@@ -276,6 +276,7 @@ Rectangle {
onClicked: { onClicked: {
missionItem.landingCoordinate = activeVehicle.coordinate missionItem.landingCoordinate = activeVehicle.coordinate
missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue missionItem.landingHeading.rawValue = activeVehicle.heading.rawValue
missionItem.setLandingHeadingToTakeoffHeading()
} }
} }
} }
......
...@@ -159,6 +159,7 @@ Item { ...@@ -159,6 +159,7 @@ Item {
coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces) coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces) coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
_missionItem.landingCoordinate = coordinate _missionItem.landingCoordinate = coordinate
_missionItem.setLandingHeadingToTakeoffHeading()
} }
} }
} }
......
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