QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ComplexMissionItem.cc
Go to the documentation of this file.
2#include "QGCApplication.h"
3#include "QGCCorePlugin.h"
4#include "QGCOptions.h"
6#include "FlightPathSegment.h"
7#include "MissionController.h"
9#include "SettingsManager.h"
10
11#include <QtCore/QCborMap>
12#include <QtCore/QSettings>
13
22
24{
26
27 return *this;
28}
29
31{
32 QStringList names;
33
34 QSettings settings;
35
36 settings.beginGroup(presetsSettingsGroup());
37 settings.beginGroup(_presetSettingsKey);
38 return settings.childKeys();
39}
40
41void ComplexMissionItem::loadPreset(const QString& name)
42{
43 Q_UNUSED(name);
44 qgcApp()->showAppMessage(tr("This Pattern does not support Presets."));
45}
46
47void ComplexMissionItem::savePreset(const QString& name)
48{
49 Q_UNUSED(name);
50 qgcApp()->showAppMessage(tr("This Pattern does not support Presets."));
51}
52
53void ComplexMissionItem::deletePreset(const QString& name)
54{
55 if (QGCCorePlugin::instance()->options()->surveyBuiltInPresetNames().contains(name)) {
56 qgcApp()->showAppMessage(tr("'%1' is a built-in preset which cannot be deleted.").arg(name));
57 return;
58 }
59
60 QSettings settings;
61 settings.beginGroup(presetsSettingsGroup());
62 settings.beginGroup(_presetSettingsKey);
63 settings.remove(name);
64 emit presetNamesChanged();
65}
66
67void ComplexMissionItem::_savePresetJson(const QString& name, QJsonObject& presetObject)
68{
69 QSettings settings;
70 settings.beginGroup(presetsSettingsGroup());
71 settings.beginGroup(_presetSettingsKey);
72 settings.setValue(name, QCborMap::fromJsonObject(presetObject).toCborValue().toVariant());
73
74 // Use this to save a survey preset as a JSON file to be included in the build
75 // as a built-in survey preset that cannot be deleted.
76 #if 0
77 QString savePath = SettingsManager::instance()->appSettings()->missionSavePath();
78 QDir saveDir(savePath);
79
80 QString fileName = saveDir.absoluteFilePath(name);
81 fileName.append(".json");
82 QFile jsonFile(fileName);
83
84 if (!jsonFile.open(QIODevice::WriteOnly)) {
85 qDebug() << "Couldn't open .json file.";
86 }
87
88 qDebug() << "Saving survey preset to JSON";
89 auto jsonDoc = QJsonDocument(jsonObj);
90 jsonFile.write(jsonDoc.toJson());
91 #endif
92
93 emit presetNamesChanged();
94}
95
96QJsonObject ComplexMissionItem::_loadPresetJson(const QString& name)
97{
98 QSettings settings;
99 settings.beginGroup(presetsSettingsGroup());
100 settings.beginGroup(_presetSettingsKey);
101 return QCborValue::fromVariant(settings.value(name)).toMap().toJsonObject();
102}
103
105{
106 // Default implementation has no visuals
107}
108
109void ComplexMissionItem::_appendFlightPathSegment(FlightPathSegment::SegmentType segmentType, const QGeoCoordinate& coord1, double coord1AMSLAlt, const QGeoCoordinate& coord2, double coord2AMSLAlt)
110{
111 FlightPathSegment* segment = new FlightPathSegment(segmentType, coord1, coord1AMSLAlt, coord2, coord2AMSLAlt, true /* queryTerrainData */, this /* parent */);
112
116
117 // Signals may have been emitted in contructor so we need to deal with that now since they were missed
118
120 if (segment->terrainCollision()) {
122 }
123
124 if (segment->amslTerrainHeights().count()) {
126 }
127}
128
#define qgcApp()
void _savePresetJson(const QString &name, QJsonObject &presetObject)
void presetNamesChanged(void)
void deletePreset(const QString &name)
QJsonObject _loadPresetJson(const QString &name)
void _appendFlightPathSegment(FlightPathSegment::SegmentType segmentType, const QGeoCoordinate &coord1, double coord1AMSLAlt, const QGeoCoordinate &coord2, double coord2AMSLAlt)
QmlObjectListModel _flightPathSegments
virtual void loadPreset(const QString &name)
virtual QString presetsSettingsGroup(void)
void maxAMSLAltitudeChanged(void)
const ComplexMissionItem & operator=(const ComplexMissionItem &other)
virtual QStringList presetNames(void)
virtual bool terrainCollision(void) const
void minAMSLAltitudeChanged(void)
virtual void savePreset(const QString &name)
ComplexMissionItem(PlanMasterController *masterController, bool flyView)
void terrainCollisionChanged(bool terrainCollision)
virtual void addKMLVisuals(KMLPlanDomDocument &domDocument)
virtual void _segmentTerrainCollisionChanged(bool terrainCollision)
static constexpr const char * _presetSettingsKey
void terrainCollisionChanged(bool terrainCollision)
const QVariantList & amslTerrainHeights(void) const
void amslTerrainHeightsChanged(void)
bool terrainCollision(void) const
Used to convert a Plan to a KML document.
void recalcTerrainProfile(void)
void plannedHomePositionChanged(QGeoCoordinate plannedHomePosition)
Master controller for mission, fence, rally.
void append(QObject *object)
Caller maintains responsibility for object ownership and deletion.
MissionController * _missionController
void _amslEntryAltChanged(void)
const VisualMissionItem & operator=(const VisualMissionItem &other)