Enroute Flight Navigation
A navigation app for VFR pilots
Aircraft.h
1/***************************************************************************
2 * Copyright (C) 2019-2022 by Stefan Kebekus *
3 * stefan.kebekus@gmail.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 3 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20
21#pragma once
22
23#include "units/Distance.h"
24#include "units/Speed.h"
25#include "units/Volume.h"
26#include "units/VolumeFlow.h"
27
28#include <QGeoCoordinate>
29#include <QQmlEngine>
30
31namespace Navigation {
32
34
35class Aircraft {
36 Q_GADGET
37 QML_VALUE_TYPE(aircraft)
38
39public:
41 enum FuelConsumptionUnit : quint8 {
44
47 };
48 Q_ENUM(FuelConsumptionUnit)
49
50
51 enum HorizontalDistanceUnit : quint8 {
54
57
60 };
61 Q_ENUM(HorizontalDistanceUnit)
62
63
64 enum VerticalDistanceUnit : quint8 {
66 Feet = 0,
67
70 };
71 Q_ENUM(VerticalDistanceUnit)
72
73
74 //
75 // Properties
76 //
77
78
80
86 Q_PROPERTY(Units::Speed cruiseSpeed READ cruiseSpeed WRITE setCruiseSpeed)
87
94 Q_PROPERTY(Units::Speed descentSpeed READ descentSpeed WRITE setDescentSpeed)
95
102 Q_PROPERTY(Units::VolumeFlow fuelConsumption READ fuelConsumption WRITE setFuelConsumption)
103
106
109
111 Q_PROPERTY(Units::Speed maxValidSpeed MEMBER maxValidSpeed CONSTANT)
112
114 Q_PROPERTY(Units::VolumeFlow maxValidFuelConsumption MEMBER maxValidFuelConsumption CONSTANT)
115
121 Q_PROPERTY(Units::Speed minimumSpeed READ minimumSpeed WRITE setMinimumSpeed)
122
124 Q_PROPERTY(Units::VolumeFlow minValidFuelConsumption MEMBER minValidFuelConsumption CONSTANT)
125
127 Q_PROPERTY(Units::Speed minValidSpeed MEMBER minValidSpeed CONSTANT)
128
133 Q_PROPERTY(QString name READ name WRITE setName)
134
137
138
139 //
140 // Getter Methods
141 //
142
147 [[nodiscard]] bool cabinPressureEqualsStaticPressure() const { return m_cabinPressureEqualsStaticPressure; }
148
153 [[nodiscard]] auto cruiseSpeed() const -> Units::Speed { return m_cruiseSpeed; }
154
159 [[nodiscard]] auto descentSpeed() const -> Units::Speed { return m_descentSpeed; }
160
165 [[nodiscard]] auto fuelConsumption() const -> Units::VolumeFlow { return m_fuelConsumption; }
166
171 [[nodiscard]] auto fuelConsumptionUnit() const -> FuelConsumptionUnit { return m_fuelConsumptionUnit; }
172
177 [[nodiscard]] auto horizontalDistanceUnit() const -> HorizontalDistanceUnit { return m_horizontalDistanceUnit; }
178
183 [[nodiscard]] auto minimumSpeed() const -> Units::Speed { return m_minimumSpeed; }
184
189 [[nodiscard]] auto name() const -> QString { return m_name; }
190
195 [[nodiscard]] auto verticalDistanceUnit() const -> VerticalDistanceUnit { return m_verticalDistanceUnit; }
196
197
198 //
199 // Setter Methods
200 //
201
206 void setCabinPressureEqualsStaticPressure(bool newCabinPressureEqualsStaticPressure) { m_cabinPressureEqualsStaticPressure = newCabinPressureEqualsStaticPressure; }
207
217
223
228 void setFuelConsumption(Units::VolumeFlow newFuelConsumption);
229
235
241
250
255 void setName(const QString& newName);
256
262
263
264 //
265 // Methods
266 //
267
274 [[nodiscard]] Q_INVOKABLE Navigation::Aircraft clone() const { return {*this}; }
275
284 [[nodiscard]] Q_INVOKABLE QString describeWay(const QGeoCoordinate &from, const QGeoCoordinate &to) const;
285
294 [[nodiscard]] Q_INVOKABLE QString horizontalDistanceToString(Units::Distance distance) const;
295
304 [[nodiscard]] Q_INVOKABLE QString horizontalSpeedToString(Units::Speed speed) const;
305
317 [[nodiscard]] Q_INVOKABLE QString loadFromJSON(const QString& fileName);
318
330 [[nodiscard]] Q_INVOKABLE QString loadFromJSON(const QByteArray &JSON);
331
338 Q_INVOKABLE bool operator==(const Navigation::Aircraft& other) const;
339
349 [[nodiscard]] Q_INVOKABLE QString save(const QString& fileName) const;
350
358 [[nodiscard]] Q_INVOKABLE QByteArray toJSON() const;
359
370 [[nodiscard]] Q_INVOKABLE QString verticalDistanceToString(Units::Distance distance, bool forceSign=false) const;
371
380 [[nodiscard]] Q_INVOKABLE QString verticalSpeedToString(Units::Speed speed) const;
381
390 [[nodiscard]] Q_INVOKABLE QString volumeToString(Units::Volume volume) const;
391
392private:
393 static constexpr Units::Speed minValidSpeed = Units::Speed::fromKN(10.0);
394 static constexpr Units::Speed maxValidSpeed = Units::Speed::fromKN(400.0);
397
398 bool m_cabinPressureEqualsStaticPressure {false};
399 Units::Speed m_cruiseSpeed {};
400 Units::Speed m_descentSpeed {};
401 Units::VolumeFlow m_fuelConsumption {};
402 FuelConsumptionUnit m_fuelConsumptionUnit {LiterPerHour};
403 HorizontalDistanceUnit m_horizontalDistanceUnit {NauticalMile};
404 Units::Speed m_minimumSpeed {};
405 QString m_name;
406 VerticalDistanceUnit m_verticalDistanceUnit{Feet};
407};
408
409} // namespace Navigation
410
411// Make enums available in QML
412namespace AircraftQML {
413Q_NAMESPACE
414QML_FOREIGN_NAMESPACE(Navigation::Aircraft)
415QML_NAMED_ELEMENT(Aircraft)
416} // Namespace AircraftQML
417
418// Declare meta types
419Q_DECLARE_METATYPE(Navigation::Aircraft)
This extremely simple class holds a few numbers that describe an aircraft.
Definition Aircraft.h:35
Units::Speed minValidSpeed
Minimal speed of the aircraft that is considered valid.
Definition Aircraft.h:127
auto verticalDistanceUnit() const -> VerticalDistanceUnit
Getter function for property of the same name.
Definition Aircraft.h:195
HorizontalDistanceUnit horizontalDistanceUnit
Preferred units of measurement for horizontal distances.
Definition Aircraft.h:108
Q_INVOKABLE QByteArray toJSON() const
Exports to route to JSON.
auto cruiseSpeed() const -> Units::Speed
Getter function for property of the same name.
Definition Aircraft.h:153
Q_INVOKABLE QString loadFromJSON(const QByteArray &JSON)
Reads aircraft data from a JSON document.
auto descentSpeed() const -> Units::Speed
Getter function for property of the same name.
Definition Aircraft.h:159
Units::Speed minimumSpeed
Minimum Speed.
Definition Aircraft.h:121
Q_INVOKABLE QString horizontalSpeedToString(Units::Speed speed) const
Convert horizontal speed to string.
Q_INVOKABLE QString horizontalDistanceToString(Units::Distance distance) const
Convert horizontal distance to string.
Units::Speed cruiseSpeed
Cruise Speed.
Definition Aircraft.h:86
Units::Speed maxValidSpeed
Maximal speed of the aircraft that is considered valid.
Definition Aircraft.h:111
QString name
Name.
Definition Aircraft.h:133
VerticalDistanceUnit
Units of measurement for vertical distances.
Definition Aircraft.h:64
bool cabinPressureEqualsStaticPressure
Preferred units of measurement for vertical distances.
Definition Aircraft.h:79
Q_INVOKABLE QString verticalDistanceToString(Units::Distance distance, bool forceSign=false) const
Convert vertical distance to string.
auto fuelConsumption() const -> Units::VolumeFlow
Getter function for property of the same name.
Definition Aircraft.h:165
void setHorizontalDistanceUnit(HorizontalDistanceUnit newUnit)
Setter function for property of the same name.
Q_INVOKABLE QString loadFromJSON(const QString &fileName)
Reads aircraft data from a JSON document.
Units::Speed descentSpeed
Decent Speed.
Definition Aircraft.h:94
void setName(const QString &newName)
Setter function for property of the same name.
void setDescentSpeed(Units::Speed newSpeed)
Setter function for property of the same name.
Q_INVOKABLE Navigation::Aircraft clone() const
Return copy of this object.
Definition Aircraft.h:274
Q_INVOKABLE QString save(const QString &fileName) const
Saves aircraft to a file.
void setVerticalDistanceUnit(VerticalDistanceUnit newUnit)
Setter function for property of the same name.
void setMinimumSpeed(Units::Speed newSpeed)
Setter function for property of the same name.
auto name() const -> QString
Getter function for property of the same name.
Definition Aircraft.h:189
Q_INVOKABLE QString verticalSpeedToString(Units::Speed speed) const
Convert vertical speed to string.
void setFuelConsumption(Units::VolumeFlow newFuelConsumption)
Setter function for property of the same name.
void setCabinPressureEqualsStaticPressure(bool newCabinPressureEqualsStaticPressure)
Setter function for property of the same name.
Definition Aircraft.h:206
Q_INVOKABLE bool operator==(const Navigation::Aircraft &other) const
Equality check.
HorizontalDistanceUnit
Units of measurement for horizontal distances.
Definition Aircraft.h:51
@ NauticalMile
Nautical Mile.
Definition Aircraft.h:53
@ Kilometer
Kilometer.
Definition Aircraft.h:56
@ StatuteMile
Statute Mile.
Definition Aircraft.h:59
void setFuelConsumptionUnit(FuelConsumptionUnit newUnit)
Setter function for property of the same name.
FuelConsumptionUnit
Units of measurement for volumes.
Definition Aircraft.h:41
@ GallonPerHour
Gallon per hour.
Definition Aircraft.h:46
@ LiterPerHour
Liter per hour.
Definition Aircraft.h:43
Units::VolumeFlow maxValidFuelConsumption
Maximal fuel consumption that is considered valid.
Definition Aircraft.h:114
auto minimumSpeed() const -> Units::Speed
Getter function for property of the same name.
Definition Aircraft.h:183
Units::VolumeFlow minValidFuelConsumption
Minimal fuel consumption that is considered valid.
Definition Aircraft.h:124
void setCruiseSpeed(Units::Speed newSpeed)
Setter function for property of the same name.
FuelConsumptionUnit fuelConsumptionUnit
Preferred units of measurement for fuel consumption.
Definition Aircraft.h:105
VerticalDistanceUnit verticalDistanceUnit
Preferred units of measurement for vertical distances.
Definition Aircraft.h:136
auto fuelConsumptionUnit() const -> FuelConsumptionUnit
Getter function for property of the same name.
Definition Aircraft.h:171
Q_INVOKABLE QString volumeToString(Units::Volume volume) const
Convert volume to string.
Q_INVOKABLE QString describeWay(const QGeoCoordinate &from, const QGeoCoordinate &to) const
Description of the way between two points.
auto horizontalDistanceUnit() const -> HorizontalDistanceUnit
Getter function for property of the same name.
Definition Aircraft.h:177
Units::VolumeFlow fuelConsumption
Fuel Consumption.
Definition Aircraft.h:102
Convenience class for distance computations.
Definition Distance.h:35
Convenience class for speed computations.
Definition Speed.h:36
static Q_INVOKABLE constexpr Units::Speed fromKN(double speedInKT)
Constructs a speed.
Definition Speed.h:87
Convenience class for volume flow computations.
Definition VolumeFlow.h:35
static Q_INVOKABLE constexpr Units::VolumeFlow fromLPH(double volumeFlowInLPH)
Constructs a volume flow.
Definition VolumeFlow.h:46
Convenience class for volume computations.
Definition Volume.h:35
Conversion between units used in aviation.
Definition Angle.h:34