FlightGear next
waypoint.cxx
Go to the documentation of this file.
1// waypoint.cxx - waypoints that can occur in routes/procedures
2// Written by James Turner, started 2009.
3//
4// Copyright (C) 2009 Curtis L. Olson
5//
6// This program is free software; you can redistribute it and/or
7// modify it under the terms of the GNU General Public License as
8// published by the Free Software Foundation; either version 2 of the
9// License, or (at your option) any later version.
10//
11// This program is distributed in the hope that it will be useful, but
12// WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// General Public License for more details.
15//
16// You should have received a copy of the GNU General Public License
17// along with this program; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#include "waypoint.hxx"
25
26#include <simgear/structure/exception.hxx>
27#include <simgear/misc/strutils.hxx>
28
29#include <Airports/airport.hxx>
30#include <Airports/runways.hxx>
31#include <Navaids/airways.hxx>
32
33using std::string;
34
35namespace flightgear
36{
37
38BasicWaypt::BasicWaypt(const SGGeod& aPos, const string& aIdent, RouteBase* aOwner) :
39 Waypt(aOwner),
40 _pos(aPos),
41 _ident(aIdent)
42{
43}
44
46 Waypt(aOwner)
47{
48}
49
50bool BasicWaypt::initFromProperties(SGPropertyNode_ptr aProp)
51{
52 if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
53 SG_LOG(SG_AUTOPILOT, SG_WARN, "missing lon/lat properties");
54 return false;
55 }
56
57 if (!Waypt::initFromProperties(aProp))
58 return false;
59
60 _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"),
61 aProp->getDoubleValue("lat"));
62 _ident = aProp->getStringValue("ident");
63 return true;
64}
65
66void BasicWaypt::writeToProperties(SGPropertyNode_ptr aProp) const
67{
69
70 aProp->setStringValue("ident", _ident);
71 aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
72 aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
73}
74
75std::string BasicWaypt::icaoDescription() const
76{
77 return simgear::strutils::formatGeodAsString(_pos, simgear::strutils::LatLonFormat::ICAO_ROUTE_DEGREES);
78}
79
81
83 Waypt(aOwner),
84 _navaid(aPos)
85{
86 if (aPos->type() == FGPositioned::RUNWAY) {
87 SG_LOG(SG_NAVAID, SG_WARN, "sure you don't want to be building a runway waypt here?");
88 }
89}
90
92 Waypt(aOwner)
93{
94}
95
96
98{
99 return SGGeod::fromGeodFt(_navaid->geod(), altitudeFt());
100}
101
102std::string NavaidWaypoint::ident() const
103{
104 return _navaid->ident();
105}
106
107bool NavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp)
108{
109 if (!aProp->hasChild("ident")) {
110 SG_LOG(SG_AUTOPILOT, SG_WARN, "missing navaid ident");
111 return false;
112 }
113
114 if (!Waypt::initFromProperties(aProp))
115 return false;
116
117 std::string idn(aProp->getStringValue("ident"));
118 SGGeod p;
119 if (aProp->hasChild("lon")) {
120 p = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
121 }
122
123 // FIXME - resolve co-located DME, etc
124 // is it sufficent just to ignore DMEs, actually?
126 if (!nav) {
127 SG_LOG(SG_AUTOPILOT, SG_WARN, "unknown navdaid ident:" << idn);
128 return false;
129 }
130
131 if (p.isValid() && (SGGeodesy::distanceM(nav->geod(), p) > 4000)) {
132 // the looked up navaid was more than 4000 metres from the lat/lon.
133 // in this case, throw an exception here so we fall back to using
134 // a basic waypoint
135 // see https://sourceforge.net/p/flightgear/codetickets/1814/
136 SG_LOG(SG_AUTOPILOT, SG_WARN, "Waypoint navaid for ident:" << idn << " is too far from the specified lat/lon");
137 return false;
138 }
139
140 _navaid = nav;
141 return true;
142}
143
144void NavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const
145{
147
148 aProp->setStringValue("ident", _navaid->ident());
149 // write lon/lat to disambiguate
150 aProp->setDoubleValue("lon", _navaid->geod().getLongitudeDeg());
151 aProp->setDoubleValue("lat", _navaid->geod().getLatitudeDeg());
152}
153
155 double aRadial, double aDistNm) :
156 NavaidWaypoint(aPos, aOwner),
157 _radial(aRadial),
158 _distanceNm(aDistNm)
159{
160 init();
161}
162
167
168void OffsetNavaidWaypoint::init()
169{
170 SGGeod offset;
171 double az2;
172 SGGeodesy::direct(_navaid->geod(), _radial, _distanceNm * SG_NM_TO_METER, offset, az2);
173 _geod = SGGeod::fromGeodFt(offset, altitude(ALTITUDE_FEET));
174}
175
176bool OffsetNavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp)
177{
178 if (!aProp->hasChild("radial-deg") || !aProp->hasChild("distance-nm")) {
179 SG_LOG(SG_AUTOPILOT, SG_WARN, "missing radial/offset distance creating offset waypoint");
180 return false;
181 }
182
184 return false;
185
186 _radial = aProp->getDoubleValue("radial-deg");
187 _distanceNm = aProp->getDoubleValue("distance-nm");
188 init();
189 return true;
190}
191
192void OffsetNavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const
193{
195 aProp->setDoubleValue("radial-deg", _radial);
196 aProp->setDoubleValue("distance-nm", _distanceNm);
197}
198
200
202 Waypt(aOwner),
203 _runway(aPos)
204{
205 assert(aPos != nullptr);
206}
207
209 Waypt(aOwner)
210{
211}
212
214{
215 return _runway->threshold();
216}
217
218std::string RunwayWaypt::ident() const
219{
220 return _runway->airport()->ident() + "-" + _runway->ident();
221}
222
224{
225 return _runway;
226}
227
229{
230 return _runway->headingDeg();
231}
232
233bool RunwayWaypt::initFromProperties(SGPropertyNode_ptr aProp)
234{
235 if (!aProp->hasChild("icao") || !aProp->hasChild("ident")) {
236 SG_LOG(SG_AUTOPILOT, SG_WARN, "missing ICAO/ident on runway waypoint");
237 return false;
238 }
239
240 if (!Waypt::initFromProperties(aProp))
241 return false;
242
243 std::string idn(aProp->getStringValue("ident"));
244 const FGAirport* apt = FGAirport::getByIdent(aProp->getStringValue("icao"));
245 if (!apt) {
246 SG_LOG(SG_AUTOPILOT, SG_WARN, "Unknown airport:" << aProp->getStringValue("icao"));
247 return false;
248 }
249
250 const std::string ident = aProp->getStringValue("ident");
251 if (!apt->hasRunwayWithIdent(ident)) {
252 SG_LOG(SG_AUTOPILOT, SG_WARN, "Unknown runway " << ident << " at " << aProp->getStringValue("icao"));
253 return false;
254 }
255
256 _runway = apt->getRunwayByIdent(ident);
257 return true;
258}
259
260void RunwayWaypt::writeToProperties(SGPropertyNode_ptr aProp) const
261{
263 aProp->setStringValue("ident", _runway->ident());
264 aProp->setStringValue("icao", _runway->airport()->ident());
265}
266
268
269Hold::Hold(const SGGeod& aPos, const string& aIdent, RouteBase* aOwner) :
270 BasicWaypt(aPos, aIdent, aOwner),
271 _righthanded(true),
272 _isDistance(false)
273{
274}
275
277 BasicWaypt(aOwner),
278 _righthanded(true),
279 _isDistance(false)
280{
281}
282
283void Hold::setHoldRadial(double aInboundRadial)
284{
285 _bearing = aInboundRadial;
286}
287
288void Hold::setHoldDistance(double aDistanceNm)
289{
290 _isDistance = true;
291 _holdTD = aDistanceNm;
292}
293
294void Hold::setHoldTime(double aTimeSec)
295{
296 _isDistance = false;
297 _holdTD = aTimeSec;
298}
299
301{
302 _righthanded = true;
303}
304
306{
307 _righthanded = false;
308}
309
310bool Hold::initFromProperties(SGPropertyNode_ptr aProp)
311{
313 return false;
314
315 _righthanded = aProp->getBoolValue("right-handed");
316 _isDistance = aProp->getBoolValue("is-distance");
317 _bearing = aProp->getDoubleValue("inbound-radial-deg");
318 _holdTD = aProp->getDoubleValue("td");
319
320 return true;
321}
322
323void Hold::writeToProperties(SGPropertyNode_ptr aProp) const
324{
326
327 aProp->setBoolValue("right-handed", _righthanded);
328 aProp->setBoolValue("is-distance", _isDistance);
329 aProp->setDoubleValue("inbound-radial-deg", _bearing);
330 aProp->setDoubleValue("td", _holdTD);
331}
332
334
335HeadingToAltitude::HeadingToAltitude(RouteBase* aOwner, const string& aIdent,
336 double aMagHdg) :
337 Waypt(aOwner),
338 _ident(aIdent),
339 _magHeading(aMagHdg)
340{
342}
343
345 Waypt(aOwner)
346{
347}
348
349bool HeadingToAltitude::initFromProperties(SGPropertyNode_ptr aProp)
350{
351 if (!aProp->hasChild("heading-deg")) {
352 SG_LOG(SG_AUTOPILOT, SG_WARN, "Missing heading property creating HdgToAlt waypoint");
353 return false;
354 }
355
356 if (!Waypt::initFromProperties(aProp))
357 return false;
358
359 _magHeading = aProp->getDoubleValue("heading-deg");
360 _ident = aProp->getStringValue("ident");
361 return true;
362}
363
364void HeadingToAltitude::writeToProperties(SGPropertyNode_ptr aProp) const
365{
367 aProp->setStringValue("ident", _ident);
368 aProp->setDoubleValue("heading-deg", _magHeading);
369}
370
372
373DMEIntercept::DMEIntercept(RouteBase* aOwner, const string& aIdent, const SGGeod& aPos,
374 double aCourseDeg, double aDistanceNm) :
375 Waypt(aOwner),
376 _ident(aIdent),
377 _pos(aPos),
378 _magCourse(aCourseDeg),
379 _dmeDistanceNm(aDistanceNm)
380{
382}
383
385 Waypt(aOwner)
386{
387}
388
389bool DMEIntercept::initFromProperties(SGPropertyNode_ptr aProp)
390{
391 if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
392 SG_LOG(SG_AUTOPILOT, SG_WARN, "Missing lat/lom properties creating DMEIntc waypoint");
393 return false;
394 }
395
396 if (!Waypt::initFromProperties(aProp))
397 return false;
398
399 _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
400 _ident = aProp->getStringValue("ident");
401// check it's a real DME?
402 _magCourse = aProp->getDoubleValue("course-deg");
403 _dmeDistanceNm = aProp->getDoubleValue("dme-distance-nm");
404
405 return true;
406}
407
408void DMEIntercept::writeToProperties(SGPropertyNode_ptr aProp) const
409{
411
412 aProp->setStringValue("ident", _ident);
413 aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
414 aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
415 aProp->setDoubleValue("course-deg", _magCourse);
416 aProp->setDoubleValue("dme-distance-nm", _dmeDistanceNm);
417}
418
420
421RadialIntercept::RadialIntercept(RouteBase* aOwner, const string& aIdent, const SGGeod& aPos,
422 double aCourseDeg, double aRadial) :
423 Waypt(aOwner),
424 _ident(aIdent),
425 _pos(aPos),
426 _magCourse(aCourseDeg),
427 _radial(aRadial)
428{
430}
431
433 Waypt(aOwner)
434{
435}
436
437bool RadialIntercept::initFromProperties(SGPropertyNode_ptr aProp)
438{
439 if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) {
440 SG_LOG(SG_AUTOPILOT, SG_WARN, "Missing lat/lom properties creating RadialIntercept waypoint");
441 return false;
442 }
443
444 if (!Waypt::initFromProperties(aProp))
445 return false;
446
447 _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat"));
448 _ident = aProp->getStringValue("ident");
449// check it's a real VOR?
450 _magCourse = aProp->getDoubleValue("course-deg");
451 _radial = aProp->getDoubleValue("radial-deg");
452
453 return true;
454}
455
456void RadialIntercept::writeToProperties(SGPropertyNode_ptr aProp) const
457{
459
460 aProp->setStringValue("ident", _ident);
461 aProp->setDoubleValue("lon", _pos.getLongitudeDeg());
462 aProp->setDoubleValue("lat", _pos.getLatitudeDeg());
463 aProp->setDoubleValue("course-deg", _magCourse);
464 aProp->setDoubleValue("radial-deg", _radial);
465}
466
468
470 Waypt(aOwner),
471 _facility(aFacility)
472{
474}
475
479
481 Waypt(aOwner)
482{
483}
484
486{
487 return _facility->geod();
488}
489
490string ATCVectors::ident() const
491{
492 return "VECTORS-" + _facility->ident();
493}
494
495bool ATCVectors::initFromProperties(SGPropertyNode_ptr aProp)
496{
497 if (!Waypt::initFromProperties(aProp))
498 return false;
499
500 _facility = FGAirport::getByIdent(aProp->getStringValue("icao"));
501 return true;
502}
503
504void ATCVectors::writeToProperties(SGPropertyNode_ptr aProp) const
505{
507 if (_facility) {
508 aProp->setStringValue("icao", _facility->ident());
509 }
510}
511
513
515 Waypt(aOwner)
516{
518 setFlag(WPT_GENERATED); // prevent drag, delete, etc
519}
520
524
526{
527 return SGGeod(); // deliberately invalid of course
528}
529
531{
532 return "DISCONTINUITY";
533}
534
535bool Discontinuity::initFromProperties(SGPropertyNode_ptr aProp)
536{
537 return true;
538}
539
540void Discontinuity::writeToProperties(SGPropertyNode_ptr aProp) const
541{
543}
544
546
547SGGeod Via::position() const
548{
549 return _to->geod();
550}
551
552string Via::ident() const
553{
554 return "VIA " + _airway->ident() + " TO " + _to->ident();
555}
556
558 Waypt(aOwner)
559{
560}
561
563 Waypt(aOwner),
564 _airway(awy),
565 _to(to)
566{
567}
568
570{
571}
572
573bool Via::initFromProperties(SGPropertyNode_ptr aProp)
574{
575 if (!aProp->hasChild("airway") || !aProp->hasChild("to")) {
576 SG_LOG(SG_AUTOPILOT, SG_WARN, "Missingairway/to properties on Via wp");
577 return false;
578 }
579
580 if (!Waypt::initFromProperties(aProp))
581 return false;
582
583 const std::string ident = aProp->getStringValue("airway");
584 const Airway::Level level = static_cast<Airway::Level>(aProp->getIntValue("level", Airway::Both));
585 _airway = Airway::findByIdent(ident, level);
586 if (!_airway) {
587 SG_LOG(SG_AUTOPILOT, SG_WARN, "VIA: unknown airway:" << ident);
588 return false;
589 }
590
591 std::string idn(aProp->getStringValue("to"));
592 SGGeod p;
593 if (aProp->hasChild("lon")) {
594 p = SGGeod::fromDeg(aProp->getDoubleValue("lon"),
595 aProp->getDoubleValue("lat"));
596 }
597
599 if (!nav) {
600 SG_LOG(SG_AUTOPILOT, SG_WARN, "VIA TO navaid: " << idn << " not found");
601 return false;
602 }
603
604 if (!_airway->containsNavaid(nav)) {
605 // warn but don't block this
606 SG_LOG(SG_AUTOPILOT, SG_WARN, "VIA TO navaid: " << idn << " not found on airway " << _airway);
607 }
608
609 _to = nav;
610 return true;
611}
612
613void Via::writeToProperties(SGPropertyNode_ptr aProp) const
614{
616 aProp->setStringValue("airway", _airway->ident());
617 aProp->setIntValue("level", _airway->level());
618
619 aProp->setStringValue("to", _to->ident());
620 // write lon/lat to disambiguate
621 aProp->setDoubleValue("lon", _to->geod().getLongitudeDeg());
622 aProp->setDoubleValue("lat", _to->geod().getLatitudeDeg());
623}
624
626{
627 if (!aPreceeding) {
628 throw sg_exception("invalid preceeding waypoint");
629 }
630
631 // this waypoint is noly used for the search, it's not part
632 // of the result, so we don't need to set the owner
633 WayptRef toWp = new NavaidWaypoint(_to, nullptr);
634 return _airway->via(aPreceeding, toWp);
635}
636
637} // of namespace
double altitude
Definition ADA.cxx:46
#define p(x)
FGRunwayRef getRunwayByIdent(const std::string &aIdent) const
Definition airport.cxx:182
bool hasRunwayWithIdent(const std::string &aIdent) const
Definition airport.cxx:162
static FGAirportRef getByIdent(const std::string &aIdent)
Helper to look up an FGAirport instance by unique ident.
Definition airport.cxx:509
static FGPositionedRef findClosestWithIdent(const std::string &aIdent, const SGGeod &aPos, Filter *aFilter=NULL)
Type type() const
ATCVectors(RouteBase *aOwner, FGAirport *aFacility)
Definition waypoint.cxx:469
virtual SGGeod position() const
Definition waypoint.cxx:485
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:495
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:504
virtual std::string ident() const
Identifier assoicated with the waypoint.
Definition waypoint.cxx:490
@ Both
Jet airways.
Definition airways.hxx:49
static AirwayRef findByIdent(const std::string &aIdent, Level level)
Definition airways.cxx:294
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:66
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:50
BasicWaypt(const SGGeod &aPos, const std::string &aIdent, RouteBase *aOwner)
std::string icaoDescription() const override
icaoDescription - description of the waypoint in ICAO route plan format
Definition waypoint.cxx:75
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:389
DMEIntercept(RouteBase *aOwner, const std::string &aIdent, const SGGeod &aPos, double aCourseDeg, double aDistanceNm)
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:408
Discontinuity(RouteBase *aOwner)
Definition waypoint.cxx:514
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:540
virtual std::string ident() const
Identifier assoicated with the waypoint.
Definition waypoint.cxx:530
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:535
virtual SGGeod position() const
Definition waypoint.cxx:525
HeadingToAltitude(RouteBase *aOwner, const std::string &aIdent, double aMagHdg)
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:364
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:349
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:323
void setHoldRadial(double aInboundRadial)
Definition waypoint.cxx:283
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:310
Hold(const SGGeod &aPos, const std::string &aIdent, RouteBase *aOwner)
void setHoldDistance(double aDistanceNm)
Definition waypoint.cxx:288
void setHoldTime(double aTimeSec)
Definition waypoint.cxx:294
void setRightHanded()
Definition waypoint.cxx:300
Waypoint based upon a navaid.
Definition waypoint.hxx:63
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:144
FGPositionedRef _navaid
Definition waypoint.hxx:83
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:107
virtual std::string ident() const
Identifier assoicated with the waypoint.
Definition waypoint.cxx:102
virtual SGGeod position() const
Definition waypoint.cxx:97
NavaidWaypoint(FGPositioned *aPos, RouteBase *aOwner)
Definition waypoint.cxx:82
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:192
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:176
OffsetNavaidWaypoint(FGPositioned *aPos, RouteBase *aOwner, double aRadial, double aDistNm)
Definition waypoint.cxx:154
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:437
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:456
RadialIntercept(RouteBase *aOwner, const std::string &aIdent, const SGGeod &aPos, double aCourseDeg, double aRadialDeg)
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:260
RunwayWaypt(FGRunway *aPos, RouteBase *aOwner)
Definition waypoint.cxx:201
virtual double headingRadialDeg() const
return the assoicated heading or radial for this waypoint.
Definition waypoint.cxx:228
virtual SGGeod position() const
Definition waypoint.cxx:213
virtual std::string ident() const
Identifier assoicated with the waypoint.
Definition waypoint.cxx:218
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:233
virtual FGPositioned * source() const
The Positioned associated with this element, if one exists.
Definition waypoint.cxx:223
Via(RouteBase *aOwner)
Definition waypoint.cxx:557
WayptVec expandToWaypoints(WayptRef aPreceeding) const
Definition waypoint.cxx:625
void writeToProperties(SGPropertyNode_ptr aProp) const override
Persistence helper - save this element to a node.
Definition waypoint.cxx:613
SGGeod position() const override
Definition waypoint.cxx:547
std::string ident() const override
Identifier assoicated with the waypoint.
Definition waypoint.cxx:552
virtual ~Via()
Definition waypoint.cxx:569
bool initFromProperties(SGPropertyNode_ptr aProp) override
Persistence helper - read node properties from a file.
Definition waypoint.cxx:573
Abstract base class for waypoints (and things that are treated similarly by navigation systems).
Definition route.hxx:105
Waypt(RouteBase *aOwner)
Definition route.cxx:189
double altitudeFt() const
Definition route.cxx:289
void setFlag(WayptFlag aFlag, bool aV=true)
Definition route.cxx:209
virtual bool initFromProperties(SGPropertyNode_ptr aProp)
Persistence helper - read node properties from a file.
Definition route.cxx:584
virtual void writeToProperties(SGPropertyNode_ptr aProp) const
Persistence helper - save this element to a node.
Definition route.cxx:655
FlightPlan.hxx - defines a full flight-plan object, including departure, cruise, arrival information ...
Definition Addon.cxx:53
@ ALTITUDE_FEET
Definition route.hxx:84
SGSharedPtr< FGPositioned > FGPositionedRef
Definition airways.cxx:49
SGSharedPtr< Waypt > WayptRef
SGSharedPtr< Airway > AirwayRef
Definition airways.hxx:40
@ WPT_DYNAMIC
waypoint position is dynamic, i.e moves based on other criteria, such as altitude,...
Definition route.hxx:49
@ WPT_GENERATED
waypoint was created automatically (not manually entered/loaded) for example waypoints from airway ro...
Definition route.hxx:52
std::vector< WayptRef > WayptVec