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

Merge branch 'master' into ActiveVehicle

parents 50d02ed7 bc9190c1
files: files:
- source: /translations/qgc.ts - source: /translations/qgc.ts
translation: /translations/qgc_%locale_with_underscore%.ts translation: /translations/qgc_source_%locale_with_underscore%.ts
- source: /translations/qgc-json.ts - source: /translations/qgc-json.ts
translation: /translations/qgc_%locale_with_underscore%.ts translation: /translations/qgc_json_%locale_with_underscore%.ts
...@@ -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 = globals.activeVehicle.coordinate missionItem.landingCoordinate = globals.activeVehicle.coordinate
missionItem.landingHeading.rawValue = globals.activeVehicle.heading.rawValue missionItem.landingHeading.rawValue = globals.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 = globals.activeVehicle.coordinate missionItem.landingCoordinate = globals.activeVehicle.coordinate
missionItem.landingHeading.rawValue = globals.activeVehicle.heading.rawValue missionItem.landingHeading.rawValue = globals.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()
} }
} }
} }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#pragma once #pragma once
#include <QObject>
#include <QString> #include <QString>
#include <QList> #include <QList>
......
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