QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
CameraCalc.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtQmlIntegration/QtQmlIntegration>
4
5#include "CameraSpec.h"
6#include "SettingsFact.h"
8
10
11class CameraCalc : public CameraSpec
12{
13 Q_OBJECT
14 QML_ELEMENT
15 QML_UNCREATABLE("")
16public:
17 CameraCalc(PlanMasterController* masterController, const QString& settingsGroup, QObject* parent = nullptr);
18
19 Q_PROPERTY(QString xlatCustomCameraName READ xlatCustomCameraName CONSTANT)
20 Q_PROPERTY(QString xlatManualCameraName READ xlatManualCameraName CONSTANT)
21 Q_PROPERTY(bool isManualCamera READ isManualCamera NOTIFY isManualCameraChanged)
22 Q_PROPERTY(bool isCustomCamera READ isCustomCamera NOTIFY isCustomCameraChanged)
23 Q_PROPERTY(QString cameraBrand MEMBER _cameraBrand WRITE setCameraBrand NOTIFY cameraBrandChanged)
24 Q_PROPERTY(QString cameraModel MEMBER _cameraModel WRITE setCameraModel NOTIFY cameraModelChanged)
25 Q_PROPERTY(QStringList cameraBrandList MEMBER _cameraBrandList CONSTANT)
26 Q_PROPERTY(QStringList cameraModelList MEMBER _cameraModelList NOTIFY cameraModelListChanged)
29 Q_PROPERTY(Fact* imageDensity READ imageDensity CONSTANT)
31 Q_PROPERTY(Fact* sideOverlap READ sideOverlap CONSTANT)
34
35 // When we are creating a manual grid we still use CameraCalc to store the manual grid information. It's a bastardization of what
36 // CameraCalc is meant for but it greatly simplifies code and persistance of manual grids.
37 // grid altitude - distanceToSurface
38 // grid altitude mode - distanceMode
39 // trigger distance - adjustedFootprintFrontal
40 // transect spacing - adjustedFootprintSide
42
43 // The following values are calculated from the camera properties
46
47 static QString xlatCustomCameraName (void);
48 static QString xlatManualCameraName (void);
49 static QString canonicalCustomCameraName(void);
50 static QString canonicalManualCameraName(void);
51
52 Fact* valueSetIsDistance (void) { return &_valueSetIsDistanceFact; }
53 Fact* distanceToSurface (void) { return &_distanceToSurfaceFact; }
54 Fact* imageDensity (void) { return &_imageDensityFact; }
55 Fact* frontalOverlap (void) { return &_frontalOverlapFact; }
56 Fact* sideOverlap (void) { return &_sideOverlapFact; }
57 Fact* adjustedFootprintSide (void) { return &_adjustedFootprintSideFact; }
58 Fact* adjustedFootprintFrontal (void) { return &_adjustedFootprintFrontalFact; }
59
60 const Fact* valueSetIsDistance (void) const { return &_valueSetIsDistanceFact; }
61 const Fact* distanceToSurface (void) const { return &_distanceToSurfaceFact; }
62 const Fact* imageDensity (void) const { return &_imageDensityFact; }
63 const Fact* frontalOverlap (void) const { return &_frontalOverlapFact; }
64 const Fact* sideOverlap (void) const { return &_sideOverlapFact; }
65 const Fact* adjustedFootprintSide (void) const { return &_adjustedFootprintSideFact; }
66 const Fact* adjustedFootprintFrontal (void) const { return &_adjustedFootprintFrontalFact; }
67
68 bool isManualCamera (void) const { return _cameraNameFact.rawValue().toString() == canonicalManualCameraName(); }
69 bool isCustomCamera (void) const { return _cameraNameFact.rawValue().toString() == canonicalCustomCameraName(); }
70 double imageFootprintSide (void) const { return _imageFootprintSide; }
71 double imageFootprintFrontal (void) const { return _imageFootprintFrontal; }
72 QGroundControlQmlGlobal::AltMode distanceMode(void) const { return _distanceMode; }
73
75 void setCameraBrand (const QString& cameraBrand);
76 void setCameraModel (const QString& cameraModel);
77
78 void save(QJsonObject& json) const;
79 bool load(const QJsonObject& json, bool deprecatedFollowTerrain, QString& errorString, bool forPresets);
80
81 void _setCameraNameFromV3TransectLoad (const QString& cameraName);
82
83 static constexpr const char* cameraNameName = "CameraName";
84 static constexpr const char* valueSetIsDistanceName = "ValueSetIsDistance";
85 static constexpr const char* distanceToSurfaceName = "DistanceToSurface";
86 static constexpr const char* distanceModeName = "DistanceMode";
87 static constexpr const char* imageDensityName = "ImageDensity";
88 static constexpr const char* frontalOverlapName = "FrontalOverlap";
89 static constexpr const char* sideOverlapName = "SideOverlap";
90 static constexpr const char* adjustedFootprintFrontalName = "AdjustedFootprintFrontal";
91 static constexpr const char* adjustedFootprintSideName = "AdjustedFootprintSide";
92
93signals:
96 void distanceModeChanged (int altMode);
99 void cameraBrandChanged (void);
102 void updateCameraStats (void);
103
104private slots:
105 void _recalcTriggerDistance (void);
106 void _setDirty (void);
107 void _cameraNameChanged (void);
108
109private:
110 void _setBrandModelFromCanonicalName (const QString& cameraName);
111 void _rebuildCameraModelList (void);
112 QString _validCanonicalCameraName (const QString& cameraName);
113
114 bool _disableRecalc = false;
115 QString _cameraBrand;
116 QString _cameraModel;
117 QStringList _cameraBrandList;
118 QStringList _cameraModelList;
120 double _imageFootprintSide = 0;
121 double _imageFootprintFrontal = 0;
122 QVariantList _knownCameraList;
123
124 QMap<QString, FactMetaData*> _metaDataMap;
125
126 SettingsFact _cameraNameFact;
127 SettingsFact _valueSetIsDistanceFact;
128 SettingsFact _distanceToSurfaceFact;
129 SettingsFact _imageDensityFact;
130 SettingsFact _frontalOverlapFact;
131 SettingsFact _sideOverlapFact;
132 SettingsFact _adjustedFootprintSideFact;
133 SettingsFact _adjustedFootprintFrontalFact;
134
135 // The following are deprecated and only included in order to convert V0 formats
136 enum CameraSpecType {
137 CameraSpecNone,
138 CameraSpecCustom,
139 CameraSpecKnown
140 };
141
142 static constexpr const char* _jsonCameraSpecTypeKeyDeprecated = "CameraSpecType";
143 // The following are deprecated and only included in order to convert V1 formats
144 static constexpr const char* _jsonDistanceToSurfaceRelativeKeyDeprecated = "DistanceToSurfaceRelative";
145};
QString errorString
const Fact * adjustedFootprintFrontal(void) const
Definition CameraCalc.h:66
static constexpr const char * distanceModeName
Definition CameraCalc.h:86
double imageFootprintSide(void) const
Definition CameraCalc.h:70
const Fact * valueSetIsDistance(void) const
Definition CameraCalc.h:60
void save(QJsonObject &json) const
void _setCameraNameFromV3TransectLoad(const QString &cameraName)
static constexpr const char * sideOverlapName
Definition CameraCalc.h:89
void cameraModelListChanged(void)
const Fact * adjustedFootprintSide(void) const
Definition CameraCalc.h:65
void updateCameraStats(void)
Fact * imageDensity(void)
Definition CameraCalc.h:54
QString xlatCustomCameraName READ xlatCustomCameraName static CONSTANT(QString xlatManualCameraName READ xlatManualCameraName CONSTANT) 1(bool isManualCamera READ isManualCamera NOTIFY isManualCameraChanged) 1(bool isCustomCamera READ isCustomCamera NOTIFY isCustomCameraChanged) 1(QString cameraBrand MEMBER _cameraBrand WRITE setCameraBrand NOTIFY cameraBrandChanged) 1(QString cameraModel MEMBER _cameraModel WRITE setCameraModel NOTIFY cameraModelChanged) 1(QStringList cameraBrandList MEMBER _cameraBrandList CONSTANT) 1(QStringList cameraModelList MEMBER _cameraModelList NOTIFY cameraModelListChanged) 1(Fact *valueSetIsDistance READ valueSetIsDistance CONSTANT) 1(Fact *distanceToSurface READ distanceToSurface CONSTANT) 1(Fact *imageDensity READ imageDensity CONSTANT) 1(Fact *frontalOverlap READ frontalOverlap CONSTANT) 1(Fact *sideOverlap READ sideOverlap CONSTANT) 1(Fact *adjustedFootprintSide READ adjustedFootprintSide CONSTANT) 1(Fact *adjustedFootprintFrontal READ adjustedFootprintFrontal CONSTANT) 1(QGroundControlQmlGlobal QStrin xlatManualCameraName)(void)
< User visible camera name for custom camera setting
Definition CameraCalc.h:48
Fact * adjustedFootprintSide(void)
Definition CameraCalc.h:57
static constexpr const char * frontalOverlapName
Definition CameraCalc.h:88
static constexpr const char * adjustedFootprintFrontalName
Definition CameraCalc.h:90
bool isCustomCamera(void) const
Definition CameraCalc.h:69
bool isManualCamera(void) const
Definition CameraCalc.h:68
void setDistanceMode(QGroundControlQmlGlobal::AltMode altMode)
void imageFootprintSideChanged(double imageFootprintSide)
static constexpr const char * adjustedFootprintSideName
Definition CameraCalc.h:91
static constexpr const char * valueSetIsDistanceName
Definition CameraCalc.h:84
void cameraBrandChanged(void)
const Fact * sideOverlap(void) const
Definition CameraCalc.h:64
Fact * sideOverlap(void)
Definition CameraCalc.h:56
static constexpr const char * cameraNameName
Definition CameraCalc.h:83
void distanceModeChanged(int altMode)
void isCustomCameraChanged(void)
Fact * distanceToSurface(void)
Definition CameraCalc.h:53
Fact * adjustedFootprintFrontal(void)
Definition CameraCalc.h:58
bool load(const QJsonObject &json, bool deprecatedFollowTerrain, QString &errorString, bool forPresets)
const Fact * distanceToSurface(void) const
Definition CameraCalc.h:61
QGroundControlQmlGlobal::AltMode distanceMode(void) const
Definition CameraCalc.h:72
static QString canonicalCustomCameraName(void)
void setCameraBrand(const QString &cameraBrand)
static constexpr const char * distanceToSurfaceName
Definition CameraCalc.h:85
static constexpr const char * imageDensityName
Definition CameraCalc.h:87
void isManualCameraChanged(void)
Fact * valueSetIsDistance(void)
Definition CameraCalc.h:52
const Fact * frontalOverlap(void) const
Definition CameraCalc.h:63
const Fact * imageDensity(void) const
Definition CameraCalc.h:62
void cameraModelChanged(void)
void imageFootprintFrontalChanged(double imageFootprintFrontal)
void setCameraModel(const QString &cameraModel)
double imageFootprintFrontal(void) const
Definition CameraCalc.h:71
Fact * frontalOverlap(void)
Definition CameraCalc.h:55
static QString canonicalManualCameraName(void)
Fact *sensorWidth READ sensorWidth CONSTANT(Fact *sensorHeight READ sensorHeight CONSTANT) 1(Fact *imageWidth READ imageWidth CONSTANT) 1(Fact *imageHeight READ imageHeight CONSTANT) 1(Fact *focalLength READ focalLength CONSTANT) 1(Fact *landscape READ landscape CONSTANT) 1(Fact *fixedOrientation READ fixedOrientation CONSTANT) 1(Fact *minTriggerInterval READ minTriggerInterval CONSTANT) SettingsFact *sensorWidth(void)
< Sensor size in millimeters
Definition CameraSpec.h:16
A Fact is used to hold a single value within the system.
Definition Fact.h:19
Master controller for mission, fence, rally.
A SettingsFact is Fact which holds a QSettings value.