QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MissionSettingsItem.h
Go to the documentation of this file.
1#pragma once
2
4#include "Fact.h"
5#include "CameraSection.h"
6#include "SpeedSection.h"
7
8#include <QtCore/QLoggingCategory>
9
10Q_DECLARE_LOGGING_CATEGORY(MissionSettingsItemLog)
11
13class MissionItem;
14class Vehicle;
15
17{
18 Q_OBJECT
19
20public:
22
23 Q_PROPERTY(Fact* plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT)
24 Q_PROPERTY(QObject* cameraSection READ cameraSection CONSTANT)
25 Q_PROPERTY(QObject* speedSection READ speedSection CONSTANT)
26
27 Fact* plannedHomePositionAltitude (void) { return &_plannedHomePositionAltitudeFact; }
28 CameraSection* cameraSection (void) { return &_cameraSection; }
29 SpeedSection* speedSection (void) { return &_speedSection; }
30
32 bool scanForMissionSettings(QmlObjectListModel* visualItems, int scanIndex);
33
39 bool addMissionEndAction(QList<MissionItem*>& items, int seqNum, QObject* missionItemParent);
40
43
44 // Called to set the initial home position. Vehicle can still update home position after this.
45 void setInitialHomePosition(const QGeoCoordinate& coordinate);
46
47 // Called to set the initial home position specified by user. Vehicle will no longer affect home position.
48 void setInitialHomePositionFromUser(const QGeoCoordinate& coordinate);
49
50 // Overrides from ComplexMissionItem
51 QString patternName (void) const final { return QString(); }
52 double complexDistance (void) const final;
53 int lastSequenceNumber (void) const final;
54 bool load (const QJsonObject& complexObject, int sequenceNumber, QString& errorString) final;
55 double greatestDistanceTo (const QGeoCoordinate &other) const final;
56 QString mapVisualQML (void) const final { return QStringLiteral("SimpleItemMapVisual.qml"); }
57 bool isSingleItem (void) const final { return true; }
58 bool terrainCollision (void) const final { return false; }
59
60 // Overrides from VisualMissionItem
61 bool dirty (void) const final { return _dirty; }
62 bool isSimpleItem (void) const final { return false; }
63 bool isStandaloneCoordinate (void) const final { return false; }
64 bool specifiesCoordinate (void) const final;
65 bool specifiesAltitudeOnly (void) const final { return false; }
66 QString commandDescription (void) const final { return tr("Initial Camera Settings"); }
67 QString commandName (void) const final { return tr("Initial Camera Settings"); }
68 QString abbreviation (void) const final;
69 QGeoCoordinate coordinate (void) const final { return _plannedHomePositionCoordinate; } // Includes altitude
70 QGeoCoordinate entryCoordinate (void) const final { return coordinate(); }
71 QGeoCoordinate exitCoordinate (void) const final { return coordinate(); }
72 int sequenceNumber (void) const final { return _sequenceNumber; }
73 double specifiedGimbalYaw (void) final;
74 double specifiedGimbalPitch (void) final;
75 void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
76 void applyNewAltitude (double /*newAltitude*/) final { /* no action */ }
77 double specifiedFlightSpeed (void) final;
78 double additionalTimeDelay (void) const final { return 0; }
79 bool exitCoordinateSameAsEntry (void) const final { return true; }
80 void setDirty (bool dirty) final;
81 void setCoordinate (const QGeoCoordinate& coordinate) final; // Should only be called if the end user is moving
82 void setSequenceNumber (int sequenceNumber) final;
83 void save (QJsonArray& missionItems) final;
84 double editableAlt (void) const final { return _plannedHomePositionAltitudeFact.rawValue().toDouble(); }
85 double amslEntryAlt (void) const final { return _plannedHomePositionCoordinate.altitude(); }
86 double amslExitAlt (void) const final { return amslEntryAlt(); }
87 double minAMSLAltitude (void) const final { return amslEntryAlt(); }
88 double maxAMSLAltitude (void) const final { return amslEntryAlt(); }
89
90signals:
91 void specifyMissionFlightSpeedChanged (bool specifyMissionFlightSpeed);
92
93private slots:
94 void _setDirtyAndUpdateLastSequenceNumber (void);
95 void _setDirty (void);
96 void _sectionDirtyChanged (bool dirty);
97 void _updateAltitudeInCoordinate (QVariant value);
98 void _setHomeAltFromTerrain (double terrainAltitude);
99 void _setCoordinateWorker (const QGeoCoordinate& coordinate);
100 void _updateHomePosition (const QGeoCoordinate& homePosition);
101
102private:
103 Vehicle* _managerVehicle = nullptr;
104 QGeoCoordinate _plannedHomePositionCoordinate; // Does not include altitude
105 Fact _plannedHomePositionAltitudeFact;
106 int _sequenceNumber = 0;
107 bool _plannedHomePositionFromVehicle = false;
108 bool _plannedHomePositionMovedByUser = false;
109 CameraSection _cameraSection;
110 SpeedSection _speedSection;
111
112 static QMap<QString, FactMetaData*> _metaDataMap;
113
114 static constexpr const char* _plannedHomePositionAltitudeName = "PlannedHomePositionAltitude";
115};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
QString errorString
A Fact is used to hold a single value within the system.
Definition Fact.h:19
bool terrainCollision(void) const final
void setInitialHomePositionFromUser(const QGeoCoordinate &coordinate)
bool scanForMissionSettings(QmlObjectListModel *visualItems, int scanIndex)
Scans the loaded items for settings items.
double minAMSLAltitude(void) const final
Fact *plannedHomePositionAltitude READ plannedHomePositionAltitude CONSTANT(QObject *cameraSection READ cameraSection CONSTANT) 1(QObject *speedSection READ speedSection CONSTANT) Fact *plannedHomePositionAltitude(void)
bool load(const QJsonObject &complexObject, int sequenceNumber, QString &errorString) final
QString commandDescription(void) const final
QString mapVisualQML(void) const final
void setDirty(bool dirty) final
bool isSimpleItem(void) const final
QGeoCoordinate exitCoordinate(void) const final
void setSequenceNumber(int sequenceNumber) final
QGeoCoordinate coordinate(void) const final
QString abbreviation(void) const final
double specifiedFlightSpeed(void) final
void setHomePositionFromVehicle(Vehicle *vehicle)
Called to update home position coordinate when it comes from a connected vehicle.
void setCoordinate(const QGeoCoordinate &coordinate) final
double specifiedGimbalYaw(void) final
QString patternName(void) const final
bool exitCoordinateSameAsEntry(void) const final
double maxAMSLAltitude(void) const final
QGeoCoordinate entryCoordinate(void) const final
bool isSingleItem(void) const final
void appendMissionItems(QList< MissionItem * > &items, QObject *missionItemParent) final
void specifyMissionFlightSpeedChanged(bool specifyMissionFlightSpeed)
bool dirty(void) const final
void setInitialHomePosition(const QGeoCoordinate &coordinate)
void save(QJsonArray &missionItems) final
double editableAlt(void) const final
double additionalTimeDelay(void) const final
bool addMissionEndAction(QList< MissionItem * > &items, int seqNum, QObject *missionItemParent)
double amslEntryAlt(void) const final
int sequenceNumber(void) const final
bool isStandaloneCoordinate(void) const final
void applyNewAltitude(double) final
Adjust the altitude of the item if appropriate to the new altitude.
double specifiedGimbalPitch(void) final
int lastSequenceNumber(void) const final
QString commandName(void) const final
CameraSection * cameraSection(void)
double greatestDistanceTo(const QGeoCoordinate &other) const final
double complexDistance(void) const final
double amslExitAlt(void) const final
bool specifiesAltitudeOnly(void) const final
bool specifiesCoordinate(void) const final
SpeedSection * speedSection(void)
Master controller for mission, fence, rally.
bool flyView(void) const
PlanMasterController * masterController(void)
double terrainAltitude(void) const