QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
StructureScanComplexItem.h
Go to the documentation of this file.
1#pragma once
2
4#include "MissionItem.h"
5#include "SettingsFact.h"
6#include "QGCMapPolygon.h"
7#include "CameraCalc.h"
8
10
12{
13 Q_OBJECT
14
15public:
18 StructureScanComplexItem(PlanMasterController* masterController, bool flyView, const QString& kmlOrSHPFile);
19
20 Q_PROPERTY(CameraCalc* cameraCalc READ cameraCalc CONSTANT)
21 Q_PROPERTY(Fact* entranceAlt READ entranceAlt CONSTANT)
22 Q_PROPERTY(Fact* structureHeight READ structureHeight CONSTANT)
23 Q_PROPERTY(Fact* scanBottomAlt READ scanBottomAlt CONSTANT)
24 Q_PROPERTY(Fact* layers READ layers CONSTANT)
25 Q_PROPERTY(Fact* gimbalPitch READ gimbalPitch CONSTANT)
26 Q_PROPERTY(Fact* startFromTop READ startFromTop CONSTANT)
27 Q_PROPERTY(double bottomFlightAlt READ bottomFlightAlt NOTIFY bottomFlightAltChanged)
28 Q_PROPERTY(double topFlightAlt READ topFlightAlt NOTIFY topFlightAltChanged)
29 Q_PROPERTY(int cameraShots READ cameraShots NOTIFY cameraShotsChanged)
30 Q_PROPERTY(double timeBetweenShots READ timeBetweenShots NOTIFY timeBetweenShotsChanged)
31 Q_PROPERTY(QGCMapPolygon* structurePolygon READ structurePolygon CONSTANT)
32 Q_PROPERTY(QGCMapPolygon* flightPolygon READ flightPolygon CONSTANT)
33
34 CameraCalc* cameraCalc (void) { return &_cameraCalc; }
35 Fact* entranceAlt (void) { return &_entranceAltFact; }
36 Fact* scanBottomAlt (void) { return &_scanBottomAltFact; }
37 Fact* structureHeight (void) { return &_structureHeightFact; }
38 Fact* layers (void) { return &_layersFact; }
39 Fact* gimbalPitch (void) { return &_gimbalPitchFact; }
40 Fact* startFromTop (void) { return &_startFromTopFact; }
41
42 double bottomFlightAlt (void) const;
43 double topFlightAlt (void) const;
44 int cameraShots (void) const;
45 double timeBetweenShots (void);
46 QGCMapPolygon* structurePolygon (void) { return &_structurePolygon; }
47 QGCMapPolygon* flightPolygon (void) { return &_flightPolygon; }
48
49 Q_INVOKABLE void rotateEntryPoint(void);
50
51 // Overrides from ComplexMissionItem
52 QString patternName (void) const final { return tr(canonicalName); }
53 double complexDistance (void) const final { return _scanDistance; }
54 int lastSequenceNumber (void) const final;
55 bool load (const QJsonObject& complexObject, int sequenceNumber, QString& errorString) final;
56 double greatestDistanceTo (const QGeoCoordinate &other) const final;
57 QString mapVisualQML (void) const final { return QStringLiteral("StructureScanMapVisual.qml"); }
58
59 // Overrides from VisualMissionItem
60 bool dirty (void) const final { return _dirty; }
61 bool isSimpleItem (void) const final { return false; }
62 bool isStandaloneCoordinate (void) const final { return false; }
63 bool specifiesCoordinate (void) const final { return true; }
64 bool specifiesAltitudeOnly (void) const final { return false; }
65 QString commandDescription (void) const final { return tr("Structure Scan"); }
66 QString commandName (void) const final { return tr("Structure Scan"); }
67 QString abbreviation (void) const final { return "S"; }
68 QGeoCoordinate coordinate (void) const final;
69 QGeoCoordinate entryCoordinate (void) const final { return coordinate(); }
70 QGeoCoordinate exitCoordinate (void) const final { return coordinate(); }
71 int sequenceNumber (void) const final { return _sequenceNumber; }
72 double specifiedFlightSpeed (void) final { return std::numeric_limits<double>::quiet_NaN(); }
73 double specifiedGimbalYaw (void) final { return std::numeric_limits<double>::quiet_NaN(); }
74 double specifiedGimbalPitch (void) final { return std::numeric_limits<double>::quiet_NaN(); }
75 void appendMissionItems (QList<MissionItem*>& items, QObject* missionItemParent) final;
76 void setMissionFlightStatus (MissionFlightStatus_t& missionFlightStatus) final;
77 void applyNewAltitude (double newAltitude) final;
78 double additionalTimeDelay (void) const final { return 0; }
79 ReadyForSaveState readyForSaveState (void) const final;
80 bool exitCoordinateSameAsEntry (void) const final { return true; }
81 void setDirty (bool dirty) final;
82 void setCoordinate (const QGeoCoordinate& coordinate) final;
83 void setSequenceNumber (int sequenceNumber) final;
84 void save (QJsonArray& missionItems) final;
85 double editableAlt (void) const final;
86 double amslEntryAlt (void) const final;
87 double amslExitAlt (void) const final { return amslEntryAlt(); };
88 double minAMSLAltitude (void) const final;
89 double maxAMSLAltitude (void) const final;
90
91 static constexpr const char* canonicalName = QT_TR_NOOP("Structure Scan");
92
93 static constexpr const char* settingsGroup = "StructureScan";
94 static constexpr const char* scanBottomAltName = "ScanBottomAlt";
95 static constexpr const char* structureHeightName = "StructureHeight";
96 static constexpr const char* layersName = "Layers";
97 static constexpr const char* gimbalPitchName = "GimbalPitch";
98 static constexpr const char* startFromTopName = "StartFromTop";
99
100 static constexpr const char* jsonComplexItemTypeValue = "StructureScan";
101
102signals:
108
109private slots:
110 void _segmentTerrainCollisionChanged (bool terrainCollision) final;
111 void _setDirty (void);
112 void _polygonDirtyChanged (bool dirty);
113 void _flightPathChanged (void);
114 void _clearInternal (void);
115 void _updateCoordinateAltitudes (void);
116 void _rebuildFlightPolygon (void);
117 void _recalcCameraShots (void);
118 void _recalcLayerInfo (void);
119 void _updateLastSequenceNumber (void);
120 void _updateGimbalPitch (void);
121 void _signalTopBottomAltChanged (void);
122 void _recalcScanDistance (void);
123 void _updateWizardMode (void);
124 void _updateFlightPathSegmentsDontCallDirectly (void);
125
126private:
127 void _setCameraShots (int cameraShots);
128 double _triggerDistance (void) const;
129
130 QMap<QString, FactMetaData*> _metaDataMap;
131
132 int _sequenceNumber;
133 QGCMapPolygon _structurePolygon;
134 QGCMapPolygon _flightPolygon;
135 int _entryVertex; // Polygon vertex which is used as the mission entry point
136 bool _ignoreRecalc;
137 double _scanDistance;
138 int _cameraShots;
139 double _timeBetweenShots;
140 double _vehicleSpeed;
141 CameraCalc _cameraCalc;
142
143 SettingsFact _scanBottomAltFact;
144 SettingsFact _structureHeightFact;
145 SettingsFact _layersFact;
146 SettingsFact _gimbalPitchFact;
147 SettingsFact _startFromTopFact;
148 SettingsFact _entranceAltFact;
149
150 static constexpr const char* _jsonCameraCalcKey = "CameraCalc";
151
152 static constexpr const char* _entranceAltName = "EntranceAltitude"; // This value cannot be overriden
153
154#ifdef QGC_UNITTEST_BUILD
155 friend class StructureScanComplexItemTest;
156#endif
157};
QString errorString
virtual bool terrainCollision(void) const
A Fact is used to hold a single value within the system.
Definition Fact.h:17
Master controller for mission, fence, rally.
The QGCMapPolygon class provides a polygon which can be displayed on a map using a map visuals contro...
A SettingsFact is Fact which holds a QSettings value.
int lastSequenceNumber(void) const final
QString commandName(void) const final
void setCoordinate(const QGeoCoordinate &coordinate) final
void bottomFlightAltChanged(void)
bool isStandaloneCoordinate(void) const final
bool specifiesAltitudeOnly(void) const final
double amslExitAlt(void) const final
void setMissionFlightStatus(MissionFlightStatus_t &missionFlightStatus) final
static constexpr const char * canonicalName
bool specifiesCoordinate(void) const final
void applyNewAltitude(double newAltitude) final
Adjust the altitude of the item if appropriate to the new altitude.
QGCMapPolygon * structurePolygon(void)
bool load(const QJsonObject &complexObject, int sequenceNumber, QString &errorString) final
QGeoCoordinate coordinate(void) const final
Q_INVOKABLE void rotateEntryPoint(void)
void save(QJsonArray &missionItems) final
QGeoCoordinate exitCoordinate(void) const final
static constexpr const char * structureHeightName
QGCMapPolygon * flightPolygon(void)
void timeBetweenShotsChanged(void)
double specifiedGimbalPitch(void) final
void cameraShotsChanged(int cameraShots)
static constexpr const char * layersName
bool exitCoordinateSameAsEntry(void) const final
double additionalTimeDelay(void) const final
static constexpr const char * jsonComplexItemTypeValue
void topFlightAltChanged(void)
QString mapVisualQML(void) const final
void setSequenceNumber(int sequenceNumber) final
static constexpr const char * scanBottomAltName
ReadyForSaveState readyForSaveState(void) const final
double complexDistance(void) const final
double editableAlt(void) const final
static constexpr const char * gimbalPitchName
double minAMSLAltitude(void) const final
void _updateFlightPathSegmentsSignal(void)
double greatestDistanceTo(const QGeoCoordinate &other) const final
double amslEntryAlt(void) const final
double maxAMSLAltitude(void) const final
void appendMissionItems(QList< MissionItem * > &items, QObject *missionItemParent) final
QString commandDescription(void) const final
static constexpr const char * startFromTopName
QGeoCoordinate entryCoordinate(void) const final
QString patternName(void) const final
QString abbreviation(void) const final
static constexpr const char * settingsGroup
bool isSimpleItem(void) const final
double specifiedFlightSpeed(void) final
int sequenceNumber(void) const final
bool flyView(void) const
PlanMasterController * masterController(void)