// forward decls
class FGPositioned;
class SGPath;
-class FGRunway;
-
-#include <Airports/simple.hxx>
-typedef SGSharedPtr<FGAirport> FGAirportRef;
+class FGAirport;
namespace flightgear
{
class RouteBase;
class Waypt;
class NavdataVisitor;
-class SID;
-class STAR;
-class Transition;
typedef SGSharedPtr<Waypt> WayptRef;
*/
virtual bool flag(WayptFlag aFlag) const;
+ virtual unsigned int flags() const
+ { return _flags; }
+
void setFlag(WayptFlag aFlag, bool aV = true);
/**
typedef std::vector<WayptRef> WayptVec;
-class RouteBase
+class RouteBase : public SGReferenced
{
public:
/**
private:
};
-
-class FlightPlan : public RouteBase
-{
-public:
- FlightPlan();
- virtual ~FlightPlan();
-
- virtual std::string ident() const;
- void setIdent(const std::string& s);
-
- FlightPlan* clone(const std::string& newIdent = std::string()) const;
-
- /**
- * flight-plan leg encapsulation
- */
- class Leg
- {
- public:
- FlightPlan* owner() const
- { return _parent; }
-
- Waypt* waypoint() const
- { return _waypt; }
-
- // reutrn the next leg after this one
- Leg* nextLeg() const;
-
- unsigned int index() const;
-
- int altitudeFt() const;
- int speed() const;
-
- int speedKts() const;
- double speedMach() const;
-
- RouteRestriction altitudeRestriction() const;
- RouteRestriction speedRestriction() const;
-
- void setSpeed(RouteRestriction ty, double speed);
- void setAltitude(RouteRestriction ty, int altFt);
-
- double courseDeg() const;
- double distanceNm() const;
- double distanceAlongRoute() const;
- private:
- friend class FlightPlan;
-
- Leg(FlightPlan* owner, WayptRef wpt);
-
- Leg* cloneFor(FlightPlan* owner) const;
-
- FlightPlan* _parent;
- RouteRestriction _speedRestrict, _altRestrict;
- int _speed;
- int _altitudeFt;
- WayptRef _waypt;
- /// length of this leg following the flown path
- mutable double _pathDistance;
- mutable double _courseDeg;
- /// total distance of this leg from departure point
- mutable double _distanceAlongPath;
- };
-
- class Delegate
- {
- public:
- virtual ~Delegate();
-
- virtual void departureChanged() { }
- virtual void arrivalChanged() { }
- virtual void waypointsChanged() { }
-
- virtual void currentWaypointChanged() { }
-
- protected:
- Delegate();
-
- private:
- void removeInner(Delegate* d);
-
- void runDepartureChanged();
- void runArrivalChanged();
- void runWaypointsChanged();
- void runCurrentWaypointChanged();
-
- friend class FlightPlan;
-
- Delegate* _inner;
- };
-
- Leg* insertWayptAtIndex(Waypt* aWpt, int aIndex);
- void insertWayptsAtIndex(const WayptVec& wps, int aIndex);
-
- void deleteIndex(int index);
- void clear();
- int clearWayptsWithFlag(WayptFlag flag);
-
- int currentIndex() const
- { return _currentIndex; }
-
- void setCurrentIndex(int index);
-
- Leg* currentLeg() const;
- Leg* nextLeg() const;
- Leg* previousLeg() const;
-
- int numLegs() const
- { return _legs.size(); }
-
- Leg* legAtIndex(int index) const;
- int findLegIndex(const Leg* l) const;
-
- int findWayptIndex(const SGGeod& aPos) const;
-
- bool load(const SGPath& p);
- bool save(const SGPath& p);
-
- FGAirportRef departureAirport() const
- { return _departure; }
-
- FGAirportRef destinationAirport() const
- { return _destination; }
-
- FGRunway* departureRunway() const
- { return _departureRunway; }
-
- FGRunway* destinationRunway() const
- { return _destinationRunway; }
-
- Approach* approach() const
- { return _approach; }
-
- void setDeparture(FGAirport* apt);
- void setDeparture(FGRunway* rwy);
-
- SID* sid() const
- { return _sid; }
-
- Transition* sidTransition() const;
-
- void setSID(SID* sid, const std::string& transition = std::string());
-
- void setSID(Transition* sidWithTrans);
-
- void setDestination(FGAirport* apt);
- void setDestination(FGRunway* rwy);
-
- /**
- * note setting an approach will implicitly update the destination
- * airport and runway to match
- */
- void setApproach(Approach* app);
-
- STAR* star() const
- { return _star; }
-
- Transition* starTransition() const;
-
- void setSTAR(STAR* star, const std::string& transition = std::string());
-
- void setSTAR(Transition* starWithTrans);
-
- double totalDistanceNm() const
- { return _totalDistance; }
-
- /**
- * Create a WayPoint from a string in the following format:
- * - simple identifier
- * - decimal-lon,decimal-lat
- * - airport-id/runway-id
- * - navaid/radial-deg/offset-nm
- */
- WayptRef waypointFromString(const std::string& target);
-
- void setDelegate(Delegate* d);
- void removeDelegate(Delegate* d);
-private:
-
- bool loadPlainTextRoute(const SGPath& path);
-
- void loadVersion1XMLRoute(SGPropertyNode_ptr routeData);
- void loadVersion2XMLRoute(SGPropertyNode_ptr routeData);
- void loadXMLRouteHeader(SGPropertyNode_ptr routeData);
- WayptRef parseVersion1XMLWaypt(SGPropertyNode* aWP);
-
- double magvarDegAt(const SGGeod& pos) const;
-
- std::string _ident;
- int _currentIndex;
-
- FGAirportRef _departure, _destination;
- FGRunway* _departureRunway, *_destinationRunway;
- SID* _sid;
- STAR* _star;
- Approach* _approach;
- std::string _sidTransition, _starTransition;
-
- double _totalDistance;
- void rebuildLegData();
-
- typedef std::vector<Leg*> LegVec;
- LegVec _legs;
-
- Delegate* _delegate;
-};
-
+
} // of namespace flightgear
#endif // of FG_ROUTE_HXX