X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAirports%2Frunways.hxx;h=1c5ab85b1071607b60f4d330f1b1ba963f2d62dd;hb=49677f512b8edaaf22c76761dbbf9c0850c79aad;hp=a198f492c66186130664bd96d2826a6308a3cf95;hpb=7d5d75609533c98fa5ea93829cdd3bb06ee6ebe8;p=flightgear.git diff --git a/src/Airports/runways.hxx b/src/Airports/runways.hxx index a198f492c..1c5ab85b1 100644 --- a/src/Airports/runways.hxx +++ b/src/Airports/runways.hxx @@ -26,19 +26,26 @@ #include -#include - -#include "Navaids/positioned.hxx" - -#include +#include // forward decls class FGAirport; +class FGNavRecord; +class SGPropertyNode; -class FGRunway : public FGPositioned -{ - FGAirport* _airport; ///< owning airport - bool _reciprocal; +namespace flightgear { + class SID; + class STAR; +} + +class FGRunway : public FGRunwayBase +{ + FGAirport* _airport; + bool _isReciprocal; + FGRunway* _reciprocal; + double _displ_thresh; + double _stopway; + FGNavRecord* _ils; public: FGRunway(FGAirport* aAirport, const std::string& rwy_no, @@ -67,57 +74,30 @@ public: * over runways to avoid counting runways twice, if desired. */ bool isReciprocal() const - { return _reciprocal; } + { return _isReciprocal; } /** - * Test if this is a taxiway or not - */ - bool isTaxiway() const; - - /** - * Get the runway threshold point - this is syntatic sugar, equivalent to + * Get the runway begining point - this is syntatic sugar, equivalent to * calling pointOnCenterline(0.0); */ - SGGeod threshold() const; + SGGeod begin() const; /** * Get the (possibly displaced) threshold point. */ - SGGeod displacedThreshold() const; + SGGeod threshold() const; /** - * Get the opposite threshold - this is equivalent to calling + * Get the 'far' end - this is equivalent to calling * pointOnCenterline(lengthFt()); */ - SGGeod reverseThreshold() const; - - /** - * Retrieve a position on the extended runway centerline. Positive values - * are in the direction of the runway heading, negative values are in the - * opposited direction. 0.0 corresponds to the (non-displaced) threshold - */ - SGGeod pointOnCenterline(double aOffset) const; - - /** - * Runway length in ft - */ - double lengthFt() const - { return _length; } - - double lengthM() const - { return _length * SG_FEET_TO_METER; } + SGGeod end() const; - double widthFt() const - { return _width; } + double displacedThresholdM() const + { return _displ_thresh * SG_FEET_TO_METER; } - double widthM() const - { return _width * SG_FEET_TO_METER; } - - /** - * Runway heading in degrees. - */ - double headingDeg() const - { return _heading; } + double stopwayM() const + { return _stopway * SG_FEET_TO_METER; } /** * Airport this runway is located at @@ -129,17 +109,27 @@ public: void setAirport(FGAirport* aAirport) { _airport = aAirport; } - int surface() const - { return _surface_code; } + FGNavRecord* ILS() const { return _ils; } + void setILS(FGNavRecord* nav) { _ils = nav; } - double _displ_thresh; - double _stopway; - - double _heading; - double _length; - double _width; + FGRunway* reciprocalRunway() const + { return _reciprocal; } + void setReciprocalRunway(FGRunway* other); + + /** + * Helper to process property data loaded from an ICAO.threshold.xml file + */ + void processThreshold(SGPropertyNode* aThreshold); - int _surface_code; + /** + * Get SIDs (DPs) associated with this runway + */ + std::vector getSIDs(); + + /** + * Get STARs associared with this runway + */ + std::vector getSTARs(); }; #endif // _FG_RUNWAYS_HXX