Tweaks and massaging relative to the new waypoint route management system.
You can now specify waypoint on the command line with --wp=ID[,alt]
This commit is contained in:
parent
6d6bf8ed5a
commit
df0228e019
9 changed files with 96 additions and 62 deletions
|
@ -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).
|
||||
*/
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -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 );
|
||||
FG_LOG( FG_GENERAL, FG_INFO, "Searching for 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() );
|
||||
|
||||
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;
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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; }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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) ) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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 );
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue