setAPAltitude(apAltitude);
setTargetAirport(targetAirport);
setGPSLock(gpsLock);
- // setGPSTargetLatitude(gpsLatitude);
- // setGPSTargetLongitude(gpsLongitude);
- setGPSTargetWayPoint(gpsLatitude, gpsLongitude);
_needReinit = false;
}
-/**
- * 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).
*/
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 ();
}
-// 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;
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;
#endif
+#include <Airports/simple.hxx>
+
+
// Read in configuration (file and command line) and just set fg_root
bool fgInitFGRoot ( int argc, char **argv );
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 );
#include <simgear/ephemeris/ephemeris.hxx>
#include <simgear/magvar/magvar.hxx>
+#include <simgear/route/route.hxx>
#include <simgear/timing/sg_time.hxx>
// Magnetic Variation
SGMagVar *mag;
+ // Global autopilot "route"
+ SGRoute *route;
+
public:
FGGlobals();
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; }
};
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 );
// 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) ) {
#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>
# include <NetworkOLK/network.h>
#endif
+#include "fg_init.hxx"
#include "globals.hxx"
#include "options.hxx"
#include "views.hxx"
}
+// 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
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;
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;
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;
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;
}
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 );
};