swift
elevationplane.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_GEO_ELEVATIONPLANE_H
7 #define SWIFT_MISC_GEO_ELEVATIONPLANE_H
8 
10 #include "misc/mixin/mixinstring.h"
11 #include "misc/swiftmiscexport.h"
12 
13 namespace swift::misc::geo
14 {
18  public CCoordinateGeodetic,
19  public mixin::MetaType<CElevationPlane>,
20  public mixin::String<CElevationPlane>
21  {
22  public:
25 
28 
29 
31  {
32  IndexRadius = CPropertyIndexRef::GlobalIndexCElevationPlane
33  };
34 
37 
39  CElevationPlane(const ICoordinateGeodetic &coordinate, const ICoordinateGeodetic &rangeCoordinate);
40 
42  CElevationPlane(const ICoordinateGeodetic &coordinate, const physical_quantities::CLength &radius);
43 
45  CElevationPlane(const ICoordinateGeodetic &coordinate, const aviation::CAltitude &altitude,
46  const physical_quantities::CLength &radius);
47 
49  CElevationPlane(const ICoordinateGeodetic &coordinate, double altitudeMSLft,
50  const physical_quantities::CLength &radius);
51 
53  CElevationPlane(double latDeg, double lngDeg, double altitudeMSLft, const physical_quantities::CLength &radius);
54 
56  CElevationPlane(const CLatitude &lat, const CLongitude &lng, const aviation::CAltitude &altitude,
57  const physical_quantities::CLength &radius);
58 
61 
63  const physical_quantities::CLength &getRadius() const { return m_radius; }
64 
66  const physical_quantities::CLength &getRadiusOrMinimumRadius() const;
67 
69  void setRadius(const physical_quantities::CLength &radius) { m_radius = radius; }
70 
72  void setRadiusOrMinimumRadius(const physical_quantities::CLength &radius);
73 
75  void fixRadius();
76 
78  void addAltitudeOffset(const physical_quantities::CLength &offset);
79 
81  void switchAltitudeUnit(const physical_quantities::CLengthUnit &unit);
82 
84  const aviation::CAltitude &getAltitudeIfWithinRadius(const ICoordinateGeodetic &coordinate) const;
85 
87  const aviation::CAltitude &getAltitude() const { return this->geodeticHeight(); }
88 
90  const physical_quantities::CLengthUnit &getAltitudeUnit() const { return this->geodeticHeight().getUnit(); }
91 
93  aviation::CAltitude getAltitudeInUnit(const physical_quantities::CLengthUnit &unit) const;
94 
96  double getAltitudeValue(const physical_quantities::CLengthUnit &unit) const;
97 
99  virtual bool isNull() const override;
100 
103  bool isWithinRange(const ICoordinateGeodetic &coordinate) const;
104 
106  bool isWithinRange(const ICoordinateGeodetic &coordinate, const physical_quantities::CLength &radius) const;
107 
109  void setSinglePointRadius();
110 
112  void setMinorAirportRadius();
113 
115  void setMajorAirportRadius();
116 
118  QVariant propertyByIndex(CPropertyIndexRef index) const;
119 
121  void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant);
122 
124  int comparePropertyByIndex(CPropertyIndexRef index, const CElevationPlane &elevationPlane) const;
125 
127  QString convertToQString(bool i18n = false) const;
128 
130  static const physical_quantities::CLength &singlePointRadius();
131 
133  static const physical_quantities::CLength &minorAirportRadius();
134 
136  static const physical_quantities::CLength &majorAirportRadius();
137 
139  static const CElevationPlane &null();
140 
141  private:
142  physical_quantities::CLength m_radius { 0, nullptr };
143 
145  CElevationPlane,
146  SWIFT_METAMEMBER(radius));
147  };
148 } // namespace swift::misc::geo
149 
150 Q_DECLARE_METATYPE(swift::misc::geo::CElevationPlane)
151 
152 #endif // SWIFT_MISC_GEO_ELEVATIONPLANE_H
Non-owning reference to a CPropertyIndex with a subset of its features.
Altitude as used in aviation, can be AGL or MSL altitude.
Definition: altitude.h:52
CCoordinateGeodetic()
Default constructor (null coordinate)
Plane of same elevation, can be a single point or larger area (e.g. airport)
const aviation::CAltitude & getAltitude() const
Altitude (synonym for geodetic height)
const physical_quantities::CLength & getRadius() const
Radius.
const physical_quantities::CLengthUnit & getAltitudeUnit() const
Altitude (synonym for geodetic height) unit.
void setRadius(const physical_quantities::CLength &radius)
Radius.
CElevationPlane()
Default constructor.
Geodetic coordinate, a position in 3D space relative to the reference geoid.
CRTP class template from which a derived class can inherit common methods dealing with the metatype o...
Definition: mixinmetatype.h:29
CRTP class template from which a derived class can inherit string streaming operations.
Definition: mixinstring.h:31
Physical unit length (length)
Definition: length.h:18
Specialized class for distance units (meter, foot, nautical miles).
Definition: units.h:95
#define SWIFT_METAMEMBER(MEMBER,...)
Macro to define an element within a metaclass.
Definition: metaclass.h:73
#define SWIFT_METACLASS(CLASS,...)
Macro to define a nested metaclass that describes the attributes of its enclosing class.
Definition: metaclass.h:53
#define SWIFT_MISC_DECLARE_USING_MIXIN_METATYPE(DERIVED)
When a derived class and a base class both inherit from mixin::MetaType, the derived class uses this ...
#define SWIFT_MISC_DECLARE_USING_MIXIN_STRING(DERIVED)
When a derived class and a base class both inherit from mixin::String, the derived class uses this ma...
Definition: mixinstring.h:110
#define SWIFT_MISC_EXPORT
Export a class or function from the library.