]> git.mxchange.org Git - flightgear.git/commitdiff
Tweaks and massaging relative to the new waypoint route management system.
authorcurt <curt>
Thu, 12 Oct 2000 01:08:09 +0000 (01:08 +0000)
committercurt <curt>
Thu, 12 Oct 2000 01:08:09 +0000 (01:08 +0000)
You can now specify waypoint on the command line with --wp=ID[,alt]

src/Main/bfi.cxx
src/Main/bfi.hxx
src/Main/fg_init.cxx
src/Main/fg_init.hxx
src/Main/globals.hxx
src/Main/keyboard.cxx
src/Main/main.cxx
src/Main/options.cxx
src/Main/options.hxx

index 351792f90d64ea4aad20f867a07cb414016942dd..886d7d3a884f80165832227be66f5c23e9d75733 100644 (file)
@@ -314,9 +314,6 @@ FGBFI::reinit ()
   setAPAltitude(apAltitude);
   setTargetAirport(targetAirport);
   setGPSLock(gpsLock);
-  // setGPSTargetLatitude(gpsLatitude);
-  // setGPSTargetLongitude(gpsLongitude);
-  setGPSTargetWayPoint(gpsLatitude, gpsLongitude);
 
   _needReinit = false;
 
@@ -1557,28 +1554,6 @@ FGBFI::getGPSTargetLatitude ()
 }
 
 
-/**
- * Set the GPS target waypoint
- */
-void
-FGBFI::setGPSTargetWayPoint (double latitude, double longitude)
-{
-  current_autopilot->set_WayPoint( longitude, latitude, "reload" );
-}
-
-
-#if 0
-/**
- * Set the GPS target latitude in degrees (negative for south).
- */
-void
-FGBFI::setGPSTargetLatitude (double latitude)
-{
-  current_autopilot->set_TargetLatitude( latitude );
-}
-#endif
-
-
 /**
  * Get the GPS target longitude in degrees (negative for west).
  */
index 8f26d88556cb3589ada3646d62a1c63c9056c666..6c086f6763cccd8fda08a521dd017d23121a2c23 100644 (file)
@@ -197,10 +197,6 @@ public:
 
   static void setTargetAirport (const string &targetAirport);
   static void setGPSLock (bool lock);
-  // static void setGPSTargetLatitude (double latitude);
-  // static void setGPSTargetLongitude (double longitude);
-  static void setGPSTargetWayPoint (double latitude, double longitude);
-
 
                                // Weather
   static double getVisibility ();
index d6659673dca1b0e3f52d02eac9d883e5df817652..018e18d4d1af706ad5f28c99282c28f646e7b537 100644 (file)
@@ -161,44 +161,20 @@ bool fgInitConfig ( int argc, char **argv ) {
 }
 
 
-// Set current_options lon/lat given an airport id
-bool fgSetPosFromAirportID( const string& id ) {
-    FGAirport a;
-    double lon, lat;
-
+// find basic airport location info from airport database
+bool fgFindAirportID( const string& id, FGAirport *a ) {
     if ( id.length() ) {
-       // set initial position from airport id
-
        FGPath path( current_options.get_fg_root() );
        path.append( "Airports" );
        path.append( "simple.mk4" );
        FGAirports airports( path.c_str() );
 
-       FG_LOG( FG_GENERAL, FG_INFO,
-               "Attempting to set starting position from airport code "
-               << id );
-
-       // FGPath inpath( current_options.get_fg_root() );
-       // inpath.append( "Airports" );
-       // inpath.append( "apt_simple" );
-       // airports.load( inpath.c_str() );
-
-       // FGPath outpath( current_options.get_fg_root() );
-       // outpath.append( "Airports" );
-       // outpath.append( "simple.gdbm" );
-       // airports.dump_gdbm( outpath.c_str() );
+       FG_LOG( FG_GENERAL, FG_INFO, "Searching for airport code = " << id );
 
-       if ( ! airports.search( id, &a ) ) {
+       if ( ! airports.search( id, a ) ) {
            FG_LOG( FG_GENERAL, FG_ALERT,
-                   "Failed to find " << id << " in database." );
+                   "Failed to find " << id << " in " << path.str() );
            return false;
-       } else {
-           current_options.set_lon( a.longitude );
-           current_options.set_lat( a.latitude );
-           current_properties.setDoubleValue("/position/longitude",
-                                             a.longitude);
-           current_properties.setDoubleValue("/position/latitude",
-                                             a.latitude);
        }
     } else {
        return false;
@@ -206,13 +182,42 @@ bool fgSetPosFromAirportID( const string& id ) {
 
     FG_LOG( FG_GENERAL, FG_INFO,
            "Position for " << id << " is ("
-           << a.longitude << ", "
-           << a.latitude << ")" );
+           << a->longitude << ", "
+           << a->latitude << ")" );
 
     return true;
 }
 
 
+// Set current_options lon/lat given an airport id
+bool fgSetPosFromAirportID( const string& id ) {
+    FGAirport a;
+    double lon, lat;
+
+    FG_LOG( FG_GENERAL, FG_INFO,
+           "Attempting to set starting position from airport code " << id );
+
+    if ( fgFindAirportID( id, &a ) ) {
+       current_options.set_lon( a.longitude );
+       current_options.set_lat( a.latitude );
+       current_properties.setDoubleValue("/position/longitude",
+                                         a.longitude);
+       current_properties.setDoubleValue("/position/latitude",
+                                         a.latitude);
+
+       FG_LOG( FG_GENERAL, FG_INFO,
+               "Position for " << id << " is ("
+               << a.longitude << ", "
+               << a.latitude << ")" );
+
+       return true;
+    } else {
+       return false;
+    }
+
+}
+
+
 // Set current_options lon/lat given an airport id and heading (degrees)
 bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
     FGRunway r;
index 75bdf100b931f93a04ddd0525674c88259991c94..df407856a7ed73e551b1df50b459fa48c94d9227 100644 (file)
@@ -31,6 +31,9 @@
 #endif                                   
 
 
+#include <Airports/simple.hxx>
+
+
 // Read in configuration (file and command line) and just set fg_root
 bool fgInitFGRoot ( int argc, char **argv );
 
@@ -53,6 +56,9 @@ bool fgInitSubsystems( void );
 void fgReInitSubsystems( void );
 
 
+// find basic airport location info from airport database
+bool fgFindAirportID( const string& id, FGAirport *a );
+
 // Set current_options lon/lat given an airport id
 bool fgSetPosFromAirportID( const string& id );
 
index ebe8a8262bab841edee1c01f680ae96075e2a917..66fdc7131eb143c7d908d5f8c35aeaa3bb3d4810 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <simgear/ephemeris/ephemeris.hxx>
 #include <simgear/magvar/magvar.hxx>
+#include <simgear/route/route.hxx>
 #include <simgear/timing/sg_time.hxx>
 
 
@@ -54,6 +55,9 @@ private:
     // Magnetic Variation
     SGMagVar *mag;
 
+    // Global autopilot "route"
+    SGRoute *route;
+
 public:
 
     FGGlobals();
@@ -78,6 +82,9 @@ public:
 
     inline SGMagVar *get_mag() const { return mag; }
     inline void set_mag( SGMagVar *m ) { mag = m; }
+
+    inline SGRoute *get_route() const { return route; }
+    inline void set_route( SGRoute *r ) { route = r; }
 };
 
 
index ba0702c82042f1df26417afeee538e4f7029bc18..624a087b9558d5716e83fe0cb5f267b14f665751 100644 (file)
@@ -552,6 +552,7 @@ void GLUTspecialkey(int k, int x, int y) {
                 FGAutopilot::FG_HEADING_WAYPOINT ) {
                current_autopilot->set_HeadingMode(
                    FGAutopilot::FG_HEADING_WAYPOINT );
+               current_autopilot->set_HeadingEnabled( true );
            } else {
                current_autopilot->set_HeadingMode(
                    FGAutopilot::FG_HEADING_LOCK );
index 7ef6ab22342227e37df208c490a5ecd67ab6ad25..f15de36101fa34de627d9eaf362dd35174c18a5e 100644 (file)
@@ -1302,6 +1302,8 @@ int main( int argc, char **argv ) {
 
     // needs to happen before we parse command line options
     globals = new FGGlobals;
+    SGRoute *route = new SGRoute;
+    globals->set_route( route );
 
     // Load the configuration parameters
     if ( !fgInitConfig(argc, argv) ) {
index 30edd121c4157ed9294f16474767b7f946800ef3..1903391e211c77d0b11e287663e85e992aad06d1 100644 (file)
@@ -45,6 +45,7 @@ bool global_fullscreen = true;
 #include <simgear/timing/sg_time.hxx>
 
 #include <Include/general.hxx>
+#include <Airports/simple.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <FDM/flight.hxx>
 #include <FDM/UIUCModel/uiuc_aircraftdir.h>
@@ -52,6 +53,7 @@ bool global_fullscreen = true;
 #  include <NetworkOLK/network.h>
 #endif
 
+#include "fg_init.hxx"
 #include "globals.hxx"
 #include "options.hxx"
 #include "views.hxx"
@@ -589,6 +591,36 @@ fgOPTIONS::parse_channel( const string& type, const string& channel_str ) {
 }
 
 
+// Parse --wp=ID[,alt]
+bool fgOPTIONS::parse_wp( const string& arg ) {
+    string id, alt_str;
+    double alt = 0.0;
+
+    int pos = arg.find( "," );
+    if ( pos != string::npos ) {
+       id = arg.substr( 0, pos );
+       alt_str = arg.substr( pos + 1 );
+       // cout << "id str = " << id << "  alt str = " << alt_str << endl;
+       alt = atof( alt_str.c_str() );
+       if ( units == FG_UNITS_FEET ) {
+           alt *= FEET_TO_METER;
+       }
+    } else {
+       id = arg;
+    }
+
+    FGAirport a;
+    if ( fgFindAirportID( id, &a ) ) {
+       SGWayPoint wp( a.longitude, a.latitude, alt, SGWayPoint::WGS84, id );
+       globals->get_route()->add_waypoint( wp );
+
+       return true;
+    } else {
+       return false;
+    }
+}
+
+
 // Parse a single option
 int fgOPTIONS::parse_option( const string& arg ) {
     // General Options
@@ -864,6 +896,8 @@ int fgOPTIONS::parse_option( const string& arg ) {
        current_properties.setStringValue(name.c_str(), value);
        FG_LOG(FG_GENERAL, FG_INFO, "Setting default value of property "
               << name << " to \"" << value << '"');
+    } else if ( arg.find( "--wp=" ) != string::npos ) {
+       parse_wp( arg.substr( 5 ) );
     } else {
        FG_LOG( FG_GENERAL, FG_ALERT, "Unknown option '" << arg << "'" );
        return FG_OPTIONS_ERROR;
@@ -1043,7 +1077,7 @@ void fgOPTIONS::usage ( void ) {
     cout << "\t--notrim:  Do NOT attempt to trim the model when initializing JSBsim" << endl;
     cout << endl;
     //(UIUC)
-    cout <<"Aircraft model directory" << endl;
+    cout <<"Aircraft model directory:" << endl;
     cout <<"\t--aircraft-dir=<path> path is relative to the path of the executable" << endl;
     cout << endl;
 
@@ -1119,7 +1153,7 @@ void fgOPTIONS::usage ( void ) {
     cout << "\t--start-date-lat=yyyy:mm:dd:hh:mm:ss: specify a starting" << endl
         << "\t\tdate/time. Uses Local Aircraft Time" << endl;
 #ifdef FG_NETWORK_OLK
-    cout << "" << endl;
+    cout << endl;
 
     cout << "Network Options:" << endl;
     cout << "\t--enable-network-olk:  enable Multipilot mode" << endl;
@@ -1127,6 +1161,13 @@ void fgOPTIONS::usage ( void ) {
     cout << "\t--net-hud:  Hud displays network info" << endl;
     cout << "\t--net-id=name:  specify your own callsign" << endl;
 #endif
+
+    cout << endl;
+    cout << "Route/Way Point Options:" << endl;
+    cout << "\t--wp=ID[,alt]:  specify a waypoint for the GC autopilot" << endl;
+    cout << "\t\tYou can specify multiple waypoints (a route) with multiple"
+        << endl;
+    cout << "\t\tinstances of --wp=" << endl;
 }
 
 
index 3bef864d9ae54a3f6d1097dfe970cffa6266f1a7..cf1df366c465b34eacab1acecec5c7e826331527 100644 (file)
@@ -384,6 +384,7 @@ private:
     int parse_fdm( const string& fm );
     double parse_fov( const string& arg );
     bool parse_channel( const string& type, const string& channel_str );
+    bool parse_wp( const string& arg );
 };