From 5a7f838ff297776fe398134a28f721e018efbfe1 Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Mon, 27 Sep 2010 23:48:20 +0200 Subject: [PATCH 01/45] Fixed all type-casts violating the strict-aliasing rule. => Removes compiler warnings and optimization problems. --- src/MultiPlayer/multiplaymgr.cxx | 36 +++++++++-------- src/Network/generic.cxx | 69 ++++++++++++++++---------------- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx index 7574332b2..508d96317 100644 --- a/src/MultiPlayer/multiplaymgr.cxx +++ b/src/MultiPlayer/multiplaymgr.cxx @@ -462,38 +462,38 @@ union FGMultiplayMgr::MsgBuf { MsgBuf() { - memset(&Msg, 0, sizeof(Msg)); + memset(&Msg.Raw, 0, sizeof(Msg)); } T_MsgHdr* msgHdr() { - return reinterpret_cast<T_MsgHdr*>(Msg); + return &Msg.Header; } const T_MsgHdr* msgHdr() const { - return reinterpret_cast<const T_MsgHdr*>(Msg); + return reinterpret_cast<const T_MsgHdr*>(&Msg.Header); } T_PositionMsg* posMsg() { - return reinterpret_cast<T_PositionMsg*>(Msg + sizeof(T_MsgHdr)); + return reinterpret_cast<T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr)); } const T_PositionMsg* posMsg() const { - return reinterpret_cast<const T_PositionMsg*>(Msg + sizeof(T_MsgHdr)); + return reinterpret_cast<const T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr)); } xdr_data_t* properties() { - return reinterpret_cast<xdr_data_t*>(Msg + sizeof(T_MsgHdr) + return reinterpret_cast<xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr) + sizeof(T_PositionMsg)); } const xdr_data_t* properties() const { - return reinterpret_cast<const xdr_data_t*>(Msg + sizeof(T_MsgHdr) + return reinterpret_cast<const xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr) + sizeof(T_PositionMsg)); } /** @@ -501,12 +501,12 @@ union FGMultiplayMgr::MsgBuf */ xdr_data_t* propsEnd() { - return reinterpret_cast<xdr_data_t*>(Msg + MAX_PACKET_SIZE); + return reinterpret_cast<xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE); }; const xdr_data_t* propsEnd() const { - return reinterpret_cast<const xdr_data_t*>(Msg + MAX_PACKET_SIZE); + return reinterpret_cast<const xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE); }; /** * The end of properties actually in the buffer. This assumes that @@ -514,16 +514,20 @@ union FGMultiplayMgr::MsgBuf */ xdr_data_t* propsRecvdEnd() { - return reinterpret_cast<xdr_data_t*>(Msg + msgHdr()->MsgLen); + return reinterpret_cast<xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen); } const xdr_data_t* propsRecvdEnd() const { - return reinterpret_cast<const xdr_data_t*>(Msg + msgHdr()->MsgLen); + return reinterpret_cast<const xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen); } xdr_data2_t double_val; - char Msg[MAX_PACKET_SIZE]; + union + { + char Raw[MAX_PACKET_SIZE]; + T_MsgHdr Header; + } Msg; }; void @@ -654,9 +658,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo) ++it; } escape: - unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg; + unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg.Raw; FillMsgHdr(msgBuf.msgHdr(), POS_DATA_ID, msgLen); - mSocket->sendto(msgBuf.Msg, msgLen, 0, &mServer); + mSocket->sendto(msgBuf.Msg.Raw, msgLen, 0, &mServer); SG_LOG(SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::SendMyPosition"); } // FGMultiplayMgr::SendMyPosition() @@ -731,7 +735,7 @@ FGMultiplayMgr::Update(void) // packet waiting to be processed. ////////////////////////////////////////////////// netAddress SenderAddress; - bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0, + bytes = mSocket->recvfrom(msgBuf.Msg.Raw, sizeof(msgBuf.Msg.Raw), 0, &SenderAddress); ////////////////////////////////////////////////// // no Data received @@ -975,7 +979,7 @@ FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg, char *chatStr = new char[MsgHdr->MsgLen - sizeof(T_MsgHdr)]; const T_ChatMsg* ChatMsg - = reinterpret_cast<const T_ChatMsg *>(Msg.Msg + sizeof(T_MsgHdr)); + = reinterpret_cast<const T_ChatMsg *>(Msg.Msg.Raw + sizeof(T_MsgHdr)); strncpy(chatStr, ChatMsg->Text, MsgHdr->MsgLen - sizeof(T_MsgHdr)); chatStr[MsgHdr->MsgLen - sizeof(T_MsgHdr) - 1] = '\0'; diff --git a/src/Network/generic.cxx b/src/Network/generic.cxx index 423d2be18..9ab7d7699 100644 --- a/src/Network/generic.cxx +++ b/src/Network/generic.cxx @@ -95,20 +95,20 @@ bool FGGeneric::gen_message_binary() { switch (_out_message[i].type) { case FG_INT: + { val = _out_message[i].offset + _out_message[i].prop->getIntValue() * _out_message[i].factor; - - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((int32_t*)&buf[length]) = (int32_t)val; - } else { - *((uint32_t*)&buf[length]) = sg_bswap_32((uint32_t)val); + int32_t intVal = val; + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + intVal = (int32_t) sg_bswap_32((uint32_t)intVal); } + memcpy(&buf[length], &intVal, sizeof(int32_t)); length += sizeof(int32_t); break; + } case FG_BOOL: - *((int8_t*)&buf[length]) - = _out_message[i].prop->getBoolValue() ? true : false; + buf[length] = (char) (_out_message[i].prop->getBoolValue() ? true : false); length += 1; break; @@ -117,46 +117,48 @@ bool FGGeneric::gen_message_binary() { val = _out_message[i].offset + _out_message[i].prop->getFloatValue() * _out_message[i].factor; - int fixed = (int)(val * 65536.0f); - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((int32_t*)&buf[length]) = (int32_t)fixed; - } else { - *((uint32_t*)&buf[length]) = sg_bswap_32((uint32_t)fixed); + int32_t fixed = (int)(val * 65536.0f); + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + fixed = (int32_t) sg_bswap_32((uint32_t)fixed); } + memcpy(&buf[length], &fixed, sizeof(int32_t)); length += sizeof(int32_t); break; } + case FG_FLOAT: + { val = _out_message[i].offset + _out_message[i].prop->getFloatValue() * _out_message[i].factor; + u32 tmpun32; + tmpun32.floatVal = static_cast<float>(val); - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((float*)&buf[length]) = val; - } else { - u32 tmpun32; - tmpun32.floatVal = static_cast<float>(val); - *((uint32_t*)&buf[length]) = sg_bswap_32(tmpun32.intVal); + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + tmpun32.intVal = sg_bswap_32(tmpun32.intVal); } + memcpy(&buf[length], &tmpun32.intVal, sizeof(uint32_t)); length += sizeof(uint32_t); break; + } case FG_DOUBLE: + { val = _out_message[i].offset + _out_message[i].prop->getFloatValue() * _out_message[i].factor; + u64 tmpun64; + tmpun64.doubleVal = val; - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((double*)&buf[length]) = val; - } else { - u64 tmpun64; - tmpun64.doubleVal = val; - *((uint64_t*)&buf[length]) = sg_bswap_64(tmpun64.longVal); + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + tmpun64.longVal = sg_bswap_64(tmpun64.longVal); } - length += sizeof(int64_t); + memcpy(&buf[length], &tmpun64.longVal, sizeof(uint64_t)); + length += sizeof(uint64_t); break; + } default: // SG_STRING const char *strdata = _out_message[i].prop->getStringValue(); - int strlength = strlen(strdata); + int32_t strlength = strlen(strdata); if (binary_byte_order == BYTE_ORDER_NEEDS_CONVERSION) { SG_LOG( SG_IO, SG_ALERT, "Generic protocol: " @@ -165,11 +167,10 @@ bool FGGeneric::gen_message_binary() { /* Format for strings is * [length as int, 4 bytes][ASCII data, length bytes] */ - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((int32_t*)&buf[length]) = strlength; - } else { - *((int32_t*)&buf[length]) = sg_bswap_32(strlength); + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + strlength = sg_bswap_32(strlength); } + memcpy(&buf[length], &strlength, sizeof(int32_t)); length += sizeof(int32_t); strncpy(&buf[length], strdata, strlength); length += strlength; @@ -191,11 +192,11 @@ bool FGGeneric::gen_message_binary() { } if (binary_footer_type != FOOTER_NONE) { - if (binary_byte_order == BYTE_ORDER_MATCHES_NETWORK_ORDER) { - *((int32_t*)&buf[length]) = binary_footer_value; - } else { - *((int32_t*)&buf[length]) = sg_bswap_32(binary_footer_value); + int32_t intValue = binary_footer_value; + if (binary_byte_order != BYTE_ORDER_MATCHES_NETWORK_ORDER) { + intValue = sg_bswap_32(binary_footer_value); } + memcpy(&buf[length], &intValue, sizeof(int32_t)); length += sizeof(int32_t); } From c71fcbf10d5e436e028cbe748f12934b52be6526 Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Tue, 28 Sep 2010 08:50:54 +0200 Subject: [PATCH 02/45] Simplified pointer-aliasing patch. Removed introduction of a new union and reused existing one. --- src/MultiPlayer/multiplaymgr.cxx | 37 +++++++++++++++----------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx index 508d96317..00b75e01a 100644 --- a/src/MultiPlayer/multiplaymgr.cxx +++ b/src/MultiPlayer/multiplaymgr.cxx @@ -462,38 +462,38 @@ union FGMultiplayMgr::MsgBuf { MsgBuf() { - memset(&Msg.Raw, 0, sizeof(Msg)); + memset(&Msg, 0, sizeof(Msg)); } T_MsgHdr* msgHdr() { - return &Msg.Header; + return &Header; } const T_MsgHdr* msgHdr() const { - return reinterpret_cast<const T_MsgHdr*>(&Msg.Header); + return reinterpret_cast<const T_MsgHdr*>(&Header); } T_PositionMsg* posMsg() { - return reinterpret_cast<T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr)); + return reinterpret_cast<T_PositionMsg*>(Msg + sizeof(T_MsgHdr)); } const T_PositionMsg* posMsg() const { - return reinterpret_cast<const T_PositionMsg*>(Msg.Raw + sizeof(T_MsgHdr)); + return reinterpret_cast<const T_PositionMsg*>(Msg + sizeof(T_MsgHdr)); } xdr_data_t* properties() { - return reinterpret_cast<xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr) + return reinterpret_cast<xdr_data_t*>(Msg + sizeof(T_MsgHdr) + sizeof(T_PositionMsg)); } const xdr_data_t* properties() const { - return reinterpret_cast<const xdr_data_t*>(Msg.Raw + sizeof(T_MsgHdr) + return reinterpret_cast<const xdr_data_t*>(Msg + sizeof(T_MsgHdr) + sizeof(T_PositionMsg)); } /** @@ -501,12 +501,12 @@ union FGMultiplayMgr::MsgBuf */ xdr_data_t* propsEnd() { - return reinterpret_cast<xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE); + return reinterpret_cast<xdr_data_t*>(Msg + MAX_PACKET_SIZE); }; const xdr_data_t* propsEnd() const { - return reinterpret_cast<const xdr_data_t*>(Msg.Raw + MAX_PACKET_SIZE); + return reinterpret_cast<const xdr_data_t*>(Msg + MAX_PACKET_SIZE); }; /** * The end of properties actually in the buffer. This assumes that @@ -514,20 +514,17 @@ union FGMultiplayMgr::MsgBuf */ xdr_data_t* propsRecvdEnd() { - return reinterpret_cast<xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen); + return reinterpret_cast<xdr_data_t*>(Msg + Header.MsgLen); } const xdr_data_t* propsRecvdEnd() const { - return reinterpret_cast<const xdr_data_t*>(Msg.Raw + Msg.Header.MsgLen); + return reinterpret_cast<const xdr_data_t*>(Msg + Header.MsgLen); } xdr_data2_t double_val; - union - { - char Raw[MAX_PACKET_SIZE]; - T_MsgHdr Header; - } Msg; + char Msg[MAX_PACKET_SIZE]; + T_MsgHdr Header; }; void @@ -658,9 +655,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo) ++it; } escape: - unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg.Raw; + unsigned msgLen = reinterpret_cast<char*>(ptr) - msgBuf.Msg; FillMsgHdr(msgBuf.msgHdr(), POS_DATA_ID, msgLen); - mSocket->sendto(msgBuf.Msg.Raw, msgLen, 0, &mServer); + mSocket->sendto(msgBuf.Msg, msgLen, 0, &mServer); SG_LOG(SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::SendMyPosition"); } // FGMultiplayMgr::SendMyPosition() @@ -735,7 +732,7 @@ FGMultiplayMgr::Update(void) // packet waiting to be processed. ////////////////////////////////////////////////// netAddress SenderAddress; - bytes = mSocket->recvfrom(msgBuf.Msg.Raw, sizeof(msgBuf.Msg.Raw), 0, + bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0, &SenderAddress); ////////////////////////////////////////////////// // no Data received @@ -979,7 +976,7 @@ FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg, char *chatStr = new char[MsgHdr->MsgLen - sizeof(T_MsgHdr)]; const T_ChatMsg* ChatMsg - = reinterpret_cast<const T_ChatMsg *>(Msg.Msg.Raw + sizeof(T_MsgHdr)); + = reinterpret_cast<const T_ChatMsg *>(Msg.Msg + sizeof(T_MsgHdr)); strncpy(chatStr, ChatMsg->Text, MsgHdr->MsgLen - sizeof(T_MsgHdr)); chatStr[MsgHdr->MsgLen - sizeof(T_MsgHdr) - 1] = '\0'; From 84b45683fc1349a8c94bb452732422bdc9f6b037 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 29 Sep 2010 21:04:11 +0100 Subject: [PATCH 03/45] Refactor exit code, so the osgViewer gets 'done'. --- src/Main/bootstrap.cxx | 2 ++ src/Main/fg_commands.cxx | 3 ++- src/Main/fg_os.hxx | 2 +- src/Main/fg_os_osgviewer.cxx | 5 +++-- src/Main/main.cxx | 15 +++++++++------ src/Main/main.hxx | 2 +- src/Main/util.cxx | 13 ------------- src/Main/util.hxx | 11 ----------- src/Network/generic.cxx | 4 ++-- 9 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/Main/bootstrap.cxx b/src/Main/bootstrap.cxx index 8a360206e..fb95b8f19 100644 --- a/src/Main/bootstrap.cxx +++ b/src/Main/bootstrap.cxx @@ -241,6 +241,8 @@ int main ( int argc, char **argv ) { fgviewerMain(argc, argv); else fgMainInit(argc, argv); + + } catch (const sg_throwable &t) { // We must use cerr rather than // logging, since logging may be diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 354a92bc0..1fe2c4ce4 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -211,7 +211,8 @@ do_exit (const SGPropertyNode * arg) SG_LOG(SG_INPUT, SG_DEBUG, "Finished Saving user settings"); } } - fgExit(arg->getIntValue("status", 0)); + + fgOSExit(arg->getIntValue("status", 0)); return true; } diff --git a/src/Main/fg_os.hxx b/src/Main/fg_os.hxx index 62f6f8f7d..ebeb0701b 100644 --- a/src/Main/fg_os.hxx +++ b/src/Main/fg_os.hxx @@ -60,7 +60,7 @@ enum { KEYMOD_NONE = 0, void fgOSInit(int* argc, char** argv); void fgOSOpenWindow(bool stencil); void fgOSFullScreen(); -void fgOSMainLoop(); +int fgOSMainLoop(); void fgOSExit(int code); void fgSetMouseCursor(int cursor); diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx index a03cc747e..726c868a9 100644 --- a/src/Main/fg_os_osgviewer.cxx +++ b/src/Main/fg_os_osgviewer.cxx @@ -271,7 +271,7 @@ void fgOSExit(int code) status = code; } -void fgOSMainLoop() +int fgOSMainLoop() { ref_ptr<FGEventHandler> manipulator = globals->get_renderer()->getEventHandler(); @@ -287,7 +287,8 @@ void fgOSMainLoop() (*drawFunc)(); viewer->frame(); } - fgExit(status); + + return status; } int fgGetKeyModifiers() diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 894dd0010..b9c0f194f 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -576,7 +576,7 @@ static void upper_case_property(const char *name) // Main top level initialization -bool fgMainInit( int argc, char **argv ) { +int fgMainInit( int argc, char **argv ) { // set default log levels sglog().setLogLevels( SG_ALL, SG_ALERT ); @@ -660,11 +660,14 @@ bool fgMainInit( int argc, char **argv ) { fgSplashInit(); // pass control off to the master event handler - fgOSMainLoop(); - - // we never actually get here ... but to avoid compiler warnings, - // etc. - return false; + int result = fgOSMainLoop(); + + // clean up here; ensure we null globals to avoid + // confusing the atexit() handler + delete globals; + globals = NULL; + + return result; } diff --git a/src/Main/main.hxx b/src/Main/main.hxx index 2117f605b..115b3c628 100644 --- a/src/Main/main.hxx +++ b/src/Main/main.hxx @@ -4,7 +4,7 @@ void fgUpdateTimeDepCalcs(); -bool fgMainInit( int argc, char **argv ); +int fgMainInit( int argc, char **argv ); extern int idle_state; diff --git a/src/Main/util.cxx b/src/Main/util.cxx index 0986e91ea..7c20530a3 100644 --- a/src/Main/util.cxx +++ b/src/Main/util.cxx @@ -105,19 +105,6 @@ fgSetupWind (double min_hdg, double max_hdg, double speed, double gust) speed); } - -void -fgExit (int status) -{ -#ifdef OSG_LIBRARY_STATIC - osgDB::Registry::instance( true); -#endif - - SG_LOG(SG_GENERAL, SG_INFO, "Exiting FlightGear with status " << status); - std::exit(status); -} - - // Originally written by Alex Perry. double fgGetLowPass (double current, double target, double timeratio) diff --git a/src/Main/util.hxx b/src/Main/util.hxx index 70067d3e3..dcd75b130 100644 --- a/src/Main/util.hxx +++ b/src/Main/util.hxx @@ -49,17 +49,6 @@ extern void fgDefaultWeatherValue (const char * propname, double value); extern void fgSetupWind (double min_hdg, double max_hdg, double speed, double gust); -/** - * Clean up and exit FlightGear. - * - * This function makes sure that network connections and I/O streams - * are cleaned up. - * - * @param status The exit status to pass to the operating system. - */ -extern void fgExit (int status = 0); - - /** * Move a value towards a target. * diff --git a/src/Network/generic.cxx b/src/Network/generic.cxx index 423d2be18..034a94fa6 100644 --- a/src/Network/generic.cxx +++ b/src/Network/generic.cxx @@ -37,8 +37,8 @@ #include <Main/globals.hxx> #include <Main/fg_props.hxx> +#include <Main/fg_os.hxx> #include <Main/util.hxx> - #include "generic.hxx" @@ -490,7 +490,7 @@ bool FGGeneric::process() { return true; error_out: if (exitOnError) { - fgExit(1); + fgOSExit(1); return true; // should not get there, but please the compiler } else return false; From af4e47179edfacdcad6a49d413e14d71df0ac22d Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 29 Sep 2010 22:03:57 +0100 Subject: [PATCH 04/45] Kill off fgRequestRedraw --- src/Main/fg_os.hxx | 2 -- src/Main/fg_os_common.cxx | 4 ---- src/Main/main.cxx | 1 - src/Main/splash.cxx | 2 -- 4 files changed, 9 deletions(-) diff --git a/src/Main/fg_os.hxx b/src/Main/fg_os.hxx index ebeb0701b..74d2e468b 100644 --- a/src/Main/fg_os.hxx +++ b/src/Main/fg_os.hxx @@ -69,8 +69,6 @@ void fgWarpMouse(int x, int y); int fgGetKeyModifiers(); -void fgRequestRedraw(); - // // Callbacks and registration API // diff --git a/src/Main/fg_os_common.cxx b/src/Main/fg_os_common.cxx index 91041c3cc..1df935139 100644 --- a/src/Main/fg_os_common.cxx +++ b/src/Main/fg_os_common.cxx @@ -64,9 +64,5 @@ void fgRegisterMouseMotionHandler(fgMouseMotionHandler func) globals->get_renderer()->getEventHandler()->setMouseMotionHandler(func); } -// Redraw "happens" every frame whether you want it or not. -void fgRequestRedraw() -{ -} diff --git a/src/Main/main.cxx b/src/Main/main.cxx index b9c0f194f..03637612e 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -238,7 +238,6 @@ static void fgMainLoop( void ) { SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false); } simgear::AtomicChangeListener::fireChangeListeners(); - fgRequestRedraw(); SG_LOG( SG_ALL, SG_DEBUG, "" ); } diff --git a/src/Main/splash.cxx b/src/Main/splash.cxx index 19b123488..9152fb26d 100644 --- a/src/Main/splash.cxx +++ b/src/Main/splash.cxx @@ -355,11 +355,9 @@ osg::Node* fgCreateSplashNode() { void fgSplashInit () { SG_LOG( SG_GENERAL, SG_INFO, "Initializing splash screen" ); globals->get_renderer()->splashinit(); - fgRequestRedraw(); } void fgSplashProgress ( const char *text ) { SG_LOG( SG_GENERAL, SG_INFO, "Splash screen progress " << text ); fgSetString("/sim/startup/splash-progress-text", text); - fgRequestRedraw(); } From 1afd4e602ee4e949cf651d50169e6a15700bd96b Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Fri, 1 Oct 2010 09:33:31 +0100 Subject: [PATCH 05/45] Get rid of FGGeneral; expose equivlanet values via properties. --- src/Cockpit/cockpit.cxx | 4 +--- src/GUI/gui.cxx | 1 - src/Instrumentation/wxradar.cxx | 1 - src/Main/fg_init.cxx | 1 - src/Main/fg_os_osgviewer.cxx | 1 - src/Main/main.cxx | 26 ++++++++++++-------------- src/Main/renderer.cxx | 1 - 7 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/Cockpit/cockpit.cxx b/src/Cockpit/cockpit.cxx index a2f542cbc..c8afc29c6 100644 --- a/src/Cockpit/cockpit.cxx +++ b/src/Cockpit/cockpit.cxx @@ -37,8 +37,6 @@ #include <simgear/props/props.hxx> #include <simgear/timing/sg_time.hxx> -#include <Include/general.hxx> - #include <Main/globals.hxx> #include <Main/fg_props.hxx> #include <Main/viewmgr.hxx> @@ -198,7 +196,7 @@ float get_sideslip( void ) float get_frame_rate( void ) { - return general.get_frame_rate(); + return fgGetInt("/sim/frame-rate"); } float get_fov( void ) diff --git a/src/GUI/gui.cxx b/src/GUI/gui.cxx index 2e8305ba4..1ae94dbb0 100644 --- a/src/GUI/gui.cxx +++ b/src/GUI/gui.cxx @@ -39,7 +39,6 @@ #include <plib/pu.h> -#include <Include/general.hxx> #include <Main/main.hxx> #include <Main/globals.hxx> #include <Main/fg_props.hxx> diff --git a/src/Instrumentation/wxradar.cxx b/src/Instrumentation/wxradar.cxx index 8a27057fe..f32e12605 100644 --- a/src/Instrumentation/wxradar.cxx +++ b/src/Instrumentation/wxradar.cxx @@ -58,7 +58,6 @@ using std::setfill; #include <Cockpit/panel.hxx> #include <Cockpit/hud.hxx> -#include <Include/general.hxx> #include "instrument_mgr.hxx" #include "od_gauge.hxx" #include "wxradar.hxx" diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 7d1b82fd8..38c4d8ee5 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -88,7 +88,6 @@ #include <Cockpit/panel_io.hxx> #include <GUI/new_gui.hxx> -#include <Include/general.hxx> #include <Input/input.hxx> #include <Instrumentation/instrument_mgr.hxx> #include <Model/acmodel.hxx> diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx index 726c868a9..26ecbd266 100644 --- a/src/Main/fg_os_osgviewer.cxx +++ b/src/Main/fg_os_osgviewer.cxx @@ -46,7 +46,6 @@ #include <osgViewer/ViewerEventHandlers> #include <osgViewer/Viewer> -#include <Include/general.hxx> #include <Scenery/scenery.hxx> #include "fg_os.hxx" #include "fg_props.hxx" diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 03637612e..2522e69dd 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -50,7 +50,6 @@ #include <simgear/math/sg_random.h> #include <Time/light.hxx> -#include <Include/general.hxx> #include <Aircraft/replay.hxx> #include <Cockpit/cockpit.hxx> #include <Cockpit/hud.hxx> @@ -87,9 +86,6 @@ using namespace flightgear; using std::cerr; -// This is a record containing a bit of global housekeeping information -FGGeneral general; - // Specify our current idle function state. This is used to run all // our initializations out of the idle callback so that we can get a // splash screen up and running right away. @@ -277,21 +273,23 @@ struct GeneralInitOperation : public GraphicsContextOperation } void run(osg::GraphicsContext* gc) { - general.set_glVendor( (char *)glGetString ( GL_VENDOR ) ); - general.set_glRenderer( (char *)glGetString ( GL_RENDERER ) ); - general.set_glVersion( (char *)glGetString ( GL_VERSION ) ); - SG_LOG( SG_GENERAL, SG_INFO, general.get_glVendor() ); - SG_LOG( SG_GENERAL, SG_INFO, general.get_glRenderer() ); - SG_LOG( SG_GENERAL, SG_INFO, general.get_glVersion() ); + SGPropertyNode* simRendering = fgGetNode("/sim/rendering"); + + simRendering->setStringValue("gl-vendor", (char*) glGetString(GL_VENDOR)); + SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VENDOR)); + + simRendering->setStringValue("gl-renderer", (char*) glGetString(GL_RENDERER)); + SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_RENDERER)); + + simRendering->setStringValue("gl-version", (char*) glGetString(GL_VERSION)); + SG_LOG( SG_GENERAL, SG_INFO, glGetString(GL_VERSION)); GLint tmp; glGetIntegerv( GL_MAX_TEXTURE_SIZE, &tmp ); - general.set_glMaxTexSize( tmp ); - SG_LOG ( SG_GENERAL, SG_INFO, "Max texture size = " << tmp ); + simRendering->setIntValue("max-texture-size", tmp); glGetIntegerv( GL_DEPTH_BITS, &tmp ); - general.set_glDepthBits( tmp ); - SG_LOG ( SG_GENERAL, SG_INFO, "Depth buffer bits = " << tmp ); + simRendering->setIntValue("depth-buffer-bits", tmp); } }; diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index a3d6d9886..0cb00c5ab 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -93,7 +93,6 @@ #include <Instrumentation/HUD/HUD.hxx> #include <Environment/precipitation_mgr.hxx> -#include <Include/general.hxx> #include "splash.hxx" #include "renderer.hxx" #include "main.hxx" From 6963a6c2e42a734bf93e32152c59cbe451a59250 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Fri, 1 Oct 2010 09:35:37 +0100 Subject: [PATCH 06/45] Kill off the general.hxx header --- src/Include/Makefile.am | 3 +- src/Include/general.hxx | 85 ----------------------------------------- 2 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 src/Include/general.hxx diff --git a/src/Include/Makefile.am b/src/Include/Makefile.am index 395f635a6..d2b80e3bd 100644 --- a/src/Include/Makefile.am +++ b/src/Include/Makefile.am @@ -4,5 +4,4 @@ EXTRA_DIST = \ config.h-msvc71 \ config.h-msvc8 \ cmdargs.h \ - fg_typedefs.h \ - general.hxx + fg_typedefs.h \ No newline at end of file diff --git a/src/Include/general.hxx b/src/Include/general.hxx deleted file mode 100644 index c72f8031e..000000000 --- a/src/Include/general.hxx +++ /dev/null @@ -1,85 +0,0 @@ -// general.hxx -- a general house keeping data structure definition for -// various info that might need to be accessible from all -// parts of the sim. -// -// Written by Curtis Olson, started July 1997. -// -// Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// $Id$ - - -#ifndef _GENERAL_HXX -#define _GENERAL_HXX - - -#ifndef __cplusplus -# error This library requires C++ -#endif - -#include <simgear/structure/OSGVersion.hxx> -#define FG_OSG_VERSION SG_OSG_VERSION - -// #define FANCY_FRAME_COUNTER -#ifdef FANCY_FRAME_COUNTER -#define FG_FRAME_RATE_HISTORY 10 -#endif - - -// the general house keeping structure definition -class FGGeneral { - // Info about OpenGL - char *glVendor; - char *glRenderer; - char *glVersion; - int glMaxTexSize; - int glDepthBits; - - // Last frame rate measurement - int frame_rate; -#ifdef FANCY_FRAME_COUNTER - double frames[FG_FRAME_RATE_HISTORY]; -#endif - -public: - inline char* get_glVendor() { return glVendor; } - inline void set_glVendor( char *str ) { glVendor = str; } - inline char* get_glRenderer() const { return glRenderer; } - inline void set_glRenderer( char *str ) { glRenderer = str; } - inline char* get_glVersion() { return glVersion; } - inline void set_glVersion( char *str ) { glVersion = str; } - inline void set_glMaxTexSize( int i ) { glMaxTexSize = i; } - inline int get_glMaxTexSize() const { return glMaxTexSize; } - inline void set_glDepthBits( int d ) { glDepthBits = d; } - inline int get_glDepthBits() const { return glDepthBits; } - inline double get_frame_rate() const { return frame_rate; } -#ifdef FANCY_FRAME_COUNTER - inline double get_frame(int idx) const { return frames[idx]; } - inline void set_frame( int idx, double value ) { frames[idx] = value; } - inline void set_frame_rate( double rate ) { frame_rate = rate; } -#else - inline void set_frame_rate( int rate ) { frame_rate = rate; } -#endif -}; - -// general contains all the general house keeping parameters. -extern FGGeneral general; - - -#endif // _GENERAL_HXX - - From 0beab94cb5fec7c58015271658a6233260c25d02 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Fri, 1 Oct 2010 19:09:19 +0100 Subject: [PATCH 07/45] Make the tile-manager a well-behaved SGSubsystem --- src/AIModel/AIAircraft.cxx | 2 +- src/Main/fg_commands.cxx | 14 +--- src/Main/fg_init.cxx | 14 +--- src/Main/globals.cxx | 1 - src/Main/main.cxx | 13 ---- src/Scenery/tilemgr.cxx | 147 +++++++++++++++++-------------------- src/Scenery/tilemgr.hxx | 40 +++++----- 7 files changed, 95 insertions(+), 136 deletions(-) diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index 58db48478..f117810c1 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -421,7 +421,7 @@ void FGAIAircraft::getGroundElev(double dt) { double range = 500.0; if (!globals->get_tile_mgr()->scenery_available(pos, range)) { // Try to shedule tiles for that position. - globals->get_tile_mgr()->update( pos, range ); + globals->get_tile_mgr()->schedule_tiles_at( pos, range ); } double alt; diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 1fe2c4ce4..74551bc91 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -556,15 +556,9 @@ do_tile_cache_reload (const SGPropertyNode * arg) if ( !freeze ) { fgSetBool("/sim/freeze/master", true); } - if ( globals->get_tile_mgr()->init() ) { - // Load the local scenery data - double visibility_meters = fgGetDouble("/environment/visibility-m"); - globals->get_tile_mgr()->update( visibility_meters ); - } else { - SG_LOG( SG_GENERAL, SG_ALERT, - "Error in Tile Manager initialization!" ); - exit(-1); - } + + globals->get_subsystem("tile-manager")->reinit(); + if ( !freeze ) { fgSetBool("/sim/freeze/master", false); } @@ -1241,8 +1235,6 @@ do_presets_commit (const SGPropertyNode * arg) fgReInitSubsystems(); - globals->get_tile_mgr()->update( fgGetDouble("/environment/visibility-m") ); - #if 0 if ( ! fgGetBool("/sim/presets/onground") ) { fgSetBool( "/sim/freeze/master", true ); diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 38c4d8ee5..c62e96eaf 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -1321,14 +1321,8 @@ bool fgInitSubsystems() { // Initialize the scenery management subsystem. //////////////////////////////////////////////////////////////////// - if ( globals->get_tile_mgr()->init() ) { - // Load the local scenery data - double visibility_meters = fgGetDouble("/environment/visibility-m"); - globals->get_tile_mgr()->update( visibility_meters ); - } else { - SG_LOG( SG_GENERAL, SG_ALERT, "Error in Tile Manager initialization!" ); - exit(-1); - } + globals->add_subsystem("tile-manager", globals->get_tile_mgr(), + SGSubsystemMgr::DISPLAY); globals->get_scenery()->get_scene_graph() ->addChild(simgear::Particles::getCommonRoot()); @@ -1553,7 +1547,8 @@ void fgReInitSubsystems() globals->get_controls()->reset_all(); globals->get_subsystem("time")->reinit(); - + globals->get_subsystem("tile-manager")->reinit(); + if ( !freeze ) { fgSetBool("/sim/freeze/master", false); } @@ -1580,7 +1575,6 @@ void doSimulatorReset(void) // from gui_local.cxx -- TODO merge with fgReInitSu fgReInitSubsystems(); - globals->get_tile_mgr()->update(fgGetDouble("/environment/visibility-m")); fgSetBool("/sim/signals/reinit", false); if (!freeze) diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 0bd14a3bc..c52c5e182 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -193,7 +193,6 @@ FGGlobals::~FGGlobals() delete model_mgr; delete channel_options_list; delete initial_waypoints; - delete tile_mgr; delete scenery; delete fontcache; diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 2522e69dd..294c39c92 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -159,19 +159,6 @@ static void fgMainLoop( void ) { globals->get_subsystem_mgr()->update(sim_dt); globals->get_aircraft_model()->update(sim_dt); - - // - // Tile Manager updates - see if we need to load any new scenery tiles. - // this code ties together the fdm, viewer and scenery classes... - // we may want to move this to its own class at some point - // - double visibility_meters = fgGetDouble("/environment/visibility-m"); - globals->get_tile_mgr()->prep_ssg_nodes( visibility_meters ); - - // update tile manager for view... - SGVec3d viewPos = globals->get_current_view()->get_view_pos(); - SGGeod geodViewPos = SGGeod::fromCart(viewPos); - globals->get_tile_mgr()->update(geodViewPos, visibility_meters); // run Nasal's settimer() loops right before the view manager globals->get_event_mgr()->update(sim_dt); diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx index e5cd08bbb..5abcf791d 100644 --- a/src/Scenery/tilemgr.cxx +++ b/src/Scenery/tilemgr.cxx @@ -67,7 +67,7 @@ FGTileMgr::~FGTileMgr() { // Initialize the Tile Manager subsystem -int FGTileMgr::init() { +void FGTileMgr::init() { SG_LOG( SG_TERRAIN, SG_INFO, "Initializing Tile Manager subsystem." ); _options = new SGReaderWriterBTGOptions; @@ -80,65 +80,75 @@ int FGTileMgr::init() { std::copy(sc.begin(), sc.end(), back_inserter(fp)); TileEntry::setModelLoadHelper(this); + + _visibilityMeters = fgGetNode("/environment/visibility-m", true); + - tile_cache.init(); + reinit(); +} - state = Inited; - previous_bucket.make_bad(); - current_bucket.make_bad(); +void FGTileMgr::reinit() +{ + tile_cache.init(); + + state = Inited; - longitude = latitude = -1000.0; + previous_bucket.make_bad(); + current_bucket.make_bad(); + longitude = latitude = -1000.0; - return 1; + // force an update now + update(0.0); } // schedule a tile for loading void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) { // see if tile already exists in the cache TileEntry *t = tile_cache.get_tile( b ); - - if ( !t ) { - // make space in the cache - SceneryPager* pager = FGScenery::getPagerSingleton(); - while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) { - long index = tile_cache.get_oldest_tile(); - if ( index >= 0 ) { - TileEntry *old = tile_cache.get_tile( index ); - tile_cache.clear_entry( index ); - osg::ref_ptr<osg::Object> subgraph = old->getNode(); - old->removeFromSceneGraph(); - delete old; - // zeros out subgraph ref_ptr, so subgraph is owned by - // the pager and will be deleted in the pager thread. - pager->queueDeleteRequest(subgraph); - } else { - // nothing to free ?!? forge ahead - break; - } - } - - // create a new entry - TileEntry *e = new TileEntry( b ); - - // insert the tile into the cache - if ( tile_cache.insert_tile( e ) ) { - // update_queues will generate load request - } else { - // insert failed (cache full with no available entries to - // delete.) Try again later - delete e; - } - // Attach to scene graph - e->addToSceneGraph(globals->get_scenery()->get_terrain_branch()); - } else { - t->set_inner_ring( is_inner_ring ); + if (t) { + t->set_inner_ring( is_inner_ring ); + return; } + + // make space in the cache + SceneryPager* pager = FGScenery::getPagerSingleton(); + while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) { + long index = tile_cache.get_oldest_tile(); + if ( index >= 0 ) { + TileEntry *old = tile_cache.get_tile( index ); + tile_cache.clear_entry( index ); + osg::ref_ptr<osg::Object> subgraph = old->getNode(); + old->removeFromSceneGraph(); + delete old; + // zeros out subgraph ref_ptr, so subgraph is owned by + // the pager and will be deleted in the pager thread. + pager->queueDeleteRequest(subgraph); + } else { + // nothing to free ?!? forge ahead + break; + } + } + + // create a new entry + TileEntry *e = new TileEntry( b ); + + // insert the tile into the cache + if ( tile_cache.insert_tile( e ) ) { + // update_queues will generate load request + } else { + // insert failed (cache full with no available entries to + // delete.) Try again later + delete e; + } + // Attach to scene graph + e->addToSceneGraph(globals->get_scenery()->get_terrain_branch()); } // schedule a needed buckets for loading -void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) { +void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) { + // sanity check (unfortunately needed!) if ( longitude < -180.0 || longitude > 180.0 || latitude < -90.0 || latitude > 90.0 ) @@ -155,8 +165,6 @@ void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) { SG_LOG( SG_TERRAIN, SG_INFO, "scheduling needed tiles for " << longitude << " " << latitude ); - // vis = fgGetDouble("/environment/visibility-m"); - double tile_width = curr_bucket.get_width_m(); double tile_height = curr_bucket.get_height_m(); // cout << "tile width = " << tile_width << " tile_height = " @@ -209,29 +217,6 @@ void FGTileMgr::schedule_needed( double vis, const SGBucket& curr_bucket) { } } - -void FGTileMgr::initialize_queue() -{ - // First time through or we have teleported, initialize the - // system and load all relavant tiles - - SG_LOG( SG_TERRAIN, SG_INFO, "Initialize_queue(): Updating Tile list for " - << current_bucket ); - // cout << "tile cache size = " << tile_cache.get_size() << endl; - - // wipe/initialize tile cache - // tile_cache.init(); - previous_bucket.make_bad(); - - // build the local area list and schedule tiles for loading - - // start with the center tile and work out in concentric - // "rings" - - double visibility_meters = fgGetDouble("/environment/visibility-m"); - schedule_needed(visibility_meters, current_bucket); -} - osg::Node* FGTileMgr::loadTileModel(const string& modelPath, bool cacheModel) { @@ -322,16 +307,17 @@ void FGTileMgr::update_queues() // given the current lon/lat (in degrees), fill in the array of local // chunks. If the chunk isn't already in the cache, then read it from // disk. -int FGTileMgr::update( double visibility_meters ) -{ - SGVec3d viewPos = globals->get_current_view()->get_view_pos(); - return update(SGGeod::fromCart(viewPos), visibility_meters); -} - -int FGTileMgr::update( const SGGeod& location, double visibility_meters) +void FGTileMgr::update(double) { SG_LOG( SG_TERRAIN, SG_DEBUG, "FGTileMgr::update()" ); + SGVec3d viewPos = globals->get_current_view()->get_view_pos(); + prep_ssg_nodes(); + double vis = _visibilityMeters->getDoubleValue(); + schedule_tiles_at(SGGeod::fromCart(viewPos), vis); +} +int FGTileMgr::schedule_tiles_at(const SGGeod& location, double rangeM) +{ longitude = location.getLongitudeDeg(); latitude = location.getLatitudeDeg(); @@ -351,16 +337,16 @@ int FGTileMgr::update( const SGGeod& location, double visibility_meters) // We've moved to a new bucket, we need to schedule any // needed tiles for loading. SG_LOG( SG_TERRAIN, SG_INFO, "FGTileMgr::update()" ); - schedule_needed(visibility_meters, current_bucket); + schedule_needed(current_bucket, rangeM); } } else if ( state == Start || state == Inited ) { SG_LOG( SG_TERRAIN, SG_INFO, "State == Start || Inited" ); -// initialize_queue(); + state = Running; if (current_bucket != previous_bucket && current_bucket.get_chunk_lon() != -1000) { SG_LOG( SG_TERRAIN, SG_INFO, "FGTileMgr::update()" ); - schedule_needed(visibility_meters, current_bucket); + schedule_needed(current_bucket, rangeM); } } @@ -372,11 +358,12 @@ int FGTileMgr::update( const SGGeod& location, double visibility_meters) return 1; } -void FGTileMgr::prep_ssg_nodes(float vis) { +void FGTileMgr::prep_ssg_nodes() { // traverse the potentially viewable tile list and update range // selector and transform + double vis = _visibilityMeters->getDoubleValue(); TileEntry *e; tile_cache.reset_traversal(); diff --git a/src/Scenery/tilemgr.hxx b/src/Scenery/tilemgr.hxx index 6b415e53b..13588342b 100644 --- a/src/Scenery/tilemgr.hxx +++ b/src/Scenery/tilemgr.hxx @@ -26,6 +26,7 @@ #include <simgear/compiler.h> +#include <simgear/structure/subsystem_mgr.hxx> #include <simgear/bucket/newbucket.hxx> #include <simgear/scene/tgdb/TileEntry.hxx> #include <simgear/scene/tgdb/TileCache.hxx> @@ -37,7 +38,7 @@ namespace osg class Node; } -class FGTileMgr : public simgear::ModelLoadHelper { +class FGTileMgr : public SGSubsystem, public simgear::ModelLoadHelper { private: @@ -49,15 +50,12 @@ private: }; load_state state; - - // initialize the cache - void initialize_queue(); - + // schedule a tile for loading void sched_tile( const SGBucket& b, const bool is_inner_ring ); // schedule a needed buckets for loading - void schedule_needed(double visibility_meters, const SGBucket& curr_bucket); + void schedule_needed(const SGBucket& curr_bucket, double rangeM); SGBucket previous_bucket; SGBucket current_bucket; @@ -77,29 +75,31 @@ private: */ simgear::TileCache tile_cache; + // Update the various queues maintained by the tilemagr (private + // internal function, do not call directly.) + void update_queues(); + + // Prepare the ssg nodes corresponding to each tile. For each + // tile, set the ssg transform and update it's range selector + // based on current visibilty void prep_ssg_nodes( float + // visibility_meters ); + void prep_ssg_nodes(); + + SGPropertyNode* _visibilityMeters; + public: FGTileMgr(); ~FGTileMgr(); // Initialize the Tile Manager - int init(); + virtual void init(); + virtual void reinit(); - // Update the various queues maintained by the tilemagr (private - // internal function, do not call directly.) - void update_queues(); + virtual void update(double dt); - // given the current lon/lat (in degrees), fill in the array of - // local chunks. If the chunk isn't already in the cache, then - // read it from disk. - int update( double visibility_meters ); - int update( const SGGeod& location, double visibility_meters); + int schedule_tiles_at(const SGGeod& location, double rangeM); - // Prepare the ssg nodes corresponding to each tile. For each - // tile, set the ssg transform and update it's range selector - // based on current visibilty void prep_ssg_nodes( float - // visibility_meters ); - void prep_ssg_nodes(float visibility_meters ); const SGBucket& get_current_bucket () const { return current_bucket; } From e7b58d48e32e017a3d5ceddeb60ec04f6166d81f Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Sat, 2 Oct 2010 00:40:24 +0200 Subject: [PATCH 08/45] Fix wxradar to use path resolution make it work with the new "multiple aircraft dir" feature --- src/Instrumentation/wxradar.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Instrumentation/wxradar.cxx b/src/Instrumentation/wxradar.cxx index f32e12605..e8619dec6 100644 --- a/src/Instrumentation/wxradar.cxx +++ b/src/Instrumentation/wxradar.cxx @@ -122,10 +122,9 @@ wxRadarBg::init () "Aircraft/Instruments/Textures/od_wxradar.rgb"); _resultTexture = FGTextureManager::createTexture(_texture_path.c_str(), false); - SGPath tpath(globals->get_fg_root()); string path = _Instrument->getStringValue("echo-texture-path", "Aircraft/Instruments/Textures/wxecho.rgb"); - tpath.append(path); + SGPath tpath = globals->resolve_aircraft_path(path); // no mipmap or else alpha will mix with pixels on the border of shapes, ruining the effect _wxEcho = SGLoadTexture2D(tpath, false, false); From dba471519f653b92cb10af871f0d215b0ada3042 Mon Sep 17 00:00:00 2001 From: Tim Moore <timoore33@gmail.com> Date: Sat, 2 Oct 2010 23:03:27 +0200 Subject: [PATCH 09/45] Thorsten Brem's patches for bug 122 Fixes teleporting problems and disappearing tiles. --- src/Scenery/tilemgr.cxx | 32 ++++++++++++++++++++++---------- src/Scenery/tilemgr.hxx | 2 +- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx index 5abcf791d..6e9c43812 100644 --- a/src/Scenery/tilemgr.cxx +++ b/src/Scenery/tilemgr.cxx @@ -103,17 +103,19 @@ void FGTileMgr::reinit() } // schedule a tile for loading -void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) { +void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring, const bool is_cache_locked ) { // see if tile already exists in the cache TileEntry *t = tile_cache.get_tile( b ); if (t) { - t->set_inner_ring( is_inner_ring ); + t->set_timestamp(tile_cache.get_current_time()); + t->set_inner_ring( is_inner_ring ); + t->set_cache_lock( is_cache_locked ); return; } // make space in the cache SceneryPager* pager = FGScenery::getPagerSingleton(); - while ( (int)tile_cache.get_size() > tile_cache.get_max_cache_size() ) { + while ( (int)tile_cache.get_size() >= tile_cache.get_max_cache_size() ) { long index = tile_cache.get_oldest_tile(); if ( index >= 0 ) { TileEntry *old = tile_cache.get_tile( index ); @@ -132,20 +134,21 @@ void FGTileMgr::sched_tile( const SGBucket& b, const bool is_inner_ring ) { // create a new entry TileEntry *e = new TileEntry( b ); - + // insert the tile into the cache if ( tile_cache.insert_tile( e ) ) { + e->set_inner_ring( is_inner_ring ); + e->set_cache_lock( is_cache_locked ); // update_queues will generate load request + // Attach to scene graph + e->addToSceneGraph(globals->get_scenery()->get_terrain_branch()); } else { // insert failed (cache full with no available entries to // delete.) Try again later delete e; } - // Attach to scene graph - e->addToSceneGraph(globals->get_scenery()->get_terrain_branch()); } - // schedule a needed buckets for loading void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) { @@ -188,11 +191,20 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) { // location. tile_cache.clear_inner_ring_flags(); + // clear the cache lock flags which prevented tiles of the previous position to be dropped + // from the cache. + tile_cache.clear_cache_lock_flags(); + + // update timestamps, so all tiles scheduled now are *newer* than any tile previously loaded + osg::FrameStamp* framestamp + = globals->get_renderer()->getViewer()->getFrameStamp(); + tile_cache.set_current_time(framestamp->getReferenceTime()); + SGBucket b; // schedule center tile first so it can be loaded first b = sgBucketOffset( longitude, latitude, 0, 0 ); - sched_tile( b, true ); + sched_tile( b, true, true ); int x, y; @@ -201,7 +213,7 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) { for ( y = -1; y <= 1; ++y ) { if ( x != 0 || y != 0 ) { b = sgBucketOffset( longitude, latitude, x, y ); - sched_tile( b, true ); + sched_tile( b, true, true); } } } @@ -211,7 +223,7 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis) { for ( y = -yrange; y <= yrange; ++y ) { if ( x < -1 || x > 1 || y < -1 || y > 1 ) { SGBucket b = sgBucketOffset( longitude, latitude, x, y ); - sched_tile( b, false ); + sched_tile( b, false, true); } } } diff --git a/src/Scenery/tilemgr.hxx b/src/Scenery/tilemgr.hxx index 13588342b..98dcc3d18 100644 --- a/src/Scenery/tilemgr.hxx +++ b/src/Scenery/tilemgr.hxx @@ -52,7 +52,7 @@ private: load_state state; // schedule a tile for loading - void sched_tile( const SGBucket& b, const bool is_inner_ring ); + void sched_tile( const SGBucket& b, const bool is_inner_ring, const bool is_cache_locked ); // schedule a needed buckets for loading void schedule_needed(const SGBucket& curr_bucket, double rangeM); From 9ffaf11aa5e78ee5c6864fdaa0c3d0a5ea9097d1 Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <Torsten@t3r.de> Date: Tue, 5 Oct 2010 14:29:36 +0200 Subject: [PATCH 10/45] Autopilot: fix initialization of digital filters --- src/Autopilot/digitalfilter.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Autopilot/digitalfilter.cxx b/src/Autopilot/digitalfilter.cxx index 9edf53b82..bdd39397a 100644 --- a/src/Autopilot/digitalfilter.cxx +++ b/src/Autopilot/digitalfilter.cxx @@ -343,8 +343,10 @@ void DigitalFilter::update( bool firstTime, double dt) { if( _implementation == NULL ) return; - if( firstTime ) - _implementation->initialize( get_output_value() ); + if( firstTime ) { + SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to " << _valueInput.get_value() ); + _implementation->initialize( _valueInput.get_value() ); + } double input = _valueInput.get_value() - _referenceInput.get_value(); double output = _implementation->compute( dt, input ); From 9be636555cc4e82e0bd74a54e77b4adfb84f9d31 Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Tue, 5 Oct 2010 22:34:08 +0200 Subject: [PATCH 11/45] Fixed navradio when shutting down/restarting nav receiver. "nav-loc" and "has_gs" properties were not updated when nav receiver was rebooted. Shutting down the nav receiver clears all nav outputs (including "nav-loc" and "has_gs"). => When nav receiver is powered again, all outputs must be updated. => "nav-loc" and "has_gs" are only updated when active nav station changes. => old nav station must be cleared on shutdown to enforce update on nav reboot... --- src/Instrumentation/navradio.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Instrumentation/navradio.cxx b/src/Instrumentation/navradio.cxx index 0970cae5a..2aac4b26d 100644 --- a/src/Instrumentation/navradio.cxx +++ b/src/Instrumentation/navradio.cxx @@ -390,6 +390,7 @@ void FGNavRadio::clearOutputs() _dmeInRange = false; _operable = false; + _navaid = NULL; } void FGNavRadio::updateReceiver(double dt) From a1137ed940710c6531fa12e5427fcaa6d1f3f0bd Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Tue, 5 Oct 2010 22:34:23 +0200 Subject: [PATCH 12/45] Another GPWS fix: terrain clearance filter must be reset on reset/reposition. Queue of recent altitude samples must be cleared on reset/reposition to avoid nuisance alerts... --- src/Instrumentation/mk_viii.cxx | 8 ++++++++ src/Instrumentation/mk_viii.hxx | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Instrumentation/mk_viii.cxx b/src/Instrumentation/mk_viii.cxx index 25e0f2491..d69cc96ad 100755 --- a/src/Instrumentation/mk_viii.cxx +++ b/src/Instrumentation/mk_viii.cxx @@ -362,6 +362,7 @@ MK_VIII::SystemHandler::update () if (replay_state != last_replay_state) { mk->alert_handler.reposition(); + mk->io_handler.reposition(); last_replay_state = replay_state; state = STATE_REPOSITION; @@ -1065,6 +1066,7 @@ MK_VIII::IOHandler::boot () mk_doutput(glideslope_cancel) = power_saved.glideslope_cancel; altitude_samples.clear(); + reset_terrain_clearance(); } void @@ -1364,6 +1366,12 @@ MK_VIII::IOHandler::reset_terrain_clearance () update_terrain_clearance(); } +void +MK_VIII::IOHandler::reposition () +{ + reset_terrain_clearance(); +} + void MK_VIII::IOHandler::handle_input_fault (bool test, FaultHandler::Fault fault) { diff --git a/src/Instrumentation/mk_viii.hxx b/src/Instrumentation/mk_viii.hxx index 594094cf8..517ee49f1 100755 --- a/src/Instrumentation/mk_viii.hxx +++ b/src/Instrumentation/mk_viii.hxx @@ -609,6 +609,7 @@ public: void update_egpws_alert_discrete_2 (); void update_egpwc_alert_discrete_3 (); void update_outputs (); + void reposition (); void update_lamps (); void set_lamp (Lamp lamp); @@ -639,7 +640,7 @@ public: public: inline TerrainClearanceFilter () - : value(0) {} + : value(0.0), last_update(-1.0) {} double update (double agl); void reset (); From d39841d2dfdf82e1d590ab331888e3a392d199c6 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sat, 2 Oct 2010 16:09:02 +0100 Subject: [PATCH 13/45] Make FGAircraftModel behave like a standarrd subsystem. --- src/Main/fg_init.cxx | 16 ---------------- src/Main/globals.cxx | 1 - src/Main/main.cxx | 5 +---- 3 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index c62e96eaf..f1c542310 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -1262,14 +1262,6 @@ bool fgInitGeneral() { return true; } -// Initialize view parameters -void fgInitView() { - // force update of model so that viewer can get some data... - globals->get_aircraft_model()->update(0); - // run update for current view so that data is current... - globals->get_viewmgr()->update(0); -} - // This is the top level init routine which calls all the other // initialization routines. If you are adding a subsystem to flight // gear, its initialization call should located in this routine. @@ -1355,12 +1347,6 @@ bool fgInitSubsystems() { globals->add_subsystem( "xml-autopilot", FGXMLAutopilotGroup::createInstance(), SGSubsystemMgr::FDM ); globals->add_subsystem( "route-manager", new FGRouteMgr ); - - //////////////////////////////////////////////////////////////////// - // Initialize the view manager subsystem. - //////////////////////////////////////////////////////////////////// - - fgInitView(); //////////////////////////////////////////////////////////////////// // Initialize the Input-Output subsystem @@ -1542,8 +1528,6 @@ void fgReInitSubsystems() // reload offsets from config defaults globals->get_viewmgr()->reinit(); - fgInitView(); - globals->get_controls()->reset_all(); globals->get_subsystem("time")->reinit(); diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index c52c5e182..93755ced7 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -189,7 +189,6 @@ FGGlobals::~FGGlobals() delete viewmgr; // delete commands; - delete acmodel; delete model_mgr; delete channel_options_list; delete initial_waypoints; diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 294c39c92..1ed54dfe0 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -158,7 +158,6 @@ static void fgMainLoop( void ) { #endif globals->get_subsystem_mgr()->update(sim_dt); - globals->get_aircraft_model()->update(sim_dt); // run Nasal's settimer() loops right before the view manager globals->get_event_mgr()->update(sim_dt); @@ -404,9 +403,7 @@ static void fgIdleFunction ( void ) { //////////////////////////////////////////////////////////////////// FGAircraftModel* acm = new FGAircraftModel; globals->set_aircraft_model(acm); - //globals->add_subsystem("aircraft-model", acm); - acm->init(); - acm->bind(); + globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY); //////////////////////////////////////////////////////////////////// // Initialize the view manager subsystem. From 0c342308eb73079724befab0a9e93bcdf7b06244 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sat, 2 Oct 2010 23:40:38 +0100 Subject: [PATCH 14/45] Make MultiPlayer a well-behaved subsystem. --- src/Main/fg_init.cxx | 15 ++++++++------- src/Main/fg_os_osgviewer.cxx | 4 ++++ src/Main/globals.cxx | 16 ++++++---------- src/Main/globals.hxx | 11 ----------- src/Main/main.cxx | 5 ----- src/MultiPlayer/multiplaymgr.cxx | 14 +++++++------- src/MultiPlayer/multiplaymgr.hxx | 17 +++++++---------- src/Network/multiplay.cxx | 4 ++-- 8 files changed, 34 insertions(+), 52 deletions(-) diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index f1c542310..1ebff97b1 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -1397,6 +1397,14 @@ bool fgInitSubsystems() { //////////////////////////////////////////////////////////////////// globals->add_subsystem("atis", new FGAtisManager, SGSubsystemMgr::POST_FDM); #endif + + + //////////////////////////////////////////////////////////////////// + // Initialize multiplayer subsystem + //////////////////////////////////////////////////////////////////// + + globals->add_subsystem("mp", new FGMultiplayMgr, SGSubsystemMgr::POST_FDM); + //////////////////////////////////////////////////////////////////// // Initialise the AI Model Manager //////////////////////////////////////////////////////////////////// @@ -1465,13 +1473,6 @@ bool fgInitSubsystems() { globals->get_subsystem_mgr()->bind(); globals->get_subsystem_mgr()->init(); - //////////////////////////////////////////////////////////////////// - // Initialize multiplayer subsystem - //////////////////////////////////////////////////////////////////// - - globals->set_multiplayer_mgr(new FGMultiplayMgr); - globals->get_multiplayer_mgr()->init(); - //////////////////////////////////////////////////////////////////////// // Initialize the Nasal interpreter. // Do this last, so that the loaded scripts see initialized state diff --git a/src/Main/fg_os_osgviewer.cxx b/src/Main/fg_os_osgviewer.cxx index 26ecbd266..483a7f417 100644 --- a/src/Main/fg_os_osgviewer.cxx +++ b/src/Main/fg_os_osgviewer.cxx @@ -292,6 +292,10 @@ int fgOSMainLoop() int fgGetKeyModifiers() { + if (!globals->get_renderer()) { // happens during shutdown + return 0; + } + return globals->get_renderer()->getEventHandler()->getCurrentModifiers(); } diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 93755ced7..a5eb32563 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -150,8 +150,8 @@ FGGlobals::FGGlobals() : tacanlist( NULL ), carrierlist( NULL ), channellist( NULL ), - airwaynet( NULL ), - multiplayer_mgr( NULL ) + airwaynet( NULL ) + { simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider()); } @@ -161,6 +161,8 @@ FGGlobals::FGGlobals() : FGGlobals::~FGGlobals() { delete renderer; + renderer = NULL; + // The AIModels manager performs a number of actions upon // Shutdown that implicitly assume that other subsystems // are still operational (Due to the dynamic allocation and @@ -168,16 +170,11 @@ FGGlobals::~FGGlobals() // shut down all subsystems, make sure we take down the // AIModels system first. subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model"); - // FGInput (FGInputEvent) and FGDialog calls get_subsystem() in their destructors, - // which is not safe since some subsystem are already deleted but can be referred. - // So these subsystems must be deleted prior to deleting subsystem_mgr unless - // ~SGSubsystemGroup and SGSubsystemMgr::get_subsystem are changed not to refer to - // deleted subsystems. - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("input"); - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("gui"); + subsystem_mgr->unbind(); delete subsystem_mgr; delete event_mgr; + delete time_params; delete mag; delete matlib; @@ -203,7 +200,6 @@ FGGlobals::~FGGlobals() delete carrierlist; delete channellist; delete airwaynet; - delete multiplayer_mgr; soundmgr->unbind(); delete soundmgr; diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx index fccee8c51..20f1a6de4 100644 --- a/src/Main/globals.hxx +++ b/src/Main/globals.hxx @@ -66,7 +66,6 @@ class FGLight; class FGModelMgr; class FGRouteMgr; class FGScenery; -class FGMultiplayMgr; class FGPanel; class FGTileMgr; class FGViewMgr; @@ -175,9 +174,6 @@ private: FGTACANList *channellist; FGAirwayNetwork *airwaynet; - //Mulitplayer managers - FGMultiplayMgr *multiplayer_mgr; - /// roots of Aircraft trees string_list fg_aircraft_dirs; public: @@ -289,13 +285,6 @@ public: model_mgr = mgr; } - inline FGMultiplayMgr *get_multiplayer_mgr () { return multiplayer_mgr; } - - inline void set_multiplayer_mgr (FGMultiplayMgr * mgr) - { - multiplayer_mgr = mgr; - } - inline string_list *get_channel_options_list () { return channel_options_list; } diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 1ed54dfe0..4e15fea75 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -146,11 +146,6 @@ static void fgMainLoop( void ) { altitude->getDoubleValue() * SG_FEET_TO_METER, globals->get_time_params()->getJD() ); - - // Update any multiplayer's network queues, the AIMultiplayer - // implementation is an AI model and depends on that - globals->get_multiplayer_mgr()->Update(); - #if ENABLE_ATCDCL // Run ATC subsystem if (fgGetBool("/sim/atc/enabled")) diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx index 7574332b2..6ac9aada5 100644 --- a/src/MultiPlayer/multiplaymgr.cxx +++ b/src/MultiPlayer/multiplaymgr.cxx @@ -366,7 +366,7 @@ FGMultiplayMgr::~FGMultiplayMgr() // Initialise object // ////////////////////////////////////////////////////////////////////// -bool +void FGMultiplayMgr::init (void) { ////////////////////////////////////////////////// @@ -374,7 +374,7 @@ FGMultiplayMgr::init (void) ////////////////////////////////////////////////// if (mInitialised) { SG_LOG(SG_NETWORK, SG_WARN, "FGMultiplayMgr::init - already initialised"); - return false; + return; } ////////////////////////////////////////////////// // Set members from property values @@ -400,7 +400,7 @@ FGMultiplayMgr::init (void) if (rxPort <= 0) { SG_LOG(SG_NETWORK, SG_DEBUG, "FGMultiplayMgr - No receiver port, Multiplayermode disabled"); - return (false); + return; } if (mCallsign.empty()) mCallsign = "JohnDoe"; // FIXME: use getpwuid @@ -415,17 +415,17 @@ FGMultiplayMgr::init (void) if (!mSocket->open(false)) { SG_LOG( SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::init - Failed to create data socket" ); - return false; + return; } mSocket->setBlocking(false); if (mSocket->bind(rxAddress.c_str(), rxPort) != 0) { perror("bind"); SG_LOG( SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::Open - Failed to bind receive socket" ); - return false; + return; } + mInitialised = true; - return true; } // FGMultiplayMgr::init() ////////////////////////////////////////////////////////////////////// @@ -710,7 +710,7 @@ FGMultiplayMgr::SendTextMessage(const string &MsgText) // ////////////////////////////////////////////////////////////////////// void -FGMultiplayMgr::Update(void) +FGMultiplayMgr::update(double) { if (!mInitialised) return; diff --git a/src/MultiPlayer/multiplaymgr.hxx b/src/MultiPlayer/multiplaymgr.hxx index eb5fc1edf..b2417f8dd 100644 --- a/src/MultiPlayer/multiplaymgr.hxx +++ b/src/MultiPlayer/multiplaymgr.hxx @@ -33,25 +33,20 @@ #include "mpmessages.hxx" -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - #include <string> -using std::string; #include <vector> -using std::vector; #include <simgear/compiler.h> #include <simgear/props/props.hxx> #include <plib/netSocket.h> #include <Main/globals.hxx> +#include <simgear/structure/subsystem_mgr.hxx> #include <AIModel/AIMultiplayer.hxx> struct FGExternalMotionInfo; -class FGMultiplayMgr +class FGMultiplayMgr : public SGSubsystem { public: @@ -67,13 +62,15 @@ public: FGMultiplayMgr(); ~FGMultiplayMgr(); - bool init(void); + + virtual void init(void); + virtual void update(double dt); + void Close(void); // transmitter void SendMyPosition(const FGExternalMotionData& motionInfo); void SendTextMessage(const string &sMsgText); // receiver - void Update(void); private: union MsgBuf; @@ -93,7 +90,7 @@ private: netAddress mServer; bool mHaveServer; bool mInitialised; - string mCallsign; + std::string mCallsign; }; #endif diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx index d37c42fdf..eb8a52c08 100644 --- a/src/Network/multiplay.cxx +++ b/src/Network/multiplay.cxx @@ -243,7 +243,7 @@ bool FGMultiplay::process() { motionInfo.properties.push_back(pData); } - FGMultiplayMgr* mpmgr = globals->get_multiplayer_mgr(); + FGMultiplayMgr* mpmgr = (FGMultiplayMgr*) globals->get_subsystem("mp"); mpmgr->SendMyPosition(motionInfo); // Now remove the data @@ -272,7 +272,7 @@ bool FGMultiplay::process() { ******************************************************************/ bool FGMultiplay::close() { - FGMultiplayMgr *mgr = globals->get_multiplayer_mgr(); + FGMultiplayMgr* mgr = (FGMultiplayMgr*) globals->get_subsystem("mp"); if (mgr == 0) { return false; From 9b2cea33e8bd9e2739f5ebb2ec6ff1668d7f7b9b Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Mon, 4 Oct 2010 09:13:26 +0100 Subject: [PATCH 15/45] Remove uneccessary explicit update of FGLight --- src/Main/globals.hxx | 1 - src/Main/main.cxx | 5 ----- 2 files changed, 6 deletions(-) diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx index 20f1a6de4..50bd24e67 100644 --- a/src/Main/globals.hxx +++ b/src/Main/globals.hxx @@ -62,7 +62,6 @@ class FGFlightPlanDispatcher; class FGNavList; class FGAirwayNetwork; class FGTACANList; -class FGLight; class FGModelMgr; class FGRouteMgr; class FGScenery; diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 4e15fea75..1cfe91ba2 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -132,11 +132,6 @@ static void fgMainLoop( void ) { // compute simulated time (allowing for pause, warp, etc) and // real elapsed time timeMgr->computeTimeDeltas(sim_dt, real_dt); - - if (globals->get_warp_delta() != 0) { - FGLight *l = (FGLight *)(globals->get_subsystem("lighting")); - l->update( 0.5 ); - } // update magvar model globals->get_mag()->update( longitude->getDoubleValue() From a4f1139fcd8a130be87d7a9fee881b22d1acc8a9 Mon Sep 17 00:00:00 2001 From: Thorsten Brehm <brehm@patagonia.southamerica> Date: Fri, 8 Oct 2010 21:41:09 +0200 Subject: [PATCH 16/45] Fixed autopilot/Predictor. Signature of Predictor::configure must match AnalogComponent::configure, otherwise the inherited method isn't overridden. => predictor couldn't be configured. => speed predictor rules in "generic-autopilot-helper.xml" weren't working. --- src/Autopilot/predictor.cxx | 11 ++++++++++- src/Autopilot/predictor.hxx | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Autopilot/predictor.cxx b/src/Autopilot/predictor.cxx index fe16d14db..eece5cf37 100644 --- a/src/Autopilot/predictor.cxx +++ b/src/Autopilot/predictor.cxx @@ -40,9 +40,18 @@ Predictor::Predictor () : { } -bool Predictor::configure(const string& nodeName, SGPropertyNode* configNode) +bool Predictor::configure(const string& nodeName, SGPropertyNode_ptr configNode) { SG_LOG( SG_AUTOPILOT, SG_BULK, "Predictor::configure(" << nodeName << ")" << endl ); + + if( AnalogComponent::configure( nodeName, configNode ) ) + return true; + + if( nodeName == "config" ) { + Component::configure( configNode ); + return true; + } + if (nodeName == "seconds") { _seconds.push_back( new InputValue( configNode, 0 ) ); return true; diff --git a/src/Autopilot/predictor.hxx b/src/Autopilot/predictor.hxx index 5418b337f..e4c21b514 100644 --- a/src/Autopilot/predictor.hxx +++ b/src/Autopilot/predictor.hxx @@ -53,7 +53,7 @@ private: InputValueList _filter_gain; protected: - bool configure(const std::string& nodeName, SGPropertyNode* configNode ); + bool configure(const std::string& nodeName, SGPropertyNode_ptr configNode ); public: Predictor(); From f901dac2ac598e68e55e0a53de419f173c19bfc6 Mon Sep 17 00:00:00 2001 From: Tim Moore <timoore33@gmail.com> Date: Fri, 8 Oct 2010 23:46:38 +0200 Subject: [PATCH 17/45] replace GLU functions with OSG functionality --- src/Cockpit/hud.cxx | 21 +++++++++++++-------- src/Cockpit/hud_rwy.cxx | 14 ++++++++------ src/Cockpit/panel.cxx | 9 ++++++--- src/Instrumentation/HUD/HUD.cxx | 19 ++++++++++++------- src/Instrumentation/HUD/HUD_runway.cxx | 13 ++++++++----- utils/Modeller/texture.cxx | 7 ++++--- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/src/Cockpit/hud.cxx b/src/Cockpit/hud.cxx index 57c2264e8..c08e67d0e 100644 --- a/src/Cockpit/hud.cxx +++ b/src/Cockpit/hud.cxx @@ -40,7 +40,7 @@ #include <simgear/misc/sg_path.hxx> #include <simgear/props/props_io.hxx> -#include <osg/GLU> +#include <osg/Matrixf> #include <GUI/new_gui.hxx> // FGFontCache #include <Main/globals.hxx> @@ -338,27 +338,31 @@ void fgUpdateHUD( osg::State* state ) { void fgUpdateHUDVirtual(osg::State* state) { + using namespace osg; FGViewer* view = globals->get_current_view(); // Standard fgfs projection, with essentially meaningless clip // planes (we'll map the whole HUD plane to z=-1) glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); - gluPerspective(view->get_v_fov(), 1/view->get_aspect_ratio(), 0.1, 10); + Matrixf proj + = Matrixf::perspective(view->get_v_fov(), 1/view->get_aspect_ratio(), + 0.1, 10); + glLoadMatrix(proj.ptr()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); - glLoadIdentity(); // Standard fgfs view direction computation - float lookat[3]; + Vec3f lookat; lookat[0] = -sin(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg()); lookat[1] = tan(SG_DEGREES_TO_RADIANS * view->getPitchOffset_deg()); lookat[2] = -cos(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg()); if (fabs(lookat[1]) > 9999) lookat[1] = 9999; // FPU sanity - gluLookAt(0, 0, 0, lookat[0], lookat[1], lookat[2], 0, 1, 0); + Matrixf mv = Matrixf::lookAt(Vec3f(0.0, 0.0, 0.0), lookat, + Vec3f(0.0, 1.0, 0.0)); + glLoadMatrix(mv.ptr()); // Map the -1:1 square to a 55.0x41.25 degree wide patch at z=1. // This is the default fgfs field of view, which the HUD files are @@ -391,10 +395,11 @@ void fgUpdateHUDVirtual(osg::State* state) void fgUpdateHUD( osg::State* state, GLfloat x_start, GLfloat y_start, GLfloat x_end, GLfloat y_end ) { + using namespace osg; glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(x_start, x_end, y_start, y_end); + Matrixf proj = Matrixf::ortho2D(x_start, x_end, y_start, y_end); + glLoadMatrix(proj.ptr()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); diff --git a/src/Cockpit/hud_rwy.cxx b/src/Cockpit/hud_rwy.cxx index 2be152523..e884c7cfb 100644 --- a/src/Cockpit/hud_rwy.cxx +++ b/src/Cockpit/hud_rwy.cxx @@ -32,8 +32,7 @@ #include <ATCDCL/ATCutils.hxx> #include <Main/viewer.hxx> -#include <osg/GLU> - +#include <simgear/math/project.hxx> // int x, int y, int width, int height, float scale_data, bool working) @@ -134,8 +133,9 @@ void runway_instr::draw() //Calculate the 2D points via gluProject int result = GL_TRUE; for (int i = 0; i < 6; i++) { - result = gluProject(points3d[i][0], points3d[i][1], points3d[i][2], mm, - pm, view, &points2d[i][0], &points2d[i][1], &points2d[i][2]); + result = simgear::project(points3d[i][0], points3d[i][1], points3d[i][2], + mm, pm, view, + &points2d[i][0], &points2d[i][1], &points2d[i][2]); } //set the line width based on our distance from the runway setLineWidth(); @@ -239,7 +239,8 @@ bool runway_instr::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& sgdVec3 newPt; sgdCopyVec3(newPt, a1); sgdAddVec3(newPt, vec); - if (gluProject(newPt[0], newPt[1], newPt[2], mm, pm, view, &p2[0], &p2[1], &p2[2]) + if (simgear::project(newPt[0], newPt[1], newPt[2], mm, pm, view, + &p2[0], &p2[1], &p2[2]) && (p2[2] > 0 && p2[2] < 1.0)) { boundPoint(p1, p2); glBegin(GL_LINES); @@ -255,7 +256,8 @@ bool runway_instr::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& sgdVec3 newPt; sgdCopyVec3(newPt, a2); sgdAddVec3(newPt, vec); - if (gluProject(newPt[0], newPt[1], newPt[2], mm, pm, view, &p1[0], &p1[1], &p1[2]) + if (simgear::project(newPt[0], newPt[1], newPt[2], mm, pm, view, + &p1[0], &p1[1], &p1[2]) && (p1[2] > 0 && p1[2] < 1.0)) { boundPoint(p2, p1); glBegin(GL_LINES); diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx index 9c39626ee..8cc268788 100644 --- a/src/Cockpit/panel.cxx +++ b/src/Cockpit/panel.cxx @@ -40,6 +40,7 @@ #include <osg/CullFace> #include <osg/Depth> #include <osg/Material> +#include <osg/Matrixf> #include <osg/TexEnv> #include <osg/PolygonOffset> @@ -273,6 +274,7 @@ FGPanel::update (double dt) void FGPanel::update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GLfloat winh) { + using namespace osg; // Calculate accelerations // and jiggle the panel accordingly // The factors and bounds are just @@ -284,12 +286,13 @@ FGPanel::update (osg::State& state, GLfloat winx, GLfloat winw, GLfloat winy, GL glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); + Matrixf proj; if ( _flipx->getBoolValue() ) { - gluOrtho2D(winx + winw, winx, winy + winh, winy); /* up side down */ + proj = Matrixf::ortho2D(winx + winw, winx, winy + winh, winy); /* up side down */ } else { - gluOrtho2D(winx, winx + winw, winy, winy + winh); /* right side up */ + proj = Matrixf::ortho2D(winx, winx + winw, winy, winy + winh); /* right side up */ } + glLoadMatrix(proj.ptr()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx index d37f28a3d..4ea539db3 100644 --- a/src/Instrumentation/HUD/HUD.cxx +++ b/src/Instrumentation/HUD/HUD.cxx @@ -186,27 +186,31 @@ void HUD::draw(osg::State&) void HUD::draw3D() { + using namespace osg; FGViewer* view = globals->get_current_view(); // Standard fgfs projection, with essentially meaningless clip // planes (we'll map the whole HUD plane to z=-1) glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); - gluPerspective(view->get_v_fov(), 1.0 / view->get_aspect_ratio(), 0.1, 10); + Matrixf proj + = Matrixf::perspective(view->get_v_fov(), 1/view->get_aspect_ratio(), + 0.1, 10); + glLoadMatrix(proj.ptr()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); - glLoadIdentity(); // Standard fgfs view direction computation - float lookat[3]; + Vec3f lookat; lookat[0] = -sin(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg()); lookat[1] = tan(SG_DEGREES_TO_RADIANS * view->getPitchOffset_deg()); lookat[2] = -cos(SG_DEGREES_TO_RADIANS * view->getHeadingOffset_deg()); if (fabs(lookat[1]) > 9999) lookat[1] = 9999; // FPU sanity - gluLookAt(0, 0, 0, lookat[0], lookat[1], lookat[2], 0, 1, 0); + Matrixf mv = Matrixf::lookAt(Vec3f(0.0, 0.0, 0.0), lookat, + Vec3f(0.0, 1.0, 0.0)); + glLoadMatrix(mv.ptr()); // Map the -1:1 square to a 55.0x41.25 degree wide patch at z=1. // This is the default fgfs field of view, which the HUD files are @@ -236,10 +240,11 @@ void HUD::draw3D() void HUD::draw2D(GLfloat x_start, GLfloat y_start, GLfloat x_end, GLfloat y_end) { + using namespace osg; glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(x_start, x_end, y_start, y_end); + Matrixf proj = Matrixf::ortho2D(x_start, x_end, y_start, y_end); + glLoadMatrix(proj.ptr()); glMatrixMode(GL_MODELVIEW); glPushMatrix(); diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx index 450f118a3..a31d0ff60 100644 --- a/src/Instrumentation/HUD/HUD_runway.cxx +++ b/src/Instrumentation/HUD/HUD_runway.cxx @@ -25,7 +25,7 @@ #include <simgear/compiler.h> #include <simgear/math/sg_geodesy.hxx> -#include <osg/GLU> +#include <simgear/math/project.hxx> #include <Main/globals.hxx> #include <Scenery/scenery.hxx> @@ -129,8 +129,9 @@ void HUD::Runway::draw() //Calculate the 2D points via gluProject int result = GL_TRUE; for (int i = 0; i < 6; i++) { - result = gluProject(_points3d[i][0], _points3d[i][1], _points3d[i][2], _mm, - _pm, _view, &_points2d[i][0], &_points2d[i][1], &_points2d[i][2]); + result = simgear::project(_points3d[i][0], _points3d[i][1], _points3d[i][2], + _mm, _pm, _view, + &_points2d[i][0], &_points2d[i][1], &_points2d[i][2]); } //set the line width based on our distance from the runway setLineWidth(); @@ -229,7 +230,8 @@ bool HUD::Runway::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& sgdVec3 newPt; sgdCopyVec3(newPt, a1); sgdAddVec3(newPt, vec); - if (gluProject(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, &p2[0], &p2[1], &p2[2]) + if (simgear::project(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, + &p2[0], &p2[1], &p2[2]) && (p2[2] > 0 && p2[2] < 1.0)) { boundPoint(p1, p2); glBegin(GL_LINES); @@ -245,7 +247,8 @@ bool HUD::Runway::drawLine(const sgdVec3& a1, const sgdVec3& a2, const sgdVec3& sgdVec3 newPt; sgdCopyVec3(newPt, a2); sgdAddVec3(newPt, vec); - if (gluProject(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, &p1[0], &p1[1], &p1[2]) + if (simgear::project(newPt[0], newPt[1], newPt[2], _mm, _pm, _view, + &p1[0], &p1[1], &p1[2]) && (p1[2] > 0 && p1[2] < 1.0)) { boundPoint(p2, p1); glBegin(GL_LINES); diff --git a/utils/Modeller/texture.cxx b/utils/Modeller/texture.cxx index 3c747e60c..75c720a25 100644 --- a/utils/Modeller/texture.cxx +++ b/utils/Modeller/texture.cxx @@ -17,7 +17,7 @@ # include <windows.h> #endif -#include <osg/GLU> +#include <osg/Matrixf> #include <math.h> #include <zlib.h> @@ -95,6 +95,7 @@ SGTexture::bind() void SGTexture::resize(unsigned int width, unsigned int height) { + using namespace osg; GLfloat aspect; // Make sure that we don't get a divide by zero exception @@ -110,10 +111,10 @@ SGTexture::resize(unsigned int width, unsigned int height) // Go to the projection matrix, this gets modified by the perspective // calulations glMatrixMode(GL_PROJECTION); - glLoadIdentity(); // Do the perspective calculations - gluPerspective(45.0, aspect, 1.0, 400.0); + Matrixf proj = Matrixf::perspective(45.0, aspect, 1.0, 400.0); + glLoadMatrix(proj.ptr()); // Return to the modelview matrix glMatrixMode(GL_MODELVIEW); From 06fb956f2c506f4468860e8eca9eccd09127961a Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <Torsten@t3r.de> Date: Mon, 11 Oct 2010 21:21:53 +0200 Subject: [PATCH 18/45] Fix timing issue on startup for auto runway selection The automatic runway selection code in startup.nas depends on a valid metar before /sim/signals/nasal-dir-initialized is fired. If the METAR arrives after that signal, no automatic runway selection is performed. This patch waits for a METAR on the first update() loop of the subsystem. --- src/Environment/realwx_ctrl.cxx | 131 +++++++++++++++++++------------- 1 file changed, 80 insertions(+), 51 deletions(-) diff --git a/src/Environment/realwx_ctrl.cxx b/src/Environment/realwx_ctrl.cxx index 4b379a657..4631b0c52 100644 --- a/src/Environment/realwx_ctrl.cxx +++ b/src/Environment/realwx_ctrl.cxx @@ -55,6 +55,9 @@ public: protected: void bind(); void unbind(); + void update( double dt ); + + virtual void update( bool first, double dt ) = 0; long getMetarMaxAgeMin() const { return _max_age_n == NULL ? 0 : _max_age_n->getLongValue(); } @@ -65,6 +68,7 @@ protected: SGPropertyNode_ptr _max_age_n; bool _enabled; + bool __enabled; TiedPropertyList _tiedProperties; MetarProperties _metarProperties; }; @@ -83,6 +87,7 @@ BasicRealWxController::BasicRealWxController( SGPropertyNode_ptr rootNode ) : _ground_elevation_n( fgGetNode( "/position/ground-elev-m", true )), _max_age_n( fgGetNode( "/environment/params/metar-max-age-min", false ) ), _enabled(true), + __enabled(false), _metarProperties( fgGetNode( rootNode->getStringValue("metar", "/environment/metar"), true ) ) { } @@ -93,11 +98,13 @@ BasicRealWxController::~BasicRealWxController() void BasicRealWxController::init() { + __enabled = false; update(0); // fetch data ASAP } void BasicRealWxController::reinit() { + __enabled = false; } void BasicRealWxController::bind() @@ -111,13 +118,23 @@ void BasicRealWxController::unbind() _tiedProperties.Untie(); } +void BasicRealWxController::update( double dt ) +{ + if( _enabled ) { + update( !__enabled, dt ); + __enabled = true; + } else { + __enabled = false; + } +} + /* -------------------------------------------------------------------------------- */ class NoaaMetarRealWxController : public BasicRealWxController { public: NoaaMetarRealWxController( SGPropertyNode_ptr rootNode ); virtual ~NoaaMetarRealWxController(); - virtual void update (double delta_time_sec); + virtual void update (bool first, double delta_time_sec); class MetarLoadRequest { public: @@ -146,12 +163,13 @@ private: #if defined(ENABLE_THREADS) class MetarLoadThread : public OpenThreads::Thread { public: - MetarLoadThread( long maxAge ); - void requestMetar( const MetarLoadRequest & metarRequest ); - bool hasMetar() { return _responseQueue.size() > 0; } - string getMetar() { return _responseQueue.pop(); } - virtual void run(); + MetarLoadThread( long maxAge ); + void requestMetar( const MetarLoadRequest & metarRequest, bool background = true ); + bool hasMetar() { return _responseQueue.size() > 0; } + string getMetar() { return _responseQueue.pop(); } + virtual void run(); private: + void fetch( const MetarLoadRequest & ); long _maxAge; SGBlockingQueue <MetarLoadRequest> _requestQueue; SGBlockingQueue <string> _responseQueue; @@ -188,17 +206,8 @@ NoaaMetarRealWxController::~NoaaMetarRealWxController() #endif // ENABLE_THREADS } -void NoaaMetarRealWxController::update( double dt ) +void NoaaMetarRealWxController::update( bool first, double dt ) { - if( !_enabled ) - return; - - if( _metarLoadThread->hasMetar() ) { - string metar = _metarLoadThread->getMetar(); - SG_LOG( SG_ALL, SG_ALERT, "NoaaMetarRwalWxController::update() received METAR " << metar ); - _metarDataNode->setStringValue( metar ); - } - _metarTimeToLive -= dt; _positionTimeToLive -= dt; _minimumRequestInterval -= dt; @@ -234,11 +243,21 @@ void NoaaMetarRealWxController::update( double dt ) if( !valid ) { if( _minimumRequestInterval <= 0 && stationId.length() > 0 ) { MetarLoadRequest request( stationId ); - _metarLoadThread->requestMetar( request ); + // load the first metar in the foreground to make sure a metar is received + // before the automatic runway selection code runs. All subsequent calls + // run in the background + _metarLoadThread->requestMetar( request, !first ); _minimumRequestInterval = 10; } } + if( _metarLoadThread->hasMetar() ) { + string metar = _metarLoadThread->getMetar(); + SG_LOG( SG_ALL, SG_ALERT, "NoaaMetarRwalWxController::update() received METAR " << metar ); + _metarDataNode->setStringValue( metar ); + } + + } /* -------------------------------------------------------------------------------- */ @@ -249,16 +268,20 @@ NoaaMetarRealWxController::MetarLoadThread::MetarLoadThread( long maxAge ) : { } -void NoaaMetarRealWxController::MetarLoadThread::requestMetar( const MetarLoadRequest & metarRequest ) +void NoaaMetarRealWxController::MetarLoadThread::requestMetar( const MetarLoadRequest & metarRequest, bool background ) { - if( _requestQueue.size() > 10 ) { - SG_LOG(SG_ALL,SG_ALERT, - "NoaaMetarRealWxController::MetarLoadThread::requestMetar() more than 10 outstanding METAR requests, dropping " - << metarRequest._stationId ); - return; - } + if( background ) { + if( _requestQueue.size() > 10 ) { + SG_LOG(SG_ALL,SG_ALERT, + "NoaaMetarRealWxController::MetarLoadThread::requestMetar() more than 10 outstanding METAR requests, dropping " + << metarRequest._stationId ); + return; + } - _requestQueue.push( metarRequest ); + _requestQueue.push( metarRequest ); + } else { + fetch( metarRequest ); + } } void NoaaMetarRealWxController::MetarLoadThread::run() @@ -269,34 +292,40 @@ void NoaaMetarRealWxController::MetarLoadThread::run() if( request._stationId.size() == 0 ) break; - SGSharedPtr<FGMetar> result = NULL; - - try { - result = new FGMetar( request._stationId, request._proxyHost, request._proxyPort, request._proxyAuth ); - } catch (const sg_io_exception& e) { - SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): can't get METAR for " - << request._stationId << ":" << e.getFormattedMessage().c_str() ); - continue; - } - - string reply = result->getData(); - std::replace(reply.begin(), reply.end(), '\n', ' '); - string metar = simgear::strutils::strip( reply ); - - if( metar.empty() ) { - SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): dropping empty METAR for " - << request._stationId ); - } - - if( _maxAge && result->getAge_min() > _maxAge ) { - SG_LOG( SG_GENERAL, SG_ALERT, "NoaaMetarRealWxController::fetchMetar(): dropping outdated METAR " - << metar ); - return; - } - - _responseQueue.push( metar ); + fetch( request ); } } + +void NoaaMetarRealWxController::MetarLoadThread::fetch( const MetarLoadRequest & request ) +{ + SGSharedPtr<FGMetar> result = NULL; + + try { + result = new FGMetar( request._stationId, request._proxyHost, request._proxyPort, request._proxyAuth ); + } catch (const sg_io_exception& e) { + SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): can't get METAR for " + << request._stationId << ":" << e.getFormattedMessage().c_str() ); + return; + } + + string reply = result->getData(); + std::replace(reply.begin(), reply.end(), '\n', ' '); + string metar = simgear::strutils::strip( reply ); + + if( metar.empty() ) { + SG_LOG( SG_GENERAL, SG_WARN, "NoaaMetarRealWxController::fetchMetar(): dropping empty METAR for " + << request._stationId ); + return; + } + + if( _maxAge && result->getAge_min() > _maxAge ) { + SG_LOG( SG_GENERAL, SG_ALERT, "NoaaMetarRealWxController::fetchMetar(): dropping outdated METAR " + << metar ); + return; + } + + _responseQueue.push( metar ); +} #endif /* -------------------------------------------------------------------------------- */ From 9f9e86a61e1313963c9b961ed390cee3e967c659 Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <Torsten@t3r.de> Date: Tue, 12 Oct 2010 15:26:00 +0200 Subject: [PATCH 19/45] remove leftover debugging stuff --- src/Autopilot/predictor.cxx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/Autopilot/predictor.cxx b/src/Autopilot/predictor.cxx index eece5cf37..e1a9f6dc8 100644 --- a/src/Autopilot/predictor.cxx +++ b/src/Autopilot/predictor.cxx @@ -23,15 +23,6 @@ #include "predictor.hxx" -#ifdef SG_BULK -#undef SG_BULK -#endif -#define SG_BULK SG_ALERT -#ifdef SG_INFO -#undef SG_INFO -#endif -#define SG_INFO SG_ALERT - using namespace FGXMLAutopilot; Predictor::Predictor () : From 6251814604a2395d66dc28fbe0cde8ce99e7be2c Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Mon, 18 Oct 2010 00:58:35 +0100 Subject: [PATCH 20/45] Use a property listener on the root, to observe property creation, and thus lazily update the MP property map. Fixes bug 164, and probably many latent MP missing-property issues. --- src/Network/multiplay.cxx | 65 +++++++++++++++++++++++++++++++-------- src/Network/multiplay.hxx | 8 +++++ 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx index eb8a52c08..e7991e6b8 100644 --- a/src/Network/multiplay.cxx +++ b/src/Network/multiplay.cxx @@ -49,6 +49,24 @@ using std::string; const char sFG_MULTIPLAY_BID[] = "$Id$"; const char sFG_MULTIPLAY_HID[] = FG_MULTIPLAY_HID; +typedef std::set<std::string> string_set; + +class MPPropertyListener : public SGPropertyChangeListener +{ +public: + MPPropertyListener(FGMultiplay* mp) : + _multiplay(mp) + { + } + + virtual void childAdded(SGPropertyNode*, SGPropertyNode*) + { + _multiplay->setPropertiesChanged(); + } + +private: + FGMultiplay* _multiplay; +}; /****************************************************************** * Name: FGMultiplay @@ -73,6 +91,7 @@ FGMultiplay::FGMultiplay (const string &dir, const int rate, const string &host, } + mPropertiesChanged = true; } @@ -97,19 +116,38 @@ bool FGMultiplay::open() { } set_enabled(true); - - SGPropertyNode* root = globals->get_props(); - - /// Build up the id to property map - for (unsigned i = 0; i < FGMultiplayMgr::numProperties; ++i) { + mPropertiesChanged = true; + + MPPropertyListener* pl = new MPPropertyListener(this); + globals->get_props()->addChangeListener(pl, false); + return is_enabled(); +} + +void FGMultiplay::findProperties() +{ + if (!mPropertiesChanged) { + return; + } + + mPropertiesChanged = false; + + for (unsigned i = 0; i < FGMultiplayMgr::numProperties; ++i) { const char* name = FGMultiplayMgr::sIdPropertyList[i].name; - SGPropertyNode* pNode = root->getNode(name); - if (pNode) - mPropertyMap[FGMultiplayMgr::sIdPropertyList[i].id] = pNode; + SGPropertyNode* pNode = globals->get_props()->getNode(name); + if (!pNode) { + continue; + } + + int id = FGMultiplayMgr::sIdPropertyList[i].id; + if (mPropertyMap.find(id) != mPropertyMap.end()) { + continue; // already activated + } + + mPropertyMap[id] = pNode; + SG_LOG(SG_NETWORK, SG_INFO, "activating MP property:" << pNode->getPath()); } - return is_enabled(); } @@ -121,7 +159,8 @@ bool FGMultiplay::open() { bool FGMultiplay::process() { using namespace simgear; if (get_direction() == SG_IO_OUT) { - + findProperties(); + // check if we have left initialization phase. That will not provide // interresting data, also the freeze in simulation time hurts the // multiplayer clients @@ -270,8 +309,10 @@ bool FGMultiplay::process() { * Description: Closes the multiplayer mgrs to stop any further * network processing ******************************************************************/ -bool FGMultiplay::close() { - +bool FGMultiplay::close() +{ + mPropertyMap.clear(); + FGMultiplayMgr* mgr = (FGMultiplayMgr*) globals->get_subsystem("mp"); if (mgr == 0) { diff --git a/src/Network/multiplay.hxx b/src/Network/multiplay.hxx index 0d5563c0e..f596ea0eb 100644 --- a/src/Network/multiplay.hxx +++ b/src/Network/multiplay.hxx @@ -78,7 +78,15 @@ public: */ bool close(); + void setPropertiesChanged() + { + mPropertiesChanged = true; + } private: + bool mPropertiesChanged; + + void findProperties(); + // Map between the property id's from the multiplayers network packets // and the property nodes typedef std::map<unsigned, SGSharedPtr<SGPropertyNode> > PropertyMap; From 0d7769ae724986397205fbe9bf188f4bb5d49386 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 20 Oct 2010 00:07:54 +0100 Subject: [PATCH 21/45] Search aircraft dirs when loading AI models. Thanks to Thorsten Brehm for the catch. --- src/AIModel/AIBase.cxx | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/AIModel/AIBase.cxx b/src/AIModel/AIBase.cxx index 8a073eb6d..514c6abb0 100644 --- a/src/AIModel/AIBase.cxx +++ b/src/AIModel/AIBase.cxx @@ -194,18 +194,27 @@ void FGAIBase::Transform() { } bool FGAIBase::init(bool search_in_AI_path) { - osg::ref_ptr<osgDB::ReaderWriter::Options> opt= - new osgDB::ReaderWriter::Options(*osgDB::Registry::instance()->getOptions()); - + + string f; if(search_in_AI_path) { - SGPath ai_path(globals->get_fg_root()); - ai_path.append("AI"); - opt->getDatabasePathList().push_front(ai_path.str()); + // setup a modified Options strucutre, with only the $fg-root/AI defined; + // we'll check that first, then give the normal search logic a chance. + // this ensures that models in AI/ are preferred to normal models, where + // both exist. + osg::ref_ptr<osgDB::ReaderWriter::Options> + opt(osg::clone(osgDB::Registry::instance()->getOptions(), osg::CopyOp::SHALLOW_COPY)); + + SGPath ai_path(globals->get_fg_root(), "AI"); + opt->setDatabasePath(ai_path.str()); + + f = osgDB::findDataFile(model_path, opt.get()); } - string f = osgDB::findDataFile(model_path, opt.get()); - + if (f.empty()) { + f = simgear::SGModelLib::findDataFile(model_path); + } + if(f.empty()) f = fgGetString("/sim/multiplay/default-model", default_model); From dd2eec7bd885e4219d326eca27138ad2d9043da3 Mon Sep 17 00:00:00 2001 From: James Turner <jmt@James-Turners-MacBook-Pro.local> Date: Sun, 11 Oct 2009 12:37:13 +0100 Subject: [PATCH 22/45] Airways/procedures code - add new data structures to store waypoints and procedures, and routing algorithms, and modify the GPS, route manager and WaypointList to use the new objects. --- src/Airports/runways.cxx | 30 + src/Airports/runways.hxx | 15 + src/Airports/simple.cxx | 243 +++ src/Airports/simple.hxx | 65 + src/Autopilot/route_mgr.cxx | 1333 +++++++++++------ src/Autopilot/route_mgr.hxx | 171 ++- src/GUI/MapWidget.cxx | 81 +- src/GUI/WaypointList.cxx | 218 ++- src/GUI/WaypointList.hxx | 16 +- src/GUI/dialog.cxx | 33 + src/GUI/dialog.hxx | 10 +- src/Instrumentation/Makefile.am | 3 +- src/Instrumentation/gps.cxx | 434 +++--- src/Instrumentation/gps.hxx | 29 +- src/Instrumentation/rnav_waypt_controller.cxx | 697 +++++++++ src/Instrumentation/rnav_waypt_controller.hxx | 193 +++ src/Instrumentation/testgps.cxx | 130 +- src/Main/fg_init.cxx | 8 +- src/Navaids/Makefile.am | 8 +- src/Navaids/airways.cxx | 454 ++++++ src/Navaids/airways.hxx | 134 ++ src/Navaids/positioned.cxx | 27 +- src/Navaids/positioned.hxx | 6 +- src/Navaids/procedure.cxx | 333 ++++ src/Navaids/procedure.hxx | 212 +++ src/Navaids/route.cxx | 679 +++++++++ src/Navaids/route.hxx | 208 +++ src/Navaids/routePath.cxx | 346 +++++ src/Navaids/routePath.hxx | 69 + src/Navaids/testnavs.cxx | 18 + src/Navaids/waypoint.cxx | 471 ++++++ src/Navaids/waypoint.hxx | 314 ++++ src/Scripting/NasalSys.cxx | 23 + 33 files changed, 6136 insertions(+), 875 deletions(-) create mode 100644 src/Instrumentation/rnav_waypt_controller.cxx create mode 100644 src/Instrumentation/rnav_waypt_controller.hxx create mode 100644 src/Navaids/airways.cxx create mode 100644 src/Navaids/airways.hxx create mode 100644 src/Navaids/procedure.cxx create mode 100644 src/Navaids/procedure.hxx create mode 100644 src/Navaids/route.cxx create mode 100644 src/Navaids/route.hxx create mode 100644 src/Navaids/routePath.cxx create mode 100644 src/Navaids/routePath.hxx create mode 100644 src/Navaids/waypoint.cxx create mode 100644 src/Navaids/waypoint.hxx diff --git a/src/Airports/runways.cxx b/src/Airports/runways.cxx index 27caa4f6d..c3e48ecbb 100644 --- a/src/Airports/runways.cxx +++ b/src/Airports/runways.cxx @@ -37,6 +37,9 @@ #include "runways.hxx" +#include <Airports/simple.hxx> +#include <Navaids/procedure.hxx> + using std::string; static std::string cleanRunwayNo(const std::string& aRwyNo) @@ -168,3 +171,30 @@ void FGRunway::setReciprocalRunway(FGRunway* other) _reciprocal = other; } +std::vector<flightgear::SID*> FGRunway::getSIDs() +{ + std::vector<flightgear::SID*> result; + for (unsigned int i=0; i<_airport->numSIDs(); ++i) { + flightgear::SID* s = _airport->getSIDByIndex(i); + if (s->isForRunway(this)) { + result.push_back(s); + } + } // of SIDs at the airport iteration + + return result; +} + +std::vector<flightgear::STAR*> FGRunway::getSTARs() +{ + std::vector<flightgear::STAR*> result; + for (unsigned int i=0; i<_airport->numSTARs(); ++i) { + flightgear::STAR* s = _airport->getSTARByIndex(i); + if (s->isForRunway(this)) { + result.push_back(s); + } + } // of STARs at the airport iteration + + return result; +} + + diff --git a/src/Airports/runways.hxx b/src/Airports/runways.hxx index e6f97ea95..1c5ab85b1 100644 --- a/src/Airports/runways.hxx +++ b/src/Airports/runways.hxx @@ -33,6 +33,11 @@ class FGAirport; class FGNavRecord; class SGPropertyNode; +namespace flightgear { + class SID; + class STAR; +} + class FGRunway : public FGRunwayBase { FGAirport* _airport; @@ -115,6 +120,16 @@ public: * Helper to process property data loaded from an ICAO.threshold.xml file */ void processThreshold(SGPropertyNode* aThreshold); + + /** + * Get SIDs (DPs) associated with this runway + */ + std::vector<flightgear::SID*> getSIDs(); + + /** + * Get STARs associared with this runway + */ + std::vector<flightgear::STAR*> getSTARs(); }; #endif // _FG_RUNWAYS_HXX diff --git a/src/Airports/simple.cxx b/src/Airports/simple.cxx index a418bd414..f563cf1d0 100644 --- a/src/Airports/simple.cxx +++ b/src/Airports/simple.cxx @@ -45,6 +45,11 @@ #include <Airports/pavement.hxx> #include <Airports/dynamics.hxx> #include <Airports/xmlloader.hxx> +#include <Navaids/procedure.hxx> +#include <Navaids/waypoint.hxx> + +using std::vector; +using namespace flightgear; // magic import of a helper which uses FGPositioned internals extern char** searchAirportNamesAndIdents(const std::string& aFilter); @@ -187,6 +192,30 @@ FGRunway* FGAirport::findBestRunwayForHeading(double aHeading) const return result; } +FGRunway* FGAirport::findBestRunwayForPos(const SGGeod& aPos) const +{ + loadRunways(); + + Runway_iterator it = mRunways.begin(); + FGRunway* result = NULL; + double currentLowestDev = 180.0; + + for (; it != mRunways.end(); ++it) { + double inboundCourse = SGGeodesy::courseDeg(aPos, (*it)->end()); + double dev = inboundCourse - (*it)->headingDeg(); + SG_NORMALIZE_RANGE(dev, -180.0, 180.0); + + dev = fabs(dev); + if (dev < currentLowestDev) { // new best match + currentLowestDev = dev; + result = *it; + } + } // of runway iteration + + return result; + +} + bool FGAirport::hasHardRunwayOfLengthFt(double aLengthFt) const { loadRunways(); @@ -350,6 +379,23 @@ void FGAirport::loadTaxiways() const } } +void FGAirport::loadProcedures() const +{ + if (mProceduresLoaded) { + return; + } + + mProceduresLoaded = true; + SGPath path; + if (!XMLLoader::findAirportData(ident(), "procedures", path)) { + SG_LOG(SG_GENERAL, SG_INFO, "no procedures data available for " << ident()); + return; + } + + SG_LOG(SG_GENERAL, SG_INFO, ident() << ": loading procedures from " << path.str()); + Route::loadAirportProcedures(path, const_cast<FGAirport*>(this)); +} + void FGAirport::loadSceneryDefintions() const { // allow users to disable the scenery data in the short-term @@ -412,6 +458,203 @@ void FGAirport::readTowerData(SGPropertyNode* aRoot) _tower_location = SGGeod::fromDegM(lon, lat, elevM); } +bool FGAirport::buildApproach(Waypt* aEnroute, STAR* aSTAR, FGRunway* aRwy, WayptVec& aRoute) +{ + loadProcedures(); + + if ((aRwy && (aRwy->airport() != this))) { + throw sg_exception("invalid parameters", "FGAirport::buildApproach"); + } + + if (aSTAR) { + bool ok = aSTAR->route(aRwy, aEnroute, aRoute); + if (!ok) { + SG_LOG(SG_GENERAL, SG_WARN, ident() << ": build approach, STAR " << aSTAR->ident() + << " failed to route from transition " << aEnroute->ident()); + return false; + } + } else if (aEnroute) { + // no a STAR specified, just use enroute point directly + aRoute.push_back(aEnroute); + } + + if (!aRwy) { + // no runway selected yet, but we loaded the STAR, so that's fine, we're done + return true; + } + +// build the approach (possibly including transition), and including the missed segment + vector<Approach*> aps; + for (unsigned int j=0; j<mApproaches.size();++j) { + if (mApproaches[j]->runway() == aRwy) { + aps.push_back(mApproaches[j]); + } + } // of approach filter by runway + + if (aps.empty()) { + SG_LOG(SG_GENERAL, SG_INFO, ident() << "; no approaches defined for runway " << aRwy->ident()); + // could build a fallback approach here + return false; + } + + for (unsigned int k=0; k<aps.size(); ++k) { + if (aps[k]->route(aRoute.back(), aRoute)) { + return true; + } + } // of initial approach iteration + + SG_LOG(SG_GENERAL, SG_INFO, ident() << ": unable to find transition to runway " + << aRwy->ident() << ", assume vectors"); + + WayptRef v(new ATCVectors(NULL, this)); + aRoute.push_back(v); + return aps.front()->routeFromVectors(aRoute); +} + +pair<SID*, WayptRef> +FGAirport::selectSID(const SGGeod& aDest, FGRunway* aRwy) +{ + loadProcedures(); + + WayptRef enroute; + SID* sid = NULL; + double d = 1e9; + + for (unsigned int i=0; i<mSIDs.size(); ++i) { + if (aRwy && !mSIDs[i]->isForRunway(aRwy)) { + continue; + } + + WayptRef e = mSIDs[i]->findBestTransition(aDest); + if (!e) { + continue; // strange, but let's not worry about it + } + + // assert(e->isFixedPosition()); + double ed = SGGeodesy::distanceM(aDest, e->position()); + if (ed < d) { // new best match + enroute = e; + d = ed; + sid = mSIDs[i]; + } + } // of SID iteration + + if (!mSIDs.empty() && !sid) { + SG_LOG(SG_GENERAL, SG_INFO, ident() << "selectSID, no SID found (runway=" + << (aRwy ? aRwy->ident() : "no runway preference")); + } + + return make_pair(sid, enroute); +} + +pair<STAR*, WayptRef> +FGAirport::selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy) +{ + loadProcedures(); + + WayptRef enroute; + STAR* star = NULL; + double d = 1e9; + + for (unsigned int i=0; i<mSTARs.size(); ++i) { + if (!mSTARs[i]->isForRunway(aRwy)) { + continue; + } + + SG_LOG(SG_GENERAL, SG_INFO, "STAR " << mSTARs[i]->ident() << " is valid for runway"); + WayptRef e = mSTARs[i]->findBestTransition(aOrigin); + if (!e) { + continue; // strange, but let's not worry about it + } + + // assert(e->isFixedPosition()); + double ed = SGGeodesy::distanceM(aOrigin, e->position()); + if (ed < d) { // new best match + enroute = e; + d = ed; + star = mSTARs[i]; + } + } // of STAR iteration + + return make_pair(star, enroute); +} + + +void FGAirport::addSID(SID* aSid) +{ + mSIDs.push_back(aSid); +} + +void FGAirport::addSTAR(STAR* aStar) +{ + mSTARs.push_back(aStar); +} + +void FGAirport::addApproach(Approach* aApp) +{ + mApproaches.push_back(aApp); +} + +unsigned int FGAirport::numSIDs() const +{ + loadProcedures(); + return mSIDs.size(); +} + +SID* FGAirport::getSIDByIndex(unsigned int aIndex) const +{ + loadProcedures(); + return mSIDs[aIndex]; +} + +SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const +{ + loadProcedures(); + for (unsigned int i=0; i<mSIDs.size(); ++i) { + if (mSIDs[i]->ident() == aIdent) { + return mSIDs[i]; + } + } + + return NULL; +} + +unsigned int FGAirport::numSTARs() const +{ + loadProcedures(); + return mSTARs.size(); +} + +STAR* FGAirport::getSTARByIndex(unsigned int aIndex) const +{ + loadProcedures(); + return mSTARs[aIndex]; +} + +STAR* FGAirport::findSTARWithIdent(const std::string& aIdent) const +{ + loadProcedures(); + for (unsigned int i=0; i<mSTARs.size(); ++i) { + if (mSTARs[i]->ident() == aIdent) { + return mSTARs[i]; + } + } + + return NULL; +} + +unsigned int FGAirport::numApproaches() const +{ + loadProcedures(); + return mApproaches.size(); +} + +Approach* FGAirport::getApproachByIndex(unsigned int aIndex) const +{ + loadProcedures(); + return mApproaches[aIndex]; +} + // get airport elevation double fgGetAirportElev( const string& id ) { diff --git a/src/Airports/simple.hxx b/src/Airports/simple.hxx index 521c48c9a..1eea8d8ec 100644 --- a/src/Airports/simple.hxx +++ b/src/Airports/simple.hxx @@ -45,6 +45,19 @@ typedef SGSharedPtr<FGRunway> FGRunwayPtr; typedef SGSharedPtr<FGTaxiway> FGTaxiwayPtr; typedef SGSharedPtr<FGPavement> FGPavementPtr; +namespace flightgear { + class SID; + class STAR; + class Approach; + class Waypt; + + + typedef SGSharedPtr<Waypt> WayptRef; + typedef std::vector<WayptRef> WayptVec; +} + + + /*************************************************************************************** * **************************************************************************************/ @@ -85,6 +98,15 @@ public: FGRunway* getRunwayByIdent(const std::string& aIdent) const; FGRunway* findBestRunwayForHeading(double aHeading) const; + /** + * return the most likely target runway based on a position. + * Specifically, return the runway for which the course from aPos + * to the runway end, mostly closely matches the runway heading. + * This is a good approximation of which runway the position is on or + * aiming towards. + */ + FGRunway* findBestRunwayForPos(const SGGeod& aPos) const; + /** * Useful predicate for FMS/GPS/NAV displays and similar - check if this * aiport has a hard-surfaced runway of at least the specified length. @@ -143,6 +165,26 @@ public: double mMinLengthFt; }; + + void setProcedures(const std::vector<flightgear::SID*>& aSids, + const std::vector<flightgear::STAR*>& aStars, + const std::vector<flightgear::Approach*>& aApproaches); + + void addSID(flightgear::SID* aSid); + void addSTAR(flightgear::STAR* aStar); + void addApproach(flightgear::Approach* aApp); + + unsigned int numSIDs() const; + flightgear::SID* getSIDByIndex(unsigned int aIndex) const; + flightgear::SID* findSIDWithIdent(const std::string& aIdent) const; + + unsigned int numSTARs() const; + flightgear::STAR* getSTARByIndex(unsigned int aIndex) const; + flightgear::STAR* findSTARWithIdent(const std::string& aIdent) const; + + unsigned int numApproaches() const; + flightgear::Approach* getApproachByIndex(unsigned int aIndex) const; + /** * Syntactic wrapper around FGPositioned::findClosest - find the closest * match for filter, and return it cast to FGAirport. The default filter @@ -169,6 +211,23 @@ public: * matches in a format suitable for use by a puaList. */ static char** searchNamesAndIdents(const std::string& aFilter); + + bool buildApproach(flightgear::Waypt* aEnroute, flightgear::STAR* aSTAR, + FGRunway* aRwy, flightgear::WayptVec& aRoute); + + /** + * Given a destiation point, select the best SID and transition waypt from + * this airport. Returns (NULL,NULL) is no SIDs are defined, otherwise the + * best SID/transition is that which is closest to the destination point. + */ + std::pair<flightgear::SID*, flightgear::WayptRef> selectSID(const SGGeod& aDest, FGRunway* aRwy); + + /** + * Select a STAR and enroute transition waypt, given an origin (departure) position. + * returns (NULL, NULL) is no suitable STAR is exists + */ + std::pair<flightgear::STAR*, flightgear::WayptRef> selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy); + private: typedef std::vector<FGRunwayPtr>::const_iterator Runway_iterator; /** @@ -203,13 +262,19 @@ private: void loadRunways() const; void loadTaxiways() const; + void loadProcedures() const; mutable bool mRunwaysLoaded; mutable bool mTaxiwaysLoaded; + mutable bool mProceduresLoaded; std::vector<FGRunwayPtr> mRunways; std::vector<FGTaxiwayPtr> mTaxiways; std::vector<FGPavementPtr> mPavements; + + std::vector<flightgear::SID*> mSIDs; + std::vector<flightgear::STAR*> mSTARs; + std::vector<flightgear::Approach*> mApproaches; }; // find basic airport location info from airport database diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx index 07059cc16..1896946fc 100644 --- a/src/Autopilot/route_mgr.cxx +++ b/src/Autopilot/route_mgr.cxx @@ -36,6 +36,7 @@ #include "route_mgr.hxx" #include <boost/algorithm/string/case_conv.hpp> +#include <boost/tuple/tuple.hpp> #include <simgear/misc/strutils.hxx> #include <simgear/structure/exception.hxx> @@ -48,27 +49,81 @@ #include "Main/fg_props.hxx" #include "Navaids/positioned.hxx" +#include <Navaids/waypoint.hxx> +#include <Navaids/airways.hxx> +#include <Navaids/procedure.hxx> #include "Airports/simple.hxx" #include "Airports/runways.hxx" #define RM "/autopilot/route-manager/" -FGRouteMgr::FGRouteMgr() : - _route( new SGRoute ), - input(fgGetNode( RM "input", true )), - mirror(fgGetNode( RM "route", true )) +#include <GUI/new_gui.hxx> +#include <GUI/dialog.hxx> + +using namespace flightgear; + +class PropertyWatcher : public SGPropertyChangeListener { - listener = new InputListener(this); - input->setStringValue(""); - input->addChangeListener(listener); +public: + void watch(SGPropertyNode* p) + { + p->addChangeListener(this, false); + } + + virtual void valueChanged(SGPropertyNode*) + { + fire(); + } +protected: + virtual void fire() = 0; +}; + +/** + * Template adapter, created by convenience helper below + */ +template <class T> +class MethodPropertyWatcher : public PropertyWatcher +{ +public: + typedef void (T::*fire_method)(); + + MethodPropertyWatcher(T* obj, fire_method m) : + _object(obj), + _method(m) + { ; } + +protected: + virtual void fire() + { // dispatch to the object method we're helping + (_object->*_method)(); + } + +private: + T* _object; + fire_method _method; +}; + +template <class T> +PropertyWatcher* createWatcher(T* obj, void (T::*m)()) +{ + return new MethodPropertyWatcher<T>(obj, m); +} + +FGRouteMgr::FGRouteMgr() : + _currentIndex(0), + input(fgGetNode( RM "input", true )), + mirror(fgGetNode( RM "route", true )) +{ + listener = new InputListener(this); + input->setStringValue(""); + input->addChangeListener(listener); } -FGRouteMgr::~FGRouteMgr() { - input->removeChangeListener(listener); - - delete listener; - delete _route; +FGRouteMgr::~FGRouteMgr() +{ + input->removeChangeListener(listener); + delete listener; } @@ -85,18 +140,13 @@ void FGRouteMgr::init() { &FGRouteMgr::getDepartureICAO, &FGRouteMgr::setDepartureICAO)); departure->tie("name", SGRawValueMethods<FGRouteMgr, const char*>(*this, &FGRouteMgr::getDepartureName, NULL)); - -// init departure information from current location - SGGeod pos = SGGeod::fromDegFt(lon->getDoubleValue(), lat->getDoubleValue(), alt->getDoubleValue()); - _departure = FGAirport::findClosest(pos, 20.0); - if (_departure) { - FGRunway* active = _departure->getActiveRunwayForUsage(); - departure->setStringValue("runway", active->ident().c_str()); - } else { - departure->setStringValue("runway", ""); - } + departure->setStringValue("runway", ""); + + _departureWatcher = createWatcher(this, &FGRouteMgr::departureChanged); + _departureWatcher->watch(departure->getChild("runway")); departure->getChild("etd", 0, true); + _departureWatcher->watch(departure->getChild("sid", 0, true)); departure->getChild("takeoff-time", 0, true); destination = fgGetNode(RM "destination", true); @@ -106,11 +156,15 @@ void FGRouteMgr::init() { &FGRouteMgr::getDestinationICAO, &FGRouteMgr::setDestinationICAO)); destination->tie("name", SGRawValueMethods<FGRouteMgr, const char*>(*this, &FGRouteMgr::getDestinationName, NULL)); - - destination->getChild("runway", 0, true); - destination->getChild("eta", 0, true); - destination->getChild("touchdown-time", 0, true); + _arrivalWatcher = createWatcher(this, &FGRouteMgr::arrivalChanged); + _arrivalWatcher->watch(destination->getChild("runway", 0, true)); + + destination->getChild("eta", 0, true); + _arrivalWatcher->watch(destination->getChild("star", 0, true)); + _arrivalWatcher->watch(destination->getChild("transition", 0, true)); + destination->getChild("touchdown-time", 0, true); + alternate = fgGetNode(RM "alternate", true); alternate->getChild("airport", 0, true); alternate->getChild("runway", 0, true); @@ -122,6 +176,9 @@ void FGRouteMgr::init() { cruise->getChild("speed-kts", 0, true); cruise->setDoubleValue("speed-kts", 160.0); + _routingType = cruise->getChild("routing", 0, true); + _routingType->setIntValue(ROUTE_HIGH_AIRWAYS); + totalDistance = fgGetNode(RM "total-distance", true); totalDistance->setDoubleValue(0.0); @@ -142,7 +199,7 @@ void FGRouteMgr::init() { _currentWpt = fgGetNode(RM "current-wp", true); _currentWpt->tie(SGRawValueMethods<FGRouteMgr, int> - (*this, &FGRouteMgr::currentWaypoint, &FGRouteMgr::jumpToIndex)); + (*this, &FGRouteMgr::currentIndex, &FGRouteMgr::jumpToIndex)); // temporary distance / eta calculations, for backward-compatability wp0 = fgGetNode(RM "wp", 0, true); @@ -160,27 +217,29 @@ void FGRouteMgr::init() { wpn->getChild("dist", 0, true); wpn->getChild("eta", 0, true); - _route->clear(); - _route->set_current(0); update_mirror(); - _pathNode = fgGetNode(RM "file-path", 0, true); } -void FGRouteMgr::postinit() { - string_list *waypoints = globals->get_initial_waypoints(); - if (waypoints) { - vector<string>::iterator it; - for (it = waypoints->begin(); it != waypoints->end(); ++it) - new_waypoint(*it); +void FGRouteMgr::postinit() +{ + string_list *waypoints = globals->get_initial_waypoints(); + if (waypoints) { + string_list::iterator it; + for (it = waypoints->begin(); it != waypoints->end(); ++it) { + WayptRef w = waypointFromString(*it); + if (w) { + _route.push_back(w); + } } - - weightOnWheels = fgGetNode("/gear/gear[0]/wow", false); - // check airbone flag agrees with presets -} + SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size()); + } + weightOnWheels = fgGetNode("/gear/gear[0]/wow", false); + // check airbone flag agrees with presets +} void FGRouteMgr::bind() { } void FGRouteMgr::unbind() { } @@ -190,260 +249,604 @@ bool FGRouteMgr::isRouteActive() const return active->getBoolValue(); } -void FGRouteMgr::update( double dt ) { - if (dt <= 0.0) { - // paused, nothing to do here - return; - } - - if (!active->getBoolValue()) { - return; - } - - double groundSpeed = fgGetDouble("/velocities/groundspeed-kt", 0.0); - if (airborne->getBoolValue()) { - time_t now = time(NULL); - elapsedFlightTime->setDoubleValue(difftime(now, _takeoffTime)); - } else { // not airborne - if (weightOnWheels->getBoolValue() || (groundSpeed < 40)) { - return; - } - - airborne->setBoolValue(true); - _takeoffTime = time(NULL); // start the clock - departure->setIntValue("takeoff-time", _takeoffTime); - } - - // basic course/distance information - double wp_course, wp_distance; - SGWayPoint wp = _route->get_current(); - wp.CourseAndDistance( lon->getDoubleValue(), lat->getDoubleValue(), - alt->getDoubleValue(), &wp_course, &wp_distance ); - - // update wp0 / wp1 / wp-last for legacy users - wp0->setDoubleValue("dist", wp_distance * SG_METER_TO_NM); - wp_course -= magvar->getDoubleValue(); // expose magnetic bearing - wp0->setDoubleValue("bearing-deg", wp_course); - setETAPropertyFromDistance(wp0->getChild("eta"), wp_distance); - - if ((_route->current_index() + 1) < _route->size()) { - wp = _route->get_waypoint(_route->current_index() + 1); - double wp1_course, wp1_distance; - wp.CourseAndDistance(lon->getDoubleValue(), lat->getDoubleValue(), - alt->getDoubleValue(), &wp1_course, &wp1_distance); - - wp1->setDoubleValue("dist", wp1_distance * SG_METER_TO_NM); - setETAPropertyFromDistance(wp1->getChild("eta"), wp1_distance); - } - - double totalDistanceRemaining = wp_distance; // distance to current waypoint - for (int i=_route->current_index() + 1; i<_route->size(); ++i) { - totalDistanceRemaining += _route->get_waypoint(i).get_distance(); - } - - wpn->setDoubleValue("dist", totalDistanceRemaining * SG_METER_TO_NM); - ete->setDoubleValue(totalDistanceRemaining * SG_METER_TO_NM / groundSpeed * 3600.0); - setETAPropertyFromDistance(wpn->getChild("eta"), totalDistanceRemaining); - - // get time now at destination tz as tm struct - // add ete seconds - // convert to string ... and stash in property - //destination->setDoubleValue("eta", eta); -} - - -void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDistance) { - double speed =fgGetDouble("/velocities/groundspeed-kt", 0.0); - if (speed < 1.0) { - aProp->setStringValue("--:--"); - return; - } - - char eta_str[64]; - double eta = aDistance * SG_METER_TO_NM / speed; - if ( eta >= 100.0 ) { - eta = 99.999; // clamp - } - - if ( eta < (1.0/6.0) ) { - eta *= 60.0; // within 10 minutes, bump up to min/secs - } - - int major = (int)eta, - minor = (int)((eta - (int)eta) * 60.0); - snprintf( eta_str, 64, "%d:%02d", major, minor ); - aProp->setStringValue( eta_str ); -} - -void FGRouteMgr::add_waypoint( const SGWayPoint& wp, int n ) +void FGRouteMgr::update( double dt ) { - _route->add_waypoint( wp, n ); - - if ((n >= 0) && (_route->current_index() > n)) { - _route->set_current(_route->current_index() + 1); + if (dt <= 0.0) { + return; // paused, nothing to do here } - waypointsChanged(); + double groundSpeed = fgGetDouble("/velocities/groundspeed-kt", 0.0); + if (airborne->getBoolValue()) { + time_t now = time(NULL); + elapsedFlightTime->setDoubleValue(difftime(now, _takeoffTime)); + } else { // not airborne + if (weightOnWheels->getBoolValue() || (groundSpeed < 40)) { + return; + } + + airborne->setBoolValue(true); + _takeoffTime = time(NULL); // start the clock + departure->setIntValue("takeoff-time", _takeoffTime); + } + + if (!active->getBoolValue()) { + return; + } + +// basic course/distance information + SGGeod currentPos = SGGeod::fromDegFt(lon->getDoubleValue(), + lat->getDoubleValue(),alt->getDoubleValue()); + + Waypt* curWpt = currentWaypt(); + if (!curWpt) { + return; + } + + double courseDeg; + double distanceM; + boost::tie(courseDeg, distanceM) = curWpt->courseAndDistanceFrom(currentPos); + +// update wp0 / wp1 / wp-last for legacy users + wp0->setDoubleValue("dist", distanceM * SG_METER_TO_NM); + courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing + wp0->setDoubleValue("bearing-deg", courseDeg); + setETAPropertyFromDistance(wp0->getChild("eta"), distanceM); + + double totalDistanceRemaining = distanceM; // distance to current waypoint + + Waypt* nextWpt = nextWaypt(); + if (nextWpt) { + boost::tie(courseDeg, distanceM) = nextWpt->courseAndDistanceFrom(currentPos); + + wp1->setDoubleValue("dist", distanceM * SG_METER_TO_NM); + courseDeg -= magvar->getDoubleValue(); // expose magnetic bearing + wp1->setDoubleValue("bearing-deg", courseDeg); + setETAPropertyFromDistance(wp1->getChild("eta"), distanceM); + } + + Waypt* prev = curWpt; + for (unsigned int i=_currentIndex + 1; i<_route.size(); ++i) { + Waypt* w = _route[i]; + if (w->flag(WPT_DYNAMIC)) continue; + totalDistanceRemaining += SGGeodesy::distanceM(prev->position(), w->position()); + prev = w; + } + + wpn->setDoubleValue("dist", totalDistanceRemaining * SG_METER_TO_NM); + ete->setDoubleValue(totalDistanceRemaining * SG_METER_TO_NM / groundSpeed * 3600.0); + setETAPropertyFromDistance(wpn->getChild("eta"), totalDistanceRemaining); } -void FGRouteMgr::waypointsChanged() +void FGRouteMgr::setETAPropertyFromDistance(SGPropertyNode_ptr aProp, double aDistance) { - double routeDistanceNm = _route->total_distance() * SG_METER_TO_NM; - totalDistance->setDoubleValue(routeDistanceNm); - double cruiseSpeedKts = cruise->getDoubleValue("speed", 0.0); - if (cruiseSpeedKts > 1.0) { - // very very crude approximation, doesn't allow for climb / descent - // performance or anything else at all - ete->setDoubleValue(routeDistanceNm / cruiseSpeedKts * (60.0 * 60.0)); + double speed = fgGetDouble("/velocities/groundspeed-kt", 0.0); + if (speed < 1.0) { + aProp->setStringValue("--:--"); + return; + } + + char eta_str[64]; + double eta = aDistance * SG_METER_TO_NM / speed; + if ( eta >= 100.0 ) { + eta = 99.999; // clamp + } + + if ( eta < (1.0/6.0) ) { + eta *= 60.0; // within 10 minutes, bump up to min/secs + } + + int major = (int)eta, + minor = (int)((eta - (int)eta) * 60.0); + snprintf( eta_str, 64, "%d:%02d", major, minor ); + aProp->setStringValue( eta_str ); +} + +flightgear::WayptRef FGRouteMgr::removeWayptAtIndex(int aIndex) +{ + int index = aIndex; + if (aIndex < 0) { // negative indices count the the end + index = _route.size() - index; + } + + if ((index < 0) || (index >= numWaypts())) { + SG_LOG(SG_AUTOPILOT, SG_WARN, "removeWayptAtIndex with invalid index:" << aIndex); + return NULL; + } + + if (_currentIndex > index) { + --_currentIndex; // shift current index down if necessary + } + + WayptVec::iterator it = _route.begin(); + it += index; + + WayptRef w = *it; // hold a ref now, in case _route is the only other owner + _route.erase(it); + + update_mirror(); + _edited->fireValueChanged(); + checkFinished(); + + return w; +} + +void FGRouteMgr::clearRoute() +{ + _route.clear(); + _currentIndex = -1; + + update_mirror(); + active->setBoolValue(false); + _edited->fireValueChanged(); +} + +/** + * route between index-1 and index, using airways. + */ +bool FGRouteMgr::routeToIndex(int index, RouteType aRouteType) +{ + WayptRef wp1; + WayptRef wp2; + + if (index == -1) { + index = _route.size(); // can still be zero, of course + } + + if (index == 0) { + if (!_departure) { + SG_LOG(SG_AUTOPILOT, SG_WARN, "routeToIndex: no departure set"); + return false; + } + + wp1 = new NavaidWaypoint(_departure.get(), NULL); + } else { + wp1 = wayptAtIndex(index - 1); + } + + if (index >= numWaypts()) { + if (!_destination) { + SG_LOG(SG_AUTOPILOT, SG_WARN, "routeToIndex: no destination set"); + return false; + } + + wp2 = new NavaidWaypoint(_destination.get(), NULL); + } else { + wp2 = wayptAtIndex(index); + } + + double distNm = SGGeodesy::distanceNm(wp1->position(), wp2->position()); + if (distNm < 100.0) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "routeToIndex: existing waypoints are nearby, direct route"); + return true; + } + + WayptVec r; + switch (aRouteType) { + case ROUTE_HIGH_AIRWAYS: + Airway::highLevel()->route(wp1, wp2, r); + break; + + case ROUTE_LOW_AIRWAYS: + Airway::lowLevel()->route(wp1, wp2, r); + break; + + case ROUTE_VOR: + throw sg_exception("VOR routing not supported yet"); + } + + if (r.empty()) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "routeToIndex: no route found"); + return false; + } + + WayptVec::iterator it = _route.begin(); + it += index; + _route.insert(it, r.begin(), r.end()); + + update_mirror(); + _edited->fireValueChanged(); + return true; +} + +void FGRouteMgr::autoRoute() +{ + if (!_departure || !_destination) { + return; + } + + string runwayId(departure->getStringValue("runway")); + FGRunway* runway = NULL; + if (_departure->hasRunwayWithIdent(runwayId)) { + runway = _departure->getRunwayByIdent(runwayId); + } + + FGRunway* dstRunway = NULL; + runwayId = destination->getStringValue("runway"); + if (_destination->hasRunwayWithIdent(runwayId)) { + dstRunway = _destination->getRunwayByIdent(runwayId); + } + + _route.clear(); // clear out the existing, first +// SID + SID* sid; + WayptRef sidTrans; + + boost::tie(sid, sidTrans) = _departure->selectSID(_destination->geod(), runway); + if (sid) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "selected SID " << sid->ident()); + if (sidTrans) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "\tvia " << sidTrans->ident() << " transition"); + } + + sid->route(runway, sidTrans, _route); + departure->setStringValue("sid", sid->ident()); + } else { + // use airport location for airway search + sidTrans = new NavaidWaypoint(_departure.get(), NULL); + departure->setStringValue("sid", ""); + } + +// STAR + destination->setStringValue("transition", ""); + destination->setStringValue("star", ""); + + STAR* star; + WayptRef starTrans; + boost::tie(star, starTrans) = _destination->selectSTAR(_departure->geod(), dstRunway); + if (star) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "selected STAR " << star->ident()); + if (starTrans) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "\tvia " << starTrans->ident() << " transition"); + destination->setStringValue("transition", starTrans->ident()); + } + destination->setStringValue("star", star->ident()); + } else { + // use airport location for search + starTrans = new NavaidWaypoint(_destination.get(), NULL); + } + +// route between them + WayptVec airwayRoute; + if (Airway::highLevel()->route(sidTrans, starTrans, airwayRoute)) { + _route.insert(_route.end(), airwayRoute.begin(), airwayRoute.end()); + } + +// add the STAR if we have one + if (star) { + _destination->buildApproach(starTrans, star, dstRunway, _route); } update_mirror(); _edited->fireValueChanged(); - checkFinished(); } -SGWayPoint FGRouteMgr::pop_waypoint( int n ) { - if ( _route->size() <= 0 ) { - return SGWayPoint(); +void FGRouteMgr::departureChanged() +{ +// remove existing departure waypoints + WayptVec::iterator it = _route.begin(); + for (; it != _route.end(); ++it) { + if (!(*it)->flag(WPT_DEPARTURE)) { + break; + } } - if ( n < 0 ) { - n = _route->size() - 1; - } - - if (_route->current_index() > n) { - _route->set_current(_route->current_index() - 1); + // erase() invalidates iterators, so grab now + WayptRef enroute; + if (it == _route.end()) { + if (_destination) { + enroute = new NavaidWaypoint(_destination.get(), NULL); + } + } else { + enroute = *it; } - SGWayPoint wp = _route->get_waypoint(n); - _route->delete_waypoint(n); - + _route.erase(_route.begin(), it); + if (!_departure) { + waypointsChanged(); + return; + } + + WayptVec wps; + buildDeparture(enroute, wps); + for (it = wps.begin(); it != wps.end(); ++it) { + (*it)->setFlag(WPT_DEPARTURE); + (*it)->setFlag(WPT_GENERATED); + } + _route.insert(_route.begin(), wps.begin(), wps.end()); + + update_mirror(); waypointsChanged(); - return wp; } +void FGRouteMgr::buildDeparture(WayptRef enroute, WayptVec& wps) +{ + string runwayId(departure->getStringValue("runway")); + if (!_departure->hasRunwayWithIdent(runwayId)) { +// valid airport, but no runway selected, so just the airport noide itself + wps.push_back(new NavaidWaypoint(_departure.get(), NULL)); + return; + } + + FGRunway* r = _departure->getRunwayByIdent(runwayId); + string sidId = departure->getStringValue("sid"); + SID* sid = _departure->findSIDWithIdent(sidId); + if (!sid) { +// valid runway, but no SID selected/found, so just the runway node for now + if (!sidId.empty() && (sidId != "(none)")) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "SID not found:" << sidId); + } + + wps.push_back(new RunwayWaypt(r, NULL)); + return; + } + +// we have a valid SID, awesome + string trans(departure->getStringValue("transition")); + WayptRef t = sid->findTransitionByName(trans); + if (!t && enroute) { + t = sid->findBestTransition(enroute->position()); + } -bool FGRouteMgr::build() { - return true; + sid->route(r, t, wps); + if (!wps.empty() && wps.front()->flag(WPT_DYNAMIC)) { + // ensure first waypoint is static, to simplify other computations + wps.insert(wps.begin(), new RunwayWaypt(r, NULL)); + } } - -void FGRouteMgr::new_waypoint( const string& target, int n ) { - SGWayPoint* wp = make_waypoint( target ); - if (!wp) { - return; +void FGRouteMgr::arrivalChanged() +{ + // remove existing arrival waypoints + WayptVec::reverse_iterator rit = _route.rbegin(); + for (; rit != _route.rend(); ++rit) { + if (!(*rit)->flag(WPT_ARRIVAL)) { + break; } - - add_waypoint( *wp, n ); - delete wp; + } + + // erase() invalidates iterators, so grab now + WayptRef enroute; + WayptVec::iterator it; + + if (rit != _route.rend()) { + enroute = *rit; + it = rit.base(); // convert to fwd iterator + } else { + it = _route.begin(); + } + + _route.erase(it, _route.end()); + + WayptVec wps; + buildArrival(enroute, wps); + for (it = wps.begin(); it != wps.end(); ++it) { + (*it)->setFlag(WPT_ARRIVAL); + (*it)->setFlag(WPT_GENERATED); + } + _route.insert(_route.end(), wps.begin(), wps.end()); + + update_mirror(); + waypointsChanged(); } +void FGRouteMgr::buildArrival(WayptRef enroute, WayptVec& wps) +{ + if (!_destination) { + return; + } + + string runwayId(destination->getStringValue("runway")); + if (!_destination->hasRunwayWithIdent(runwayId)) { +// valid airport, but no runway selected, so just the airport node itself + wps.push_back(new NavaidWaypoint(_destination.get(), NULL)); + return; + } + + FGRunway* r = _destination->getRunwayByIdent(runwayId); + string starId = destination->getStringValue("star"); + STAR* star = _destination->findSTARWithIdent(starId); + if (!star) { +// valid runway, but no STAR selected/found, so just the runway node for now + wps.push_back(new RunwayWaypt(r, NULL)); + return; + } + +// we have a valid STAR + string trans(destination->getStringValue("transition")); + WayptRef t = star->findTransitionByName(trans); + if (!t && enroute) { + t = star->findBestTransition(enroute->position()); + } + + _destination->buildApproach(t, star, r, wps); +} -SGWayPoint* FGRouteMgr::make_waypoint(const string& tgt ) { - string target(boost::to_upper_copy(tgt)); +void FGRouteMgr::waypointsChanged() +{ + +} + +void FGRouteMgr::insertWayptAtIndex(Waypt* aWpt, int aIndex) +{ + if (!aWpt) { + return; + } + + int index = aIndex; + if ((aIndex == -1) || (aIndex > _route.size())) { + index = _route.size(); + } + + WayptVec::iterator it = _route.begin(); + it += index; + + if (_currentIndex > index) { + ++_currentIndex; + } + + _route.insert(it, aWpt); + + update_mirror(); + _edited->fireValueChanged(); +} + +WayptRef FGRouteMgr::waypointFromString(const string& tgt ) +{ + string target(boost::to_upper_copy(tgt)); + WayptRef wpt; + +// extract altitude + double altFt = cruise->getDoubleValue("altitude-ft"); + RouteRestriction altSetting = RESTRICT_NONE; + size_t pos = target.find( '@' ); + if ( pos != string::npos ) { + altFt = atof( target.c_str() + pos + 1 ); + target = target.substr( 0, pos ); + if ( !strcmp(fgGetString("/sim/startup/units"), "meter") ) + altFt *= SG_METER_TO_FEET; + altSetting = RESTRICT_AT; + } + +// check for lon,lat + pos = target.find( ',' ); + if ( pos != string::npos ) { + double lon = atof( target.substr(0, pos).c_str()); + double lat = atof( target.c_str() + pos + 1); + char buf[32]; + char ew = (lon < 0.0) ? 'W' : 'E'; + char ns = (lat < 0.0) ? 'S' : 'N'; + snprintf(buf, 32, "%c%03d%c%03d", ew, (int) fabs(lon), ns, (int)fabs(lat)); - double alt = -9999.0; - // extract altitude - size_t pos = target.find( '@' ); - if ( pos != string::npos ) { - alt = atof( target.c_str() + pos + 1 ); - target = target.substr( 0, pos ); - if ( !strcmp(fgGetString("/sim/startup/units"), "feet") ) - alt *= SG_FEET_TO_METER; + wpt = new BasicWaypt(SGGeod::fromDeg(lon, lat), buf, NULL); + if (altSetting != RESTRICT_NONE) { + wpt->setAltitude(altFt, altSetting); } + return wpt; + } - // check for lon,lat - pos = target.find( ',' ); - if ( pos != string::npos ) { - double lon = atof( target.substr(0, pos).c_str()); - double lat = atof( target.c_str() + pos + 1); - char buf[32]; - char ew = (lon < 0.0) ? 'W' : 'E'; - char ns = (lat < 0.0) ? 'S' : 'N'; - snprintf(buf, 32, "%c%03d%c%03d", ew, (int) fabs(lon), ns, (int)fabs(lat)); - return new SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, buf); - } - - SGGeod basePosition; - if (_route->size() > 0) { - SGWayPoint wp = get_waypoint(_route->size()-1); - basePosition = wp.get_target(); - } else { - // route is empty, use current position - basePosition = SGGeod::fromDeg( - fgGetNode("/position/longitude-deg")->getDoubleValue(), - fgGetNode("/position/latitude-deg")->getDoubleValue()); - } + SGGeod basePosition; + if (_route.empty()) { + // route is empty, use current position + basePosition = SGGeod::fromDeg(lon->getDoubleValue(), lat->getDoubleValue()); + } else { + basePosition = _route.back()->position(); + } - vector<string> pieces(simgear::strutils::split(target, "/")); + string_list pieces(simgear::strutils::split(target, "/")); + FGPositionedRef p = FGPositioned::findClosestWithIdent(pieces.front(), basePosition); + if (!p) { + SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces.front()); + return NULL; + } - - FGPositionedRef p = FGPositioned::findClosestWithIdent(pieces.front(), basePosition); - if (!p) { - SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces.front()); + if (pieces.size() == 1) { + wpt = new NavaidWaypoint(p, NULL); + } else if (pieces.size() == 3) { + // navaid/radial/distance-nm notation + double radial = atof(pieces[1].c_str()), + distanceNm = atof(pieces[2].c_str()); + radial += magvar->getDoubleValue(); // convert to true bearing + wpt = new OffsetNavaidWaypoint(p, NULL, radial, distanceNm); + } else if (pieces.size() == 2) { + FGAirport* apt = dynamic_cast<FGAirport*>(p.ptr()); + if (!apt) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "Waypoint is not an airport:" << pieces.front()); return NULL; } - SGGeod geod = SGGeod::fromGeodM(p->geod(), alt); - if (pieces.size() == 1) { - // simple case - return new SGWayPoint(geod, target, p->name()); + if (!apt->hasRunwayWithIdent(pieces[1])) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "No runway: " << pieces[1] << " at " << pieces[0]); + return NULL; } - - if (pieces.size() == 3) { - // navaid/radial/distance-nm notation - double radial = atof(pieces[1].c_str()), - distanceNm = atof(pieces[2].c_str()), - az2; - radial += magvar->getDoubleValue(); // convert to true bearing - SGGeod offsetPos; - SGGeodesy::direct(geod, radial, distanceNm * SG_NM_TO_METER, offsetPos, az2); - offsetPos.setElevationM(alt); - SG_LOG(SG_AUTOPILOT, SG_INFO, "final offset radial is " << radial); - return new SGWayPoint(offsetPos, p->ident() + pieces[2], target); - } - - if (pieces.size() == 2) { - FGAirport* apt = dynamic_cast<FGAirport*>(p.ptr()); - if (!apt) { - SG_LOG(SG_AUTOPILOT, SG_INFO, "Waypoint is not an airport:" << pieces.front()); - return NULL; - } - - if (!apt->hasRunwayWithIdent(pieces[1])) { - SG_LOG(SG_AUTOPILOT, SG_INFO, "No runway: " << pieces[1] << " at " << pieces[0]); - return NULL; - } - - FGRunway* runway = apt->getRunwayByIdent(pieces[1]); - SGGeod t = runway->threshold(); - return new SGWayPoint(t.getLongitudeDeg(), t.getLatitudeDeg(), alt, SGWayPoint::WGS84, pieces[1]); + FGRunway* runway = apt->getRunwayByIdent(pieces[1]); + wpt = new NavaidWaypoint(runway, NULL); + } else if (pieces.size() == 4) { + // navid/radial/navid/radial notation + FGPositionedRef p2 = FGPositioned::findClosestWithIdent(pieces[2], basePosition); + if (!p2) { + SG_LOG( SG_AUTOPILOT, SG_INFO, "Unable to find FGPositioned with ident:" << pieces[2]); + return NULL; + } + + double r1 = atof(pieces[1].c_str()), + r2 = atof(pieces[3].c_str()); + r1 += magvar->getDoubleValue(); + r2 += magvar->getDoubleValue(); + + SGGeod intersection; + bool ok = SGGeodesy::radialIntersection(p->geod(), r1, p2->geod(), r2, intersection); + if (!ok) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "no valid intersection for:" << target); + return NULL; } + std::string name = p->ident() + "-" + p2->ident(); + wpt = new BasicWaypt(intersection, name, NULL); + } + + if (!wpt) { SG_LOG(SG_AUTOPILOT, SG_INFO, "Unable to parse waypoint:" << target); return NULL; + } + + if (altSetting != RESTRICT_NONE) { + wpt->setAltitude(altFt, altSetting); + } + return wpt; } - // mirror internal route to the property system for inspection by other subsystems -void FGRouteMgr::update_mirror() { - mirror->removeChildren("wp"); - for (int i = 0; i < _route->size(); i++) { - SGWayPoint wp = _route->get_waypoint(i); - SGPropertyNode *prop = mirror->getChild("wp", i, 1); +void FGRouteMgr::update_mirror() +{ + mirror->removeChildren("wp"); + for (int i = 0; i < numWaypts(); i++) { + Waypt* wp = _route[i]; + SGPropertyNode *prop = mirror->getChild("wp", i, 1); - const SGGeod& pos(wp.get_target()); - prop->setStringValue("id", wp.get_id().c_str()); - prop->setStringValue("name", wp.get_name().c_str()); - prop->setDoubleValue("longitude-deg", pos.getLongitudeDeg()); - prop->setDoubleValue("latitude-deg",pos.getLatitudeDeg()); - prop->setDoubleValue("altitude-m", pos.getElevationM()); - prop->setDoubleValue("altitude-ft", pos.getElevationFt()); + const SGGeod& pos(wp->position()); + prop->setStringValue("id", wp->ident().c_str()); + //prop->setStringValue("name", wp.get_name().c_str()); + prop->setDoubleValue("longitude-deg", pos.getLongitudeDeg()); + prop->setDoubleValue("latitude-deg",pos.getLatitudeDeg()); + + if (wp->altitudeRestriction() != RESTRICT_NONE) { + double ft = wp->altitudeFt(); + prop->setDoubleValue("altitude-m", ft * SG_FEET_TO_METER); + prop->setDoubleValue("altitude-ft", ft); + } else { + prop->setDoubleValue("altitude-m", -9999.9); + prop->setDoubleValue("altitude-ft", -9999.9); } - // set number as listener attachment point - mirror->setIntValue("num", _route->size()); + + if (wp->speedRestriction() != RESTRICT_NONE) { + prop->setDoubleValue("speed-kts", wp->speedKts()); + } + + if (wp->flag(WPT_ARRIVAL)) { + prop->setBoolValue("arrival", true); + } + + if (wp->flag(WPT_DEPARTURE)) { + prop->setBoolValue("departure", true); + } + + if (wp->flag(WPT_MISS)) { + prop->setBoolValue("missed-approach", true); + } + + prop->setBoolValue("generated", wp->flag(WPT_GENERATED)); + } // of waypoint iteration + + // set number as listener attachment point + mirror->setIntValue("num", _route.size()); + + NewGUI * gui = (NewGUI *)globals->get_subsystem("gui"); + FGDialog* rmDlg = gui->getDialog("route-manager"); + if (rmDlg) { + rmDlg->updateValues(); + } } // command interface /autopilot/route-manager/input: @@ -462,7 +865,7 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop) } if (!strcmp(s, "@CLEAR")) - mgr->init(); + mgr->clearRoute(); else if (!strcmp(s, "@ACTIVATE")) mgr->activate(); else if (!strcmp(s, "@LOAD")) { @@ -472,13 +875,13 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop) } else if (!strcmp(s, "@POP")) { SG_LOG(SG_AUTOPILOT, SG_WARN, "route-manager @POP command is deprecated"); } else if (!strcmp(s, "@NEXT")) { - mgr->jumpToIndex(mgr->currentWaypoint() + 1); + mgr->jumpToIndex(mgr->_currentIndex + 1); } else if (!strcmp(s, "@PREVIOUS")) { - mgr->jumpToIndex(mgr->currentWaypoint() - 1); + mgr->jumpToIndex(mgr->_currentIndex - 1); } else if (!strncmp(s, "@JUMP", 5)) { mgr->jumpToIndex(atoi(s + 5)); } else if (!strncmp(s, "@DELETE", 7)) - mgr->pop_waypoint(atoi(s + 7)); + mgr->removeWayptAtIndex(atoi(s + 7)); else if (!strncmp(s, "@INSERT", 7)) { char *r; int pos = strtol(s + 7, &r, 10); @@ -487,14 +890,70 @@ void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop) while (isspace(*r)) r++; if (*r) - mgr->new_waypoint(r, pos); + mgr->insertWayptAtIndex(mgr->waypointFromString(r), pos); + } else if (!strncmp(s, "@ROUTE", 6)) { + char* r; + int endIndex = strtol(s + 6, &r, 10); + RouteType rt = (RouteType) mgr->_routingType->getIntValue(); + mgr->routeToIndex(endIndex, rt); + } else if (!strcmp(s, "@AUTOROUTE")) { + mgr->autoRoute(); + } else if (!strcmp(s, "@POSINIT")) { + mgr->initAtPosition(); } else - mgr->new_waypoint(s); + mgr->insertWayptAtIndex(mgr->waypointFromString(s), -1); } -// SGWayPoint( const double lon = 0.0, const double lat = 0.0, -// const double alt = 0.0, const modetype m = WGS84, -// const string& s = "", const string& n = "" ); +void FGRouteMgr::initAtPosition() +{ + if (isRouteActive()) { + return; // don't mess with the active route + } + + if (haveUserWaypoints()) { + // user has already defined, loaded or entered a route, again + // don't interfere with it + return; + } + + if (airborne->getBoolValue()) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: airborne, clearing departure info"); + _departure = NULL; + departure->setStringValue("runway", ""); + return; + } + +// on the ground + SGGeod pos = SGGeod::fromDegFt(lon->getDoubleValue(), lat->getDoubleValue(), alt->getDoubleValue()); + _departure = FGAirport::findClosest(pos, 20.0); + if (!_departure) { + SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: couldn't find an airport within 20nm"); + departure->setStringValue("runway", ""); + return; + } + + FGRunway* r = _departure->findBestRunwayForPos(pos); + if (!r) { + return; + } + + departure->setStringValue("runway", r->ident().c_str()); + SG_LOG(SG_AUTOPILOT, SG_INFO, "initAtPosition: starting at " + << _departure->ident() << " on runway " << r->ident()); +} + +bool FGRouteMgr::haveUserWaypoints() const +{ + for (int i = 0; i < numWaypts(); i++) { + if (!_route[i]->flag(WPT_GENERATED)) { + // have a non-generated waypoint, we're done + return true; + } + } + + // all waypoints are generated + return false; +} bool FGRouteMgr::activate() { @@ -502,41 +961,19 @@ bool FGRouteMgr::activate() SG_LOG(SG_AUTOPILOT, SG_WARN, "duplicate route-activation, no-op"); return false; } - - // only add departure waypoint if we're not airborne, so that - // in-air route activation doesn't confuse matters. - if (weightOnWheels->getBoolValue() && _departure) { - string runwayId(departure->getStringValue("runway")); - FGRunway* runway = NULL; - if (_departure->hasRunwayWithIdent(runwayId)) { - runway = _departure->getRunwayByIdent(runwayId); - } else { - SG_LOG(SG_AUTOPILOT, SG_INFO, - "route-manager, departure runway not found:" << runwayId); - runway = _departure->getActiveRunwayForUsage(); - } - - SGWayPoint swp(runway->threshold(), - _departure->ident() + "-" + runway->ident(), runway->name()); - add_waypoint(swp, 0); - } + + _currentIndex = 0; + currentWaypointChanged(); - if (_destination) { - string runwayId = (destination->getStringValue("runway")); - if (_destination->hasRunwayWithIdent(runwayId)) { - FGRunway* runway = _destination->getRunwayByIdent(runwayId); - SGWayPoint swp(runway->end(), - _destination->ident() + "-" + runway->ident(), runway->name()); - add_waypoint(swp); - } else { - // quite likely, since destination runway may not be known until enroute - // probably want a listener on the 'destination' node to allow an enroute - // update - add_waypoint(SGWayPoint(_destination->geod(), _destination->ident(), _destination->name())); - } + /* double routeDistanceNm = _route->total_distance() * SG_METER_TO_NM; + totalDistance->setDoubleValue(routeDistanceNm); + double cruiseSpeedKts = cruise->getDoubleValue("speed", 0.0); + if (cruiseSpeedKts > 1.0) { + // very very crude approximation, doesn't allow for climb / descent + // performance or anything else at all + ete->setDoubleValue(routeDistanceNm / cruiseSpeedKts * (60.0 * 60.0)); } - - _route->set_current(0); + */ active->setBoolValue(true); SG_LOG(SG_AUTOPILOT, SG_INFO, "route-manager, activate route ok"); return true; @@ -554,15 +991,13 @@ void FGRouteMgr::sequence() return; } - _route->increment_current(); + _currentIndex++; currentWaypointChanged(); - _currentWpt->fireValueChanged(); } bool FGRouteMgr::checkFinished() { - int lastWayptIndex = _route->size() - 1; - if (_route->current_index() < lastWayptIndex) { + if (_currentIndex < (int) _route.size()) { return false; } @@ -574,41 +1009,38 @@ bool FGRouteMgr::checkFinished() void FGRouteMgr::jumpToIndex(int index) { - if ((index < 0) || (index >= _route->size())) { + if ((index < 0) || (index >= (int) _route.size())) { SG_LOG(SG_AUTOPILOT, SG_ALERT, "passed invalid index (" << index << ") to FGRouteMgr::jumpToIndex"); return; } - if (_route->current_index() == index) { + if (_currentIndex == index) { return; // no-op } - _route->set_current(index); +// all the checks out the way, go ahead and update state + _currentIndex = index; currentWaypointChanged(); _currentWpt->fireValueChanged(); } void FGRouteMgr::currentWaypointChanged() { - SGWayPoint previous = _route->get_previous(); - SGWayPoint cur = _route->get_current(); + Waypt* cur = currentWaypt(); + Waypt* next = nextWaypt(); + + wp0->getChild("id")->setStringValue(cur ? cur->ident() : ""); + wp1->getChild("id")->setStringValue(next ? next->ident() : ""); - wp0->getChild("id")->setStringValue(cur.get_id()); - if ((_route->current_index() + 1) < _route->size()) { - wp1->getChild("id")->setStringValue(_route->get_next().get_id()); - } else { - wp1->getChild("id")->setStringValue(""); - } - - SG_LOG(SG_AUTOPILOT, SG_INFO, "route manager, current-wp is now " << _route->current_index()); + _currentWpt->fireValueChanged(); + SG_LOG(SG_AUTOPILOT, SG_INFO, "route manager, current-wp is now " << _currentIndex); } -int FGRouteMgr::findWaypoint(const SGGeod& aPos) const +int FGRouteMgr::findWayptIndex(const SGGeod& aPos) const { - for (int i=0; i<_route->size(); ++i) { - double d = SGGeodesy::distanceM(aPos, _route->get_waypoint(i).get_target()); - if (d < 200.0) { // 200 metres seems close enough + for (int i=0; i<numWaypts(); ++i) { + if (_route[i]->matches(aPos)) { return i; } } @@ -616,29 +1048,36 @@ int FGRouteMgr::findWaypoint(const SGGeod& aPos) const return -1; } -SGWayPoint FGRouteMgr::get_waypoint( int i ) const +Waypt* FGRouteMgr::currentWaypt() const { - return _route->get_waypoint(i); + return wayptAtIndex(_currentIndex); } -int FGRouteMgr::size() const +Waypt* FGRouteMgr::previousWaypt() const { - return _route->size(); + if (_currentIndex == 0) { + return NULL; + } + + return wayptAtIndex(_currentIndex - 1); } -int FGRouteMgr::currentWaypoint() const +Waypt* FGRouteMgr::nextWaypt() const { - return _route->current_index(); + if ((_currentIndex + 1) >= numWaypts()) { + return NULL; + } + + return wayptAtIndex(_currentIndex + 1); } -void FGRouteMgr::setWaypointTargetAltitudeFt(unsigned int index, int altFt) +Waypt* FGRouteMgr::wayptAtIndex(int index) const { - SGWayPoint wp = _route->get_waypoint(index); - wp.setTargetAltFt(altFt); - // simplest way to update a waypoint is to remove and re-add it - _route->delete_waypoint(index); - _route->add_waypoint(wp, index); - waypointsChanged(); + if ((index < 0) || (index >= numWaypts())) { + throw sg_range_exception("waypt index out of range", "FGRouteMgr::wayptAtIndex"); + } + + return _route[index]; } void FGRouteMgr::saveRoute() @@ -648,7 +1087,7 @@ void FGRouteMgr::saveRoute() try { SGPropertyNode_ptr d(new SGPropertyNode); SGPath path(_pathNode->getStringValue()); - d->setIntValue("version", 1); + d->setIntValue("version", 2); if (_departure) { d->setStringValue("departure/airport", _departure->ident()); @@ -662,28 +1101,16 @@ void FGRouteMgr::saveRoute() d->setStringValue("destination/transition", destination->getStringValue("transition")); d->setStringValue("destination/runway", destination->getStringValue("runway")); } - - // route nodes - SGPropertyNode* routeNode = d->getChild("route", 0, true); - for (int i=0; i<_route->size(); ++i) { - SGPropertyNode* wpNode = routeNode->getChild("wp",i, true); - SGWayPoint wp(_route->get_waypoint(i)); - - wpNode->setStringValue("ident", wp.get_id()); - wpNode->setStringValue("name", wp.get_name()); - SGGeod geod(wp.get_target()); - - wpNode->setDoubleValue("longitude-deg", geod.getLongitudeDeg()); - wpNode->setDoubleValue("latitude-deg", geod.getLatitudeDeg()); - - if (geod.getElevationFt() > -9990.0) { - wpNode->setDoubleValue("altitude-ft", geod.getElevationFt()); - } - } // of waypoint iteration + // route nodes + SGPropertyNode* routeNode = d->getChild("route", 0, true); + for (unsigned int i=0; i<_route.size(); ++i) { + Waypt* wpt = _route[i]; + wpt->saveAsNode(routeNode->getChild("wp", i, true)); + } // of waypoint iteration writeProperties(path.str(), d, true /* write-all */); - } catch (const sg_exception &e) { - SG_LOG(SG_IO, SG_WARN, "Error saving route:" << e.getMessage()); + } catch (sg_exception& e) { + SG_LOG(SG_IO, SG_WARN, "failed to save flight-plan:" << e.getMessage()); } } @@ -706,87 +1133,112 @@ void FGRouteMgr::loadRoute() } try { - // departure nodes - SGPropertyNode* dep = routeData->getChild("departure"); - if (!dep) { - throw sg_io_exception("malformed route file, no departure node"); + int version = routeData->getIntValue("version", 1); + if (version == 1) { + loadVersion1XMLRoute(routeData); + } else if (version == 2) { + loadVersion2XMLRoute(routeData); + } else { + throw sg_io_exception("unsupported XML route version"); } - - string depIdent = dep->getStringValue("airport"); - _departure = (FGAirport*) fgFindAirportID(depIdent); - - - // destination - SGPropertyNode* dst = routeData->getChild("destination"); - if (!dst) { - throw sg_io_exception("malformed route file, no destination node"); - } - - _destination = (FGAirport*) fgFindAirportID(dst->getStringValue("airport")); - destination->setStringValue("runway", dst->getStringValue("runway")); - - // alternate - SGPropertyNode* alt = routeData->getChild("alternate"); - if (alt) { - alternate->setStringValue(alt->getStringValue("airport")); - } // of cruise data loading - - // cruise - SGPropertyNode* crs = routeData->getChild("cruise"); - if (crs) { - cruise->setDoubleValue("speed-kts", crs->getDoubleValue("speed-kts")); - cruise->setDoubleValue("mach", crs->getDoubleValue("mach")); - cruise->setDoubleValue("altitude-ft", crs->getDoubleValue("altitude-ft")); - } // of cruise data loading - - // route nodes - _route->clear(); - SGPropertyNode_ptr _route = routeData->getChild("route", 0); - SGGeod lastPos = (_departure ? _departure->geod() : SGGeod()); - - for (int i=0; i<_route->nChildren(); ++i) { - SGPropertyNode_ptr wp = _route->getChild("wp", i); - parseRouteWaypoint(wp); - } // of route iteration } catch (sg_exception& e) { SG_LOG(SG_IO, SG_WARN, "failed to load flight-plan (from '" << e.getOrigin() << "'):" << e.getMessage()); } } -void FGRouteMgr::parseRouteWaypoint(SGPropertyNode* aWP) +void FGRouteMgr::loadXMLRouteHeader(SGPropertyNode_ptr routeData) { - SGGeod lastPos; - if (_route->size() > 0) { - lastPos = get_waypoint(_route->size()-1).get_target(); - } else { - // route is empty, use departure airport position - const FGAirport* apt = fgFindAirportID(departure->getStringValue("airport")); - assert(apt); // shouldn't have got this far with an invalid airport - lastPos = apt->geod(); + // departure nodes + SGPropertyNode* dep = routeData->getChild("departure"); + if (dep) { + string depIdent = dep->getStringValue("airport"); + _departure = (FGAirport*) fgFindAirportID(depIdent); + departure->setStringValue("runway", dep->getStringValue("runway")); + departure->setStringValue("sid", dep->getStringValue("sid")); + departure->setStringValue("transition", dep->getStringValue("transition")); + } + +// destination + SGPropertyNode* dst = routeData->getChild("destination"); + if (dst) { + _destination = (FGAirport*) fgFindAirportID(dst->getStringValue("airport")); + destination->setStringValue("runway", dst->getStringValue("runway")); + destination->setStringValue("star", dst->getStringValue("star")); + destination->setStringValue("transition", dst->getStringValue("transition")); } - SGPropertyNode_ptr altProp = aWP->getChild("altitude-ft"); - double altM = -9999.0; - if (altProp) { - altM = altProp->getDoubleValue() * SG_FEET_TO_METER; +// alternate + SGPropertyNode* alt = routeData->getChild("alternate"); + if (alt) { + alternate->setStringValue(alt->getStringValue("airport")); + } // of cruise data loading + +// cruise + SGPropertyNode* crs = routeData->getChild("cruise"); + if (crs) { + cruise->setDoubleValue("speed-kts", crs->getDoubleValue("speed-kts")); + cruise->setDoubleValue("mach", crs->getDoubleValue("mach")); + cruise->setDoubleValue("altitude-ft", crs->getDoubleValue("altitude-ft")); + } // of cruise data loading + +} + +void FGRouteMgr::loadVersion2XMLRoute(SGPropertyNode_ptr routeData) +{ + loadXMLRouteHeader(routeData); + +// route nodes + WayptVec wpts; + SGPropertyNode_ptr routeNode = routeData->getChild("route", 0); + for (int i=0; i<routeNode->nChildren(); ++i) { + SGPropertyNode_ptr wpNode = routeNode->getChild("wp", i); + WayptRef wpt = Waypt::createFromProperties(NULL, wpNode); + wpts.push_back(wpt); + } // of route iteration + + _route = wpts; +} + +void FGRouteMgr::loadVersion1XMLRoute(SGPropertyNode_ptr routeData) +{ + loadXMLRouteHeader(routeData); + +// route nodes + WayptVec wpts; + SGPropertyNode_ptr routeNode = routeData->getChild("route", 0); + for (int i=0; i<routeNode->nChildren(); ++i) { + SGPropertyNode_ptr wpNode = routeNode->getChild("wp", i); + WayptRef wpt = parseVersion1XMLWaypt(wpNode); + wpts.push_back(wpt); + } // of route iteration + + _route = wpts; +} + +WayptRef FGRouteMgr::parseVersion1XMLWaypt(SGPropertyNode* aWP) +{ + SGGeod lastPos; + if (!_route.empty()) { + lastPos = _route.back()->position(); + } else if (_departure) { + lastPos = _departure->geod(); } - + + WayptRef w; string ident(aWP->getStringValue("ident")); if (aWP->hasChild("longitude-deg")) { // explicit longitude/latitude - SGWayPoint swp(aWP->getDoubleValue("longitude-deg"), - aWP->getDoubleValue("latitude-deg"), altM, - SGWayPoint::WGS84, ident, aWP->getStringValue("name")); - add_waypoint(swp); - } else if (aWP->hasChild("navid")) { - // lookup by navid (possibly with offset) - string nid(aWP->getStringValue("navid")); + w = new BasicWaypt(SGGeod::fromDeg(aWP->getDoubleValue("longitude-deg"), + aWP->getDoubleValue("latitude-deg")), ident, NULL); + + } else { + string nid = aWP->getStringValue("navid", ident.c_str()); FGPositionedRef p = FGPositioned::findClosestWithIdent(nid, lastPos); if (!p) { throw sg_io_exception("bad route file, unknown navid:" + nid); } - + SGGeod pos(p->geod()); if (aWP->hasChild("offset-nm") && aWP->hasChild("offset-radial")) { double radialDeg = aWP->getDoubleValue("offset-radial"); @@ -796,21 +1248,16 @@ void FGRouteMgr::parseRouteWaypoint(SGPropertyNode* aWP) double az2; SGGeodesy::direct(p->geod(), radialDeg, offsetNm * SG_NM_TO_METER, pos, az2); } - - SGWayPoint swp(pos.getLongitudeDeg(), pos.getLatitudeDeg(), altM, - SGWayPoint::WGS84, ident, ""); - add_waypoint(swp); - } else { - // lookup by ident (symbolic waypoint) - FGPositionedRef p = FGPositioned::findClosestWithIdent(ident, lastPos); - if (!p) { - throw sg_io_exception("bad route file, unknown waypoint:" + ident); - } - - SGWayPoint swp(p->longitude(), p->latitude(), altM, - SGWayPoint::WGS84, p->ident(), p->name()); - add_waypoint(swp); + + w = new BasicWaypt(pos, ident, NULL); } + + double altFt = aWP->getDoubleValue("altitude-ft", -9999.9); + if (altFt > -9990.0) { + w->setAltitude(altFt, RESTRICT_AT); + } + + return w; } void FGRouteMgr::loadPlainTextRoute(const SGPath& path) @@ -820,17 +1267,33 @@ void FGRouteMgr::loadPlainTextRoute(const SGPath& path) return; } - _route->clear(); - while (!in.eof()) { - string line; - getline(in, line, '\n'); - // trim CR from end of line, if found - if (line[line.size() - 1] == '\r') { - line.erase(line.size() - 1, 1); - } - - new_waypoint(line, -1); - } // of line iteration + try { + WayptVec wpts; + while (!in.eof()) { + string line; + getline(in, line, '\n'); + // trim CR from end of line, if found + if (line[line.size() - 1] == '\r') { + line.erase(line.size() - 1, 1); + } + + line = simgear::strutils::strip(line); + if (line.empty() || (line[0] == '#')) { + continue; // ignore empty/comment lines + } + + WayptRef w = waypointFromString(line); + if (!w) { + throw sg_io_exception("failed to create waypoint from line:" + line); + } + + wpts.push_back(w); + } // of line iteration + + _route = wpts; + } catch (sg_exception& e) { + SG_LOG(SG_IO, SG_WARN, "failed to load route from:" << path.str() << ":" << e.getMessage()); + } } const char* FGRouteMgr::getDepartureICAO() const @@ -858,6 +1321,8 @@ void FGRouteMgr::setDepartureICAO(const char* aIdent) } else { _departure = FGAirport::findByIdent(aIdent); } + + departureChanged(); } const char* FGRouteMgr::getDestinationICAO() const @@ -885,5 +1350,7 @@ void FGRouteMgr::setDestinationICAO(const char* aIdent) } else { _destination = FGAirport::findByIdent(aIdent); } + + arrivalChanged(); } diff --git a/src/Autopilot/route_mgr.hxx b/src/Autopilot/route_mgr.hxx index f3720d09e..16b4adc4b 100644 --- a/src/Autopilot/route_mgr.hxx +++ b/src/Autopilot/route_mgr.hxx @@ -28,9 +28,11 @@ #include <simgear/route/waypoint.hxx> #include <simgear/structure/subsystem_mgr.hxx> +#include <Navaids/route.hxx> + // forward decls -class SGRoute; class SGPath; +class PropertyWatcher; class FGAirport; typedef SGSharedPtr<FGAirport> FGAirportRef; @@ -42,9 +44,91 @@ typedef SGSharedPtr<FGAirport> FGAirportRef; class FGRouteMgr : public SGSubsystem { +public: + FGRouteMgr(); + ~FGRouteMgr(); + void init (); + void postinit (); + void bind (); + void unbind (); + void update (double dt); + + void insertWayptAtIndex(flightgear::Waypt* aWpt, int aIndex); + flightgear::WayptRef removeWayptAtIndex(int index); + + void clearRoute(); + + typedef enum { + ROUTE_HIGH_AIRWAYS, ///< high-level airways routing + ROUTE_LOW_AIRWAYS, ///< low-level airways routing + ROUTE_VOR ///< VOR-VOR routing + } RouteType; + + /** + * Insert waypoints from index-1 to index. In practice this means you can + * 'fill in the gaps' between defined waypoints. If index=0, the departure + * airport is used as index-1; if index is -1, the destination airport is + * used as the final waypoint. + */ + bool routeToIndex(int index, RouteType aRouteType); + + void autoRoute(); + + bool isRouteActive() const; + + int currentIndex() const + { return _currentIndex; } + + flightgear::Waypt* currentWaypt() const; + flightgear::Waypt* nextWaypt() const; + flightgear::Waypt* previousWaypt() const; + + const flightgear::WayptVec& waypts() const + { return _route; } + + int numWaypts() const + { return _route.size(); } + + flightgear::Waypt* wayptAtIndex(int index) const; + + /** + * Find a waypoint in the route, by position, and return its index, or + * -1 if no matching waypoint was found in the route. + */ + int findWayptIndex(const SGGeod& aPos) const; + + /** + * Activate a built route. This checks for various mandatory pieces of + * data, such as departure and destination airports, and creates waypoints + * for them on the route structure. + * + * returns true if the route was activated successfully, or false if the + * route could not be activated for some reason + */ + bool activate(); + + /** + * Step to the next waypoint on the active route + */ + void sequence(); + + /** + * Set the current waypoint to the specified index. + */ + void jumpToIndex(int index); + + void saveRoute(); + void loadRoute(); + + /** + * Helper command to setup current airport/runway if necessary + */ + void initAtPosition(); private: - SGRoute* _route; + flightgear::WayptVec _route; + int _currentIndex; + time_t _takeoffTime; time_t _touchdownTime; FGAirportRef _departure; @@ -77,6 +161,8 @@ private: SGPropertyNode_ptr _pathNode; SGPropertyNode_ptr _currentWpt; + /// integer property corresponding to the RouteType enum + SGPropertyNode_ptr _routingType; /** * Signal property to notify people that the route was edited @@ -111,10 +197,17 @@ private: * - airport-id/runway-id * - navaid/radial-deg/offset-nm */ - SGWayPoint* make_waypoint(const string& target); + flightgear::WayptRef waypointFromString(const std::string& target); + + + void departureChanged(); + void buildDeparture(flightgear::WayptRef enroute, flightgear::WayptVec& wps); + + void arrivalChanged(); + void buildArrival(flightgear::WayptRef enroute, flightgear::WayptVec& wps); /** - * Helper to keep various pieces of state in sync when the SGRoute is + * Helper to keep various pieces of state in sync when the route is * modified (waypoints added, inserted, removed). Notably, this fires the * 'edited' signal. */ @@ -138,6 +231,17 @@ private: void loadPlainTextRoute(const SGPath& path); + void loadVersion1XMLRoute(SGPropertyNode_ptr routeData); + void loadVersion2XMLRoute(SGPropertyNode_ptr routeData); + void loadXMLRouteHeader(SGPropertyNode_ptr routeData); + flightgear::WayptRef parseVersion1XMLWaypt(SGPropertyNode* aWP); + + /** + * Predicate for helping the UI - test if at least one waypoint was + * entered by the user (as opposed to being generated by the route-manager) + */ + bool haveUserWaypoints() const; + // tied getters and setters const char* getDepartureICAO() const; const char* getDepartureName() const; @@ -146,64 +250,9 @@ private: const char* getDestinationICAO() const; const char* getDestinationName() const; void setDestinationICAO(const char* aIdent); - -public: - FGRouteMgr(); - ~FGRouteMgr(); - - void init (); - void postinit (); - void bind (); - void unbind (); - void update (double dt); - - bool build (); - - void new_waypoint( const string& tgt_alt, int n = -1 ); - void add_waypoint( const SGWayPoint& wp, int n = -1 ); - SGWayPoint pop_waypoint( int i = 0 ); - - SGWayPoint get_waypoint( int i ) const; - int size() const; - - bool isRouteActive() const; - - int currentWaypoint() const; - - /** - * Find a waypoint in the route, by position, and return its index, or - * -1 if no matching waypoint was found in the route. - */ - int findWaypoint(const SGGeod& aPos) const; - - /** - * Activate a built route. This checks for various mandatory pieces of - * data, such as departure and destination airports, and creates waypoints - * for them on the route structure. - * - * returns true if the route was activated successfully, or false if the - * route could not be activated for some reason - */ - bool activate(); - - /** - * Step to the next waypoint on the active route - */ - void sequence(); - - /** - * - */ - void jumpToIndex(int index); - - /** - * - */ - void setWaypointTargetAltitudeFt(unsigned int index, int altFt); - - void saveRoute(); - void loadRoute(); + PropertyWatcher* _departureWatcher; + PropertyWatcher* _arrivalWatcher; }; diff --git a/src/GUI/MapWidget.cxx b/src/GUI/MapWidget.cxx index 44b1f7601..bdd73a11e 100644 --- a/src/GUI/MapWidget.cxx +++ b/src/GUI/MapWidget.cxx @@ -25,6 +25,7 @@ #include <Airports/simple.hxx> #include <Airports/runways.hxx> #include <Main/fg_os.hxx> // fgGetKeyModifiers() +#include <Navaids/routePath.hxx> const char* RULER_LEGEND_KEY = "ruler-legend"; @@ -657,77 +658,73 @@ void MapWidget::paintAircraftLocation(const SGGeod& aircraftPos) void MapWidget::paintRoute() { - if (_route->size() < 2) { + if (_route->numWaypts() < 2) { return; } -// first pass, draw the actual line + RoutePath path(_route->waypts()); + +// first pass, draw the actual lines glLineWidth(2.0); - glBegin(GL_LINE_STRIP); - SGVec2d prev = project(_route->get_waypoint(0).get_target()); - glVertex2d(prev.x(), prev.y()); - - for (int w=1; w < _route->size(); ++w) { + for (int w=0; w<_route->numWaypts(); ++w) { + SGGeodVec gv(path.pathForIndex(w)); + if (gv.empty()) { + continue; + } - SGVec2d p = project(_route->get_waypoint(w).get_target()); - - if (w < _route->currentWaypoint()) { + if (w < _route->currentIndex()) { glColor4f(0.5, 0.5, 0.5, 0.7); } else { glColor4f(1.0, 0.0, 1.0, 1.0); } - glVertex2d(p.x(), p.y()); + flightgear::WayptRef wpt(_route->wayptAtIndex(w)); + if (wpt->flag(flightgear::WPT_MISS)) { + glEnable(GL_LINE_STIPPLE); + glLineStipple(1, 0x00FF); + } + glBegin(GL_LINE_STRIP); + for (unsigned int i=0; i<gv.size(); ++i) { + SGVec2d p = project(gv[i]); + glVertex2d(p.x(), p.y()); + } + + glEnd(); + glDisable(GL_LINE_STIPPLE); } - glEnd(); glLineWidth(1.0); // second pass, draw waypoint symbols and data - for (int w=0; w < _route->size(); ++w) { - const SGWayPoint& wpt(_route->get_waypoint(w)); - SGVec2d p = project(wpt.get_target()); + for (int w=0; w < _route->numWaypts(); ++w) { + flightgear::WayptRef wpt(_route->wayptAtIndex(w)); + SGGeod g = path.positionForIndex(w); + if (g == SGGeod()) { + continue; // Vectors or similar + } + + SGVec2d p = project(g); glColor4f(1.0, 0.0, 1.0, 1.0); circleAtAlt(p, 8, 12, 5); std::ostringstream legend; - legend << wpt.get_id(); - if (wpt.get_target_alt() > -9990.0) { - legend << '\n' << SGMiscd::roundToInt(wpt.get_target_alt()) << '\''; + legend << wpt->ident(); + if (wpt->altitudeRestriction() != flightgear::RESTRICT_NONE) { + legend << '\n' << SGMiscd::roundToInt(wpt->altitudeFt()) << '\''; } - if (wpt.get_speed() > 0.0) { - legend << '\n' << SGMiscd::roundToInt(wpt.get_speed()) << "Kts"; + if (wpt->speedRestriction() != flightgear::RESTRICT_NONE) { + legend << '\n' << SGMiscd::roundToInt(wpt->speedKts()) << "Kts"; } MapData* d = getOrCreateDataForKey(reinterpret_cast<void*>(w * 2)); d->setText(legend.str()); - d->setLabel(wpt.get_id()); + d->setLabel(wpt->ident()); d->setAnchor(p); d->setOffset(MapData::VALIGN_TOP | MapData::HALIGN_CENTER, 15); - d->setPriority(w < _route->currentWaypoint() ? 9000 : 12000); + d->setPriority(w < _route->currentIndex() ? 9000 : 12000); - if (w > 0) { - SGVec2d legMid = (prev + p) * 0.5; - std::ostringstream legLegend; - - double track = wpt.get_track(); - if (_magneticHeadings) { - track -= _magVar->get_magvar(); // show magnetic track for leg - } - - legLegend << SGMiscd::roundToInt(track) << " " - << SGMiscd::roundToInt(wpt.get_distance() * SG_METER_TO_NM) << "Nm"; - - MapData* ld = getOrCreateDataForKey(reinterpret_cast<void*>(w * 2 + 1)); - ld->setText(legLegend.str()); - ld->setAnchor(legMid); - ld->setOffset(MapData::VALIGN_TOP | MapData::HALIGN_CENTER, 15); - ld->setPriority(w < _route->currentWaypoint() ? 8000 : 11000); - } // of draw leg data - - prev = p; } // of second waypoint iteration } diff --git a/src/GUI/WaypointList.cxx b/src/GUI/WaypointList.cxx index 5498076e5..1c1014e03 100644 --- a/src/GUI/WaypointList.cxx +++ b/src/GUI/WaypointList.cxx @@ -7,6 +7,8 @@ #include "WaypointList.hxx" #include <algorithm> +#include <boost/tuple/tuple.hpp> + #include <plib/puAux.h> #include <simgear/route/waypoint.hxx> @@ -16,14 +18,18 @@ #include <Main/globals.hxx> #include <Main/fg_props.hxx> +#include <Navaids/positioned.hxx> #include <Autopilot/route_mgr.hxx> +using namespace flightgear; + enum { SCROLL_NO = 0, SCROLL_UP, SCROLL_DOWN }; +static const double BLINK_TIME = 0.3; static const int DRAG_START_DISTANCE_PX = 5; class RouteManagerWaypointModel : @@ -48,37 +54,38 @@ public: // implement WaypointList::Model virtual unsigned int numWaypoints() const { - return _rm->size(); + return _rm->numWaypts(); } virtual int currentWaypoint() const { - return _rm->currentWaypoint(); + return _rm->currentIndex(); } - virtual SGWayPoint waypointAt(unsigned int index) const + virtual flightgear::Waypt* waypointAt(unsigned int index) const { - return _rm->get_waypoint(index); + if (index >= numWaypoints()) { + return NULL; + } + + return _rm->wayptAtIndex(index); } virtual void deleteAt(unsigned int index) { - _rm->pop_waypoint(index); - } - - virtual void setWaypointTargetAltitudeFt(unsigned int index, int altFt) - { - _rm->setWaypointTargetAltitudeFt(index, altFt); + _rm->removeWayptAtIndex(index); } virtual void moveWaypointToIndex(unsigned int srcIndex, unsigned int destIndex) { + SG_LOG(SG_GENERAL, SG_INFO, "moveWaypoint: from " << srcIndex << " to " << destIndex); if (destIndex > srcIndex) { --destIndex; } - SGWayPoint wp = _rm->pop_waypoint(srcIndex); - _rm->add_waypoint(wp, destIndex); + WayptRef w(_rm->removeWayptAtIndex(srcIndex)); + SG_LOG(SG_GENERAL, SG_INFO, "wpt:" << w->ident()); + _rm->insertWayptAtIndex(w, destIndex); } virtual void setUpdateCallback(SGCallback* cb) @@ -129,13 +136,16 @@ WaypointList::WaypointList(int x, int y, int width, int height) : _showLatLon(false), _model(NULL), _updateCallback(NULL), - _scrollCallback(NULL) + _scrollCallback(NULL), + _blink(false) { // pretend to be a list, so fgPopup doesn't mess with our mouse events type |= PUCLASS_LIST; setModel(new RouteManagerWaypointModel()); setSize(width, height); setValue(-1); + + _blinkTimer.stamp(); } WaypointList::~WaypointList() @@ -230,6 +240,11 @@ void WaypointList::handleDrag(int x, int y) } _dragSourceRow = rowForY(y - abox.min[1]); + Waypt* wp = _model->waypointAt(_dragSourceRow); + if (!wp || wp->flag(WPT_GENERATED)) { + return; // don't allow generated points to be dragged + } + _dragging = true; _dragScroll = SCROLL_NO; } @@ -255,20 +270,26 @@ void WaypointList::doDrop(int x, int y) _dragging = false; puDeactivateWidget(); + SG_LOG(SG_GENERAL, SG_INFO, "doDrop"); + if ((y < abox.min[1]) || (y >= abox.max[1])) { + SG_LOG(SG_GENERAL, SG_INFO, "y out of bounds:" << y); return; } - if (_dragSourceRow != _dragTargetRow) { - _model->moveWaypointToIndex(_dragSourceRow, _dragTargetRow); - - // keep row indexes linged up when moving an item down the list - if (_dragSourceRow < _dragTargetRow) { - --_dragTargetRow; - } - - setSelected(_dragTargetRow); + if (_dragSourceRow == _dragTargetRow) { + SG_LOG(SG_GENERAL, SG_INFO, "source and target row match"); + return; } + + _model->moveWaypointToIndex(_dragSourceRow, _dragTargetRow); + + // keep row indexes linged up when moving an item down the list + if (_dragSourceRow < _dragTargetRow) { + --_dragTargetRow; + } + + setSelected(_dragTargetRow); } void WaypointList::invokeDownCallback(void) @@ -302,6 +323,12 @@ void WaypointList::draw( int dx, int dy ) doDragScroll(); } + double dt = (SGTimeStamp::now() - _blinkTimer).toSecs(); + if (dt > BLINK_TIME) { + _blinkTimer.stamp(); + _blink = !_blink; + } + glEnable(GL_SCISSOR_TEST); GLint sx = (int) abox.min[0], sy = abox.min[1]; @@ -321,6 +348,7 @@ void WaypointList::draw( int dx, int dy ) y -= (_scrollPx % rowHeight); // partially draw the first row + _arrowWidth = legendFont.getStringWidth(">"); for ( ; row <= final; ++row, y += rowHeight) { drawRow(dx, dy, row, y); } // of row drawing iteration @@ -343,6 +371,8 @@ void WaypointList::draw( int dx, int dy ) void WaypointList::drawRow(int dx, int dy, int rowIndex, int y) { + flightgear::Waypt* wp(_model->waypointAt(rowIndex)); + bool isSelected = (rowIndex == getSelected()); bool isCurrent = (rowIndex == _model->currentWaypoint()); bool isDragSource = (_dragging && (rowIndex == _dragSourceRow)); @@ -351,62 +381,100 @@ void WaypointList::drawRow(int dx, int dy, int rowIndex, int y) bkgBox.min[1] = abox.max[1] - y; bkgBox.max[1] = bkgBox.min[1] + rowHeightPx(); - puColour currentColor; - puSetColor(currentColor, 1.0, 1.0, 0.0, 0.5); + puColour col; + puFont* f = &legendFont; + bool drawBox = false; + + if (wp->flag(WPT_MISS)) { + drawBox = true; + puSetColor(col, 1.0, 0.0, 0.0, 0.3); // red + } else if (wp->flag(WPT_ARRIVAL)) { + drawBox = true; + puSetColor(col, 0.0, 0.0, 0.0, 0.3); + } else if (wp->flag(WPT_DEPARTURE)) { + drawBox = true; + puSetColor(col, 0.0, 0.0, 0.0, 0.3); + } if (isDragSource) { // draw later, on *top* of text string - } else if (isCurrent) { - bkgBox.draw(dx, dy, PUSTYLE_PLAIN, ¤tColor, false, 0); } else if (isSelected) { // -PLAIN means selected, apparently bkgBox.draw(dx, dy, -PUSTYLE_PLAIN, colour, false, 0); + } else if (drawBox) { + bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &col, false, 0); + } + + if (isCurrent) { + glColor4f (1.0, 0.5, 0.0, 1.0) ; + } else { + glColor4fv ( colour [ PUCOL_LEGEND ] ) ; } int xx = dx + abox.min[0] + PUSTR_LGAP; int yy = dy + abox.max[1] - y ; yy += 4; // center text in row height - // row textual data - const SGWayPoint wp(_model->waypointAt(rowIndex)); - char buffer[128]; - int count = ::snprintf(buffer, 128, "%03d %-5s", rowIndex, wp.get_id().c_str()); - - if (wp.get_name().size() > 0 && (wp.get_name() != wp.get_id())) { - // append name if present, and different to id - ::snprintf(buffer + count, 128 - count, " (%s)", wp.get_name().c_str()); + if (isCurrent) { + f->drawString(">", xx, yy); } - glColor4fv ( colour [ PUCOL_LEGEND ] ) ; - drawClippedString(legendFont, buffer, xx, yy, 300); + int x = xx; + x += _arrowWidth + PUSTR_LGAP; - if (_showLatLon) { - char ns = (wp.get_target_lat() > 0.0) ? 'N' : 'S'; - char ew = (wp.get_target_lon() > 0.0) ? 'E' : 'W'; - - ::snprintf(buffer, 128 - count, "%4.2f%c %4.2f%c", - fabs(wp.get_target_lon()), ew, fabs(wp.get_target_lat()), ns); - } else { - ::snprintf(buffer, 128 - count, "%03.0f %5.1fnm", - wp.get_track(), wp.get_distance() * SG_METER_TO_NM); + // row textual data + + char buffer[128]; + int count = ::snprintf(buffer, 128, "%03d %-5s", rowIndex, wp->ident().c_str()); + + FGPositioned* src = wp->source(); + if (src && !src->name().empty() && (src->name() != wp->ident())) { + // append name if present, and different to id + ::snprintf(buffer + count, 128 - count, " (%s)", src->name().c_str()); } - legendFont.drawString(buffer, xx + 300 + PUSTR_LGAP, yy); + drawClippedString(legendFont, buffer, x, yy, 300); + x += 300 + PUSTR_LGAP; - int altFt = (int) wp.get_target_alt() * SG_METER_TO_FEET; - if (altFt > -9990) { - int altHundredFt = (altFt + 50) / 100; // round to nearest 100ft + if (_showLatLon) { + SGGeod p(wp->position()); + char ns = (p.getLatitudeDeg() > 0.0) ? 'N' : 'S'; + char ew = (p.getLongitudeDeg() > 0.0) ? 'E' : 'W'; + + ::snprintf(buffer, 128 - count, "%4.2f%c %4.2f%c", + fabs(p.getLongitudeDeg()), ew, fabs(p.getLatitudeDeg()), ns); + } else if (rowIndex > 0) { + double courseDeg; + double distanceM; + Waypt* prev = _model->waypointAt(rowIndex - 1); + boost::tie(courseDeg, distanceM) = wp->courseAndDistanceFrom(prev->position()); + + ::snprintf(buffer, 128 - count, "%03.0f %5.1fnm", + courseDeg, distanceM * SG_METER_TO_NM); + } + + f->drawString(buffer, x, yy); + x += 100 + PUSTR_LGAP; + + if (wp->altitudeRestriction() != RESTRICT_NONE) { + int altHundredFt = (wp->altitudeFt() + 50) / 100; // round to nearest 100ft if (altHundredFt < 100) { count = ::snprintf(buffer, 128, "%d'", altHundredFt * 100); } else { // display as a flight-level count = ::snprintf(buffer, 128, "FL%d", altHundredFt); } - legendFont.drawString(buffer, xx + 400 + PUSTR_LGAP, yy); + f->drawString(buffer, x, yy); } // of valid wp altitude + x += 60 + PUSTR_LGAP; + + if (wp->speedRestriction() != RESTRICT_NONE) { + count = ::snprintf(buffer, 126, "%dKts", (int) wp->speedKts()); + f->drawString(buffer, x, yy); + } if (isDragSource) { - puSetColor(currentColor, 1.0, 0.5, 0.0, 0.5); - bkgBox.draw(dx, dy, PUSTYLE_PLAIN, ¤tColor, false, 0); + puSetColor(col, 1.0, 0.5, 0.0, 0.5); + bkgBox.draw(dx, dy, PUSTYLE_PLAIN, &col, false, 0); } } @@ -613,22 +681,34 @@ int WaypointList::checkKey (int key, int updown ) case '-': if (getSelected() >= 0) { - int newAlt = wayptAltFtHundreds(getSelected()) - 10; - if (newAlt < 0) { - _model->setWaypointTargetAltitudeFt(getSelected(), -9999); - } else { - _model->setWaypointTargetAltitudeFt(getSelected(), newAlt * 100); + Waypt* wp = _model->waypointAt(getSelected()); + if (wp->flag(WPT_GENERATED)) { + break; + } + + if (wp->altitudeRestriction() != RESTRICT_NONE) { + int curAlt = (static_cast<int>(wp->altitudeFt()) + 50) / 100; + if (curAlt <= 0) { + wp->setAltitude(0, RESTRICT_NONE); + } else { + wp->setAltitude((curAlt - 10) * 100, wp->altitudeRestriction()); + } } } break; case '=': if (getSelected() >= 0) { - int newAlt = wayptAltFtHundreds(getSelected()) + 10; - if (newAlt < 0) { - _model->setWaypointTargetAltitudeFt(getSelected(), 0); + flightgear::Waypt* wp = _model->waypointAt(getSelected()); + if (wp->flag(WPT_GENERATED)) { + break; + } + + if (wp->altitudeRestriction() == RESTRICT_NONE) { + wp->setAltitude(1000, RESTRICT_AT); } else { - _model->setWaypointTargetAltitudeFt(getSelected(), newAlt * 100); + int curAlt = (static_cast<int>(wp->altitudeFt()) + 50) / 100; + wp->setAltitude((curAlt + 10) * 100, wp->altitudeRestriction()); } } break; @@ -636,6 +716,11 @@ int WaypointList::checkKey (int key, int updown ) case 0x7f: // delete if (getSelected() >= 0) { int index = getSelected(); + Waypt* wp = _model->waypointAt(getSelected()); + if (wp->flag(WPT_GENERATED)) { + break; + } + _model->deleteAt(index); setSelected(index - 1); } @@ -648,17 +733,6 @@ int WaypointList::checkKey (int key, int updown ) return TRUE ; } -int WaypointList::wayptAltFtHundreds(int index) const -{ - double alt = _model->waypointAt(index).get_target_alt(); - if (alt < -9990.0) { - return -9999; - } - - int altFt = (int) alt * SG_METER_TO_FEET; - return (altFt + 50) / 100; // round to nearest 100ft -} - void WaypointList::modelUpdateCallback() { // local stuff diff --git a/src/GUI/WaypointList.hxx b/src/GUI/WaypointList.hxx index 165a1dad3..46a386b59 100644 --- a/src/GUI/WaypointList.hxx +++ b/src/GUI/WaypointList.hxx @@ -14,9 +14,12 @@ // forward decls class puaScrollBar; -class SGWayPoint; class SGCallback; +namespace flightgear { + class Waypt; +} + class WaypointList : public puFrame, public GUI_ID { public: @@ -71,14 +74,13 @@ public: virtual unsigned int numWaypoints() const = 0; virtual int currentWaypoint() const = 0; - virtual SGWayPoint waypointAt(unsigned int index) const = 0; + virtual flightgear::Waypt* waypointAt(unsigned int index) const = 0; // update notifications virtual void setUpdateCallback(SGCallback* cb) = 0; // editing operations virtual void deleteAt(unsigned int index) = 0; - virtual void setWaypointTargetAltitudeFt(unsigned int index, int altFt) = 0; virtual void moveWaypointToIndex(unsigned int srcIndex, unsigned int dstIndex) = 0; }; @@ -121,9 +123,7 @@ private: int numFullyVisibleRows() const; int firstFullyVisibleRow() const; int lastFullyVisibleRow() const; - - int wayptAltFtHundreds(int index) const; - + void modelUpdateCallback(); int _scrollPx; // scroll ammount (in pixels) @@ -141,6 +141,10 @@ private: Model* _model; SGCallback* _updateCallback; SGCallback* _scrollCallback; + + SGTimeStamp _blinkTimer; + bool _blink; + int _arrowWidth; }; class ScrolledWaypointList : public puGroup diff --git a/src/GUI/dialog.cxx b/src/GUI/dialog.cxx index fbf758b29..71852fbc7 100644 --- a/src/GUI/dialog.cxx +++ b/src/GUI/dialog.cxx @@ -1339,8 +1339,41 @@ fgList::update() void fgComboBox::update() { + if (_inHit) { + return; + } + + std::string curValue(getStringValue()); fgValueList::update(); newList(_list); + int currentItem = puaComboBox::getCurrentItem(); + + +// look for the previous value, in the new list + for (int i = 0; _list[i] != 0; i++) { + if (_list[i] == curValue) { + // don't set the current item again; this is important to avoid + // recursion here if the combo callback ultimately causes another dialog-update + if (i != currentItem) { + puaComboBox::setCurrentItem(i); + } + + return; + } + } // of list values iteration + +// cound't find current item, default to first + if (currentItem != 0) { + puaComboBox::setCurrentItem(0); + } +} + +int fgComboBox::checkHit(int b, int up, int x, int y) +{ + _inHit = true; + int r = puaComboBox::checkHit(b, up, x, y); + _inHit = false; + return r; } // end of dialog.cxx diff --git a/src/GUI/dialog.hxx b/src/GUI/dialog.hxx index 090ef2bbc..10739280d 100644 --- a/src/GUI/dialog.hxx +++ b/src/GUI/dialog.hxx @@ -259,9 +259,17 @@ public: class fgComboBox : public fgValueList, public puaComboBox { public: fgComboBox(int x1, int y1, int x2, int y2, SGPropertyNode *p, bool editable) : - fgValueList(p), puaComboBox(x1, y1, x2, y2, _list, editable) {} + fgValueList(p), + puaComboBox(x1, y1, x2, y2, _list, editable), + _inHit(false) + {} void update(); + + virtual int checkHit(int b, int up, int x, int y); + +private: + bool _inHit; }; class fgSelectBox : public fgValueList, public puaSelectBox { diff --git a/src/Instrumentation/Makefile.am b/src/Instrumentation/Makefile.am index fa7f85ea3..136929dc7 100644 --- a/src/Instrumentation/Makefile.am +++ b/src/Instrumentation/Makefile.am @@ -32,6 +32,7 @@ libInstrumentation_a_SOURCES = \ dclgps.cxx dclgps.hxx \ render_area_2d.cxx render_area_2d.hxx \ groundradar.cxx groundradar.hxx \ - agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx + agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \ + rnav_waypt_controller.cxx rnav_waypt_controller.hxx \ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_builddir)/src diff --git a/src/Instrumentation/gps.cxx b/src/Instrumentation/gps.cxx index 71e3becbd..1add1b97f 100644 --- a/src/Instrumentation/gps.cxx +++ b/src/Instrumentation/gps.cxx @@ -9,6 +9,8 @@ #include "gps.hxx" +#include <boost/tuple/tuple.hpp> + #include <memory> #include <set> #include <cstring> @@ -17,6 +19,7 @@ #include "Main/globals.hxx" // for get_subsystem #include "Main/util.hxx" // for fgLowPass #include "Navaids/positioned.hxx" +#include <Navaids/waypoint.hxx> #include "Navaids/navrecord.hxx" #include "Airports/simple.hxx" #include "Airports/runways.hxx" @@ -29,6 +32,7 @@ using std::auto_ptr; using std::string; +using namespace flightgear; /////////////////////////////////////////////////////////////////// @@ -227,6 +231,9 @@ GPS::GPS ( SGPropertyNode *node) : string branch = "/instrumentation/" + _name; _gpsNode = fgGetNode(branch.c_str(), _num, true ); _scratchNode = _gpsNode->getChild("scratch", 0, true); + + SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true); + _currentWayptNode = wp_node->getChild("wp", 1, true); } GPS::~GPS () @@ -255,17 +262,9 @@ GPS::init () _northSouthVelocity = _gpsNode->getChild("ns-velocity-msec", 0, true); // waypoints - SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true); - SGPropertyNode *wp1_node = wp_node->getChild("wp", 1, true); - // for compatability, alias selected course down to wp/wp[1]/desired-course-deg - SGPropertyNode* wp1Crs = wp1_node->getChild("desired-course-deg", 0, true); + SGPropertyNode* wp1Crs = _currentWayptNode->getChild("desired-course-deg", 0, true); wp1Crs->alias(_gpsNode->getChild("desired-course-deg", 0, true)); - -// _true_wp1_bearing_error_node = -// wp1_node->getChild("true-bearing-error-deg", 0, true); -// _magnetic_wp1_bearing_error_node = - // wp1_node->getChild("magnetic-bearing-error-deg", 0, true); _tracking_bug_node = _gpsNode->getChild("tracking-bug", 0, true); @@ -299,10 +298,10 @@ GPS::init () // navradio slaving properties SGPropertyNode* toFlag = _gpsNode->getChild("to-flag", 0, true); - toFlag->alias(wp1_node->getChild("to-flag")); + toFlag->alias(_currentWayptNode->getChild("to-flag")); SGPropertyNode* fromFlag = _gpsNode->getChild("from-flag", 0, true); - fromFlag->alias(wp1_node->getChild("from-flag")); + fromFlag->alias(_currentWayptNode->getChild("from-flag")); // autopilot drive properties _apDrivingFlag = fgGetNode("/autopilot/settings/gps-driving-true-heading", true); @@ -357,49 +356,39 @@ GPS::bind() tie(_scratchNode, "mag-bearing-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getScratchMagBearing, NULL)); tie(_scratchNode, "has-next", SGRawValueMethods<GPS, bool>(*this, &GPS::getScratchHasNext, NULL)); _scratchValid = false; - -// waypoint data (including various historical things) - SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true); - SGPropertyNode *wp0_node = wp_node->getChild("wp", 0, true); - SGPropertyNode *wp1_node = wp_node->getChild("wp", 1, true); - tieSGGeodReadOnly(wp0_node, _wp0_position, "longitude-deg", "latitude-deg", "altitude-ft"); - tie(wp0_node, "ID", SGRawValueMethods<GPS, const char*> - (*this, &GPS::getWP0Ident, NULL)); - tie(wp0_node, "name", SGRawValueMethods<GPS, const char*> - (*this, &GPS::getWP0Name, NULL)); - - tieSGGeodReadOnly(wp1_node, _wp1_position, "longitude-deg", "latitude-deg", "altitude-ft"); - tie(wp1_node, "ID", SGRawValueMethods<GPS, const char*> - (*this, &GPS::getWP1Ident, NULL)); - tie(wp1_node, "name", SGRawValueMethods<GPS, const char*> - (*this, &GPS::getWP1Name, NULL)); - tie(wp1_node, "distance-nm", SGRawValueMethods<GPS, double> + SGPropertyNode *wp_node = _gpsNode->getChild("wp", 0, true); + SGPropertyNode* wp0_node = wp_node->getChild("wp", 0, true); + + tieSGGeodReadOnly(wp0_node, _wp0_position, "longitude-deg", "latitude-deg", "altitude-ft"); + tie(_currentWayptNode, "ID", SGRawValueMethods<GPS, const char*> + (*this, &GPS::getWP1Ident, NULL)); + + tie(_currentWayptNode, "distance-nm", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1Distance, NULL)); - tie(wp1_node, "bearing-true-deg", SGRawValueMethods<GPS, double> + tie(_currentWayptNode, "bearing-true-deg", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1Bearing, NULL)); - tie(wp1_node, "bearing-mag-deg", SGRawValueMethods<GPS, double> + tie(_currentWayptNode, "bearing-mag-deg", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1MagBearing, NULL)); - tie(wp1_node, "TTW-sec", SGRawValueMethods<GPS, double> + tie(_currentWayptNode, "TTW-sec", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1TTW, NULL)); - tie(wp1_node, "TTW", SGRawValueMethods<GPS, const char*> + tie(_currentWayptNode, "TTW", SGRawValueMethods<GPS, const char*> (*this, &GPS::getWP1TTWString, NULL)); - tie(wp1_node, "course-deviation-deg", SGRawValueMethods<GPS, double> + tie(_currentWayptNode, "course-deviation-deg", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1CourseDeviation, NULL)); - tie(wp1_node, "course-error-nm", SGRawValueMethods<GPS, double> + tie(_currentWayptNode, "course-error-nm", SGRawValueMethods<GPS, double> (*this, &GPS::getWP1CourseErrorNm, NULL)); - tie(wp1_node, "to-flag", SGRawValueMethods<GPS, bool> + tie(_currentWayptNode, "to-flag", SGRawValueMethods<GPS, bool> (*this, &GPS::getWP1ToFlag, NULL)); - tie(wp1_node, "from-flag", SGRawValueMethods<GPS, bool> + tie(_currentWayptNode, "from-flag", SGRawValueMethods<GPS, bool> (*this, &GPS::getWP1FromFlag, NULL)); // leg properties (only valid in DTO/LEG modes, not OBS) tie(wp_node, "leg-distance-nm", SGRawValueMethods<GPS, double>(*this, &GPS::getLegDistance, NULL)); tie(wp_node, "leg-true-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegCourse, NULL)); tie(wp_node, "leg-mag-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegMagCourse, NULL)); - tie(wp_node, "alt-dist-ratio", SGRawValueMethods<GPS, double>(*this, &GPS::getAltDistanceRatio, NULL)); // navradio slaving properties tie(_gpsNode, "cdi-deflection", SGRawValueMethods<GPS,double> @@ -426,12 +415,11 @@ GPS::clearOutput() _last_vertical_speed = 0.0; _last_true_track = 0.0; _lastEWVelocity = _lastNSVelocity = 0.0; + _currentWaypt = _prevWaypt = NULL; + _legDistanceNm = -1.0; _raim_node->setDoubleValue(0.0); _indicated_pos = SGGeod(); - _wp1DistanceM = 0.0; - _wp1TrueBearing = 0.0; - _wp1_position = SGGeod(); _odometer_node->setDoubleValue(0); _trip_odometer_node->setDoubleValue(0); _tracking_bug_node->setDoubleValue(0); @@ -455,61 +443,28 @@ GPS::update (double delta_time_sec) if (delta_time_sec <= 0.0) { return; // paused, don't bother } - // TODO: Add noise and other errors. -/* - - // Bias and random error - double random_factor = sg_random(); - double random_error = 1.4; - double error_radius = 5.1; - double bias_max_radius = 5.1; - double random_max_radius = 1.4; - - bias_length += (random_factor-0.5) * 1.0e-3; - if (bias_length <= 0.0) bias_length = 0.0; - else if (bias_length >= bias_max_radius) bias_length = bias_max_radius; - bias_angle += (random_factor-0.5) * 1.0e-3; - if (bias_angle <= 0.0) bias_angle = 0.0; - else if (bias_angle >= 360.0) bias_angle = 360.0; - - double random_length = random_factor * random_max_radius; - double random_angle = random_factor * 360.0; - - double bias_x = bias_length * cos(bias_angle * SG_PI / 180.0); - double bias_y = bias_length * sin(bias_angle * SG_PI / 180.0); - double random_x = random_length * cos(random_angle * SG_PI / 180.0); - double random_y = random_length * sin(random_angle * SG_PI / 180.0); - double error_x = bias_x + random_x; - double error_y = bias_y + random_y; - double error_length = sqrt(error_x*error_x + error_y*error_y); - double error_angle = atan(error_y / error_x) * 180.0 / SG_PI; - - double lat2; - double lon2; - double az2; - geo_direct_wgs_84 ( altitude_m, latitude_deg, - longitude_deg, error_angle, - error_length, &lat2, &lon2, - &az2 ); - //cout << lat2 << " " << lon2 << endl; - printf("%f %f \n", bias_length, bias_angle); - printf("%3.7f %3.7f \n", lat2, lon2); - printf("%f %f \n", error_length, error_angle); - -*/ + _raim_node->setDoubleValue(1.0); _indicated_pos = _position.get(); updateBasicData(delta_time_sec); if (_dataValid) { - if (_mode != "obs") { - updateTurn(); - } + if (_wayptController.get()) { + _wayptController->update(); + SGGeod p(_wayptController->position()); + _currentWayptNode->setDoubleValue("longitude-deg", p.getLongitudeDeg()); + _currentWayptNode->setDoubleValue("latitude-deg", p.getLatitudeDeg()); + _currentWayptNode->setDoubleValue("altitude-ft", p.getElevationFt()); - updateWaypoints(); + _desiredCourse = getLegMagCourse(); + + updateTurn(); + updateRouteData(); + } + + updateTrackingBug(); updateReferenceNavaid(delta_time_sec); - updateRouteData(); driveAutopilot(); } @@ -538,6 +493,49 @@ GPS::update (double delta_time_sec) _lastPosValid = true; } +/////////////////////////////////////////////////////////////////////////// +// implement the RNAV interface +SGGeod GPS::position() +{ + if (!_dataValid) { + return SGGeod(); + } + + return _indicated_pos; +} + +double GPS::trackDeg() +{ + return _last_true_track; +} + +double GPS::groundSpeedKts() +{ + return _last_speed_kts; +} + +double GPS::vspeedFPM() +{ + return _last_vertical_speed; +} + +double GPS::magvarDeg() +{ + return _magvar_node->getDoubleValue(); +} + +double GPS::overflightArmDistanceM() +{ + return _config.overflightArmDistanceNm() * SG_NM_TO_METER; +} + +double GPS::selectedMagCourse() +{ + return _selectedCourse; +} + +/////////////////////////////////////////////////////////////////////////// + void GPS::updateBasicData(double dt) { @@ -601,13 +599,6 @@ GPS::updateTrackingBug() _magnetic_bug_error_node->setDoubleValue(magnetic_bug_error); } -void -GPS::updateWaypoints() -{ - double az2; - SGGeodesy::inverse(_indicated_pos, _wp1_position, _wp1TrueBearing, az2,_wp1DistanceM); -} - void GPS::updateReferenceNavaid(double dt) { if (!_ref_navaid_set) { @@ -690,7 +681,9 @@ void GPS::routeActivated() } } else if (_mode == "leg") { SG_LOG(SG_INSTR, SG_INFO, "GPS::route deactivated, switching to OBS mode"); - selectOBSMode(); + // select OBS mode, but keep current waypoint-as is + _mode = "obs"; + wp1Changed(); } } @@ -701,8 +694,8 @@ void GPS::routeManagerSequenced() return; } - int index = _routeMgr->currentWaypoint(), - count = _routeMgr->size(); + int index = _routeMgr->currentIndex(), + count = _routeMgr->numWaypts(); if ((index < 0) || (index >= count)) { SG_LOG(SG_INSTR, SG_ALERT, "GPS: malformed route, index=" << index); return; @@ -711,17 +704,15 @@ void GPS::routeManagerSequenced() SG_LOG(SG_INSTR, SG_INFO, "GPS waypoint index is now " << index); if (index > 0) { - SGWayPoint wp0(_routeMgr->get_waypoint(index - 1)); - _wp0Ident = wp0.get_id(); - _wp0Name = wp0.get_name(); - _wp0_position = wp0.get_target(); - + _prevWaypt = _routeMgr->previousWaypt(); + if (_prevWaypt->flag(WPT_DYNAMIC)) { + _wp0_position = _indicated_pos; + } else { + _wp0_position = _prevWaypt->position(); + } } - SGWayPoint wp1(_routeMgr->get_waypoint(index)); - _wp1Ident = wp1.get_id(); - _wp1Name = wp1.get_name(); - _wp1_position = wp1.get_target(); + _currentWaypt = _routeMgr->currentWaypt(); _desiredCourse = getLegMagCourse(); _desiredCourseNode->fireValueChanged(); @@ -745,8 +736,8 @@ void GPS::routeFinished() } SG_LOG(SG_INSTR, SG_INFO, "GPS route finished, reverting to OBS"); + // select OBS mode, but keep current waypoint-as is _mode = "obs"; - _wp0_position = _indicated_pos; wp1Changed(); } @@ -800,7 +791,7 @@ void GPS::updateTurn() double deviationNm = (distanceM * SG_METER_TO_NM) - _turnRadius; double deviationDeg = desiredCourse - getMagTrack(); deviationNm = copysign(deviationNm, deviationDeg); - // FXIME + // FIXME //_wp1_course_deviation_node->setDoubleValue(deviationDeg); //_wp1_course_error_nm_node->setDoubleValue(deviationNm); //_cdiDeflectionNode->setDoubleValue(deviationDeg); @@ -809,26 +800,29 @@ void GPS::updateTurn() void GPS::updateOverflight() { - if ((_wp1DistanceM * SG_METER_TO_NM) > _config.overflightArmDistanceNm()) { + if (!_wayptController->isDone()) { return; } - if (getWP1ToFlag()) { - return; // still heading towards the WP - } - if (_mode == "dto") { SG_LOG(SG_INSTR, SG_INFO, "GPS DTO reached destination point"); // check for wp1 being on active route - resume leg mode if (_routeMgr->isRouteActive()) { - int index = _routeMgr->findWaypoint(_wp1_position); + int index = _routeMgr->findWayptIndex(_currentWaypt->position()); if (index >= 0) { SG_LOG(SG_INSTR, SG_INFO, "GPS DTO, resuming LEG mode at wp:" << index); _mode = "leg"; _routeMgr->jumpToIndex(index); } } + + if (_mode == "dto") { + // if we didn't enter leg mode, drop back to OBS mode + // select OBS mode, but keep current waypoint-as is + _mode = "obs"; + wp1Changed(); + } } else if (_mode == "leg") { SG_LOG(SG_INSTR, SG_INFO, "GPS doing overflight sequencing"); _routeMgr->sequence(); @@ -867,8 +861,8 @@ void GPS::computeTurnData() return; } - int curIndex = _routeMgr->currentWaypoint(); - if ((curIndex + 1) >= _routeMgr->size()) { + WayptRef next = _routeMgr->nextWaypt(); + if (!next || next->flag(WPT_DYNAMIC)) { _anticipateTurn = false; return; } @@ -880,11 +874,9 @@ void GPS::computeTurnData() _turnStartBearing = _desiredCourse; // compute next leg course - SGWayPoint wp1(_routeMgr->get_waypoint(curIndex)), - wp2(_routeMgr->get_waypoint(curIndex + 1)); double crs, dist; - wp2.CourseAndDistance(wp1, &crs, &dist); - + boost::tie(crs, dist) = next->courseAndDistanceFrom(_currentWaypt->position()); + // compute offset bearing _turnAngle = crs - _turnStartBearing; @@ -897,9 +889,9 @@ void GPS::computeTurnData() ", out=" << crs << "; turnAngle=" << _turnAngle << ", median=" << median << ", offset=" << offsetBearing); - SG_LOG(SG_INSTR, SG_INFO, "next leg is now:" << wp1.get_id() << "->" << wp2.get_id()); + SG_LOG(SG_INSTR, SG_INFO, "next leg is now:" << _currentWaypt->ident() << "->" << next->ident()); - _turnPt = _wp1_position; + _turnPt = _currentWaypt->position(); _anticipateTurn = true; } @@ -945,10 +937,10 @@ double GPS::computeTurnRadiusNm(double aGroundSpeedKts) const void GPS::updateRouteData() { - double totalDistance = _wp1DistanceM * SG_METER_TO_NM; + double totalDistance = _wayptController->distanceToWayptM() * SG_METER_TO_NM; // walk all waypoints from wp2 to route end, and sum - for (int i=_routeMgr->currentWaypoint()+1; i<_routeMgr->size(); ++i) { - totalDistance += _routeMgr->get_waypoint(i).get_distance(); + for (int i=_routeMgr->currentIndex()+1; i<_routeMgr->numWaypts(); ++i) { + //totalDistance += _routeMgr->get_waypoint(i).get_distance(); } _routeDistanceNm->setDoubleValue(totalDistance * SG_METER_TO_NM); @@ -979,13 +971,36 @@ void GPS::driveAutopilot() void GPS::wp1Changed() { + if (_mode == "leg") { + _wayptController.reset(WayptController::createForWaypt(this, _currentWaypt)); + } else if (_mode == "obs") { + _wayptController.reset(new OBSController(this, _currentWaypt)); + } else if (_mode == "dto") { + _wayptController.reset(new DirectToController(this, _currentWaypt, _wp0_position)); + } + + _wayptController->init(); + + if (_mode == "obs") { + _legDistanceNm = -1.0; + } else { + _wayptController->update(); + _legDistanceNm = _wayptController->distanceToWayptM() * SG_METER_TO_NM; + } + if (!_config.driveAutopilot()) { return; } - double altFt = _wp1_position.getElevationFt(); - if (altFt > -9990.0) { - _apTargetAltitudeFt->setDoubleValue(altFt); + RouteRestriction ar = _currentWaypt->altitudeRestriction(); + double restrictAlt = _currentWaypt->altitudeFt(); + double alt = _indicated_pos.getElevationFt(); + if ((ar == RESTRICT_AT) || + ((ar == RESTRICT_ABOVE) && (alt < restrictAlt)) || + ((ar == RESTRICT_BELOW) && (alt > restrictAlt))) + { + SG_LOG(SG_AUTOPILOT, SG_INFO, "current waypt has altitude set, setting on AP"); + _apTargetAltitudeFt->setDoubleValue(restrictAlt); } } @@ -1011,16 +1026,16 @@ double GPS::getLegDistance() const return -1; } - return SGGeodesy::distanceNm(_wp0_position, _wp1_position); + return _legDistanceNm; } double GPS::getLegCourse() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return -9999.0; } - return SGGeodesy::courseDeg(_wp0_position, _wp1_position); + return _wayptController->targetTrackDeg(); } double GPS::getLegMagCourse() const @@ -1034,21 +1049,6 @@ double GPS::getLegMagCourse() const return m; } -double GPS::getAltDistanceRatio() const -{ - if (!_dataValid || (_mode == "obs")) { - return 0.0; - } - - double dist = SGGeodesy::distanceM(_wp0_position, _wp1_position); - if ( dist <= 0.0 ) { - return 0.0; - } - - double alt_difference_m = _wp0_position.getElevationM() - _wp1_position.getElevationM(); - return alt_difference_m / dist; -} - double GPS::getMagTrack() const { if (!_dataValid) { @@ -1086,16 +1086,12 @@ const char* GPS::getWP0Ident() const return ""; } - return _wp0Ident.c_str(); + return _prevWaypt->ident().c_str(); } const char* GPS::getWP0Name() const { - if (!_dataValid || (_mode != "leg")) { - return ""; - } - - return _wp0Name.c_str(); + return ""; } const char* GPS::getWP1Ident() const @@ -1104,56 +1100,49 @@ const char* GPS::getWP1Ident() const return ""; } - return _wp1Ident.c_str(); + return _currentWaypt->ident().c_str(); } const char* GPS::getWP1Name() const { - if (!_dataValid) { - return ""; - } - - return _wp1Name.c_str(); + return ""; } double GPS::getWP1Distance() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return -1.0; } - return _wp1DistanceM * SG_METER_TO_NM; + return _wayptController->distanceToWayptM() * SG_METER_TO_NM; } double GPS::getWP1TTW() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return -1.0; } - if (_last_speed_kts < 1.0) { - return -1.0; - } - - return (getWP1Distance() / _last_speed_kts) * 3600.0; + return _wayptController->timeToWaypt(); } const char* GPS::getWP1TTWString() const { - if (!_dataValid) { + double t = getWP1TTW(); + if (t <= 0.0) { return ""; } - return makeTTWString(getWP1TTW()); + return makeTTWString(t); } double GPS::getWP1Bearing() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return -9999.0; } - return _wp1TrueBearing; + return _wayptController->trueBearingDeg(); } double GPS::getWP1MagBearing() const @@ -1162,56 +1151,41 @@ double GPS::getWP1MagBearing() const return -9999.0; } - double magBearing = _wp1TrueBearing - _magvar_node->getDoubleValue(); + double magBearing = _wayptController->trueBearingDeg() - _magvar_node->getDoubleValue(); SG_NORMALIZE_RANGE(magBearing, 0.0, 360.0); return magBearing; } double GPS::getWP1CourseDeviation() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return 0.0; } - - double dev = getWP1MagBearing() - _desiredCourse; - SG_NORMALIZE_RANGE(dev, -180.0, 180.0); - - if (fabs(dev) > 90.0) { - // When the course is away from the waypoint, - // it makes sense to change the sign of the deviation. - dev *= -1.0; - SG_NORMALIZE_RANGE(dev, -90.0, 90.0); - } - - return dev; + + return _wayptController->courseDeviationDeg(); } double GPS::getWP1CourseErrorNm() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return 0.0; } - double radDev = getWP1CourseDeviation() * SG_DEGREES_TO_RADIANS; - double course_error_m = sin(radDev) * _wp1DistanceM; - return course_error_m * SG_METER_TO_NM; + return _wayptController->xtrackErrorNm(); } bool GPS::getWP1ToFlag() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return false; } - double dev = getWP1MagBearing() - _desiredCourse; - SG_NORMALIZE_RANGE(dev, -180.0, 180.0); - - return (fabs(dev) < 90.0); + return _wayptController->toFlag(); } bool GPS::getWP1FromFlag() const { - if (!_dataValid) { + if (!_dataValid || !_wayptController.get()) { return false; } @@ -1278,9 +1252,9 @@ void GPS::setCommand(const char* aCmd) defineWaypoint(); } else if (!strcmp(aCmd, "route-insert-before")) { int index = _scratchNode->getIntValue("index"); - if (index < 0 || (_routeMgr->size() == 0)) { - index = _routeMgr->size(); - } else if (index >= _routeMgr->size()) { + if (index < 0 || (_routeMgr->numWaypts() == 0)) { + index = _routeMgr->numWaypts(); + } else if (index >= _routeMgr->numWaypts()) { SG_LOG(SG_INSTR, SG_WARN, "GPS:route-insert-before, bad index:" << index); return; } @@ -1288,9 +1262,9 @@ void GPS::setCommand(const char* aCmd) insertWaypointAtIndex(index); } else if (!strcmp(aCmd, "route-insert-after")) { int index = _scratchNode->getIntValue("index"); - if (index < 0 || (_routeMgr->size() == 0)) { - index = _routeMgr->size(); - } else if (index >= _routeMgr->size()) { + if (index < 0 || (_routeMgr->numWaypts() == 0)) { + index = _routeMgr->numWaypts(); + } else if (index >= _routeMgr->numWaypts()) { SG_LOG(SG_INSTR, SG_WARN, "GPS:route-insert-after, bad index:" << index); return; } else { @@ -1301,8 +1275,8 @@ void GPS::setCommand(const char* aCmd) } else if (!strcmp(aCmd, "route-delete")) { int index = _scratchNode->getIntValue("index"); if (index < 0) { - index = _routeMgr->size(); - } else if (index >= _routeMgr->size()) { + index = _routeMgr->numWaypts(); + } else if (index >= _routeMgr->numWaypts()) { SG_LOG(SG_INSTR, SG_WARN, "GPS:route-delete, bad index:" << index); return; } @@ -1332,18 +1306,16 @@ bool GPS::isScratchPositionValid() const } void GPS::directTo() -{ - _wp0_position = _indicated_pos; - - if (isScratchPositionValid()) { - _wp1Ident = _scratchNode->getStringValue("ident"); - _wp1Name = _scratchNode->getStringValue("name"); - _wp1_position = _scratchPos; +{ + if (!isScratchPositionValid()) { + return; } + _prevWaypt = NULL; + _wp0_position = _indicated_pos; + _currentWaypt = new BasicWaypt(_scratchPos, _scratchNode->getStringValue("ident"), NULL); _mode = "dto"; - _desiredCourse = getLegMagCourse(); - _desiredCourseNode->fireValueChanged(); + clearScratch(); wp1Changed(); } @@ -1359,8 +1331,8 @@ void GPS::loadRouteWaypoint() int index = _scratchNode->getIntValue("index", -9999); clearScratch(); - if ((index < 0) || (index >= _routeMgr->size())) { // no index supplied, use current wp - index = _routeMgr->currentWaypoint(); + if ((index < 0) || (index >= _routeMgr->numWaypts())) { // no index supplied, use current wp + index = _routeMgr->currentIndex(); } _searchIsRoute = true; @@ -1370,18 +1342,16 @@ void GPS::loadRouteWaypoint() void GPS::setScratchFromRouteWaypoint(int aIndex) { assert(_searchIsRoute); - if ((aIndex < 0) || (aIndex >= _routeMgr->size())) { + if ((aIndex < 0) || (aIndex >= _routeMgr->numWaypts())) { SG_LOG(SG_INSTR, SG_WARN, "GPS:setScratchFromRouteWaypoint: route-index out of bounds"); return; } _searchResultIndex = aIndex; - SGWayPoint wp(_routeMgr->get_waypoint(aIndex)); - _scratchNode->setStringValue("name", wp.get_name()); - _scratchNode->setStringValue("ident", wp.get_id()); - _scratchPos = wp.get_target(); + WayptRef wp = _routeMgr->wayptAtIndex(aIndex); + _scratchNode->setStringValue("ident", wp->ident()); + _scratchPos = wp->position(); _scratchValid = true; - _scratchNode->setDoubleValue("course", wp.get_track()); _scratchNode->setIntValue("index", aIndex); } @@ -1476,9 +1446,9 @@ void GPS::search() auto_ptr<FGPositioned::Filter> f(createFilter(_searchType)); if (_searchNames) { - _searchResults = FGPositioned::findAllWithName(_searchQuery, f.get()); + _searchResults = FGPositioned::findAllWithName(_searchQuery, f.get(), _searchExact); } else { - _searchResults = FGPositioned::findAllWithIdent(_searchQuery, f.get()); + _searchResults = FGPositioned::findAllWithIdent(_searchQuery, f.get(), _searchExact); } bool orderByRange = _scratchNode->getBoolValue("order-by-distance", true); @@ -1498,7 +1468,7 @@ bool GPS::getScratchHasNext() const { int lastResult; if (_searchIsRoute) { - lastResult = _routeMgr->size() - 1; + lastResult = _routeMgr->numWaypts() - 1; } else { lastResult = (int) _searchResults.size() - 1; } @@ -1584,14 +1554,14 @@ void GPS::addAirportToScratch(FGAirport* aAirport) void GPS::selectOBSMode() { - if (isScratchPositionValid()) { - _wp1Ident = _scratchNode->getStringValue("ident"); - _wp1Name = _scratchNode->getStringValue("name"); - _wp1_position = _scratchPos; + if (!isScratchPositionValid()) { + return; } SG_LOG(SG_INSTR, SG_INFO, "GPS switching to OBS mode"); _mode = "obs"; + + _currentWaypt = new BasicWaypt(_scratchPos, _scratchNode->getStringValue("ident"), NULL); _wp0_position = _indicated_pos; wp1Changed(); } @@ -1680,7 +1650,7 @@ void GPS::defineWaypoint() void GPS::insertWaypointAtIndex(int aIndex) { // note we do allow index = routeMgr->size(), that's an append - if ((aIndex < 0) || (aIndex > _routeMgr->size())) { + if ((aIndex < 0) || (aIndex > _routeMgr->numWaypts())) { throw sg_range_exception("GPS::insertWaypointAtIndex: index out of bounds"); } @@ -1690,18 +1660,18 @@ void GPS::insertWaypointAtIndex(int aIndex) } string ident = _scratchNode->getStringValue("ident"); - string name = _scratchNode->getStringValue("name"); - - _routeMgr->add_waypoint(SGWayPoint(_scratchPos, ident, name), aIndex); + + WayptRef wpt = new BasicWaypt(_scratchPos, ident, NULL); + _routeMgr->insertWayptAtIndex(wpt, aIndex); } void GPS::removeWaypointAtIndex(int aIndex) { - if ((aIndex < 0) || (aIndex >= _routeMgr->size())) { + if ((aIndex < 0) || (aIndex >= _routeMgr->numWaypts())) { throw sg_range_exception("GPS::removeWaypointAtIndex: index out of bounds"); } - _routeMgr->pop_waypoint(aIndex); + _routeMgr->removeWayptAtIndex(aIndex); } void GPS::tieSGGeod(SGPropertyNode* aNode, SGGeod& aRef, diff --git a/src/Instrumentation/gps.hxx b/src/Instrumentation/gps.hxx index d6c3a7069..3005997c0 100644 --- a/src/Instrumentation/gps.hxx +++ b/src/Instrumentation/gps.hxx @@ -13,7 +13,8 @@ #include <simgear/structure/subsystem_mgr.hxx> #include <simgear/math/SGMath.hxx> -#include "Navaids/positioned.hxx" +#include <Navaids/positioned.hxx> +#include <Instrumentation/rnav_waypt_controller.hxx> // forward decls class SGRoute; @@ -73,20 +74,29 @@ private: * /instrumentation/gps/magnetic-bug-error-deg */ -class GPS : public SGSubsystem +class GPS : public SGSubsystem, public flightgear::RNAV { - public: - GPS (SGPropertyNode *node); GPS (); virtual ~GPS (); + // SGSubsystem interface virtual void init (); virtual void update (double delta_time_sec); virtual void bind(); virtual void unbind(); + + // RNAV interface + virtual SGGeod position(); + virtual double trackDeg(); + virtual double groundSpeedKts(); + virtual double vspeedFPM(); + virtual double magvarDeg(); + virtual double selectedMagCourse(); + virtual double overflightArmDistanceM(); + private: friend class GPSListener; friend class SearchFilter; @@ -188,7 +198,6 @@ private: void clearOutput(); void updateBasicData(double dt); - void updateWaypoints(); void updateTrackingBug(); void updateReferenceNavaid(double dt); @@ -275,7 +284,6 @@ private: double getLegDistance() const; double getLegCourse() const; double getLegMagCourse() const; - double getAltDistanceRatio() const; double getTrueTrack() const { return _last_true_track; } double getMagTrack() const; @@ -325,6 +333,7 @@ private: // members SGPropertyNode_ptr _gpsNode; + SGPropertyNode_ptr _currentWayptNode; SGPropertyNode_ptr _magvar_node; SGPropertyNode_ptr _serviceable_node; SGPropertyNode_ptr _electrical_node; @@ -379,10 +388,8 @@ private: SGGeodProperty _position; SGGeod _wp0_position; - SGGeod _wp1_position; SGGeod _indicated_pos; - std::string _wp0Ident, _wp0Name, _wp1Ident, _wp1Name; - double _wp1DistanceM, _wp1TrueBearing; + double _legDistanceNm; // scratch data SGGeod _scratchPos; @@ -410,7 +417,11 @@ private: SGGeod _turnPt; SGGeod _turnCentre; + std::auto_ptr<flightgear::WayptController> _wayptController; + SGPropertyNode_ptr _realismSimpleGps; ///< should the GPS be simple or realistic? + flightgear::WayptRef _prevWaypt; + flightgear::WayptRef _currentWaypt; // autopilot drive properties SGPropertyNode_ptr _apDrivingFlag; diff --git a/src/Instrumentation/rnav_waypt_controller.cxx b/src/Instrumentation/rnav_waypt_controller.cxx new file mode 100644 index 000000000..fbdb5eeb1 --- /dev/null +++ b/src/Instrumentation/rnav_waypt_controller.cxx @@ -0,0 +1,697 @@ +// rnav_waypt_controller.cxx - Waypoint-specific behaviours for RNAV systems +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#include "rnav_waypt_controller.hxx" + +#include <simgear/sg_inlines.h> +#include <simgear/structure/exception.hxx> + +#include <Airports/runways.hxx> + +namespace flightgear +{ + +const double KNOTS_TO_METRES_PER_SECOND = SG_NM_TO_METER / 3600.0; + +double pmod(double x, double y) +{ + if (x < 0.0) { + return -fmod(x, y); + } else { + return fmod(x,y); + } +} + +// implementation of +// http://williams.best.vwh.net/avform.htm#Intersection +bool geocRadialIntersection(const SGGeoc& a, double r1, const SGGeoc& b, double r2, SGGeoc& result) +{ + double crs13 = r1 * SG_DEGREES_TO_RADIANS; + double crs23 = r2 * SG_DEGREES_TO_RADIANS; + double dst12 = SGGeodesy::distanceRad(a, b); + + //IF sin(lon2-lon1)<0 + // crs12=acos((sin(lat2)-sin(lat1)*cos(dst12))/(sin(dst12)*cos(lat1))) + // crs21=2.*pi-acos((sin(lat1)-sin(lat2)*cos(dst12))/(sin(dst12)*cos(lat2))) + // ELSE + // crs12=2.*pi-acos((sin(lat2)-sin(lat1)*cos(dst12))/(sin(dst12)*cos(lat1))) + // crs21=acos((sin(lat1)-sin(lat2)*cos(dst12))/(sin(dst12)*cos(lat2))) + // ENDIF + + + // double diffLon = b.getLongitudeRad() - a.getLongitudeRad(); + + double sinLat1 = sin(a.getLatitudeRad()); + double cosLat1 = cos(a.getLatitudeRad()); + // double sinLat2 = sin(b.getLatitudeRad()); + //double cosLat2 = cos(b.getLatitudeRad()); + double sinDst12 = sin(dst12); + double cosDst12 = cos(dst12); + + double crs12 = SGGeodesy::courseRad(a, b), + crs21 = SGGeodesy::courseRad(b, a); + + double degCrs12 = crs12 * SG_RADIANS_TO_DEGREES; + double degCrs21 = crs21 * SG_RADIANS_TO_DEGREES; + + /* + if (sin(diffLon) < 0.0) { + crs12 = acos((sinLat2 - sinLat1 * cosDst12) / (sinDst12 * cosLat1)); + crs21 = SGMiscd::twopi() - acos((sinLat1 - sinLat2*cosDst12)/(sinDst12*cosLat2)); + } else { + crs12 = SGMiscd::twopi() - acos((sinLat2 - sinLat1 * cosDst12)/(sinDst12 * cosLat1)); + crs21 = acos((sinLat1 - sinLat2 * cosDst12)/(sinDst12 * cosLat2)); + } + */ + + double ang1 = SGMiscd::normalizeAngle2(crs13-crs12); + double ang2 = SGMiscd::normalizeAngle2(crs21-crs23); + + if ((sin(ang1) == 0.0) && (sin(ang2) == 0.0)) { + SG_LOG(SG_GENERAL, SG_WARN, "geocRadialIntersection: infinity of intersections"); + return false; + } + + if ((sin(ang1)*sin(ang2))<0.0) { + SG_LOG(SG_GENERAL, SG_WARN, "geocRadialIntersection: intersection ambiguous"); + return false; + } + + ang1 = fabs(ang1); + ang2 = fabs(ang2); + + //ang3=acos(-cos(ang1)*cos(ang2)+sin(ang1)*sin(ang2)*cos(dst12)) + //dst13=atan2(sin(dst12)*sin(ang1)*sin(ang2),cos(ang2)+cos(ang1)*cos(ang3)) + //lat3=asin(sin(lat1)*cos(dst13)+cos(lat1)*sin(dst13)*cos(crs13)) + + //lon3=mod(lon1-dlon+pi,2*pi)-pi + + double ang3 = acos(-cos(ang1) * cos(ang2) + sin(ang1) * sin(ang2) * cosDst12); + double dst13 = atan2(sinDst12 * sin(ang1) * sin(ang2), cos(ang2) + cos(ang1)*cos(ang3)); + + SGGeoc pt3; + SGGeodesy::advanceRadM(a, crs13, dst13 * SG_RAD_TO_NM * SG_NM_TO_METER, pt3); + + double lat3 = asin(sinLat1 * cos(dst13) + cosLat1 * sin(dst13) * cos(crs13)); + + //dlon=atan2(sin(crs13)*sin(dst13)*cos(lat1),cos(dst13)-sin(lat1)*sin(lat3)) + double dlon = atan2(sin(crs13)*sin(dst13)*cosLat1, cos(dst13)- (sinLat1 * sin(lat3))); + double lon3 = SGMiscd::normalizeAngle(-a.getLongitudeRad()-dlon); + + result = SGGeoc::fromRadM(-lon3, lat3, a.getRadiusM()); + //result = pt3; + return true; +} + +//////////////////////////////////////////////////////////////////////////// + +WayptController::~WayptController() +{ +} + +void WayptController::init() +{ +} + +void WayptController::setDone() +{ + if (_isDone) { + SG_LOG(SG_AUTOPILOT, SG_WARN, "already done @ WayptController::setDone"); + } + + _isDone = true; +} + +double WayptController::timeToWaypt() const +{ + double gs = _rnav->groundSpeedKts(); + if (gs < 1.0) { + return -1.0; // stationary + } + + gs*= KNOTS_TO_METRES_PER_SECOND; + return (distanceToWayptM() / gs); +} + +////////////// + +class BasicWayptCtl : public WayptController +{ +public: + BasicWayptCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + { + if (aWpt->flag(WPT_DYNAMIC)) { + throw sg_exception("BasicWayptCtrl doesn't work with dynamic waypoints"); + } + } + + virtual void init() + { + _targetTrack = SGGeodesy::courseDeg(_rnav->position(), _waypt->position()); + } + + virtual void update() + { + double brg, az2; + SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); + _courseDev = brg - _targetTrack; + SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0); + + if ((fabs(_courseDev) > 90.0) && (_distanceM < _rnav->overflightArmDistanceM())) { + setDone(); + } + } + + virtual double distanceToWayptM() const + { + return _distanceM; + } + + virtual double xtrackErrorNm() const + { + double x = sin(courseDeviationDeg() * SG_DEGREES_TO_RADIANS) * _distanceM; + return x * SG_METER_TO_NM; + } + + virtual bool toFlag() const + { + return (fabs(_courseDev) < 90.0); + } + + virtual double courseDeviationDeg() const + { + return _courseDev; + } + + virtual double trueBearingDeg() const + { + return SGGeodesy::courseDeg(_rnav->position(), _waypt->position()); + } + + virtual SGGeod position() const + { + return _waypt->position(); + } + +private: + double _distanceM; + double _courseDev; +}; + +/** + * Special controller for runways. For runways, we want very narrow deviation + * contraints, and to understand that any point along the paved area is + * equivalent to being 'at' the runway. + */ +class RunwayCtl : public WayptController +{ +public: + RunwayCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + { + } + + virtual void init() + { + _runway = static_cast<RunwayWaypt*>(_waypt.get())->runway(); + _targetTrack = _runway->headingDeg(); + } + + virtual void update() + { + double brg, az2; + // use the far end of the runway for course deviation calculations. + // this should do the correct thing both for takeoffs (including entering + // the runway at a taxiway after the threshold) and also landings. + // seperately compute the distance to the threshold for timeToWaypt calc + SGGeodesy::inverse(_rnav->position(), _runway->end(), brg, az2, _distanceM); + double _courseDev = brg - _targetTrack; + SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0); + + if (fabs(_courseDev) > 90.0) { + setDone(); + } + } + + virtual double distanceToWayptM() const + { + return SGGeodesy::distanceM(_rnav->position(), _runway->threshold()); + } + + virtual double xtrackErrorNm() const + { + double x = sin(_courseDev * SG_RADIANS_TO_DEGREES) * _distanceM; + return x * SG_METER_TO_NM; + } + + virtual double courseDeviationDeg() const + { + return _courseDev; + } + + virtual double trueBearingDeg() const + { + // as in update(), use runway->end here, so the value remains + // sensible whether taking off or landing. + return SGGeodesy::courseDeg(_rnav->position(), _runway->end()); + } + + virtual SGGeod position() const + { + return _runway->threshold(); + } +private: + FGRunway* _runway; + double _distanceM; + double _courseDev; +}; + +class ConstHdgToAltCtl : public WayptController +{ +public: + ConstHdgToAltCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + + { + if (_waypt->type() != "hdgToAlt") { + throw sg_exception("invalid waypoint type", "ConstHdgToAltCtl ctor"); + } + + if (_waypt->altitudeRestriction() == RESTRICT_NONE) { + throw sg_exception("invalid waypoint alt restriction", "ConstHdgToAltCtl ctor"); + } + } + + virtual void init() + { + HeadingToAltitude* w = (HeadingToAltitude*) _waypt.get(); + _targetTrack = w->headingDegMagnetic() + _rnav->magvarDeg(); + } + + virtual void update() + { + double curAlt = _rnav->position().getElevationFt(); + + switch (_waypt->altitudeRestriction()) { + case RESTRICT_AT: { + double d = curAlt - _waypt->altitudeFt(); + if (fabs(d) < 50.0) { + SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, reached target altitude " << _waypt->altitudeFt()); + setDone(); + } + } break; + + case RESTRICT_ABOVE: + if (curAlt >= _waypt->altitudeFt()) { + SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, above target altitude " << _waypt->altitudeFt()); + setDone(); + } + break; + + case RESTRICT_BELOW: + if (curAlt <= _waypt->altitudeFt()) { + SG_LOG(SG_GENERAL, SG_INFO, "ConstHdgToAltCtl, below target altitude " << _waypt->altitudeFt()); + setDone(); + } + break; + + case RESTRICT_NONE: + assert(false); + break; + } + } + + virtual double timeToWaypt() const + { + double d = fabs(_rnav->position().getElevationFt() - _waypt->altitudeFt()); + return (d / _rnav->vspeedFPM()) * 60.0; // low pass filter here, probably + } + + virtual double distanceToWayptM() const + { + double gsMsec = _rnav->groundSpeedKts() * KNOTS_TO_METRES_PER_SECOND; + return timeToWaypt() * gsMsec; + } + + virtual SGGeod position() const + { + SGGeod p; + double az2; + SGGeodesy::direct(_rnav->position(), _targetTrack, distanceToWayptM(), p, az2); + return p; + } +}; + +class InterceptCtl : public WayptController +{ +public: + InterceptCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + + { + if (_waypt->type() != "radialIntercept") { + throw sg_exception("invalid waypoint type", "InterceptCtl ctor"); + } + } + + virtual void init() + { + RadialIntercept* w = (RadialIntercept*) _waypt.get(); + _trueRadial = w->radialDegMagnetic() + _rnav->magvarDeg(); + _targetTrack = w->courseDegMagnetic() + _rnav->magvarDeg(); + } + + virtual void update() + { + // note we want the outbound radial from the waypt, hence the ordering + // of arguments to courseDeg + double r = SGGeodesy::courseDeg(_waypt->position(), _rnav->position()); + SG_LOG(SG_AUTOPILOT, SG_INFO, "current radial=" << r); + if (fabs(r - _trueRadial) < 0.5) { + SG_LOG(SG_GENERAL, SG_INFO, "InterceptCtl, intercepted radial " << _trueRadial); + setDone(); + } + } + + virtual double distanceToWayptM() const + { + return SGGeodesy::distanceM(_rnav->position(), position()); + } + + virtual SGGeod position() const + { + SGGeoc c; + geocRadialIntersection(SGGeoc::fromGeod(_rnav->position()), _rnav->trackDeg(), + SGGeoc::fromGeod(_waypt->position()), _trueRadial, c); + return SGGeod::fromGeoc(c); + } +private: + double _trueRadial; +}; + +class DMEInterceptCtl : public WayptController +{ +public: + DMEInterceptCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + + { + if (_waypt->type() != "dmeIntercept") { + throw sg_exception("invalid waypoint type", "DMEInterceptCtl ctor"); + } + } + + virtual void init() + { + _dme = (DMEIntercept*) _waypt.get(); + _targetTrack = _dme->courseDegMagnetic() + _rnav->magvarDeg(); + } + + virtual void update() + { + _distanceNm = SGGeodesy::distanceNm(_rnav->position(), _dme->position()); + double d = fabs(_distanceNm - _dme->dmeDistanceNm()); + if (d < 0.1) { + SG_LOG(SG_GENERAL, SG_INFO, "DMEInterceptCtl, intercepted DME " << _dme->dmeDistanceNm()); + setDone(); + } + } + + virtual double distanceToWayptM() const + { + return fabs(_distanceNm - _dme->dmeDistanceNm()) * SG_NM_TO_METER; + } + + virtual SGGeod position() const + { + SGGeod p; + double az2; + SGGeodesy::direct(_rnav->position(), _targetTrack, distanceToWayptM(), p, az2); + return p; + } + +private: + DMEIntercept* _dme; + double _distanceNm; +}; + +class HoldCtl : public WayptController +{ +public: + HoldCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + + { + + } + + virtual void init() + { + } + + virtual void update() + { + // fly inbound / outbound sides, or execute the turn + #if 0 + if (inTurn) { + + targetTrack += dt * turnRateSec * turnDirection; + if (inbound) { + if .. targetTrack has passed inbound radial, doen with this turn + } else { + if target track has passed reciprocal radial done with turn + } + } else { + check time / distance elapsed + + if (sideDone) { + inTurn = true; + inbound = !inbound; + nextHeading = inbound; + if (!inbound) { + nextHeading += 180.0; + SG_NORMALIZE_RANGE(nextHeading, 0.0, 360.0); + } + } + + } + + #endif + setDone(); + } + + virtual double distanceToWayptM() const + { + return -1.0; + } + + virtual SGGeod position() const + { + return _waypt->position(); + } +}; + +class VectorsCtl : public WayptController +{ +public: + VectorsCtl(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) + + { + } + + virtual void init() + { + + } + + virtual void update() + { + setDone(); + } + + virtual double distanceToWayptM() const + { + return -1.0; + } + + virtual SGGeod position() const + { + return _waypt->position(); + } + +private: +}; + +/////////////////////////////////////////////////////////////////////////////// + +DirectToController::DirectToController(RNAV* aRNAV, const WayptRef& aWpt, const SGGeod& aOrigin) : + WayptController(aRNAV, aWpt), + _origin(aOrigin) +{ +} + +void DirectToController::init() +{ + if (_waypt->flag(WPT_DYNAMIC)) { + throw sg_exception("can't direct-to a dynamic waypoint"); + } + + _targetTrack = SGGeodesy::courseDeg(_origin, _waypt->position()); +} + +void DirectToController::update() +{ + double brg, az2; + SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); + _courseDev = brg - _targetTrack; + SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0); + + if ((fabs(_courseDev) > 90.0) && (_distanceM < _rnav->overflightArmDistanceM())) { + setDone(); + } +} + +double DirectToController::distanceToWayptM() const +{ + return _distanceM; +} + +double DirectToController::xtrackErrorNm() const +{ + double x = sin(courseDeviationDeg() * SG_DEGREES_TO_RADIANS) * _distanceM; + return x * SG_METER_TO_NM; +} + +double DirectToController::courseDeviationDeg() const +{ + return _courseDev; +} + +double DirectToController::trueBearingDeg() const +{ + return SGGeodesy::courseDeg(_rnav->position(), _waypt->position()); +} + +SGGeod DirectToController::position() const +{ + return _waypt->position(); +} + +/////////////////////////////////////////////////////////////////////////////// + +OBSController::OBSController(RNAV* aRNAV, const WayptRef& aWpt) : + WayptController(aRNAV, aWpt) +{ +} + +void OBSController::init() +{ + if (_waypt->flag(WPT_DYNAMIC)) { + throw sg_exception("can't use a dynamic waypoint for OBS mode"); + } + + _targetTrack = _rnav->selectedMagCourse() + _rnav->magvarDeg(); +} + +void OBSController::update() +{ + _targetTrack = _rnav->selectedMagCourse() + _rnav->magvarDeg(); + double brg, az2; + SGGeodesy::inverse(_rnav->position(), _waypt->position(), brg, az2, _distanceM); + _courseDev = brg - _targetTrack; + SG_NORMALIZE_RANGE(_courseDev, -180.0, 180.0); +} + +bool OBSController::toFlag() const +{ + return (fabs(_courseDev) < 90.0); +} + +double OBSController::distanceToWayptM() const +{ + return _distanceM; +} + +double OBSController::xtrackErrorNm() const +{ + double x = sin(_courseDev * SG_DEGREES_TO_RADIANS) * _distanceM; + return x * SG_METER_TO_NM; +} + +double OBSController::courseDeviationDeg() const +{ +// if (fabs(_courseDev) > 90.0) { + // double d = -_courseDev; + // SG_NORMALIZE_RANGE(d, -90.0, 90.0); + // return d; + //} + + return _courseDev; +} + +double OBSController::trueBearingDeg() const +{ + return SGGeodesy::courseDeg(_rnav->position(), _waypt->position()); +} + +SGGeod OBSController::position() const +{ + return _waypt->position(); +} + +/////////////////////////////////////////////////////////////////////////////// + +WayptController* WayptController::createForWaypt(RNAV* aRNAV, const WayptRef& aWpt) +{ + if (!aWpt) { + throw sg_exception("Passed null waypt", "WayptController::createForWaypt"); + } + + const std::string& wty(aWpt->type()); + if (wty == "runway") { + return new RunwayCtl(aRNAV, aWpt); + } + + if (wty == "radialIntercept") { + return new InterceptCtl(aRNAV, aWpt); + } + + if (wty == "dmeIntercept") { + return new DMEInterceptCtl(aRNAV, aWpt); + } + + if (wty == "hdgToAlt") { + return new ConstHdgToAltCtl(aRNAV, aWpt); + } + + if (wty == "vectors") { + return new VectorsCtl(aRNAV, aWpt); + } + + if (wty == "hold") { + return new HoldCtl(aRNAV, aWpt); + } + + return new BasicWayptCtl(aRNAV, aWpt); +} + +} // of namespace flightgear + diff --git a/src/Instrumentation/rnav_waypt_controller.hxx b/src/Instrumentation/rnav_waypt_controller.hxx new file mode 100644 index 000000000..4d99c8af7 --- /dev/null +++ b/src/Instrumentation/rnav_waypt_controller.hxx @@ -0,0 +1,193 @@ +// rnav_waypt_controller.hxx - Waypoint-specific behaviours for RNAV systems +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_WAYPT_CONTROLLER_HXX +#define FG_WAYPT_CONTROLLER_HXX + +#include <Navaids/waypoint.hxx> + +namespace flightgear +{ + +/** + * Abstract RNAV interface, for devices which implement an RNAV + * system - INS / GPS / FMS + */ +class RNAV +{ +public: + virtual SGGeod position() = 0; + + /** + * True track in degrees + */ + virtual double trackDeg() = 0; + + /** + * Ground speed (along the track) in knots + */ + virtual double groundSpeedKts() = 0; + + /** + * Vertical speed in ft/minute + */ + virtual double vspeedFPM()= 0; + + /** + * Magnetic variation at current position + */ + virtual double magvarDeg() = 0; + + /** + * device selected course (eg, from autopilot / MCP / OBS) in degrees + */ + virtual double selectedMagCourse() = 0; + + /** + * minimum distance to a waypoint for overflight sequencing. + */ + virtual double overflightArmDistanceM() = 0; +}; + +class WayptController +{ +public: + virtual ~WayptController(); + + virtual void init(); + + virtual void update() = 0; + + /** + * Compute time until the waypoint is done + */ + virtual double timeToWaypt() const; + + /** + * Compute distance until the waypoint is done + */ + virtual double distanceToWayptM() const = 0; + + /** + * Bearing to the waypoint, if this value is meaningful. + * Default implementation returns the target track + */ + virtual double trueBearingDeg() const + { return _targetTrack; } + + virtual double targetTrackDeg() const + { return _targetTrack; } + + virtual double xtrackErrorNm() const + { return 0.0; } + + virtual double courseDeviationDeg() const + { return 0.0; } + + /** + * Position associated with the waypt. For static waypoints, this is + * simply the waypoint position itself; for dynamic points, it's the + * estimated location at which the controller will be done. + */ + virtual SGGeod position() const = 0; + + /** + * Is this controller finished? + */ + bool isDone() const + { return _isDone; } + + /** + * to/from flag - true = to, false = from. Defaults to 'true' because + * nearly all waypoint controllers become done as soon as this value would + * become false. + */ + virtual bool toFlag() const + { return true; } + + /** + * Static factory method, given a waypoint, return a controller bound + * to it, of the appropriate type + */ + static WayptController* createForWaypt(RNAV* rnav, const WayptRef& aWpt); +protected: + WayptController(RNAV* aRNAV, const WayptRef& aWpt) : + _waypt(aWpt), + _rnav(aRNAV), + _isDone(false) + { } + + WayptRef _waypt; + double _targetTrack; + RNAV* _rnav; + + void setDone(); +private: + bool _isDone; +}; + +/** + * Controller supports 'directTo' (DTO) navigation to a waypoint. This + * creates a course from a starting point, to the waypoint, and reports + * deviation from that course. + * + * The controller is done when the waypoint is reached (to/from goes to 'from') + */ +class DirectToController : public WayptController +{ +public: + DirectToController(RNAV* aRNAV, const WayptRef& aWpt, const SGGeod& aOrigin); + + virtual void init(); + virtual void update(); + virtual double distanceToWayptM() const; + virtual double xtrackErrorNm() const; + virtual double courseDeviationDeg() const; + virtual double trueBearingDeg() const; + virtual SGGeod position() const; +private: + SGGeod _origin; + double _distanceM; + double _courseDev; +}; + +/** + * + */ +class OBSController : public WayptController +{ +public: + OBSController(RNAV* aRNAV, const WayptRef& aWpt); + + virtual void init(); + virtual void update(); + virtual double distanceToWayptM() const; + virtual double xtrackErrorNm() const; + virtual double courseDeviationDeg() const; + virtual double trueBearingDeg() const; + virtual bool toFlag() const; + virtual SGGeod position() const; +private: + double _distanceM; + double _courseDev; +}; + +} // of namespace flightgear + +#endif diff --git a/src/Instrumentation/testgps.cxx b/src/Instrumentation/testgps.cxx index cc73bded0..a35012f4b 100644 --- a/src/Instrumentation/testgps.cxx +++ b/src/Instrumentation/testgps.cxx @@ -1,4 +1,9 @@ +#include <fstream> + +#include <simgear/misc/sg_path.hxx> +#include <simgear/structure/exception.hxx> + #include <Main/fg_init.hxx> #include <Main/globals.hxx> #include <Main/fg_props.hxx> @@ -6,8 +11,12 @@ #include <Instrumentation/gps.hxx> #include <Autopilot/route_mgr.hxx> #include <Environment/environment_mgr.hxx> +#include <Navaids/airways.hxx> +#include <Navaids/waypoint.hxx> +#include <Navaids/procedure.hxx> using std::string; +using namespace flightgear; char *homedir = ::getenv( "HOME" ); char *hostname = ::getenv( "HOSTNAME" ); @@ -45,6 +54,16 @@ void printScratch(SGPropertyNode* scratch) } } +void printRoute(const WayptVec& aRoute) +{ + SG_LOG(SG_GENERAL, SG_INFO, "route size=" << aRoute.size()); + for (unsigned int r=0; r<aRoute.size();++r) { + Waypt* w = aRoute[r]; + SG_LOG(SG_GENERAL, SG_ALERT, "\t" << r << ": " << w->ident() << " " + << w->owner()->ident()); + } +} + void createDummyRoute(FGRouteMgr* rm) { SGPropertyNode* rmInput = fgGetNode("/autopilot/route-manager/input", true); @@ -59,6 +78,8 @@ void createDummyRoute(FGRouteMgr* rm) int main(int argc, char* argv[]) { + +try{ globals = new FGGlobals; fgInitFGRoot(argc, argv); @@ -69,6 +90,9 @@ int main(int argc, char* argv[]) fgInitNav(); + fgSetDouble("/environment/magnetic-variation-deg", 0.0); + + Airway::load(); SG_LOG(SG_GENERAL, SG_ALERT, "hello world!"); @@ -94,12 +118,15 @@ int main(int argc, char* argv[]) // globals->add_subsystem("environment", envMgr); // envMgr->init(); + fgSetBool("/sim/realism/simple-gps", true); + + // _realismSimpleGps SGPropertyNode* nd = fgGetNode("/instrumentation/gps", true); GPS* gps = new GPS(nd); globals->add_subsystem("gps", gps); - - + + const FGAirport* egph = fgFindAirportID("EGPH"); testSetPosition(egph->geod()); // startup the route manager @@ -116,6 +143,7 @@ int main(int argc, char* argv[]) // update a few times gps->update(0.05); gps->update(0.05); + gps->update(0.05); scratch->setStringValue("query", "TL"); scratch->setStringValue("type", "Vor"); @@ -221,7 +249,105 @@ int main(int argc, char* argv[]) nd->setStringValue("command", "define-user-wpt"); printScratch(scratch); +// airways + FGPositioned::TypeFilter vorFilt(FGPositioned::VOR); + FGPositionedRef tla = FGPositioned::findClosestWithIdent("TLA", pos, &vorFilt); + FGPositionedRef big = FGPositioned::findClosestWithIdent("BIG", pos, &vorFilt); + FGPositionedRef pol = FGPositioned::findClosestWithIdent("POL", pos, &vorFilt); + + const FGAirport* eddm = fgFindAirportID("EDDM"); + FGPositionedRef mun = FGPositioned::findClosestWithIdent("MUN", + eddm->geod(), &vorFilt); + + const FGAirport* ksfo = fgFindAirportID("KSFO"); + FGPositionedRef sfo = FGPositioned::findClosestWithIdent("SFO", + ksfo->geod(), &vorFilt); + + + WayptRef awy1 = new NavaidWaypoint(tla, NULL); + WayptRef awy2 = new NavaidWaypoint(big, NULL); + WayptRef awy3 = new NavaidWaypoint(pol, NULL); + WayptRef awy4 = new NavaidWaypoint(mun, NULL); + WayptRef awy5 = new NavaidWaypoint(sfo, NULL); + + WayptRef awy6 = new NavaidWaypoint( + (FGPositioned*) fgFindAirportID("KJFK"), NULL); + + SGPath p("/Users/jmt/Desktop/airways.kml"); + std::fstream f; + f.open(p.str().c_str(), fstream::out | fstream::trunc); + +// pre-amble + f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n" + "<Document>\n"; + + WayptVec route; + Airway::highLevel()->route(awy1, awy3, route); + Route::dumpRouteToLineString("egph-egcc", route, f); + + Airway::lowLevel()->route(awy1, awy2, route); + Route::dumpRouteToLineString("egph-big", route, f); + + Airway::lowLevel()->route(awy2, awy4, route); + Route::dumpRouteToLineString("big-mun", route, f); + + Airway::highLevel()->route(awy4, awy5, route); + Route::dumpRouteToLineString("mun-sfo", route, f); + + Airway::lowLevel()->route(awy5, awy6, route); + Route::dumpRouteToLineString("sfo-jfk", route, f); + + // post-amble + f << "</Document>\n" + "</kml>" << endl; + f.close(); + +// procedures + SGPath op("/Users/jmt/Desktop/procedures.kml"); + f.open(op.str().c_str(), fstream::out | fstream::trunc); + + FGAirport* eham = (FGAirport*) fgFindAirportID("EHAM"); + FGPositioned::TypeFilter fixFilt(FGPositioned::FIX); + + WayptVec approach; + FGPositionedRef redfa = FGPositioned::findClosestWithIdent("REDFA", + eham->geod(), &fixFilt); + bool ok = eham->buildApproach(new NavaidWaypoint(redfa, NULL), + eham->getRunwayByIdent("18R"), approach); + if (!ok ) { + SG_LOG(SG_GENERAL, SG_INFO, "failed to build approach"); + } + FGAirport* egll = (FGAirport*) fgFindAirportID("EGLL"); + WayptVec approach2; + ok = egll->buildApproach(new NavaidWaypoint(big, NULL), + egll->getRunwayByIdent("27R"), approach2); + if (!ok ) { + SG_LOG(SG_GENERAL, SG_INFO, "failed to build approach"); + } + +// pre-amble + f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n" + "<Document>\n"; + + Route::dumpRouteToLineString("REDFA 18R", approach, f); + Route::dumpRouteToLineString("EGLL 27R", approach2, f); + + // post-amble + f << "</Document>\n" + "</kml>" << endl; + f.close(); + + return EXIT_SUCCESS; + + + +} catch (sg_exception& ex) { + SG_LOG(SG_GENERAL, SG_ALERT, "exception:" << ex.getFormattedMessage()); +} + return EXIT_FAILURE; } diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 1ebff97b1..184e5623a 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -97,6 +97,7 @@ #include <Navaids/navlist.hxx> #include <Navaids/fix.hxx> #include <Navaids/fixlist.hxx> +#include <Navaids/airways.hxx> #include <Scenery/scenery.hxx> #include <Scenery/tilemgr.hxx> #include <Scripting/NasalSys.hxx> @@ -1071,7 +1072,8 @@ fgInitNav () fixlist.init( p_fix ); // adds fixes to the DB in positioned.cxx SG_LOG(SG_GENERAL, SG_INFO, " Airways"); - SGPath p_awy( globals->get_fg_root() ); + #if 0 + SGPath p_awy( globals->get_fg_root() ); p_awy.append( "Navaids/awy.dat" ); FGAirwayNetwork *awyNet = new FGAirwayNetwork; //cerr << "Loading Airways" << endl; @@ -1079,7 +1081,9 @@ fgInitNav () awyNet->init(); //cerr << "initializing airways" << endl; globals->set_airwaynet( awyNet ); - +#endif + flightgear::Airway::load(); + return true; } diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am index a1f38ed14..66c650045 100644 --- a/src/Navaids/Makefile.am +++ b/src/Navaids/Makefile.am @@ -5,11 +5,15 @@ noinst_LIBRARIES = libNavaids.a libNavaids_a_SOURCES = \ navdb.hxx navdb.cxx \ fix.hxx fixlist.hxx fixlist.cxx \ - awynet.hxx awynet.cxx \ navrecord.hxx navrecord.cxx \ navlist.hxx navlist.cxx \ positioned.hxx positioned.cxx \ - markerbeacon.hxx markerbeacon.cxx + markerbeacon.hxx markerbeacon.cxx \ + routePath.hxx routePath.cxx \ + airways.hxx airways.cxx \ + route.hxx route.cxx \ + waypoint.hxx waypoint.cxx \ + procedure.hxx procedure.cxx \ # # testnavs_SOURCES = testnavs.cxx diff --git a/src/Navaids/airways.cxx b/src/Navaids/airways.cxx new file mode 100644 index 000000000..5bdbb2bee --- /dev/null +++ b/src/Navaids/airways.cxx @@ -0,0 +1,454 @@ +// airways.cxx - storage of airways network, and routing between nodes +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "airways.hxx" + +#include <algorithm> +#include <set> + +#include <simgear/sg_inlines.h> +#include <simgear/structure/exception.hxx> +#include <simgear/misc/sgstream.hxx> +#include <simgear/misc/sg_path.hxx> + +#include <boost/tuple/tuple.hpp> + +#include <Main/globals.hxx> +#include <Navaids/positioned.hxx> +#include <Navaids/waypoint.hxx> + +using std::make_pair; +using std::string; +using std::set; +using std::vector; + +#define DEBUG_AWY_SEARCH 1 + +namespace flightgear +{ + +Airway::Network* Airway::static_lowLevel = NULL; +Airway::Network* Airway::static_highLevel = NULL; + +////////////////////////////////////////////////////////////////////////////// + +/** + * information about an edge in the network. + * Some of this information is computed lazily + */ +class AdjacentWaypoint +{ +public: + AdjacentWaypoint(const FGPositionedRef& aOrigin, + const FGPositionedRef& aDest, Airway* aWay); + + double distanceM() const; + + const FGPositionedRef& other(const FGPositionedRef& aEnd) const; + + const FGPositionedRef origin; + const FGPositionedRef destination; + const Airway* airway; + +private: + void validate() const; + mutable double _distanceM; +}; + +class AStarOpenNode : public SGReferenced +{ +public: + AStarOpenNode(FGPositionedRef aNode, double aLegDist, + Airway* aAirway, + FGPositionedRef aDest, AStarOpenNode* aPrev) : + node(aNode), + airway(aAirway), + previous(aPrev) + { + distanceFromStart = aLegDist; + if (previous) { + distanceFromStart += previous->distanceFromStart; + } + + directDistanceToDestination = SGGeodesy::distanceM(node->geod(), aDest->geod()); + } + + virtual ~AStarOpenNode() + { + } + + FGPositionedRef node; + Airway* airway; + SGSharedPtr<AStarOpenNode> previous; + double distanceFromStart; // aka 'g(x)' + double directDistanceToDestination; // aka 'h(x)' + + /** + * aka 'f(x)' + */ + double totalCost() const { + return distanceFromStart + directDistanceToDestination; + } +}; + +typedef SGSharedPtr<AStarOpenNode> AStarOpenNodeRef; + +//////////////////////////////////////////////////////////////////////////// + +Airway::Network* Airway::lowLevel() +{ + return static_lowLevel; +} + +Airway::Network* Airway::highLevel() +{ + return static_highLevel; +} + +Airway::Airway(const std::string& aIdent, double aTop, double aBottom) : + _ident(aIdent), + _topAltitudeFt(aTop), + _bottomAltitudeFt(aBottom) +{ +} + +void Airway::load() +{ + static_lowLevel = new Network; + static_highLevel = new Network; + + SGPath path( globals->get_fg_root() ); + path.append( "Navaids/awy.dat" ); + + std::string identStart, identEnd, name; + double latStart, lonStart, latEnd, lonEnd; + int type, base, top; + //int airwayIndex = 0; + //FGNode *n; + + sg_gzifstream in( path.str() ); + if ( !in.is_open() ) { + SG_LOG( SG_GENERAL, SG_ALERT, "Cannot open file: " << path.str() ); + throw sg_io_exception("Could not open airways data", sg_location(path.str())); + } +// toss the first two lines of the file + in >> skipeol; + in >> skipeol; + +// read in each remaining line of the file + while (!in.eof()) { + in >> identStart; + + if (identStart == "99") { + break; + } + + in >> latStart >> lonStart >> identEnd >> latEnd >> lonEnd >> type >> base >> top >> name; + in >> skipeol; + + // type = 1; low-altitude + // type = 2; high-altitude + Network* net = (type == 1) ? static_lowLevel : static_highLevel; + + SGGeod startPos(SGGeod::fromDeg(lonStart, latStart)), + endPos(SGGeod::fromDeg(lonEnd, latEnd)); + + Airway* awy = net->findAirway(name, top, base); + net->addEdge(awy, startPos, identStart, endPos, identEnd); + } // of file line iteration +} + +Airway* Airway::Network::findAirway(const std::string& aName, double aTop, double aBase) +{ + AirwayDict::iterator it = _airways.find(aName); + if (it == _airways.end()) { + Airway* awy = new Airway(aName, aTop, aBase); + it = _airways.insert(it, make_pair(aName, awy)); + } + + return it->second; +} + +void Airway::Network::addEdge(Airway* aWay, const SGGeod& aStartPos, + const std::string& aStartIdent, + const SGGeod& aEndPos, const std::string& aEndIdent) +{ + FGPositionedRef start = FGPositioned::findClosestWithIdent(aStartIdent, aStartPos); + FGPositionedRef end = FGPositioned::findClosestWithIdent(aEndIdent, aEndPos); + + if (!start) { + SG_LOG(SG_GENERAL, SG_INFO, "unknown airways start pt: '" << aStartIdent << "'"); + start = FGPositioned::createUserWaypoint(aStartIdent, aStartPos); + return; + } + + if (!end) { + SG_LOG(SG_GENERAL, SG_INFO, "unknown airways end pt: '" << aEndIdent << "'"); + end = FGPositioned::createUserWaypoint(aEndIdent, aEndPos); + return; + } + + AdjacentWaypoint* edge = new AdjacentWaypoint(start, end, aWay); + _graph.insert(make_pair(start, edge)); + _graph.insert(make_pair(end, edge)); +} + +////////////////////////////////////////////////////////////////////////////// + +bool Airway::Network::inNetwork(const FGPositioned* aPos) const +{ + FGPositioned* pos = const_cast<FGPositioned*>(aPos); + return (_graph.find(pos) != _graph.end()); +} + +bool Airway::Network::route(WayptRef aFrom, WayptRef aTo, + WayptVec& aPath) +{ + if (!aFrom || !aTo) { + throw sg_exception("invalid waypoints to route between"); + } + +// find closest nodes on the graph to from/to +// if argument waypoints are directly on the graph (which is frequently the +// case), note this so we don't duplicate them in the output. + + FGPositionedRef from, to; + bool exactTo, exactFrom; + boost::tie(from, exactFrom) = findClosestNode(aFrom); + boost::tie(to, exactTo) = findClosestNode(aTo); + +#ifdef DEBUG_AWY_SEARCH + SG_LOG(SG_GENERAL, SG_INFO, "from:" << from->ident() << "/" << from->name()); + SG_LOG(SG_GENERAL, SG_INFO, "to:" << to->ident() << "/" << to->name()); +#endif + + bool ok = search2(from, to, aPath); + if (!ok) { + return false; + } + + if (exactTo) { + aPath.pop_back(); + } + + if (exactFrom) { + // edge case - if from and to are equal, which can happen, don't + // crash here. This happens routing EGPH -> EGCC; 'DCS' is common + // to the EGPH departure and EGCC STAR. + if (!aPath.empty()) { + aPath.erase(aPath.begin()); + } + } + + return true; +} + +std::pair<FGPositionedRef, bool> +Airway::Network::findClosestNode(WayptRef aRef) +{ + return findClosestNode(aRef->position()); +} + +class InAirwayFilter : public FGPositioned::Filter +{ +public: + InAirwayFilter(Airway::Network* aNet) : + _net(aNet) + { ; } + + virtual bool pass(FGPositioned* aPos) const + { + return _net->inNetwork(aPos); + } + + virtual FGPositioned::Type minType() const + { return FGPositioned::WAYPOINT; } + + virtual FGPositioned::Type maxType() const + { return FGPositioned::NDB; } + +private: + Airway::Network* _net; +}; + +std::pair<FGPositionedRef, bool> +Airway::Network::findClosestNode(const SGGeod& aGeod) +{ + InAirwayFilter f(this); + FGPositionedRef r = FGPositioned::findClosest(aGeod, 800.0, &f); + bool exact = false; + + if (r && (SGGeodesy::distanceM(aGeod, r->geod()) < 100.0)) { + exact = true; // within 100 metres, let's call that exact + } + + return make_pair(r, exact); +} + +///////////////////////////////////////////////////////////////////////////// + +typedef vector<AStarOpenNodeRef> OpenNodeHeap; + +static void buildWaypoints(AStarOpenNodeRef aNode, WayptVec& aRoute) +{ +// count the route length, and hence pre-size aRoute + int count = 0; + AStarOpenNodeRef n = aNode; + for (; n != NULL; ++count, n = n->previous) {;} + aRoute.resize(count); + +// run over the route, creating waypoints + for (n = aNode; n; n=n->previous) { + aRoute[--count] = new NavaidWaypoint(n->node, n->airway); + } +} + +/** + * Inefficent (linear) helper to find an open node in the heap + */ +static AStarOpenNodeRef +findInOpen(const OpenNodeHeap& aHeap, FGPositioned* aPos) +{ + for (unsigned int i=0; i<aHeap.size(); ++i) { + if (aHeap[i]->node == aPos) { + return aHeap[i]; + } + } + + return NULL; +} + +class HeapOrder +{ +public: + bool operator()(AStarOpenNode* a, AStarOpenNode* b) + { + return a->totalCost() > b->totalCost(); + } +}; + +bool Airway::Network::search2(FGPositionedRef aStart, FGPositionedRef aDest, + WayptVec& aRoute) +{ + + typedef set<FGPositioned*> ClosedNodeSet; + typedef std::pair<AdjacencyMap::iterator,AdjacencyMap::iterator> AdjacencyMapRange; + + OpenNodeHeap openNodes; + ClosedNodeSet closedNodes; + HeapOrder ordering; + + openNodes.push_back(new AStarOpenNode(aStart, 0.0, NULL, aDest, NULL)); + +// A* open node iteration + while (!openNodes.empty()) { + std::pop_heap(openNodes.begin(), openNodes.end(), ordering); + AStarOpenNodeRef x = openNodes.back(); + FGPositioned* xp = x->node; + openNodes.pop_back(); + closedNodes.insert(xp); + + // SG_LOG(SG_GENERAL, SG_INFO, "x:" << xp->ident() << ", f(x)=" << x->totalCost()); + + // check if xp is the goal; if so we're done, since there cannot be an open + // node with lower f(x) value. + if (xp == aDest) { + buildWaypoints(x, aRoute); + return true; + } + + // adjacent (neighbour) iteration + AdjacencyMapRange r(_graph.equal_range(xp)); + for (; r.first != r.second; ++r.first) { + AdjacentWaypoint* adj(r.first->second); + FGPositioned* yp = adj->other(xp); + if (closedNodes.count(yp)) { + continue; // closed, ignore + } + + AStarOpenNodeRef y = findInOpen(openNodes, yp); + if (y) { // already open + double g = x->distanceFromStart + adj->distanceM(); + if (g > y->distanceFromStart) { + // worse path, ignore + //SG_LOG(SG_GENERAL, SG_INFO, "\tabandoning " << yp->ident() << + // " path is worse: g(y)" << y->distanceFromStart << ", g'=" << g); + continue; + } + + // we need to update y. Unfortunately this means rebuilding the heap, + // since y's score can change arbitrarily + //SG_LOG(SG_GENERAL, SG_INFO, "\tfixing up previous for new path to " << yp->ident() << ", d =" << g); + y->previous = x; + y->distanceFromStart = g; + y->airway = (Airway*) adj->airway; + std::make_heap(openNodes.begin(), openNodes.end(), ordering); + } else { // not open, insert a new node for y into the heap + y = new AStarOpenNode(yp, adj->distanceM(), + (Airway*) adj->airway, aDest, x); + //SG_LOG(SG_GENERAL, SG_INFO, "\ty=" << yp->ident() << ", f(y)=" << y->totalCost()); + openNodes.push_back(y); + std::push_heap(openNodes.begin(), openNodes.end(), ordering); + } + } // of neighbour iteration + } // of open node iteration + + SG_LOG(SG_GENERAL, SG_INFO, "A* failed to find route"); + return false; +} + +////////////////////////////////////////////////////////////////////////////// +// AdjacentWaypoint definitions + +AdjacentWaypoint::AdjacentWaypoint( + const FGPositionedRef& aOrigin, const FGPositionedRef& aDest, Airway* aWay) : + origin(aOrigin), + destination(aDest), + airway(aWay), + _distanceM(-1.0) +{ + +} + +const FGPositionedRef& +AdjacentWaypoint::other(const FGPositionedRef& aEnd) const +{ + return (aEnd == origin) ? destination : origin; +} + +double AdjacentWaypoint::distanceM() const +{ + validate(); + return _distanceM; +} + +void AdjacentWaypoint::validate() const +{ + if (_distanceM > 0.0) { + return; // already validated + } + + _distanceM = SGGeodesy::distanceM(origin->geod(), destination->geod()); +} + +} // of namespace flightgear diff --git a/src/Navaids/airways.hxx b/src/Navaids/airways.hxx new file mode 100644 index 000000000..f29ecbb20 --- /dev/null +++ b/src/Navaids/airways.hxx @@ -0,0 +1,134 @@ +// airways.hxx - storage of airways network, and routing between nodes +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_AIRWAYS_HXX +#define FG_AIRWAYS_HXX + +#include <map> +#include <vector> + +#include <Navaids/route.hxx> + +class FGPositioned; +typedef SGSharedPtr<FGPositioned> FGPositionedRef; + +namespace flightgear { + +// forward declare some helpers +struct SearchContext; +class AdjacentWaypoint; +class InAirwayFilter; + +class Airway : public Route +{ +public: + virtual std::string ident() const + { return _ident; } + + static void load(); + + /** + * Track a network of airways + * + */ + class Network + { + public: + friend class Airway; + friend class InAirwayFilter; + + + + /** + * Principal routing algorithm. Attempts to find the best route beween + * two points. If either point is part of the airway network (e.g, a SID + * or STAR transition), it will <em>not</em> be duplicated in the result + * path. + * + * Returns true if a route could be found, or false otherwise. + */ + bool route(WayptRef aFrom, WayptRef aTo, WayptVec& aPath); + private: + void addEdge(Airway* aWay, const SGGeod& aStartPos, + const std::string& aStartIdent, + const SGGeod& aEndPos, const std::string& aEndIdent); + + Airway* findAirway(const std::string& aName, double aTop, double aBase); + + typedef std::multimap<FGPositioned*, AdjacentWaypoint*> AdjacencyMap; + AdjacencyMap _graph; + + typedef std::vector<AdjacentWaypoint*> AdjacentWaypointVec; + + typedef std::map<std::string, Airway*> AirwayDict; + AirwayDict _airways; + + bool search2(FGPositionedRef aStart, FGPositionedRef aDest, WayptVec& aRoute); + + /** + * Test if a positioned item is part of this airway network or not. + */ + bool inNetwork(const FGPositioned* aRef) const; + + /** + * Find the closest node on the network, to the specified waypoint + * + * May return NULL,false if no match could be found; the search is + * internally limited to avoid very poor performance; for example, + * in the middle of an ocean. + * + * The second return value indicates if the returned value is + * equal (true) or distinct (false) to the input waypoint. + * Equality here means being physically within a close tolerance, + * on the order of a hundred metres. + */ + std::pair<FGPositionedRef, bool> findClosestNode(WayptRef aRef); + + /** + * Overloaded version working with a raw SGGeod + */ + std::pair<FGPositionedRef, bool> findClosestNode(const SGGeod& aGeod); + }; + + + static Network* highLevel(); + static Network* lowLevel(); + +private: + Airway(const std::string& aIdent, double aTop, double aBottom); + + friend class Network; + + static Network* static_highLevel; + static Network* static_lowLevel; + + std::string _ident; + double _topAltitudeFt; + double _bottomAltitudeFt; + + // high-level vs low-level flag + // ... ? + + WayptVec _elements; +}; + +} // of namespace flightgear + + +#endif //of FG_AIRWAYS_HXX diff --git a/src/Navaids/positioned.cxx b/src/Navaids/positioned.cxx index 917156877..fcf5ec848 100644 --- a/src/Navaids/positioned.cxx +++ b/src/Navaids/positioned.cxx @@ -518,7 +518,9 @@ FGPositioned::Filter::passType(Type aTy) const static FGPositioned::List findAll(const NamedPositionedIndex& aIndex, - const std::string& aName, FGPositioned::Filter* aFilter) + const std::string& aName, + FGPositioned::Filter* aFilter, + bool aExact) { FGPositioned::List result; if (aName.empty()) { @@ -526,9 +528,16 @@ findAll(const NamedPositionedIndex& aIndex, } std::string name = boost::to_upper_copy(aName); - std::string upperBoundId = name; - upperBoundId[upperBoundId.size()-1]++; - NamedPositionedIndex::const_iterator upperBound = aIndex.lower_bound(upperBoundId); + NamedPositionedIndex::const_iterator upperBound; + + if (aExact) { + upperBound = aIndex.upper_bound(name); + } else { + std::string upperBoundId = name; + upperBoundId[upperBoundId.size()-1]++; + upperBound = aIndex.lower_bound(upperBoundId); + } + NamedPositionedIndex::const_iterator it = aIndex.lower_bound(name); for (; it != upperBound; ++it) { @@ -663,7 +672,7 @@ const char* FGPositioned::nameForType(Type aTy) FGPositionedRef FGPositioned::findClosestWithIdent(const std::string& aIdent, const SGGeod& aPos, Filter* aFilter) { - FGPositioned::List r(findAll(global_identIndex, aIdent, aFilter)); + FGPositioned::List r(findAll(global_identIndex, aIdent, aFilter, true)); if (r.empty()) { return FGPositionedRef(); } @@ -682,15 +691,15 @@ FGPositioned::findWithinRange(const SGGeod& aPos, double aRangeNm, Filter* aFilt } FGPositioned::List -FGPositioned::findAllWithIdent(const std::string& aIdent, Filter* aFilter) +FGPositioned::findAllWithIdent(const std::string& aIdent, Filter* aFilter, bool aExact) { - return findAll(global_identIndex, aIdent, aFilter); + return findAll(global_identIndex, aIdent, aFilter, aExact); } FGPositioned::List -FGPositioned::findAllWithName(const std::string& aName, Filter* aFilter) +FGPositioned::findAllWithName(const std::string& aName, Filter* aFilter, bool aExact) { - return findAll(global_nameIndex, aName, aFilter); + return findAll(global_nameIndex, aName, aFilter, aExact); } FGPositionedRef diff --git a/src/Navaids/positioned.hxx b/src/Navaids/positioned.hxx index 27d807a72..f6f61229a 100644 --- a/src/Navaids/positioned.hxx +++ b/src/Navaids/positioned.hxx @@ -43,6 +43,7 @@ public: TAXIWAY, PAVEMENT, PARK_STAND, + WAYPOINT, FIX, VOR, NDB, @@ -55,7 +56,6 @@ public: DME, TACAN, OBSTACLE, - WAYPOINT, // user-defined waypoint FREQ_GND, FREQ_TWR, FREQ_ATIS, @@ -160,12 +160,12 @@ public: * Find all items with the specified ident * @param aFilter - optional filter on items */ - static List findAllWithIdent(const std::string& aIdent, Filter* aFilter = NULL); + static List findAllWithIdent(const std::string& aIdent, Filter* aFilter = NULL, bool aExact = true); /** * As above, but searches names instead of idents */ - static List findAllWithName(const std::string& aName, Filter* aFilter = NULL); + static List findAllWithName(const std::string& aName, Filter* aFilter = NULL, bool aExact = true); /** * Sort an FGPositionedList by distance from a position diff --git a/src/Navaids/procedure.cxx b/src/Navaids/procedure.cxx new file mode 100644 index 000000000..4080f0a75 --- /dev/null +++ b/src/Navaids/procedure.cxx @@ -0,0 +1,333 @@ +// procedure.cxx - define route storing an approach, arrival or departure procedure +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#include "procedure.hxx" + +#include <simgear/structure/exception.hxx> + +#include <Navaids/waypoint.hxx> + +using std::string; + +namespace flightgear +{ + +Procedure::Procedure(const string& aIdent) : + _ident(aIdent) +{ +} + +Approach::Approach(const string& aIdent) : + Procedure(aIdent) +{ + +} + +void Approach::setRunway(FGRunwayRef aRwy) +{ + _runway = aRwy; +} + +void Approach::setPrimaryAndMissed(const WayptVec& aPrimary, const WayptVec& aMissed) +{ + _primary = aPrimary; + _primary[0]->setFlag(WPT_IAF, true); + _primary[_primary.size()-1]->setFlag(WPT_FAF, true); + + _missed = aMissed; + + if (!_missed.empty()) { + // mark the first point as the published missed-approach point + _missed[0]->setFlag(WPT_MAP, true); + + // mark all the points as being on the missed approach route + for (unsigned int i=0; i<_missed.size(); ++i) { + _missed[i]->setFlag(WPT_MISS, true); + } + } +} + +void Approach::addTransition(Transition* aTrans) +{ + WayptRef entry = aTrans->enroute(); + _transitions[entry] = aTrans; +} + +bool Approach::route(WayptRef aIAF, WayptVec& aWps) +{ + WptTransitionMap::iterator it; + bool haveTrans = false; + for (it = _transitions.begin(); it != _transitions.end(); ++it) { + Transition* t= it->second; + if (t->route(aIAF, aWps)) { + haveTrans = true; + break; + } + } // of transitions iteration + + if (!haveTrans) { + SG_LOG(SG_GENERAL, SG_INFO, "approach " << ident() << " has no transition " << + "for IAF: " << aIAF->ident()); + return false; + } + + aWps.insert(aWps.end(), _primary.begin(), _primary.end()); + aWps.push_back(new RunwayWaypt(_runway, NULL)); + aWps.insert(aWps.end(), _missed.begin(), _missed.end()); + return true; +} + +bool Approach::routeFromVectors(WayptVec& aWps) +{ + aWps.insert(aWps.end(), _primary.begin(), _primary.end()); + aWps.push_back(new RunwayWaypt(_runway, NULL)); + aWps.insert(aWps.end(), _missed.begin(), _missed.end()); + return true; +} + +////////////////////////////////////////////////////////////////////////////// + +ArrivalDeparture::ArrivalDeparture(const string& aIdent) : + Procedure(aIdent) +{ +} + +void ArrivalDeparture::addRunway(FGRunwayRef aWay) +{ + _runways[aWay] = NULL; +} + +bool ArrivalDeparture::isForRunway(FGRunwayRef aWay) const +{ + // null runway always passes + if (!aWay) { + return true; + } + + return (_runways.count(aWay)); +} + +void ArrivalDeparture::addTransition(Transition* aTrans) +{ + WayptRef entry = aTrans->enroute(); + _enrouteTransitions[entry] = aTrans; +} + +void ArrivalDeparture::addRunwayTransition(FGRunwayRef aWay, Transition* aTrans) +{ + assert(aWay->ident() == aTrans->ident()); + if (!isForRunway(aWay)) { + throw sg_io_exception("adding transition for unspecified runway:" + aWay->ident(), ident()); + } + + _runways[aWay] = aTrans; +} + +void ArrivalDeparture::setCommon(const WayptVec& aWps) +{ + _common = aWps; +} + +bool ArrivalDeparture::commonRoute(Waypt* aEnroute, WayptVec& aPath, FGRunwayRef aRwy) +{ + // assume we're routing from enroute, to the runway. + // for departures, we'll flip the result points + + Transition* t = findTransitionByEnroute(aEnroute); + WayptVec::iterator firstCommon = _common.begin(); + if (t) { + t->route(aEnroute, aPath); + + Waypt* transEnd = t->procedureEnd(); + for (; firstCommon != _common.end(); ++firstCommon) { + if ((*firstCommon)->matches(transEnd)) { + // found transition->common point, stop search + break; + } + } // of common points + + // if we hit this point, the transition doesn't end (start, for a SID) on + // a common point. We assume this means we should just append the entire + // common section after the transition. + firstCommon = _common.begin(); + } else { + if (aEnroute && !(*firstCommon)->matches(aEnroute)) { + return false; + } + } // of not using a transition + + // append (some) common points + aPath.insert(aPath.end(), firstCommon, _common.end()); + + if (!aRwy) { + // no runway specified, we're done + return true; + } + + RunwayTransitionMap::iterator r = _runways.find(aRwy); + assert(r != _runways.end()); + if (!r->second) { + // no transitions specified. Not great, but not + // much we can do about it. Calling code will insert VECTORS to the approach + // if required, or maybe there's an approach transition defined. + return true; + } + + SG_LOG(SG_GENERAL, SG_INFO, ident() << " using runway transition for " << r->first->ident()); + r->second->route(NULL, aPath); + return true; +} + +Transition* ArrivalDeparture::findTransitionByEnroute(Waypt* aEnroute) const +{ + if (!aEnroute) { + return NULL; + } + + WptTransitionMap::const_iterator eit; + for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) { + if (eit->second->enroute()->matches(aEnroute)) { + SG_LOG(SG_GENERAL, SG_INFO, ident() << " using enroute transition " << eit->second->ident()); + return eit->second; + } + } // of enroute transition iteration + + return NULL; +} + +WayptRef ArrivalDeparture::findBestTransition(const SGGeod& aPos) const +{ + // no transitions, that's easy + if (_enrouteTransitions.empty()) { + SG_LOG(SG_GENERAL, SG_INFO, "no enroute transitions for " << ident()); + return _common.front(); + } + + double d = 1e9; + WayptRef w; + WptTransitionMap::const_iterator eit; + for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) { + WayptRef c = eit->second->enroute(); + SG_LOG(SG_GENERAL, SG_INFO, "findBestTransition for " << ident() << ", looking at " << c->ident()); + // assert(c->hasFixedPosition()); + double cd = SGGeodesy::distanceM(aPos, c->position()); + + if (cd < d) { // distance to 'c' is less, new best match + d = cd; + w = c; + } + } // of transitions iteration + + assert(w); + return w; +} + +WayptRef ArrivalDeparture::findTransitionByName(const string& aIdent) const +{ + WptTransitionMap::const_iterator eit; + for (eit = _enrouteTransitions.begin(); eit != _enrouteTransitions.end(); ++eit) { + WayptRef c = eit->second->enroute(); + if (c->ident() == aIdent) { + return c; + } + } + + return NULL; +} + +//////////////////////////////////////////////////////////////////////////// + +SID::SID(const string& aIdent) : + ArrivalDeparture(aIdent) +{ +} + +bool SID::route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath) +{ + if (!isForRunway(aWay)) { + SG_LOG(SG_GENERAL, SG_WARN, "SID " << ident() << " not for runway " << aWay->ident()); + return false; + } + + WayptVec path; + if (!commonRoute(aEnroute, path, aWay)) { + return false; + } + + // SID waypoints (including transitions) are stored reversed, so we can + // re-use the routing code. This is where we fix the ordering for client code + std::back_insert_iterator<WayptVec> bi(aPath); + std::reverse_copy(path.begin(), path.end(), bi); + + return true; +} + +//////////////////////////////////////////////////////////////////////////// + +STAR::STAR(const string& aIdent) : + ArrivalDeparture(aIdent) +{ +} + +bool STAR::route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath) +{ + if (aWay && !isForRunway(aWay)) { + return false; + } + + return commonRoute(aEnroute, aPath, aWay); +} + +///////////////////////////////////////////////////////////////////////////// + +Transition::Transition(const std::string& aIdent, Procedure* aPr, + const WayptVec& aWps) : + _ident(aIdent), + _parent(aPr), + _primary(aWps) +{ + assert(aPr); + assert(!_primary.empty()); + + _primary[0]->setFlag(WPT_TRANSITION, true); +} + +WayptRef Transition::enroute() const +{ + assert(!_primary.empty()); + return _primary[0]; +} + +WayptRef Transition::procedureEnd() const +{ + assert(!_primary.empty()); + return _primary[_primary.size() - 1]; +} + +bool Transition::route(Waypt* aEnroute, WayptVec& aPath) +{ + if (aEnroute && !enroute()->matches(aEnroute)) { + return false; + } + + aPath.insert(aPath.end(), _primary.begin(), _primary.end()); + return true; +} + +} // of namespace diff --git a/src/Navaids/procedure.hxx b/src/Navaids/procedure.hxx new file mode 100644 index 000000000..13df69036 --- /dev/null +++ b/src/Navaids/procedure.hxx @@ -0,0 +1,212 @@ +/// procedure.hxx - define route storing an approach, arrival or departure procedure +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_NAVAID_PROCEDURE_HXX +#define FG_NAVAID_PROCEDURE_HXX + +#include <set> + +#include <Navaids/route.hxx> +#include <Airports/runways.hxx> + +typedef SGSharedPtr<FGRunway> FGRunwayRef; + +namespace flightgear { + +// forward decls +class NavdataVisitor; + +class Procedure : public Route +{ +public: + + virtual std::string ident() const + { return _ident; } +protected: + Procedure(const std::string& aIdent); + + std::string _ident; +}; + +/** + * Encapsulate a transition segment + */ +class Transition : public Route +{ +public: + bool route(Waypt* aEnroute, WayptVec& aPath); + + Procedure* parent() const + { return _parent; } + + /** + * Return the enroute end of the transition + */ + WayptRef enroute() const; + + /** + * Return the procedure end of the transition + */ + WayptRef procedureEnd() const; + + virtual std::string ident() const + { return _ident; } +private: + friend class NavdataVisitor; + + Transition(const std::string& aIdent, Procedure* aPr, const WayptVec& aWps); + + std::string _ident; + Procedure* _parent; + WayptVec _primary; +}; + +/** + * Describe an approach procedure, including the missed approach + * segment + */ +class Approach : public Procedure +{ +public: + FGRunwayRef runway() + { return _runway; } + + /** + * Build a route from a valid IAF to the runway, including the missed + * segment. Return false if no valid transition from the specified IAF + * could be found + */ + bool route(WayptRef aIAF, WayptVec& aWps); + + /** + * Build route as above, but ignore transitions, and assume radar + * vectoring to the start of main approach + */ + bool routeFromVectors(WayptVec& aWps); + + const WayptVec& primary() const + { return _primary; } + + const WayptVec& missed() const + { return _missed; } + +private: + friend class NavdataVisitor; + + Approach(const std::string& aIdent); + + void setRunway(FGRunwayRef aRwy); + void setPrimaryAndMissed(const WayptVec& aPrimary, const WayptVec& aMissed); + void addTransition(Transition* aTrans); + + FGRunwayRef _runway; + + typedef std::map<WayptRef, Transition*> WptTransitionMap; + WptTransitionMap _transitions; + + WayptVec _primary; // unify these? + WayptVec _missed; +}; + +class ArrivalDeparture : public Procedure +{ +public: + /** + * Predicate, test if this procedure applies to the requested runway + */ + virtual bool isForRunway(FGRunwayRef aWay) const; + + /** + * Find a path between the runway and enroute structure. Waypoints + * corresponding to the appropriate transitions and segments will be created. + */ + virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath) = 0; + + const WayptVec& common() const + { return _common; } + + /** + * Given an enroute location, find the best enroute transition point for + * this arrival/departure. Best is currently determined as 'closest to the + * enroute location'. + */ + WayptRef findBestTransition(const SGGeod& aPos) const; + + /** + * Find an enroute transition waypoint by identifier. This is necessary + * for the route-manager and similar code that that needs to talk about + * transitions in a human-meaningful way (including persistence). + */ + WayptRef findTransitionByName(const std::string& aIdent) const; + + Transition* findTransitionByEnroute(Waypt* aEnroute) const; +protected: + + bool commonRoute(Waypt* aEnroute, WayptVec& aPath, FGRunwayRef aRwy); + + ArrivalDeparture(const std::string& aIdent); + + + void addRunway(FGRunwayRef aRwy); + + typedef std::map<FGRunwayRef, Transition*> RunwayTransitionMap; + RunwayTransitionMap _runways; + +private: + friend class NavdataVisitor; + + void addTransition(Transition* aTrans); + + void setCommon(const WayptVec& aWps); + + void addRunwayTransition(FGRunwayRef aRwy, Transition* aTrans); + + WayptVec _common; + + typedef std::map<WayptRef, Transition*> WptTransitionMap; + WptTransitionMap _enrouteTransitions; + + +}; + +class SID : public ArrivalDeparture +{ +public: + virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath); + +private: + friend class NavdataVisitor; + + SID(const std::string& aIdent); +}; + +class STAR : public ArrivalDeparture +{ +public: + virtual bool route(FGRunwayRef aWay, Waypt* aEnroute, WayptVec& aPath); + +private: + friend class NavdataVisitor; + + STAR(const std::string& aIdent); +}; + +} // of namespace + +#endif diff --git a/src/Navaids/route.cxx b/src/Navaids/route.cxx new file mode 100644 index 000000000..613e5b3c4 --- /dev/null +++ b/src/Navaids/route.cxx @@ -0,0 +1,679 @@ +// route.cxx - classes supporting waypoints and route structures + +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "route.hxx" + +// std +#include <map> +#include <fstream> + +// Boost +#include <boost/algorithm/string/case_conv.hpp> +#include <boost/algorithm/string.hpp> + +// SimGear +#include <simgear/structure/exception.hxx> +#include <simgear/xml/easyxml.hxx> +#include <simgear/misc/sg_path.hxx> + +// FlightGear +#include <Navaids/procedure.hxx> +#include <Navaids/waypoint.hxx> +#include <Airports/simple.hxx> + +using std::string; +using std::vector; +using std::endl; +using std::fstream; + +namespace flightgear { + +Waypt::Waypt(Route* aOwner) : + _altitudeFt(0.0), + _speedKts(0.0), + _altRestrict(RESTRICT_NONE), + _speedRestrict(RESTRICT_NONE), + _owner(aOwner), + _flags(0) +{ +} + +std::string Waypt::ident() const +{ + return ""; +} + +bool Waypt::flag(WayptFlag aFlag) const +{ + return (_flags & aFlag); +} + +void Waypt::setFlag(WayptFlag aFlag, bool aV) +{ + _flags = (_flags & ~aFlag); + if (aV) _flags |= aFlag; +} + +bool Waypt::matches(Waypt* aOther) const +{ + assert(aOther); + if (ident() != aOther->ident()) { // cheap check first + return false; + } + + return matches(aOther->position()); +} + + +bool Waypt::matches(const SGGeod& aPos) const +{ + double d = SGGeodesy::distanceM(position(), aPos); + return (d < 100.0); // 100 metres seems plenty +} + +void Waypt::setAltitude(double aAlt, RouteRestriction aRestrict) +{ + _altitudeFt = aAlt; + _altRestrict = aRestrict; +} + +void Waypt::setSpeed(double aSpeed, RouteRestriction aRestrict) +{ + _speedKts = aSpeed; + _speedRestrict = aRestrict; +} + +std::pair<double, double> +Waypt::courseAndDistanceFrom(const SGGeod& aPos) const +{ + if (flag(WPT_DYNAMIC)) { + return std::make_pair(0.0, 0.0); + } + + double course, az2, distance; + SGGeodesy::inverse(aPos, position(), course, az2, distance); + return std::make_pair(course, distance); +} + +/////////////////////////////////////////////////////////////////////////// +// persistence + +static RouteRestriction restrictionFromString(const char* aStr) +{ + std::string l = boost::to_lower_copy(std::string(aStr)); + + if (l == "at") return RESTRICT_AT; + if (l == "above") return RESTRICT_ABOVE; + if (l == "below") return RESTRICT_BELOW; + if (l == "none") return RESTRICT_NONE; + + if (l.empty()) return RESTRICT_NONE; + throw sg_io_exception("unknown restriction specification:" + l, + "Route restrictFromString"); +} + +static const char* restrictionToString(RouteRestriction aRestrict) +{ + switch (aRestrict) { + case RESTRICT_AT: return "at"; + case RESTRICT_BELOW: return "below"; + case RESTRICT_ABOVE: return "above"; + case RESTRICT_NONE: return "none"; + default: + throw sg_exception("invalid route restriction", + "Route restrictToString"); + } +} + +Waypt* Waypt::createInstance(Route* aOwner, const std::string& aTypeName) +{ + Waypt* r = NULL; + if (aTypeName == "basic") { + r = new BasicWaypt(aOwner); + } else if (aTypeName == "navaid") { + r = new NavaidWaypoint(aOwner); + } else if (aTypeName == "offset-navaid") { + r = new OffsetNavaidWaypoint(aOwner); + } else if (aTypeName == "hold") { + r = new Hold(aOwner); + } else if (aTypeName == "runway") { + r = new RunwayWaypt(aOwner); + } else if (aTypeName == "hdgToAlt") { + r = new HeadingToAltitude(aOwner); + } else if (aTypeName == "dmeIntercept") { + r = new DMEIntercept(aOwner); + } else if (aTypeName == "radialIntercept") { + r = new RadialIntercept(aOwner); + } else if (aTypeName == "vectors") { + r = new ATCVectors(aOwner); + } + + if (!r || (r->type() != aTypeName)) { + throw sg_exception("broken factory method for type:" + aTypeName, + "Waypt::createInstance"); + } + + return r; +} + +WayptRef Waypt::createFromProperties(Route* aOwner, SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("type")) { + throw sg_io_exception("bad props node, no type provided", + "Waypt::createFromProperties"); + } + + WayptRef nd(createInstance(aOwner, aProp->getStringValue("type"))); + nd->initFromProperties(aProp); + return nd; +} + +void Waypt::saveAsNode(SGPropertyNode* n) const +{ + n->setStringValue("type", type()); + writeToProperties(n); +} + +void Waypt::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (aProp->hasChild("generated")) { + setFlag(WPT_GENERATED, aProp->getBoolValue("generated")); + } + + if (aProp->hasChild("overflight")) { + setFlag(WPT_OVERFLIGHT, aProp->getBoolValue("overflight")); + } + + if (aProp->hasChild("arrival")) { + setFlag(WPT_ARRIVAL, aProp->getBoolValue("arrival")); + } + + if (aProp->hasChild("departure")) { + setFlag(WPT_DEPARTURE, aProp->getBoolValue("departure")); + } + + if (aProp->hasChild("miss")) { + setFlag(WPT_MISS, aProp->getBoolValue("miss")); + } + + if (aProp->hasChild("alt-restrict")) { + _altRestrict = restrictionFromString(aProp->getStringValue("alt-restrict")); + _altitudeFt = aProp->getDoubleValue("altitude-ft"); + } + + if (aProp->hasChild("speed-restrict")) { + _speedRestrict = restrictionFromString(aProp->getStringValue("speed-restrict")); + _speedKts = aProp->getDoubleValue("speed-kts"); + } + + +} + +void Waypt::writeToProperties(SGPropertyNode_ptr aProp) const +{ + if (flag(WPT_OVERFLIGHT)) { + aProp->setBoolValue("overflight", true); + } + + if (flag(WPT_DEPARTURE)) { + aProp->setBoolValue("departure", true); + } + + if (flag(WPT_ARRIVAL)) { + aProp->setBoolValue("arrival", true); + } + + if (flag(WPT_MISS)) { + aProp->setBoolValue("miss", true); + } + + if (flag(WPT_GENERATED)) { + aProp->setBoolValue("generated", true); + } + + if (_altRestrict != RESTRICT_NONE) { + aProp->setStringValue("alt-restrict", restrictionToString(_altRestrict)); + aProp->setDoubleValue("altitude-ft", _altitudeFt); + } + + if (_speedRestrict != RESTRICT_NONE) { + aProp->setStringValue("speed-restrict", restrictionToString(_speedRestrict)); + aProp->setDoubleValue("speed-kts", _speedKts); + } +} + +void Route::dumpRouteToFile(const WayptVec& aRoute, const std::string& aName) +{ + SGPath p = "/Users/jmt/Desktop/" + aName + ".kml"; + std::fstream f; + f.open(p.str().c_str(), fstream::out | fstream::app); + if (!f.is_open()) { + SG_LOG(SG_GENERAL, SG_WARN, "unable to open:" << p.str()); + return; + } + +// pre-amble + f << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n" + "<Document>\n"; + + dumpRouteToLineString(aName, aRoute, f); + +// post-amble + f << "</Document>\n" + "</kml>" << endl; + f.close(); +} + +void Route::dumpRouteToLineString(const std::string& aIdent, + const WayptVec& aRoute, std::ostream& aStream) +{ + // preamble + aStream << "<Placemark>\n"; + aStream << "<name>" << aIdent << "</name>\n"; + aStream << "<LineString>\n"; + aStream << "<tessellate>1</tessellate>\n"; + aStream << "<coordinates>\n"; + + // waypoints + for (unsigned int i=0; i<aRoute.size(); ++i) { + SGGeod pos = aRoute[i]->position(); + aStream << pos.getLongitudeDeg() << "," << pos.getLatitudeDeg() << " " << endl; + } + + // postable + aStream << "</coordinates>\n" + "</LineString>\n" + "</Placemark>\n" << endl; +} + +/////////////////////////////////////////////////////////////////////////// + +class NavdataVisitor : public XMLVisitor { +public: + NavdataVisitor(FGAirport* aApt, const SGPath& aPath); + +protected: + virtual void startXML (); + virtual void endXML (); + virtual void startElement (const char * name, const XMLAttributes &atts); + virtual void endElement (const char * name); + virtual void data (const char * s, int len); + virtual void pi (const char * target, const char * data); + virtual void warning (const char * message, int line, int column); + virtual void error (const char * message, int line, int column); + +private: + Waypt* buildWaypoint(); + void processRunways(ArrivalDeparture* aProc, const XMLAttributes &atts); + + void finishApproach(); + void finishSid(); + void finishStar(); + + FGAirport* _airport; + SGPath _path; + string _text; ///< last element text value + + SID* _sid; + STAR* _star; + Approach* _approach; + + WayptVec _waypoints; ///< waypoint list for current approach/sid/star + WayptVec _transWaypts; ///< waypoint list for current transition + + string _wayptName; + string _wayptType; + string _ident; // id of segment under construction + string _transIdent; + double _longitude, _latitude, _altitude, _speed; + RouteRestriction _altRestrict; + + double _holdRadial; // inbound hold radial, or -1 if radial is 'inbound' + double _holdTD; ///< hold time (seconds) or distance (nm), based on flag below + bool _holdRighthanded; + bool _holdDistance; // true, TD is distance in nm; false, TD is time in seconds + + double _course, _radial, _dmeDistance; +}; + +void Route::loadAirportProcedures(const SGPath& aPath, FGAirport* aApt) +{ + assert(aApt); + try { + NavdataVisitor visitor(aApt, aPath); + readXML(aPath.str(), visitor); + } catch (sg_io_exception& ex) { + SG_LOG(SG_GENERAL, SG_WARN, "failured parsing procedures: " << aPath.str() << + "\n\t" << ex.getMessage() << "\n\tat:" << ex.getLocation().asString()); + } catch (sg_exception& ex) { + SG_LOG(SG_GENERAL, SG_WARN, "failured parsing procedures: " << aPath.str() << + "\n\t" << ex.getMessage()); + } +} + +NavdataVisitor::NavdataVisitor(FGAirport* aApt, const SGPath& aPath): + _airport(aApt), + _path(aPath), + _sid(NULL), + _star(NULL), + _approach(NULL) +{ +} + +void NavdataVisitor::startXML() +{ +} + +void NavdataVisitor::endXML() +{ +} + +void NavdataVisitor::startElement(const char* name, const XMLAttributes &atts) +{ + _text.clear(); + string tag(name); + if (tag == "Airport") { + string icao(atts.getValue("ICAOcode")); + if (_airport->ident() != icao) { + throw sg_format_exception("Airport and ICAO mismatch", icao, _path.str()); + } + } else if (tag == "Sid") { + string ident(atts.getValue("Name")); + _sid = new SID(ident); + _waypoints.clear(); + processRunways(_sid, atts); + } else if (tag == "Star") { + string ident(atts.getValue("Name")); + _star = new STAR(ident); + _waypoints.clear(); + processRunways(_star, atts); + } else if ((tag == "Sid_Waypoint") || + (tag == "App_Waypoint") || + (tag == "Star_Waypoint") || + (tag == "AppTr_Waypoint") || + (tag == "SidTr_Waypoint") || + (tag == "RwyTr_Waypoint")) + { + // reset waypoint data + _speed = 0.0; + _altRestrict = RESTRICT_NONE; + _altitude = 0.0; + } else if (tag == "Approach") { + _ident = atts.getValue("Name"); + _waypoints.clear(); + _approach = new Approach(_ident); + } else if ((tag == "Sid_Transition") || + (tag == "App_Transition") || + (tag == "Star_Transition")) { + _transIdent = atts.getValue("Name"); + _transWaypts.clear(); + } else if (tag == "RunwayTransition") { + _transIdent = atts.getValue("Runway"); + _transWaypts.clear(); + } else { + + } +} + +void NavdataVisitor::processRunways(ArrivalDeparture* aProc, const XMLAttributes &atts) +{ + string v("All"); + if (atts.hasAttribute("Runways")) { + v = atts.getValue("Runways"); + } + + if (v == "All") { + for (unsigned int r=0; r<_airport->numRunways(); ++r) { + aProc->addRunway(_airport->getRunwayByIndex(r)); + } + return; + } + + vector<string> rwys; + boost::split(rwys, v, boost::is_any_of(" ,")); + for (unsigned int r=0; r<rwys.size(); ++r) { + FGRunway* rwy = _airport->getRunwayByIdent(rwys[r]); + aProc->addRunway(rwy); + } +} + +void NavdataVisitor::endElement(const char* name) +{ + string tag(name); + if ((tag == "Sid_Waypoint") || + (tag == "App_Waypoint") || + (tag == "Star_Waypoint")) + { + _waypoints.push_back(buildWaypoint()); + } else if ((tag == "AppTr_Waypoint") || + (tag == "SidTr_Waypoint") || + (tag == "RwyTr_Waypoint") || + (tag == "StarTr_Waypoint")) + { + _transWaypts.push_back(buildWaypoint()); + } else if (tag == "Sid_Transition") { + assert(_sid); + // SID waypoints are stored backwards, to share code with STARs + std::reverse(_transWaypts.begin(), _transWaypts.end()); + Transition* t = new Transition(_transIdent, _sid, _transWaypts); + _sid->addTransition(t); + } else if (tag == "Star_Transition") { + assert(_star); + Transition* t = new Transition(_transIdent, _star, _transWaypts); + _star->addTransition(t); + } else if (tag == "App_Transition") { + assert(_approach); + Transition* t = new Transition(_transIdent, _approach, _transWaypts); + _approach->addTransition(t); + } else if (tag == "RunwayTransition") { + ArrivalDeparture* ad; + if (_sid) { + // SID waypoints are stored backwards, to share code with STARs + std::reverse(_transWaypts.begin(), _transWaypts.end()); + ad = _sid; + } else { + ad = _star; + } + + Transition* t = new Transition(_transIdent, ad, _transWaypts); + FGRunwayRef rwy = _airport->getRunwayByIdent(_transIdent); + ad->addRunwayTransition(rwy, t); + } else if (tag == "Approach") { + finishApproach(); + } else if (tag == "Sid") { + finishSid(); + } else if (tag == "Star") { + finishStar(); + } else if (tag == "Longitude") { + _longitude = atof(_text.c_str()); + } else if (tag == "Latitude") { + _latitude = atof(_text.c_str()); + } else if (tag == "Name") { + _wayptName = _text; + } else if (tag == "Type") { + _wayptType = _text; + } else if (tag == "Speed") { + _speed = atoi(_text.c_str()); + } else if (tag == "Altitude") { + _altitude = atof(_text.c_str()); + } else if (tag == "AltitudeRestriction") { + if (_text == "at") { + _altRestrict = RESTRICT_AT; + } else if (_text == "above") { + _altRestrict = RESTRICT_ABOVE; + } else if (_text == "below") { + _altRestrict = RESTRICT_BELOW; + } else { + throw sg_format_exception("Unrecognized altitude restriction", _text); + } + } else if (tag == "Hld_Rad_or_Inbd") { + if (_text == "Inbd") { + _holdRadial = -1.0; + } + } else if (tag == "Hld_Time_or_Dist") { + _holdDistance = (_text == "Dist"); + } else if (tag == "Hld_Rad_value") { + _holdRadial = atof(_text.c_str()); + } else if (tag == "Hld_Turn") { + _holdRighthanded = (_text == "Right"); + } else if (tag == "Hld_td_value") { + _holdTD = atof(_text.c_str()); + } else if (tag == "Hdg_Crs_value") { + _course = atof(_text.c_str()); + } else if (tag == "DMEtoIntercept") { + _dmeDistance = atof(_text.c_str()); + } else if (tag == "RadialtoIntercept") { + _radial = atof(_text.c_str()); + } else { + + } +} + +Waypt* NavdataVisitor::buildWaypoint() +{ + Waypt* wp = NULL; + if (_wayptType == "Normal") { + // new LatLonWaypoint + SGGeod pos(SGGeod::fromDeg(_longitude, _latitude)); + wp = new BasicWaypt(pos, _wayptName, NULL); + } else if (_wayptType == "Runway") { + string ident = _wayptName.substr(2); + FGRunwayRef rwy = _airport->getRunwayByIdent(ident); + wp = new RunwayWaypt(rwy, NULL); + } else if (_wayptType == "Hold") { + SGGeod pos(SGGeod::fromDeg(_longitude, _latitude)); + Hold* h = new Hold(pos, _wayptName, NULL); + wp = h; + if (_holdRighthanded) { + h->setRightHanded(); + } else { + h->setLeftHanded(); + } + + if (_holdDistance) { + h->setHoldDistance(_holdTD); + } else { + h->setHoldTime(_holdTD * 60.0); + } + + if (_holdRadial >= 0.0) { + h->setHoldRadial(_holdRadial); + } + } else if (_wayptType == "Vectors") { + wp = new ATCVectors(NULL, _airport); + } else if ((_wayptType == "Intc") || (_wayptType == "VorRadialIntc")) { + SGGeod pos(SGGeod::fromDeg(_longitude, _latitude)); + wp = new RadialIntercept(NULL, _wayptName, pos, _course, _radial); + } else if (_wayptType == "DmeIntc") { + SGGeod pos(SGGeod::fromDeg(_longitude, _latitude)); + wp = new DMEIntercept(NULL, _wayptName, pos, _course, _dmeDistance); + } else if (_wayptType == "ConstHdgtoAlt") { + wp = new HeadingToAltitude(NULL, _wayptName, _course); + } else { + SG_LOG(SG_GENERAL, SG_ALERT, "implement waypoint type:" << _wayptType); + throw sg_format_exception("Unrecognized waypt type", _wayptType); + } + + assert(wp); + if ((_altitude > 0.0) && (_altRestrict != RESTRICT_NONE)) { + wp->setAltitude(_altitude,_altRestrict); + } + + if (_speed > 0.0) { + wp->setSpeed(_speed, RESTRICT_AT); // or _BELOW? + } + + return wp; +} + +void NavdataVisitor::finishApproach() +{ + WayptVec::iterator it; + FGRunwayRef rwy; + +// find the runway node + for (it = _waypoints.begin(); it != _waypoints.end(); ++it) { + FGPositionedRef navid = (*it)->source(); + if (!navid) { + continue; + } + + if (navid->type() == FGPositioned::RUNWAY) { + rwy = (FGRunway*) navid.get(); + break; + } + } + + if (!rwy) { + throw sg_format_exception("Malformed approach, no runway waypt", _ident); + } + + WayptVec primary(_waypoints.begin(), it); + // erase all points up to and including the runway, to leave only the + // missed segments + _waypoints.erase(_waypoints.begin(), ++it); + + _approach->setRunway(rwy); + _approach->setPrimaryAndMissed(primary, _waypoints); + _airport->addApproach(_approach); + _approach = NULL; +} + +void NavdataVisitor::finishSid() +{ + // reverse order, because that's how we deal with commonality between + // STARs and SIDs. SID::route undoes this + std::reverse(_waypoints.begin(), _waypoints.end()); + _sid->setCommon(_waypoints); + _airport->addSID(_sid); + _sid = NULL; +} + +void NavdataVisitor::finishStar() +{ + _star->setCommon(_waypoints); + _airport->addSTAR(_star); + _star = NULL; +} + +void NavdataVisitor::data (const char * s, int len) +{ + _text += string(s, len); +} + + +void NavdataVisitor::pi (const char * target, const char * data) { + //cout << "Processing instruction " << target << ' ' << data << endl; +} + +void NavdataVisitor::warning (const char * message, int line, int column) { + SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')'); +} + +void NavdataVisitor::error (const char * message, int line, int column) { + SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')'); +} + +} // of namespace flightgear diff --git a/src/Navaids/route.hxx b/src/Navaids/route.hxx new file mode 100644 index 000000000..a23d728a7 --- /dev/null +++ b/src/Navaids/route.hxx @@ -0,0 +1,208 @@ +/** + * route.hxx - defines basic route and route-element classes. Route elements + * are specialised into waypoints and related things. Routes are any class tha + * owns a collection (list, tree, graph) of route elements - such as airways, + * procedures or a flight plan. + */ + +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_ROUTE_HXX +#define FG_ROUTE_HXX + +// std +#include <vector> +#include <map> +#include <iosfwd> + +// Simgear +#include <simgear/math/SGMath.hxx> +#include <simgear/structure/SGReferenced.hxx> +#include <simgear/structure/SGSharedPtr.hxx> +#include <simgear/props/props.hxx> + +// forward decls +class FGPositioned; +class SGPath; +class FGAirport; + +namespace flightgear +{ + +// forward decls +class Route; +class Waypt; +class NavdataVisitor; + +typedef SGSharedPtr<Waypt> WayptRef; + +typedef enum { + WPT_MAP = 1 << 0, ///< missed approach point + WPT_IAF = 1 << 1, ///< initial approach fix + WPT_FAF = 1 << 2, ///< final approach fix + WPT_OVERFLIGHT = 1 << 3, ///< must overfly the point directly + WPT_TRANSITION = 1 << 4, ///< transition to/from enroute structure + WPT_MISS = 1 << 5, ///< segment is part of missed approach + /// waypoint position is dynamic, i.e moves based on other criteria, + /// such as altitude, inbound course, or so on. + WPT_DYNAMIC = 1 << 6, + /// waypoint was created automatically (not manually entered/loaded) + /// for example waypoints from airway routing or a procedure + WPT_GENERATED = 1 << 7, + + WPT_DEPARTURE = 1 << 8, + WPT_ARRIVAL = 1 << 9 +} WayptFlag; + +typedef enum { + RESTRICT_NONE, + RESTRICT_AT, + RESTRICT_ABOVE, + RESTRICT_BELOW +} RouteRestriction; + +/** + * Abstract base class for waypoints (and things that are treated similarly + * by navigation systems) + */ +class Waypt : public SGReferenced +{ +public: + Route* owner() const + { return _owner; } + + /** + * Return true course (in degrees) and distance (in metres) from the provided + * position to this waypoint + */ + virtual std::pair<double, double> courseAndDistanceFrom(const SGGeod& aPos) const; + + virtual SGGeod position() const = 0; + + /** + * The Positioned associated with this element, if one exists + */ + virtual FGPositioned* source() const + { return NULL; } + + virtual double altitudeFt() const + { return _altitudeFt; } + + virtual double speedKts() const + { return _speedKts; } + + virtual RouteRestriction altitudeRestriction() const + { return _altRestrict; } + + virtual RouteRestriction speedRestriction() const + { return _speedRestrict; } + + void setAltitude(double aAlt, RouteRestriction aRestrict); + void setSpeed(double aSpeed, RouteRestriction aRestrict); + + /** + * Identifier assoicated with the waypoint. Human-readable, but + * possibly quite terse, and definitiely not unique. + */ + virtual std::string ident() const; + + /** + * Test if the specified flag is set for this element + */ + virtual bool flag(WayptFlag aFlag) const; + + void setFlag(WayptFlag aFlag, bool aV = true); + + /** + * Factory method + */ + static WayptRef createFromProperties(Route* aOwner, SGPropertyNode_ptr aProp); + + void saveAsNode(SGPropertyNode* node) const; + + /** + * Test if this element and another are 'the same', i.e matching + * ident and lat/lon are approximately equal + */ + bool matches(Waypt* aOther) const; + + /** + * Test if this element and a position 'the same' + * this can be defined by either position, ident or both + */ + bool matches(const SGGeod& aPos) const; + + virtual std::string type() const = 0; +protected: + friend class NavdataVisitor; + + Waypt(Route* aOwner); + + /** + * Persistence helper - read node properties from a file + */ + virtual void initFromProperties(SGPropertyNode_ptr aProp); + + /** + * Persistence helper - save this element to a node + */ + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + typedef Waypt* (FactoryFunction)(Route* aOwner) ; + static void registerFactory(const std::string aNodeType, FactoryFunction* aFactory); + + double _altitudeFt; + double _speedKts; + RouteRestriction _altRestrict; + RouteRestriction _speedRestrict; +private: + + /** + * Create an instance of a concrete subclass, or throw an exception + */ + static Waypt* createInstance(Route* aOwner, const std::string& aTypeName); + + Route* _owner; + unsigned short _flags; + +}; + +typedef std::vector<WayptRef> WayptVec; + +class Route +{ +public: + /** + * + */ + virtual std::string ident() const = 0; + + static void loadAirportProcedures(const SGPath& aPath, FGAirport* aApt); + + static void dumpRouteToFile(const WayptVec& aRoute, const std::string& aName); + + static void dumpRouteToLineString(const std::string& aIdent, + const WayptVec& aRoute, std::ostream& aStream); +private: + +}; + +} // of namespace flightgear + +#endif // of FG_ROUTE_HXX diff --git a/src/Navaids/routePath.cxx b/src/Navaids/routePath.cxx new file mode 100644 index 000000000..b9ac48c1e --- /dev/null +++ b/src/Navaids/routePath.cxx @@ -0,0 +1,346 @@ +#include <Navaids/routePath.hxx> + +#include <simgear/structure/exception.hxx> +#include <simgear/magvar/magvar.hxx> +#include <simgear/timing/sg_time.hxx> + +#include <Main/globals.hxx> +#include <Airports/runways.hxx> +#include <Navaids/waypoint.hxx> +#include <Navaids/positioned.hxx> + +namespace flightgear { + bool geocRadialIntersection(const SGGeoc& a, double r1, const SGGeoc& b, double r2, SGGeoc& result); +} + +using namespace flightgear; + +// implement Point(s) known distance from a great circle + +static double sqr(const double x) +{ + return x * x; +} + +double pointsKnownDistanceFromGC(const SGGeoc& a, const SGGeoc&b, const SGGeoc& d, double dist) +{ + double A = SGGeodesy::courseRad(a, d) - SGGeodesy::courseRad(a, b); + double bDist = SGGeodesy::distanceRad(a, d); + + // r=(cos(b)^2+sin(b)^2*cos(A)^2)^(1/2) + double r = pow(sqr(cos(bDist)) + sqr(sin(bDist)) * sqr(cos(A)), 0.5); + + double p = atan2(sin(bDist)*cos(A), cos(bDist)); + + if (sqr(cos(dist)) > sqr(r)) { + SG_LOG(SG_GENERAL, SG_INFO, "pointsKnownDistanceFromGC, no points exist"); + return -1.0; + } + + double dp1 = p + acos(cos(dist)/r); + double dp2 = p - acos(cos(dist)/r); + + double dp1Nm = fabs(dp1 * SG_RAD_TO_NM); + double dp2Nm = fabs(dp2 * SG_RAD_TO_NM); + + return SGMiscd::min(dp1Nm, dp2Nm); +} + +RoutePath::RoutePath(const flightgear::WayptVec& wpts) : + _waypts(wpts) +{ + _pathClimbFPM = 1200; + _pathDescentFPM = 800; + _pathIAS = 190; + _pathTurnRate = 3.0; // 3 deg/sec = 180def/min = standard rate turn +} + +SGGeodVec RoutePath::pathForIndex(int index) const +{ + if (index == 0) { + return SGGeodVec(); // no path for first waypoint + } + + if (_waypts[index]->type() == "vectors") { + return SGGeodVec(); // empty + } + + if (_waypts[index]->type() == "hold") { + return pathForHold((Hold*) _waypts[index].get()); + } + + SGGeodVec r; + SGGeod pos; + if (!computedPositionForIndex(index-1, pos)) { + return SGGeodVec(); + } + + r.push_back(pos); + if (!computedPositionForIndex(index, pos)) { + return SGGeodVec(); + } + + r.push_back(pos); + + if (_waypts[index]->type() == "runway") { + // runways get an extra point, at the end. this is particularly + // important so missed approach segments draw correctly + FGRunway* rwy = static_cast<RunwayWaypt*>(_waypts[index].get())->runway(); + r.push_back(rwy->end()); + } + + return r; +} + +SGGeod RoutePath::positionForIndex(int index) const +{ + SGGeod r; + bool ok = computedPositionForIndex(index, r); + if (!ok) { + return SGGeod(); + } + + return r; +} + +SGGeodVec RoutePath::pathForHold(Hold* hold) const +{ + int turnSteps = 16; + double hdg = hold->inboundRadial(); + double turnDelta = 180.0 / turnSteps; + + SGGeodVec r; + double az2; + double stepTime = turnDelta / _pathTurnRate; // in seconds + double stepDist = _pathIAS * (stepTime / 3600.0) * SG_NM_TO_METER; + double legDist = hold->isDistance() ? + hold->timeOrDistance() + : _pathIAS * (hold->timeOrDistance() / 3600.0); + legDist *= SG_NM_TO_METER; + + if (hold->isLeftHanded()) { + turnDelta = -turnDelta; + } + SGGeod pos = hold->position(); + r.push_back(pos); + + // turn+leg sides are a mirror + for (int j=0; j < 2; ++j) { + // turn + for (int i=0;i<turnSteps; ++i) { + hdg += turnDelta; + SGGeodesy::direct(pos, hdg, stepDist, pos, az2); + r.push_back(pos); + } + + // leg + SGGeodesy::direct(pos, hdg, legDist, pos, az2); + r.push_back(pos); + } // of leg+turn duplication + + return r; +} + +/** + * the path context holds the state of of an imaginary aircraft traversing + * the route, and limits the rate at which heading / altitude / position can + * change + */ +class RoutePath::PathCtx +{ +public: + SGGeod pos; + double heading; +}; + +bool RoutePath::computedPositionForIndex(int index, SGGeod& r) const +{ + if ((index < 0) || (index >= (int) _waypts.size())) { + throw sg_range_exception("waypt index out of range", + "RoutePath::computedPositionForIndex"); + } + + WayptRef w = _waypts[index]; + if (!w->flag(WPT_DYNAMIC)) { + r = w->position(); + return true; + } + + if (w->type() == "radialIntercept") { + // radial intersection along track + SGGeod prev; + if (!computedPositionForIndex(index - 1, prev)) { + return false; + } + + SGGeoc prevGc = SGGeoc::fromGeod(prev); + SGGeoc navid = SGGeoc::fromGeod(w->position()); + SGGeoc rGc; + double magVar = magVarFor(prev); + + RadialIntercept* i = (RadialIntercept*) w.get(); + double radial = i->radialDegMagnetic() + magVar; + double track = i->courseDegMagnetic() + magVar; + bool ok = geocRadialIntersection(prevGc, track, navid, radial, rGc); + if (!ok) { + return false; + } + + r = SGGeod::fromGeoc(rGc); + return true; + } else if (w->type() == "dmeIntercept") { + // find the point along the DME track, from prev, that is the correct distance + // from the DME + SGGeod prev; + if (!computedPositionForIndex(index - 1, prev)) { + return false; + } + + DMEIntercept* di = (DMEIntercept*) w.get(); + + SGGeoc prevGc = SGGeoc::fromGeod(prev); + SGGeoc navid = SGGeoc::fromGeod(w->position()); + double distRad = di->dmeDistanceNm() * SG_NM_TO_RAD; + SGGeoc rGc; + + SGGeoc bPt; + double crs = di->courseDegMagnetic() + magVarFor(prev); + SGGeodesy::advanceRadM(prevGc, crs, 100 * SG_NM_TO_RAD, bPt); + + double dNm = pointsKnownDistanceFromGC(prevGc, bPt, navid, distRad); + if (dNm < 0.0) { + return false; + } + + double az2; + SGGeodesy::direct(prev, crs, dNm * SG_NM_TO_METER, r, az2); + return true; + } else if (w->type() == "hdgToAlt") { + HeadingToAltitude* h = (HeadingToAltitude*) w.get(); + double climb = h->altitudeFt() - computeAltitudeForIndex(index - 1); + double d = distanceForClimb(climb); + + SGGeod prevPos; + if (!computedPositionForIndex(index - 1, prevPos)) { + return false; + } + + double hdg = h->headingDegMagnetic() + magVarFor(prevPos); + + double az2; + SGGeodesy::direct(prevPos, hdg, d * SG_NM_TO_METER, r, az2); + return true; + } else if (w->type() == "vectors"){ + return false; + } else if (w->type() == "hold") { + r = w->position(); + return true; + } + + SG_LOG(SG_GENERAL, SG_INFO, "RoutePath::computedPositionForIndex: unhandled type:" << w->type()); + return false; +} + +double RoutePath::computeAltitudeForIndex(int index) const +{ + if ((index < 0) || (index >= (int) _waypts.size())) { + throw sg_range_exception("waypt index out of range", + "RoutePath::computeAltitudeForIndex"); + } + + WayptRef w = _waypts[index]; + if (w->altitudeRestriction() != RESTRICT_NONE) { + return w->altitudeFt(); // easy! + } + + if (w->type() == "runway") { + FGRunway* rwy = static_cast<RunwayWaypt*>(w.get())->runway(); + return rwy->threshold().getElevationFt(); + } else if ((w->type() == "hold") || (w->type() == "vectors")) { + // pretend we don't change altitude in holds/vectoring + return computeAltitudeForIndex(index - 1); + } + + double prevAlt = computeAltitudeForIndex(index - 1); +// find distance to previous, and hence climb/descent + SGGeod pos, prevPos; + + if (!computedPositionForIndex(index, pos) || + !computedPositionForIndex(index - 1, prevPos)) + { + SG_LOG(SG_GENERAL, SG_WARN, "unable to compute position for waypoints"); + throw sg_range_exception("unable to compute position for waypoints"); + } + + double d = SGGeodesy::distanceNm(prevPos, pos); + double tMinutes = (d / _pathIAS) * 60.0; // (nm / knots) * 60 = time in minutes + + double deltaFt; // change in altitude in feet + if (w->flag(WPT_ARRIVAL) && !w->flag(WPT_MISS)) { + deltaFt = -_pathDescentFPM * tMinutes; + } else { + deltaFt = _pathClimbFPM * tMinutes; + } + + return prevAlt + deltaFt; +} + +double RoutePath::computeTrackForIndex(int index) const +{ + if ((index < 0) || (index >= (int) _waypts.size())) { + throw sg_range_exception("waypt index out of range", + "RoutePath::computeTrackForIndex"); + } + + WayptRef w = _waypts[index]; + if (w->type() == "radialIntercept") { + RadialIntercept* r = (RadialIntercept*) w.get(); + return r->courseDegMagnetic(); + } else if (w->type() == "dmeIntercept") { + DMEIntercept* d = (DMEIntercept*) w.get(); + return d->courseDegMagnetic(); + } else if (w->type() == "hdgToAlt") { + HeadingToAltitude* h = (HeadingToAltitude*) w.get(); + return h->headingDegMagnetic(); + } else if (w->type() == "hold") { + Hold* h = (Hold*) w.get(); + return h->inboundRadial(); + } else if (w->type() == "vectors") { + SG_LOG(SG_GENERAL, SG_WARN, "asked for track from VECTORS"); + throw sg_range_exception("asked for track from vectors waypt"); + } else if (w->type() == "runway") { + FGRunway* rwy = static_cast<RunwayWaypt*>(w.get())->runway(); + return rwy->headingDeg(); + } + +// course based upon previous and current pos + SGGeod pos, prevPos; + + if (!computedPositionForIndex(index, pos) || + !computedPositionForIndex(index - 1, prevPos)) + { + SG_LOG(SG_GENERAL, SG_WARN, "unable to compute position for waypoints"); + throw sg_range_exception("unable to compute position for waypoints"); + } + + return SGGeodesy::courseDeg(prevPos, pos); +} + +double RoutePath::distanceForClimb(double climbFt) const +{ + double t = 0.0; // in seconds + if (climbFt > 0.0) { + t = (climbFt / _pathClimbFPM) * 60.0; + } else if (climbFt < 0.0) { + t = (climbFt / _pathDescentFPM) * 60.0; + } + + return _pathIAS * (t / 3600.0); +} + +double RoutePath::magVarFor(const SGGeod& geod) const +{ + double jd = globals->get_time_params()->getJD(); + return sgGetMagVar(geod, jd); +} + diff --git a/src/Navaids/routePath.hxx b/src/Navaids/routePath.hxx new file mode 100644 index 000000000..d04c03d08 --- /dev/null +++ b/src/Navaids/routePath.hxx @@ -0,0 +1,69 @@ +/** + * routePath.hxx - convert a route to straight line segments, for graphical + * output or display. + */ + +// Written by James Turner, started 2010. +// +// Copyright (C) 2010 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_ROUTE_PATH_HXX +#define FG_ROUTE_PATH_HXX + +#include <Navaids/route.hxx> + +namespace flightgear +{ + class Hold; +} + +typedef std::vector<SGGeod> SGGeodVec; + +class RoutePath +{ +public: + RoutePath(const flightgear::WayptVec& wpts); + + SGGeodVec pathForIndex(int index) const; + + SGGeod positionForIndex(int index) const; + +private: + class PathCtx; + + SGGeodVec pathForHold(flightgear::Hold* hold) const; + + bool computedPositionForIndex(int index, SGGeod& pos) const; + double computeAltitudeForIndex(int index) const; + double computeTrackForIndex(int index) const; + + /** + * Find the distance (in Nm) to climb/descend a height in feet + */ + double distanceForClimb(double climbFt) const; + + double magVarFor(const SGGeod& gd) const; + + flightgear::WayptVec _waypts; + + int _pathClimbFPM; ///< climb-rate to use for pathing + int _pathDescentFPM; ///< descent rate to use (feet-per-minute) + int _pathIAS; ///< IAS (knots) to use for pathing + double _pathTurnRate; ///< degrees-per-second, defaults to 3, i.e 180 in a minute +}; + +#endif diff --git a/src/Navaids/testnavs.cxx b/src/Navaids/testnavs.cxx index b7215e8c7..d38341aa7 100644 --- a/src/Navaids/testnavs.cxx +++ b/src/Navaids/testnavs.cxx @@ -1,3 +1,21 @@ +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + #include <simgear/misc/sg_path.hxx> #include "fixlist.hxx" diff --git a/src/Navaids/waypoint.cxx b/src/Navaids/waypoint.cxx new file mode 100644 index 000000000..5992774b1 --- /dev/null +++ b/src/Navaids/waypoint.cxx @@ -0,0 +1,471 @@ +// waypoint.cxx - waypoints that can occur in routes/procedures +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "waypoint.hxx" + +#include <simgear/structure/exception.hxx> +#include <simgear/route/waypoint.hxx> + +#include <Airports/simple.hxx> +#include <Airports/runways.hxx> + +using std::string; + +namespace flightgear +{ + +BasicWaypt::BasicWaypt(const SGGeod& aPos, const string& aIdent, Route* aOwner) : + Waypt(aOwner), + _pos(aPos), + _ident(aIdent) +{ +} + +BasicWaypt::BasicWaypt(const SGWayPoint& aWP, Route* aOwner) : + Waypt(aOwner), + _pos(aWP.get_target()), + _ident(aWP.get_id()) +{ +} + +BasicWaypt::BasicWaypt(Route* aOwner) : + Waypt(aOwner) +{ +} + +void BasicWaypt::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) { + throw sg_io_exception("missing lon/lat properties", + "BasicWaypt::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + + _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), + aProp->getDoubleValue("lat")); + _ident = aProp->getStringValue("ident"); +} + +void BasicWaypt::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + + aProp->setStringValue("ident", _ident); + aProp->setDoubleValue("lon", _pos.getLongitudeDeg()); + aProp->setDoubleValue("lat", _pos.getLatitudeDeg()); +} + +////////////////////////////////////////////////////////////////////////////// + +NavaidWaypoint::NavaidWaypoint(FGPositioned* aPos, Route* aOwner) : + Waypt(aOwner), + _navaid(aPos) +{ + if (aPos->type() == FGPositioned::RUNWAY) { + SG_LOG(SG_GENERAL, SG_WARN, "sure you don't want to be building a runway waypt here?"); + } +} + +NavaidWaypoint::NavaidWaypoint(Route* aOwner) : + Waypt(aOwner) +{ +} + + +SGGeod NavaidWaypoint::position() const +{ + return SGGeod::fromGeodFt(_navaid->geod(), _altitudeFt); +} + +std::string NavaidWaypoint::ident() const +{ + return _navaid->ident(); +} + +void NavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("ident")) { + throw sg_io_exception("missing navaid value", + "NavaidWaypoint::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + + std::string idn(aProp->getStringValue("ident")); + SGGeod p; + if (aProp->hasChild("lon")) { + p = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat")); + } + + // FIXME - resolve co-located DME, etc + // is it sufficent just to ignore DMEs, actually? + FGPositionedRef nav = FGPositioned::findClosestWithIdent(idn, p, NULL); + if (!nav) { + throw sg_io_exception("unknown navaid ident:" + idn, + "NavaidWaypoint::initFromProperties"); + } + + _navaid = nav; +} + +void NavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + + aProp->setStringValue("ident", _navaid->ident()); + // write lon/lat to disambiguate + aProp->setDoubleValue("lon", _navaid->geod().getLongitudeDeg()); + aProp->setDoubleValue("lat", _navaid->geod().getLatitudeDeg()); +} + +OffsetNavaidWaypoint::OffsetNavaidWaypoint(FGPositioned* aPos, Route* aOwner, + double aRadial, double aDistNm) : + NavaidWaypoint(aPos, aOwner), + _radial(aRadial), + _distanceNm(aDistNm) +{ + init(); +} + +OffsetNavaidWaypoint::OffsetNavaidWaypoint(Route* aOwner) : + NavaidWaypoint(aOwner) +{ +} + +void OffsetNavaidWaypoint::init() +{ + SGGeod offset; + double az2; + SGGeodesy::direct(_navaid->geod(), _radial, _distanceNm * SG_NM_TO_METER, offset, az2); + _geod = SGGeod::fromGeodFt(offset, _altitudeFt); +} + +void OffsetNavaidWaypoint::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("radial-deg") || !aProp->hasChild("distance-nm")) { + throw sg_io_exception("missing radial/offset distance", + "OffsetNavaidWaypoint::initFromProperties"); + } + + NavaidWaypoint::initFromProperties(aProp); + _radial = aProp->getDoubleValue("radial-deg"); + _distanceNm = aProp->getDoubleValue("distance-nm"); + init(); +} + +void OffsetNavaidWaypoint::writeToProperties(SGPropertyNode_ptr aProp) const +{ + NavaidWaypoint::writeToProperties(aProp); + aProp->setDoubleValue("radial-deg", _radial); + aProp->setDoubleValue("distance-nm", _distanceNm); +} + +///////////////////////////////////////////////////////////////////////////// + +RunwayWaypt::RunwayWaypt(FGRunway* aPos, Route* aOwner) : + Waypt(aOwner), + _runway(aPos) +{ +} + +RunwayWaypt::RunwayWaypt(Route* aOwner) : + Waypt(aOwner) +{ +} + +SGGeod RunwayWaypt::position() const +{ + return _runway->threshold(); +} + +std::string RunwayWaypt::ident() const +{ + return _runway->airport()->ident() + "-" + _runway->ident(); +} + +FGPositioned* RunwayWaypt::source() const +{ + return _runway; +} + +void RunwayWaypt::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("icao") || !aProp->hasChild("ident")) { + throw sg_io_exception("missing values: icao or ident", + "RunwayWaypoint::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + std::string idn(aProp->getStringValue("ident")); + const FGAirport* apt = FGAirport::getByIdent(aProp->getStringValue("icao")); + _runway = apt->getRunwayByIdent(aProp->getStringValue("ident")); +} + +void RunwayWaypt::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + aProp->setStringValue("ident", _runway->ident()); + aProp->setStringValue("icao", _runway->airport()->ident()); +} + +///////////////////////////////////////////////////////////////////////////// + +Hold::Hold(const SGGeod& aPos, const string& aIdent, Route* aOwner) : + BasicWaypt(aPos, aIdent, aOwner), + _righthanded(true), + _isDistance(false) +{ + setFlag(WPT_DYNAMIC); +} + +Hold::Hold(Route* aOwner) : + BasicWaypt(aOwner), + _righthanded(true), + _isDistance(false) +{ +} + +void Hold::setHoldRadial(double aInboundRadial) +{ + _bearing = aInboundRadial; +} + +void Hold::setHoldDistance(double aDistanceNm) +{ + _isDistance = true; + _holdTD = aDistanceNm; +} + +void Hold::setHoldTime(double aTimeSec) +{ + _isDistance = false; + _holdTD = aTimeSec; +} + +void Hold::setRightHanded() +{ + _righthanded = true; +} + +void Hold::setLeftHanded() +{ + _righthanded = false; +} + +void Hold::initFromProperties(SGPropertyNode_ptr aProp) +{ + BasicWaypt::initFromProperties(aProp); + + if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) { + throw sg_io_exception("missing lon/lat properties", + "Hold::initFromProperties"); + } + + _righthanded = aProp->getBoolValue("right-handed"); + _isDistance = aProp->getBoolValue("is-distance"); + _bearing = aProp->getDoubleValue("inbound-radial-deg"); + _holdTD = aProp->getDoubleValue("td"); +} + +void Hold::writeToProperties(SGPropertyNode_ptr aProp) const +{ + BasicWaypt::writeToProperties(aProp); + + aProp->setBoolValue("right-handed", _righthanded); + aProp->setBoolValue("is-distance", _isDistance); + aProp->setDoubleValue("inbound-radial-deg", _bearing); + aProp->setDoubleValue("td", _holdTD); +} + +///////////////////////////////////////////////////////////////////////////// + +HeadingToAltitude::HeadingToAltitude(Route* aOwner, const string& aIdent, + double aMagHdg) : + Waypt(aOwner), + _ident(aIdent), + _magHeading(aMagHdg) +{ + setFlag(WPT_DYNAMIC); +} + +HeadingToAltitude::HeadingToAltitude(Route* aOwner) : + Waypt(aOwner) +{ +} + +void HeadingToAltitude::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("heading-deg")) { + throw sg_io_exception("missing heading/alt properties", + "HeadingToAltitude::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + _magHeading = aProp->getDoubleValue("heading-deg"); + _ident = aProp->getStringValue("ident"); +} + +void HeadingToAltitude::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + aProp->setStringValue("ident", _ident); + aProp->setDoubleValue("heading-deg", _magHeading); +} + +///////////////////////////////////////////////////////////////////////////// + +DMEIntercept::DMEIntercept(Route* aOwner, const string& aIdent, const SGGeod& aPos, + double aCourseDeg, double aDistanceNm) : + Waypt(aOwner), + _ident(aIdent), + _pos(aPos), + _magCourse(aCourseDeg), + _dmeDistanceNm(aDistanceNm) +{ + setFlag(WPT_DYNAMIC); +} + +DMEIntercept::DMEIntercept(Route* aOwner) : + Waypt(aOwner) +{ +} + +void DMEIntercept::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) { + throw sg_io_exception("missing lon/lat properties", + "DMEIntercept::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat")); + _ident = aProp->getStringValue("ident"); +// check it's a real DME? + _magCourse = aProp->getDoubleValue("course-deg"); + _dmeDistanceNm = aProp->getDoubleValue("dme-distance-nm"); + +} + +void DMEIntercept::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + + aProp->setStringValue("ident", _ident); + aProp->setDoubleValue("lon", _pos.getLongitudeDeg()); + aProp->setDoubleValue("lat", _pos.getLatitudeDeg()); + aProp->setDoubleValue("course-deg", _magCourse); + aProp->setDoubleValue("dme-distance-nm", _dmeDistanceNm); +} + +///////////////////////////////////////////////////////////////////////////// + +RadialIntercept::RadialIntercept(Route* aOwner, const string& aIdent, const SGGeod& aPos, + double aCourseDeg, double aRadial) : + Waypt(aOwner), + _ident(aIdent), + _pos(aPos), + _magCourse(aCourseDeg), + _radial(aRadial) +{ + setFlag(WPT_DYNAMIC); +} + +RadialIntercept::RadialIntercept(Route* aOwner) : + Waypt(aOwner) +{ +} + +void RadialIntercept::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("lon") || !aProp->hasChild("lat")) { + throw sg_io_exception("missing lon/lat properties", + "RadialIntercept::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + _pos = SGGeod::fromDeg(aProp->getDoubleValue("lon"), aProp->getDoubleValue("lat")); + _ident = aProp->getStringValue("ident"); +// check it's a real VOR? + _magCourse = aProp->getDoubleValue("course-deg"); + _radial = aProp->getDoubleValue("radial-deg"); + +} + +void RadialIntercept::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + + aProp->setStringValue("ident", _ident); + aProp->setDoubleValue("lon", _pos.getLongitudeDeg()); + aProp->setDoubleValue("lat", _pos.getLatitudeDeg()); + aProp->setDoubleValue("course-deg", _magCourse); + aProp->setDoubleValue("radial-deg", _radial); +} + +///////////////////////////////////////////////////////////////////////////// + +ATCVectors::ATCVectors(Route* aOwner, FGAirport* aFacility) : + Waypt(aOwner), + _facility(aFacility) +{ + setFlag(WPT_DYNAMIC); +} + +ATCVectors::~ATCVectors() +{ +} + +ATCVectors::ATCVectors(Route* aOwner) : + Waypt(aOwner) +{ +} + +SGGeod ATCVectors::position() const +{ + return _facility->geod(); +} + +string ATCVectors::ident() const +{ + return "VECTORS-" + _facility->ident(); +} + +void ATCVectors::initFromProperties(SGPropertyNode_ptr aProp) +{ + if (!aProp->hasChild("icao")) { + throw sg_io_exception("missing icao propertie", + "ATCVectors::initFromProperties"); + } + + Waypt::initFromProperties(aProp); + _facility = FGAirport::getByIdent(aProp->getStringValue("icao")); +} + +void ATCVectors::writeToProperties(SGPropertyNode_ptr aProp) const +{ + Waypt::writeToProperties(aProp); + aProp->setStringValue("icao", _facility->ident()); +} + +} // of namespace diff --git a/src/Navaids/waypoint.hxx b/src/Navaids/waypoint.hxx new file mode 100644 index 000000000..7b5f30f09 --- /dev/null +++ b/src/Navaids/waypoint.hxx @@ -0,0 +1,314 @@ +// waypoint.hxx - waypoints that can occur in routes/procedures +// Written by James Turner, started 2009. +// +// Copyright (C) 2009 Curtis L. Olson +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef FG_WAYPOINT_HXX +#define FG_WAYPOINT_HXX + +#include <Navaids/route.hxx> +#include <Navaids/positioned.hxx> + +class FGAirport; +typedef SGSharedPtr<FGAirport> FGAirportRef; +class SGWayPoint; +class FGRunway; + +namespace flightgear +{ + + +class BasicWaypt : public Waypt +{ +public: + + BasicWaypt(const SGGeod& aPos, const std::string& aIdent, Route* aOwner); + + BasicWaypt(const SGWayPoint& aWP, Route* aOwner); + + BasicWaypt(Route* aOwner); + + virtual SGGeod position() const + { return _pos; } + + virtual std::string ident() const + { return _ident; } + +protected: + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "basic"; } + + SGGeod _pos; + std::string _ident; + +}; + +/** + * Waypoint based upon a navaid. In practice this means any Positioned + * element, excluding runways (see below) + */ +class NavaidWaypoint : public Waypt +{ +public: + NavaidWaypoint(FGPositioned* aPos, Route* aOwner); + + NavaidWaypoint(Route* aOwner); + + virtual SGGeod position() const; + + virtual FGPositioned* source() const + { return _navaid; } + + virtual std::string ident() const; +protected: + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "navaid"; } + + FGPositionedRef _navaid; +}; + +class OffsetNavaidWaypoint : public NavaidWaypoint +{ +public: + OffsetNavaidWaypoint(FGPositioned* aPos, Route* aOwner, double aRadial, double aDistNm); + + OffsetNavaidWaypoint(Route* aOwner); + + virtual SGGeod position() const + { return _geod; } + +protected: + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "offset-navaid"; } + +private: + void init(); + + SGGeod _geod; + double _radial; // true, degrees + double _distanceNm; +}; + +/** + * Waypoint based upon a runway. + * Runways are handled specially in various places, so it's cleaner + * to be able to distuinguish them from other navaid waypoints + */ +class RunwayWaypt : public Waypt +{ +public: + RunwayWaypt(FGRunway* aPos, Route* aOwner); + + RunwayWaypt(Route* aOwner); + + virtual SGGeod position() const; + + virtual FGPositioned* source() const; + + virtual std::string ident() const; + + FGRunway* runway() const + { return _runway; } + +protected: + virtual std::string type() const + { return "runway"; } + + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + +private: + FGRunway* _runway; +}; + +class Hold : public BasicWaypt +{ +public: + Hold(const SGGeod& aPos, const std::string& aIdent, Route* aOwner); + + Hold(Route* aOwner); + + void setHoldRadial(double aInboundRadial); + void setHoldDistance(double aDistanceNm); + void setHoldTime(double aTimeSec); + + void setRightHanded(); + void setLeftHanded(); + + double inboundRadial() const + { return _bearing; } + + bool isLeftHanded() const + { return !_righthanded; } + + bool isDistance() const + { return _isDistance; } + + double timeOrDistance() const + { return _holdTD;} + +protected: + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "hold"; } + +private: + double _bearing; + bool _righthanded; + bool _isDistance; + double _holdTD; +}; + +class HeadingToAltitude : public Waypt +{ +public: + HeadingToAltitude(Route* aOwner, const std::string& aIdent, double aMagHdg); + + HeadingToAltitude(Route* aOwner); + + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "hdgToAlt"; } + + virtual SGGeod position() const + { return SGGeod(); } + + virtual std::string ident() const + { return _ident; } + + double headingDegMagnetic() const + { return _magHeading; } + +private: + std::string _ident; + double _magHeading; +}; + +class DMEIntercept : public Waypt +{ +public: + DMEIntercept(Route* aOwner, const std::string& aIdent, const SGGeod& aPos, + double aCourseDeg, double aDistanceNm); + + DMEIntercept(Route* aOwner); + + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "dmeIntercept"; } + + virtual SGGeod position() const + { return _pos; } + + virtual std::string ident() const + { return _ident; } + + double courseDegMagnetic() const + { return _magCourse; } + + double dmeDistanceNm() const + { return _dmeDistanceNm; } + +private: + std::string _ident; + SGGeod _pos; + double _magCourse; + double _dmeDistanceNm; +}; + +class RadialIntercept : public Waypt +{ +public: + RadialIntercept(Route* aOwner, const std::string& aIdent, const SGGeod& aPos, + double aCourseDeg, double aRadialDeg); + + RadialIntercept(Route* aOwner); + + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "radialIntercept"; } + + virtual SGGeod position() const + { return _pos; } + + virtual std::string ident() const + { return _ident; } + + double courseDegMagnetic() const + { return _magCourse; } + + double radialDegMagnetic() const + { return _radial; } + +private: + std::string _ident; + SGGeod _pos; + double _magCourse; + double _radial; +}; + + +/** + * Represent ATC radar vectored segment. Common at the end of published + * missed approach procedures, and from STAR arrival points to final approach + */ +class ATCVectors : public Waypt +{ +public: + ATCVectors(Route* aOwner, FGAirport* aFacility); + virtual ~ATCVectors(); + + ATCVectors(Route* aOwner); + + virtual void initFromProperties(SGPropertyNode_ptr aProp); + virtual void writeToProperties(SGPropertyNode_ptr aProp) const; + + virtual std::string type() const + { return "vectors"; } + + virtual SGGeod position() const; + + virtual std::string ident() const; + +private: + /** + * ATC facility. Using an airport here is incorrect, since often arrivals + * facilities will be shared between several nearby airports, but it + * suffices until we have a proper facility representation + */ + FGAirportRef _facility; +}; + +} // of namespace flighgear + +#endif // of FG_WAYPOINT_HXX diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx index ae5d9c0af..17fdb67d5 100644 --- a/src/Scripting/NasalSys.cxx +++ b/src/Scripting/NasalSys.cxx @@ -33,6 +33,7 @@ #include <Main/util.hxx> #include <Scenery/scenery.hxx> #include <Navaids/navrecord.hxx> +#include <Navaids/procedure.hxx> #include "NasalSys.hxx" @@ -613,6 +614,28 @@ static naRef f_airportinfo(naContext c, naRef me, int argc, naRef* args) HASHSET("ils_frequency_mhz", 17, naNum(rwy->ILS()->get_freq() / 100.0)); } + std::vector<flightgear::SID*> sids(rwy->getSIDs()); + naRef sidVec = naNewVector(c); + + for (unsigned int s=0; s < sids.size(); ++s) { + naRef procId = naStr_fromdata(naNewString(c), + const_cast<char *>(sids[s]->ident().c_str()), + sids[s]->ident().length()); + naVec_append(sidVec, procId); + } + HASHSET("sids", 4, sidVec); + + std::vector<flightgear::STAR*> stars(rwy->getSTARs()); + naRef starVec = naNewVector(c); + + for (unsigned int s=0; s < stars.size(); ++s) { + naRef procId = naStr_fromdata(naNewString(c), + const_cast<char *>(stars[s]->ident().c_str()), + stars[s]->ident().length()); + naVec_append(starVec, procId); + } + HASHSET("stars", 5, starVec); + #undef HASHSET naHash_set(rwys, rwyid, rwydata); } From 3fe6209c2017474db28786702215c7404c8a3ebd Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 20 Oct 2010 09:09:29 +0100 Subject: [PATCH 23/45] VS2008 project updates. --- projects/VC90/FlightGear/FlightGear.vcproj | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/projects/VC90/FlightGear/FlightGear.vcproj b/projects/VC90/FlightGear/FlightGear.vcproj index d8011106c..e97cba54f 100644 --- a/projects/VC90/FlightGear/FlightGear.vcproj +++ b/projects/VC90/FlightGear/FlightGear.vcproj @@ -4203,6 +4203,46 @@ RelativePath="..\..\..\src\Navaids\positioned.hxx" > </File> + <File + RelativePath="..\..\..\src\Navaids\airways.hxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\airways.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\procedure.hxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\procedure.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\route.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\route.hxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\routePath.hxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\routePath.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\waypoint.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Navaids\waypoint.hxx" + > + </File> </Filter> <Filter Name="Lib_Network" @@ -4855,6 +4895,14 @@ RelativePath="..\..\..\src\Instrumentation\gps.hxx" > </File> + <File + RelativePath="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx" + > + </File> + <File + RelativePath="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx" + > + </File> <File RelativePath="..\..\..\src\Instrumentation\groundradar.cxx" > From 308fd1b11216f5d7e4bba350a7d798a33f06e70a Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 20 Oct 2010 11:48:06 +0100 Subject: [PATCH 24/45] Automake build fixes for airways commit. --- src/Instrumentation/Makefile.am | 6 +++--- src/Instrumentation/gps.hxx | 1 + src/Instrumentation/rnav_waypt_controller.cxx | 2 ++ src/Navaids/Makefile.am | 1 + src/Navaids/procedure.cxx | 3 +++ 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Instrumentation/Makefile.am b/src/Instrumentation/Makefile.am index 136929dc7..f519f99a0 100644 --- a/src/Instrumentation/Makefile.am +++ b/src/Instrumentation/Makefile.am @@ -31,8 +31,8 @@ libInstrumentation_a_SOURCES = \ tacan.cxx tacan.hxx mk_viii.cxx mk_viii.hxx \ dclgps.cxx dclgps.hxx \ render_area_2d.cxx render_area_2d.hxx \ - groundradar.cxx groundradar.hxx \ - agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \ - rnav_waypt_controller.cxx rnav_waypt_controller.hxx \ + groundradar.cxx groundradar.hxx \ + agradar.cxx agradar.hxx rad_alt.cxx rad_alt.hxx \ + rnav_waypt_controller.cxx rnav_waypt_controller.hxx INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_builddir)/src diff --git a/src/Instrumentation/gps.hxx b/src/Instrumentation/gps.hxx index 3005997c0..f69a70a76 100644 --- a/src/Instrumentation/gps.hxx +++ b/src/Instrumentation/gps.hxx @@ -8,6 +8,7 @@ #define __INSTRUMENTS_GPS_HXX 1 #include <cassert> +#include <memory> #include <simgear/props/props.hxx> #include <simgear/structure/subsystem_mgr.hxx> diff --git a/src/Instrumentation/rnav_waypt_controller.cxx b/src/Instrumentation/rnav_waypt_controller.cxx index fbdb5eeb1..977452e18 100644 --- a/src/Instrumentation/rnav_waypt_controller.cxx +++ b/src/Instrumentation/rnav_waypt_controller.cxx @@ -19,6 +19,8 @@ #include "rnav_waypt_controller.hxx" +#include <cassert> + #include <simgear/sg_inlines.h> #include <simgear/structure/exception.hxx> diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am index 66c650045..30016afe3 100644 --- a/src/Navaids/Makefile.am +++ b/src/Navaids/Makefile.am @@ -14,6 +14,7 @@ libNavaids_a_SOURCES = \ route.hxx route.cxx \ waypoint.hxx waypoint.cxx \ procedure.hxx procedure.cxx \ + awynet.cxx awynet.hxx # # testnavs_SOURCES = testnavs.cxx diff --git a/src/Navaids/procedure.cxx b/src/Navaids/procedure.cxx index 4080f0a75..5104f4c75 100644 --- a/src/Navaids/procedure.cxx +++ b/src/Navaids/procedure.cxx @@ -19,6 +19,9 @@ #include "procedure.hxx" +#include <cassert> +#include <algorithm> // for reverse_copy + #include <simgear/structure/exception.hxx> #include <Navaids/waypoint.hxx> From fe167327831067005b275593ba388ea676231025 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 20 Oct 2010 13:13:05 +0100 Subject: [PATCH 25/45] Fix Win32 compilation - avoid SID name clash with windows.h --- src/Airports/simple.cxx | 10 +++++----- src/Autopilot/route_mgr.cxx | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Airports/simple.cxx b/src/Airports/simple.cxx index f563cf1d0..c7e486f45 100644 --- a/src/Airports/simple.cxx +++ b/src/Airports/simple.cxx @@ -511,13 +511,13 @@ bool FGAirport::buildApproach(Waypt* aEnroute, STAR* aSTAR, FGRunway* aRwy, Wayp return aps.front()->routeFromVectors(aRoute); } -pair<SID*, WayptRef> +pair<flightgear::SID*, WayptRef> FGAirport::selectSID(const SGGeod& aDest, FGRunway* aRwy) { loadProcedures(); WayptRef enroute; - SID* sid = NULL; + flightgear::SID* sid = NULL; double d = 1e9; for (unsigned int i=0; i<mSIDs.size(); ++i) { @@ -580,7 +580,7 @@ FGAirport::selectSTAR(const SGGeod& aOrigin, FGRunway* aRwy) } -void FGAirport::addSID(SID* aSid) +void FGAirport::addSID(flightgear::SID* aSid) { mSIDs.push_back(aSid); } @@ -601,13 +601,13 @@ unsigned int FGAirport::numSIDs() const return mSIDs.size(); } -SID* FGAirport::getSIDByIndex(unsigned int aIndex) const +flightgear::SID* FGAirport::getSIDByIndex(unsigned int aIndex) const { loadProcedures(); return mSIDs[aIndex]; } -SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const +flightgear::SID* FGAirport::findSIDWithIdent(const std::string& aIdent) const { loadProcedures(); for (unsigned int i=0; i<mSIDs.size(); ++i) { diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx index 1896946fc..fac7dc628 100644 --- a/src/Autopilot/route_mgr.cxx +++ b/src/Autopilot/route_mgr.cxx @@ -468,7 +468,7 @@ void FGRouteMgr::autoRoute() _route.clear(); // clear out the existing, first // SID - SID* sid; + flightgear::SID* sid; WayptRef sidTrans; boost::tie(sid, sidTrans) = _departure->selectSID(_destination->geod(), runway); @@ -569,7 +569,7 @@ void FGRouteMgr::buildDeparture(WayptRef enroute, WayptVec& wps) FGRunway* r = _departure->getRunwayByIdent(runwayId); string sidId = departure->getStringValue("sid"); - SID* sid = _departure->findSIDWithIdent(sidId); + flightgear::SID* sid = _departure->findSIDWithIdent(sidId); if (!sid) { // valid runway, but no SID selected/found, so just the runway node for now if (!sidId.empty() && (sidId != "(none)")) { From f5c2c630ebe3599f2b72dc4e0bca2ad427767b80 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Wed, 20 Oct 2010 17:54:16 +0100 Subject: [PATCH 26/45] Remove references to old (unused) airways code --- src/AIModel/AIAircraft.cxx | 1 + src/AIModel/AIFlightPlan.hxx | 65 ++++++++++------------ src/AIModel/AIFlightPlanCreate.cxx | 1 + src/AIModel/AIFlightPlanCreateCruise.cxx | 5 +- src/AIModel/AIFlightPlanCreatePushBack.cxx | 2 + src/ATC/trafficcontrol.cxx | 2 +- src/Airports/groundnetwork.cxx | 1 + src/Airports/sidstar.hxx | 13 ++--- src/Main/fg_init.cxx | 12 +--- src/Main/globals.cxx | 6 +- src/Main/globals.hxx | 6 -- src/Navaids/Makefile.am | 3 +- 12 files changed, 47 insertions(+), 70 deletions(-) diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index f117810c1..a525d7ef1 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -29,6 +29,7 @@ #include <Scenery/scenery.hxx> #include <Scenery/tilemgr.hxx> #include <Airports/dynamics.hxx> +#include <Airports/simple.hxx> #include <string> #include <math.h> diff --git a/src/AIModel/AIFlightPlan.hxx b/src/AIModel/AIFlightPlan.hxx index 1de5658bd..fd3968305 100644 --- a/src/AIModel/AIFlightPlan.hxx +++ b/src/AIModel/AIFlightPlan.hxx @@ -24,26 +24,18 @@ #include <string> -#include <Airports/simple.hxx> -#include <Navaids/awynet.hxx> - -#include "AIBase.hxx" - - - -using std::vector; -using std::string; - class FGTaxiRoute; class FGRunway; class FGAIAircraft; +class FGAirport; +class SGGeod; class FGAIFlightPlan { public: typedef struct { - string name; + std::string name; double latitude; double longitude; double altitude; @@ -56,11 +48,11 @@ public: int routeIndex; // For AI/ATC purposes; double time_sec; double trackLength; // distance from previous waypoint (for AI purposes); - string time; + std::string time; } waypoint; FGAIFlightPlan(); - FGAIFlightPlan(const string& filename); + FGAIFlightPlan(const std::string& filename); FGAIFlightPlan(FGAIAircraft *, const std::string& p, double course, @@ -73,9 +65,9 @@ public: double lat, double lon, double speed, - const string& fltType, - const string& acType, - const string& airline); + const std::string& fltType, + const std::string& acType, + const std::string& airline); ~FGAIFlightPlan(); waypoint* const getPreviousWaypoint( void ) const; @@ -91,18 +83,18 @@ public: double getLeadDistance( void ) const {return lead_distance;} double getBearing(waypoint* previous, waypoint* next) const; double getBearing(double lat, double lon, waypoint* next) const; - double checkTrackLength(string wptName); + double checkTrackLength(std::string wptName); time_t getStartTime() const { return start_time; } time_t getArrivalTime() const { return arrivalTime; } void create(FGAIAircraft *, FGAirport *dep, FGAirport *arr, int leg, double alt, double speed, double lat, double lon, - bool firstLeg, double radius, const string& fltType, const string& aircraftType, const string& airline, double distance); + bool firstLeg, double radius, const std::string& fltType, const std::string& aircraftType, const std::string& airline, double distance); void setLeg(int val) { leg = val;} void setTime(time_t st) { start_time = st; } int getGate() const { return gateId; } double getLeadInAngle() const { return leadInAngle; } - const string& getRunway() const; + const std::string& getRunway() const; void setRepeat(bool r) { repeat = r; } bool getRepeat(void) const { return repeat; } @@ -111,16 +103,16 @@ public: int getRouteIndex(int i); // returns the AI related index of this current routes. FGTaxiRoute *getTaxiRoute() { return taxiRoute; } void deleteTaxiRoute(); - string getRunway() { return activeRunway; } + std::string getRunway() { return activeRunway; } bool isActive(time_t time) {return time >= this->getStartTime();} - void setRunway(string rwy) { activeRunway = rwy; }; - string getRunwayClassFromTrafficType(string fltType); + void setRunway(std::string rwy) { activeRunway = rwy; }; + std::string getRunwayClassFromTrafficType(std::string fltType); void addWaypoint(waypoint* wpt) { waypoints.push_back(wpt); }; - void setName(string n) { name = n; }; - string getName() { return name; }; + void setName(std::string n) { name = n; }; + std::string getName() { return name; }; void setSID(FGAIFlightPlan* fp) { sid = fp;}; FGAIFlightPlan* getSID() { return sid; }; @@ -128,7 +120,7 @@ public: private: FGRunway* rwy; FGAIFlightPlan *sid; - typedef vector <waypoint*> wpt_vector_type; + typedef std::vector <waypoint*> wpt_vector_type; typedef wpt_vector_type::const_iterator wpt_vector_iterator; @@ -143,26 +135,25 @@ private: time_t arrivalTime; // For AI/ATC purposes. int leg; int gateId, lastNodeVisited; - string activeRunway; - FGAirRoute airRoute; + std::string activeRunway; FGTaxiRoute *taxiRoute; - string name; + std::string name; - void createPushBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const string&, const string&, const string&); - void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const string&, const string&, const string&); - void createTakeOff(FGAIAircraft *, bool, FGAirport *, double, const string&); - void createClimb(FGAIAircraft *, bool, FGAirport *, double, double, const string&); - void createCruise(FGAIAircraft *, bool, FGAirport*, FGAirport*, double, double, double, double, const string&); - void createDescent(FGAIAircraft *, FGAirport *, double latitude, double longitude, double speed, double alt,const string&, double distance); - void createLanding(FGAIAircraft *, FGAirport *, const string&); + void createPushBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&); + void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&); + void createTakeOff(FGAIAircraft *, bool, FGAirport *, double, const std::string&); + void createClimb(FGAIAircraft *, bool, FGAirport *, double, double, const std::string&); + void createCruise(FGAIAircraft *, bool, FGAirport*, FGAirport*, double, double, double, double, const std::string&); + void createDescent(FGAIAircraft *, FGAirport *, double latitude, double longitude, double speed, double alt,const std::string&, double distance); + void createLanding(FGAIAircraft *, FGAirport *, const std::string&); void createParking(FGAIAircraft *, FGAirport *, double radius); void deleteWaypoints(); void resetWaypoints(); - void createLandingTaxi(FGAIAircraft *, FGAirport *apt, double radius, const string& fltType, const string& acType, const string& airline); + void createLandingTaxi(FGAIAircraft *, FGAirport *apt, double radius, const std::string& fltType, const std::string& acType, const std::string& airline); void createDefaultLandingTaxi(FGAIAircraft *, FGAirport* aAirport); void createDefaultTakeoffTaxi(FGAIAircraft *, FGAirport* aAirport, FGRunway* aRunway); - void createTakeoffTaxi(FGAIAircraft *, bool firstFlight, FGAirport *apt, double radius, const string& fltType, const string& acType, const string& airline); + void createTakeoffTaxi(FGAIAircraft *, bool firstFlight, FGAirport *apt, double radius, const std::string& fltType, const std::string& acType, const std::string& airline); double getTurnRadius(double, bool); diff --git a/src/AIModel/AIFlightPlanCreate.cxx b/src/AIModel/AIFlightPlanCreate.cxx index 790de6923..a0a396d8f 100644 --- a/src/AIModel/AIFlightPlanCreate.cxx +++ b/src/AIModel/AIFlightPlanCreate.cxx @@ -27,6 +27,7 @@ #include <simgear/props/props.hxx> #include <simgear/props/props_io.hxx> +#include <Airports/simple.hxx> #include <Airports/runways.hxx> #include <Airports/dynamics.hxx> #include "AIAircraft.hxx" diff --git a/src/AIModel/AIFlightPlanCreateCruise.cxx b/src/AIModel/AIFlightPlanCreateCruise.cxx index 269acda94..1932de9ce 100644 --- a/src/AIModel/AIFlightPlanCreateCruise.cxx +++ b/src/AIModel/AIFlightPlanCreateCruise.cxx @@ -27,7 +27,7 @@ #include <iostream> #include <simgear/route/waypoint.hxx> -#include <Navaids/awynet.hxx> +#include <Airports/simple.hxx> #include <Airports/runways.hxx> #include <Airports/dynamics.hxx> @@ -40,6 +40,7 @@ using std::iostream; +/* void FGAIFlightPlan::evaluateRoutePart(double deplat, double deplon, double arrlat, @@ -97,7 +98,7 @@ void FGAIFlightPlan::evaluateRoutePart(double deplat, } } - +*/ /* void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep, FGAirport *arr, double latitude, diff --git a/src/AIModel/AIFlightPlanCreatePushBack.cxx b/src/AIModel/AIFlightPlanCreatePushBack.cxx index d97e30da2..34f21a1fc 100644 --- a/src/AIModel/AIFlightPlanCreatePushBack.cxx +++ b/src/AIModel/AIFlightPlanCreatePushBack.cxx @@ -23,6 +23,8 @@ #endif #include <simgear/math/sg_geodesy.hxx> + +#include <Airports/simple.hxx> #include <Airports/runways.hxx> #include <Airports/dynamics.hxx> diff --git a/src/ATC/trafficcontrol.cxx b/src/ATC/trafficcontrol.cxx index 53ddf28b5..8079933b1 100644 --- a/src/ATC/trafficcontrol.cxx +++ b/src/ATC/trafficcontrol.cxx @@ -34,7 +34,7 @@ #include <Traffic/TrafficMgr.hxx> #include <Airports/groundnetwork.hxx> #include <Airports/dynamics.hxx> - +#include <Airports/simple.hxx> using std::sort; diff --git a/src/Airports/groundnetwork.cxx b/src/Airports/groundnetwork.cxx index 3d96ccf7d..2fb8127a5 100644 --- a/src/Airports/groundnetwork.cxx +++ b/src/Airports/groundnetwork.cxx @@ -30,6 +30,7 @@ #include <simgear/debug/logstream.hxx> #include <simgear/route/waypoint.hxx> +#include <Airports/simple.hxx> #include <Airports/dynamics.hxx> #include <AIModel/AIAircraft.hxx> diff --git a/src/Airports/sidstar.hxx b/src/Airports/sidstar.hxx index ef388e49b..ad8d10e94 100644 --- a/src/Airports/sidstar.hxx +++ b/src/Airports/sidstar.hxx @@ -24,6 +24,7 @@ #define _SIDSTAR_HXX_ #include <string> +#include <map> #include <simgear/misc/sg_path.hxx> @@ -36,12 +37,10 @@ #include "runwayprefs.hxx" -using std::string; - class FGAirport; -typedef vector<FGAIFlightPlan*> FlightPlanVec; -typedef vector<FGAIFlightPlan*>::iterator FlightPlanVecIterator; +typedef std::vector<FGAIFlightPlan*> FlightPlanVec; +typedef std::vector<FGAIFlightPlan*>::iterator FlightPlanVecIterator; typedef std::map < std::string, FlightPlanVec > FlightPlanVecMap; @@ -49,7 +48,7 @@ typedef std::map < std::string, FlightPlanVec > FlightPlanVecMap; class FGSidStar { private: - string id; + std::string id; bool initialized; FlightPlanVecMap data; @@ -57,9 +56,9 @@ class FGSidStar FGSidStar(FGAirport *ap); FGSidStar(const FGSidStar &other); - string getId() { return id; }; + std::string getId() { return id; }; void load(SGPath path); - FGAIFlightPlan *getBest(string activeRunway, double heading); + FGAIFlightPlan *getBest(std::string activeRunway, double heading); }; diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 184e5623a..fa2cc45a5 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -58,6 +58,8 @@ #include <simgear/structure/event_mgr.hxx> #include <simgear/misc/sg_path.hxx> #include <simgear/misc/sg_dir.hxx> +#include <simgear/misc/sgstream.hxx> + #include <simgear/misc/interpolator.hxx> #include <simgear/scene/material/matlib.hxx> #include <simgear/scene/model/particles.hxx> @@ -1072,16 +1074,6 @@ fgInitNav () fixlist.init( p_fix ); // adds fixes to the DB in positioned.cxx SG_LOG(SG_GENERAL, SG_INFO, " Airways"); - #if 0 - SGPath p_awy( globals->get_fg_root() ); - p_awy.append( "Navaids/awy.dat" ); - FGAirwayNetwork *awyNet = new FGAirwayNetwork; - //cerr << "Loading Airways" << endl; - awyNet->load (p_awy ); - awyNet->init(); - //cerr << "initializing airways" << endl; - globals->set_airwaynet( awyNet ); -#endif flightgear::Airway::load(); return true; diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index a5eb32563..7fafd0516 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -45,7 +45,6 @@ #include <Model/acmodel.hxx> #include <Model/modelmgr.hxx> #include <MultiPlayer/multiplaymgr.hxx> -#include <Navaids/awynet.hxx> #include <Scenery/scenery.hxx> #include <Scenery/tilemgr.hxx> #include <Navaids/navlist.hxx> @@ -149,9 +148,7 @@ FGGlobals::FGGlobals() : dmelist( NULL ), tacanlist( NULL ), carrierlist( NULL ), - channellist( NULL ), - airwaynet( NULL ) - + channellist( NULL ) { simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider()); } @@ -199,7 +196,6 @@ FGGlobals::~FGGlobals() delete tacanlist; delete carrierlist; delete channellist; - delete airwaynet; soundmgr->unbind(); delete soundmgr; diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx index 50bd24e67..097e3acb5 100644 --- a/src/Main/globals.hxx +++ b/src/Main/globals.hxx @@ -60,7 +60,6 @@ class FGAircraftModel; class FGControls; class FGFlightPlanDispatcher; class FGNavList; -class FGAirwayNetwork; class FGTACANList; class FGModelMgr; class FGRouteMgr; @@ -171,7 +170,6 @@ private: FGNavList *tacanlist; FGNavList *carrierlist; FGTACANList *channellist; - FGAirwayNetwork *airwaynet; /// roots of Aircraft trees string_list fg_aircraft_dirs; @@ -322,10 +320,6 @@ public: inline FGTACANList *get_channellist() const { return channellist; } inline void set_channellist( FGTACANList *c ) { channellist = c; } - inline FGAirwayNetwork *get_airwaynet() const { return airwaynet; } - inline void set_airwaynet( FGAirwayNetwork *a ) { airwaynet = a; } - - /** * Save the current state as the initial state. */ diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am index 30016afe3..93985cacf 100644 --- a/src/Navaids/Makefile.am +++ b/src/Navaids/Makefile.am @@ -13,8 +13,7 @@ libNavaids_a_SOURCES = \ airways.hxx airways.cxx \ route.hxx route.cxx \ waypoint.hxx waypoint.cxx \ - procedure.hxx procedure.cxx \ - awynet.cxx awynet.hxx + procedure.hxx procedure.cxx # # testnavs_SOURCES = testnavs.cxx From d573cb43a032c8c4223152c1cf04642c2eb53b0f Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Fri, 22 Oct 2010 12:22:00 +0100 Subject: [PATCH 27/45] Move three more subsystems into the init + update scheme - fixes some crashes found by papillion. --- src/Autopilot/route_mgr.cxx | 2 +- src/Cockpit/hud_rwy.cxx | 14 -------- src/Instrumentation/HUD/HUD_runway.cxx | 14 -------- src/Main/fg_init.cxx | 47 ++++++++++++++++++-------- src/Main/globals.cxx | 4 --- src/Main/main.cxx | 32 ------------------ src/Main/viewmgr.cxx | 32 +++++++++++++----- src/Main/viewmgr.hxx | 12 ++++--- 8 files changed, 63 insertions(+), 94 deletions(-) diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx index fac7dc628..d5411b8af 100644 --- a/src/Autopilot/route_mgr.cxx +++ b/src/Autopilot/route_mgr.cxx @@ -237,7 +237,7 @@ void FGRouteMgr::postinit() SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size()); } - weightOnWheels = fgGetNode("/gear/gear[0]/wow", false); + weightOnWheels = fgGetNode("/gear/gear[0]/wow", true); // check airbone flag agrees with presets } diff --git a/src/Cockpit/hud_rwy.cxx b/src/Cockpit/hud_rwy.cxx index e884c7cfb..222975fdb 100644 --- a/src/Cockpit/hud_rwy.cxx +++ b/src/Cockpit/hud_rwy.cxx @@ -97,11 +97,6 @@ void runway_instr::draw() double sPitch = sin(pitch), cPitch = cos(pitch), sYaw = sin(yaw), cYaw = cos(yaw); - //Assuming that the "Cockpit View" is always at position zero!!! - if (curr_view_id != 0) { - globals->get_viewmgr()->set_view(0); - globals->get_viewmgr()->copyToCurrent(); - } //Set the camera to the cockpit view to get the view of the runway from the cockpit // OSGFIXME // ssgSetCamera((sgVec4 *)cockpit_view->get_VIEW()); @@ -156,15 +151,6 @@ void runway_instr::draw() drawArrow(); //draw indication arrow } - //Restore the current view and any offsets - if (curr_view_id != 0) { - globals->get_viewmgr()->set_view(curr_view_id); - globals->get_viewmgr()->copyToCurrent(); - curr_view->setHeadingOffset_deg(ho); - curr_view->setPitchOffset_deg(po); - curr_view->setGoalHeadingOffset_deg(gho); - curr_view->setGoalPitchOffset_deg(gpo); - } //Set the camera back to the current view // OSGFIXME // ssgSetCamera((sgVec4 *)curr_view); diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx index a31d0ff60..fcf4f1127 100644 --- a/src/Instrumentation/HUD/HUD_runway.cxx +++ b/src/Instrumentation/HUD/HUD_runway.cxx @@ -93,11 +93,6 @@ void HUD::Runway::draw() double sPitch = sin(pitch), cPitch = cos(pitch), sYaw = sin(yaw), cYaw = cos(yaw); - //Assuming that the "Cockpit View" is always at position zero!!! - if (curr_view_id != 0) { - globals->get_viewmgr()->set_view(0); - globals->get_viewmgr()->copyToCurrent(); - } //Set the camera to the cockpit view to get the view of the runway from the cockpit // OSGFIXME // ssgSetCamera((sgVec4 *)_cockpit_view->get_VIEW()); @@ -152,15 +147,6 @@ void HUD::Runway::draw() drawArrow(); //draw indication arrow } - //Restore the current view and any offsets - if (curr_view_id != 0) { - globals->get_viewmgr()->set_view(curr_view_id); - globals->get_viewmgr()->copyToCurrent(); - curr_view->setHeadingOffset_deg(ho); - curr_view->setPitchOffset_deg(po); - curr_view->setGoalHeadingOffset_deg(gho); - curr_view->setGoalPitchOffset_deg(gpo); - } //Set the camera back to the current view // OSGFIXME // ssgSetCamera((sgVec4 *)curr_view); diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index fa2cc45a5..f154ab658 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -93,6 +93,7 @@ #include <Input/input.hxx> #include <Instrumentation/instrument_mgr.hxx> #include <Model/acmodel.hxx> +#include <Model/modelmgr.hxx> #include <AIModel/submodel.hxx> #include <AIModel/AIManager.hxx> #include <Navaids/navdb.hxx> @@ -1309,9 +1310,6 @@ bool fgInitSubsystems() { // Initialize the scenery management subsystem. //////////////////////////////////////////////////////////////////// - globals->add_subsystem("tile-manager", globals->get_tile_mgr(), - SGSubsystemMgr::DISPLAY); - globals->get_scenery()->get_scene_graph() ->addChild(simgear::Particles::getCommonRoot()); simgear::GlobalParticleCallback::setSwitch(fgGetNode("/sim/rendering/particles", true)); @@ -1361,23 +1359,12 @@ bool fgInitSubsystems() { globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT); - //////////////////////////////////////////////////////////////////// - // Initialize the lighting subsystem. - //////////////////////////////////////////////////////////////////// - - globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY); - ////////////////////////////////////////////////////////////////////// // Initialize the 2D cloud subsystem. //////////////////////////////////////////////////////////////////// fgGetBool("/sim/rendering/bump-mapping", false); -#ifdef ENABLE_AUDIO_SUPPORT - //////////////////////////////////////////////////////////////////// - // Initialize the sound-effects subsystem. - //////////////////////////////////////////////////////////////////// - globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY); -#endif + //////////////////////////////////////////////////////////////////// // Initialise the ATC Manager @@ -1461,7 +1448,37 @@ bool fgInitSubsystems() { //////////////////////////////////////////////////////////////////// globals->add_subsystem("replay", new FGReplay); +#ifdef ENABLE_AUDIO_SUPPORT + //////////////////////////////////////////////////////////////////// + // Initialize the sound-effects subsystem. + //////////////////////////////////////////////////////////////////// + globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY); +#endif + //////////////////////////////////////////////////////////////////// + // Initialize the lighting subsystem. + //////////////////////////////////////////////////////////////////// + + globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY); + + // ordering here is important : Nasal (via events), then models, then views + globals->add_subsystem("events", globals->get_event_mgr(), SGSubsystemMgr::DISPLAY); + + FGAircraftModel* acm = new FGAircraftModel; + globals->set_aircraft_model(acm); + globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY); + + FGModelMgr* mm = new FGModelMgr; + globals->set_model_mgr(mm); + globals->add_subsystem("model-manager", mm, SGSubsystemMgr::DISPLAY); + + FGViewMgr *viewmgr = new FGViewMgr; + globals->set_viewmgr( viewmgr ); + globals->add_subsystem("view-manager", viewmgr, SGSubsystemMgr::DISPLAY); + + globals->add_subsystem("tile-manager", globals->get_tile_mgr(), + SGSubsystemMgr::DISPLAY); + //////////////////////////////////////////////////////////////////// // Bind and initialize subsystems. //////////////////////////////////////////////////////////////////// diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 7fafd0516..ee5fcf2fd 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -170,7 +170,6 @@ FGGlobals::~FGGlobals() subsystem_mgr->unbind(); delete subsystem_mgr; - delete event_mgr; delete time_params; delete mag; @@ -180,10 +179,7 @@ FGGlobals::~FGGlobals() delete ATC_mgr; delete controls; - delete viewmgr; -// delete commands; - delete model_mgr; delete channel_options_list; delete initial_waypoints; delete scenery; diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 1cfe91ba2..8849644b3 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -54,7 +54,6 @@ #include <Cockpit/cockpit.hxx> #include <Cockpit/hud.hxx> #include <Model/panelnode.hxx> -#include <Model/modelmgr.hxx> #include <Model/acmodel.hxx> #include <Scenery/scenery.hxx> #include <Scenery/tilemgr.hxx> @@ -149,16 +148,6 @@ static void fgMainLoop( void ) { globals->get_subsystem_mgr()->update(sim_dt); - // run Nasal's settimer() loops right before the view manager - globals->get_event_mgr()->update(sim_dt); - - // pick up model coordidnates that Nasal code may have set relative to the - // aircraft's - globals->get_model_mgr()->update(sim_dt); - - // update the view angle as late as possible, but before sound calculations - globals->get_viewmgr()->update(real_dt); - // Update the sound manager last so it can use the CPU while the GPU // is processing the scenery (doubled the frame-rate for me) -EMH- #ifdef ENABLE_AUDIO_SUPPORT @@ -375,33 +364,12 @@ static void fgIdleFunction ( void ) { globals->set_tile_mgr( new FGTileMgr ); - //////////////////////////////////////////////////////////////////// - // Initialize the general model subsystem. - //////////////////////////////////////////////////////////////////// - globals->set_model_mgr(new FGModelMgr); - globals->get_model_mgr()->init(); - globals->get_model_mgr()->bind(); fgSplashProgress("loading aircraft"); } else if ( idle_state == 5 ) { idle_state++; - //////////////////////////////////////////////////////////////////// - // Initialize the 3D aircraft model subsystem (has a dependency on - // the scenery subsystem.) - //////////////////////////////////////////////////////////////////// - FGAircraftModel* acm = new FGAircraftModel; - globals->set_aircraft_model(acm); - globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY); - - //////////////////////////////////////////////////////////////////// - // Initialize the view manager subsystem. - //////////////////////////////////////////////////////////////////// - FGViewMgr *viewmgr = new FGViewMgr; - globals->set_viewmgr( viewmgr ); - viewmgr->init(); - viewmgr->bind(); fgSplashProgress("generating sky elements"); diff --git a/src/Main/viewmgr.cxx b/src/Main/viewmgr.cxx index 6859c8f41..5a978be63 100644 --- a/src/Main/viewmgr.cxx +++ b/src/Main/viewmgr.cxx @@ -39,6 +39,7 @@ FGViewMgr::FGViewMgr( void ) : axis_long(0), axis_lat(0), + inited(false), view_number(fgGetNode("/sim/current-view/view-number", true)), config_list(fgGetNode("/sim", true)->getChildren("view")), current(0) @@ -53,6 +54,13 @@ FGViewMgr::~FGViewMgr( void ) { void FGViewMgr::init () { + if (inited) { + SG_LOG(SG_GENERAL, SG_WARN, "duplicate init of view manager"); + return; + } + + inited = true; + double aspect_ratio_multiplier = fgGetDouble("/sim/current-view/aspect-ratio-multiplier"); @@ -118,6 +126,7 @@ FGViewMgr::init () } copyToCurrent(); + do_bind(); } void @@ -160,7 +169,14 @@ FGViewMgr::reinit () typedef double (FGViewMgr::*double_getter)() const; void -FGViewMgr::bind () +FGViewMgr::bind() +{ + // view-manager code was designed to init before bind, so + // this is a no-op; init() calls the real bind() impl below +} + +void +FGViewMgr::do_bind() { // these are bound to the current view properties fgTie("/sim/current-view/heading-offset-deg", this, @@ -352,6 +368,10 @@ FGViewMgr::update (double dt) void FGViewMgr::copyToCurrent() { + if (!inited) { + return; + } + SGPropertyNode *n = config_list[current]; fgSetString("/sim/current-view/name", n->getStringValue("name")); fgSetString("/sim/current-view/type", n->getStringValue("type")); @@ -719,15 +739,9 @@ FGViewMgr::setView (int newview) newview = 0; // set new view - set_view(newview); + current = newview; // copy in view data copyToCurrent(); - - // Copy the fdm's position into the SGLocation which is shared with - // some views ... - globals->get_aircraft_model()->update(0); - // Do the update ... - update(0); } @@ -755,7 +769,7 @@ FGViewMgr::getARM_deg () const void FGViewMgr::setARM_deg (double aspect_ratio_multiplier) -{ +{ FGViewer * view = get_current_view(); if (view != 0) view->set_aspect_ratio_multiplier(aspect_ratio_multiplier); diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx index c296b7155..c14347e26 100644 --- a/src/Main/viewmgr.hxx +++ b/src/Main/viewmgr.hxx @@ -69,14 +69,12 @@ public: // setters void clear(); - inline void set_view( const int v ) { current = v; } + void add_view( FGViewer * v ); - // copies current offset settings to current-view path... - void copyToCurrent (); - private: - + void do_bind(); + list<const char*> tied_props; double axis_long; @@ -136,6 +134,10 @@ private: bool stationary () const; + // copies current offset settings to current-view path... + void copyToCurrent (); + + bool inited; SGPropertyNode_ptr view_number; vector<SGPropertyNode_ptr> config_list; typedef std::vector<FGViewerPtr> viewer_list; From 3464eef7112c69b73424314e2b0c876072293497 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Fri, 22 Oct 2010 19:11:24 +0100 Subject: [PATCH 28/45] Make the v2 HUD support reinit(), so HUDs can be reloaded at runtime. --- src/Instrumentation/HUD/HUD.cxx | 34 +++++++++++++++++++++++---------- src/Instrumentation/HUD/HUD.hxx | 4 ++++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/Instrumentation/HUD/HUD.cxx b/src/Instrumentation/HUD/HUD.cxx index 4ea539db3..4a7d6a542 100644 --- a/src/Instrumentation/HUD/HUD.cxx +++ b/src/Instrumentation/HUD/HUD.cxx @@ -115,14 +115,8 @@ HUD::~HUD() _scr_heightN->removeChangeListener(this); _unitsN->removeChangeListener(this); delete _font_renderer; - delete _clip_box; - - deque<Item *>::const_iterator it, end = _items.end(); - for (it = _items.begin(); it != end; ++it) - delete *it; - end = _ladders.end(); - for (it = _ladders.begin(); it != end; ++it) - delete *it; + + deinit(); } @@ -146,6 +140,27 @@ void HUD::init() _path->fireValueChanged(); } +void HUD::deinit() +{ + deque<Item *>::const_iterator it, end = _items.end(); + for (it = _items.begin(); it != end; ++it) + delete *it; + end = _ladders.end(); + for (it = _ladders.begin(); it != end; ++it) + delete *it; + + _items.clear(); + _ladders.clear(); + + delete _clip_box; + _clip_box = NULL; +} + +void HUD::reinit() +{ + deinit(); + _path->fireValueChanged(); +} void HUD::update(double dt) { @@ -328,8 +343,7 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden const sgDebugPriority TREE = SG_INFO; const int MAXNEST = 10; - SGPath path(globals->get_fg_root()); - path.append(file); + SGPath path(globals->resolve_maybe_aircraft_path(file)); if (!level) { SG_LOG(SG_INPUT, TREE, endl << "load " << file); diff --git a/src/Instrumentation/HUD/HUD.hxx b/src/Instrumentation/HUD/HUD.hxx index 6776495f2..3ef9d7ee7 100644 --- a/src/Instrumentation/HUD/HUD.hxx +++ b/src/Instrumentation/HUD/HUD.hxx @@ -153,6 +153,8 @@ public: void init(); void update(double); + void reinit(); + // called from Main/renderer.cxx to draw 2D and 3D HUD void draw(osg::State&); @@ -195,6 +197,8 @@ protected: int level = 0, const std::string& indent = ""); private: + void deinit(); + void draw3D(); void draw2D(GLfloat, GLfloat, GLfloat, GLfloat); From 3bf1551c18e5fcc1d1cac12b5f2e52b262057850 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier <fredfgfs01@free.fr> Date: Sat, 23 Oct 2010 17:14:01 +0200 Subject: [PATCH 29/45] Update Vs2010 projects --- projects/VC100/FlightGear/FlightGear.vcxproj | 2882 ++++---- .../FlightGear/FlightGear.vcxproj.filters | 5918 +++++++++-------- 2 files changed, 4424 insertions(+), 4376 deletions(-) diff --git a/projects/VC100/FlightGear/FlightGear.vcxproj b/projects/VC100/FlightGear/FlightGear.vcxproj index e49368081..990696f94 100644 --- a/projects/VC100/FlightGear/FlightGear.vcxproj +++ b/projects/VC100/FlightGear/FlightGear.vcxproj @@ -1,1436 +1,1448 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{49142EAF-B264-4B9F-B096-F669999EBB2E}</ProjectGuid> - <RootNamespace>FlightGear</RootNamespace> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseOfMfc>false</UseOfMfc> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" /> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fgfs</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">fgfs</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">fgfs</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fgfs</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Midl> - <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <BasicRuntimeChecks>Default</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <RuntimeTypeInfo>true</RuntimeTypeInfo> - <BrowseInformation>true</BrowseInformation> - <WarningLevel>Level3</WarningLevel> - <SuppressStartupBanner>true</SuppressStartupBanner> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - <CompileAs>Default</CompileAs> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0c09</Culture> - </ResourceCompile> - <Link> - <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies> - <OutputFile>$(OutDir)fgfs.exe</OutputFile> - <SuppressStartupBanner>true</SuppressStartupBanner> - <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <RandomizedBaseAddress>false</RandomizedBaseAddress> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName> - </Midl> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <BasicRuntimeChecks>Default</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <RuntimeTypeInfo>true</RuntimeTypeInfo> - <BrowseInformation>true</BrowseInformation> - <WarningLevel>Level3</WarningLevel> - <SuppressStartupBanner>true</SuppressStartupBanner> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - <CompileAs>Default</CompileAs> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0c09</Culture> - </ResourceCompile> - <Link> - <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies> - <OutputFile>$(OutDir)fgfs.exe</OutputFile> - <SuppressStartupBanner>true</SuppressStartupBanner> - <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <RandomizedBaseAddress>false</RandomizedBaseAddress> - <DataExecutionPrevention> - </DataExecutionPrevention> - <TargetMachine>MachineX64</TargetMachine> - <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Midl> - <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName> - </Midl> - <ClCompile> - <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> - <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <RuntimeTypeInfo>true</RuntimeTypeInfo> - <WarningLevel>Level3</WarningLevel> - <SuppressStartupBanner>true</SuppressStartupBanner> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <CompileAs>Default</CompileAs> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0c09</Culture> - </ResourceCompile> - <Link> - <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies> - <OutputFile>$(OutDir)fgfs.exe</OutputFile> - <SuppressStartupBanner>true</SuppressStartupBanner> - <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <RandomizedBaseAddress>false</RandomizedBaseAddress> - <DataExecutionPrevention> - </DataExecutionPrevention> - <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Midl> - <TargetEnvironment>X64</TargetEnvironment> - <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName> - </Midl> - <ClCompile> - <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> - <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <StringPooling>true</StringPooling> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <RuntimeTypeInfo>true</RuntimeTypeInfo> - <WarningLevel>Level3</WarningLevel> - <SuppressStartupBanner>true</SuppressStartupBanner> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <CompileAs>Default</CompileAs> - </ClCompile> - <ResourceCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <Culture>0x0c09</Culture> - </ResourceCompile> - <Link> - <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies> - <OutputFile>$(OutDir)fgfs.exe</OutputFile> - <SuppressStartupBanner>true</SuppressStartupBanner> - <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <RandomizedBaseAddress>false</RandomizedBaseAddress> - <DataExecutionPrevention> - </DataExecutionPrevention> - <TargetMachine>MachineX64</TargetMachine> - <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\src\Aircraft\controls.cxx" /> - <ClCompile Include="..\..\..\src\Aircraft\replay.cxx" /> - <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx" /> - <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx" /> - <ClCompile Include="..\..\..\src\Airports\dynamics.cxx" /> - <ClCompile Include="..\..\..\src\Airports\gnnode.cxx" /> - <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx" /> - <ClCompile Include="..\..\..\src\Airports\parking.cxx" /> - <ClCompile Include="..\..\..\src\Airports\pavement.cxx" /> - <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx" /> - <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx" /> - <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx" /> - <ClCompile Include="..\..\..\src\Airports\runways.cxx" /> - <ClCompile Include="..\..\..\src\Airports\sidstar.cxx" /> - <ClCompile Include="..\..\..\src\Airports\simple.cxx" /> - <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx" /> - <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\..\..\src\ATC\atcutils.cxx" /> - <ClCompile Include="..\..\..\src\ATC\atis.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\component.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\logic.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx" /> - <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\panel.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx" /> - <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx" /> - <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx" /> - <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx" /> - <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp" /> - <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c" /> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp" /> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp" /> - <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp" /> - <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx" /> - <ClCompile Include="..\..\..\src\FDM\flight.cxx" /> - <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx" /> - <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx" /> - <ClCompile Include="..\..\..\src\GUI\AirportList.cxx" /> - <ClCompile Include="..\..\..\src\GUI\dialog.cxx" /> - <ClCompile Include="..\..\..\src\Gui\fonts.cxx" /> - <ClCompile Include="..\..\..\src\GUI\gui.cxx" /> - <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx" /> - <ClCompile Include="..\..\..\src\GUI\layout-props.cxx" /> - <ClCompile Include="..\..\..\src\GUI\layout.cxx" /> - <ClCompile Include="..\..\..\src\GUI\menubar.cxx" /> - <ClCompile Include="..\..\..\src\GUI\new_gui.cxx" /> - <ClCompile Include="..\..\..\src\Gui\property_list.cxx" /> - <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx" /> - <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx" /> - <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGButton.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx" /> - <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx" /> - <ClCompile Include="..\..\..\src\Input\input.cxx" /> - <ClCompile Include="..\..\..\src\Main\bootstrap.cxx" /> - <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_commands.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_init.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_io.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx" /> - <ClCompile Include="..\..\..\src\Main\fg_props.cxx" /> - <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx" /> - <ClCompile Include="..\..\..\src\Main\fgviewer.cxx" /> - <ClCompile Include="..\..\..\src\Main\globals.cxx" /> - <ClCompile Include="..\..\..\src\Main\logger.cxx" /> - <ClCompile Include="..\..\..\src\Main\main.cxx" /> - <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx" /> - <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx" /> - <ClCompile Include="..\..\..\src\Main\options.cxx" /> - <ClCompile Include="..\..\..\src\Main\renderer.cxx" /> - <ClCompile Include="..\..\..\src\Main\splash.cxx" /> - <ClCompile Include="..\..\..\src\Main\util.cxx" /> - <ClCompile Include="..\..\..\src\Main\viewer.cxx" /> - <ClCompile Include="..\..\..\src\Main\viewmgr.cxx" /> - <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx" /> - <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\awynet.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\navdb.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\navlist.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx" /> - <ClCompile Include="..\..\..\src\Navaids\positioned.cxx" /> - <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx" /> - <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx" /> - <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx" /> - <ClCompile Include="..\..\..\src\Network\atlas.cxx" /> - <ClCompile Include="..\..\..\src\Network\AV400.cxx" /> - <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx" /> - <ClCompile Include="..\..\..\src\Network\garmin.cxx" /> - <ClCompile Include="..\..\..\src\Network\generic.cxx" /> - <ClCompile Include="..\..\..\src\Network\httpd.cxx" /> - <ClCompile Include="..\..\..\src\Network\joyclient.cxx" /> - <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx" /> - <ClCompile Include="..\..\..\src\Network\jsclient.cxx" /> - <ClCompile Include="..\..\..\src\Network\multiplay.cxx" /> - <ClCompile Include="..\..\..\src\Network\native.cxx" /> - <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx" /> - <ClCompile Include="..\..\..\src\Network\native_fdm.cxx" /> - <ClCompile Include="..\..\..\src\Network\native_gui.cxx" /> - <ClCompile Include="..\..\..\src\Network\nmea.cxx" /> - <ClCompile Include="..\..\..\src\Network\opengc.cxx" /> - <ClCompile Include="..\..\..\src\Network\props.cxx" /> - <ClCompile Include="..\..\..\src\Network\protocol.cxx" /> - <ClCompile Include="..\..\..\src\Network\pve.cxx" /> - <ClCompile Include="..\..\..\src\Network\ray.cxx" /> - <ClCompile Include="..\..\..\src\Network\rul.cxx" /> - <ClCompile Include="..\..\..\src\Scenery\redout.cxx" /> - <ClCompile Include="..\..\..\src\Scenery\scenery.cxx" /> - <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx" /> - <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx" /> - <ClCompile Include="..\..\..\src\Sound\beacon.cxx" /> - <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx" /> - <ClCompile Include="..\..\..\src\Sound\morse.cxx" /> - <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx" /> - <ClCompile Include="..\..\..\src\Sound\voice.cxx" /> - <ClCompile Include="..\..\..\src\Time\light.cxx" /> - <ClCompile Include="..\..\..\src\Time\sunsolver.cxx" /> - <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx" /> - <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx" /> - <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\environment.cxx" /> - <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx" /> - <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx" /> - <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx" /> - <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx" /> - <ClCompile Include="..\..\..\src\Environment\fgwind.cxx" /> - <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx" /> - <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx" /> - <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx" /> - <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx" /> - <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx" /> - <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx" /> - <ClCompile Include="..\..\..\src\Model\acmodel.cxx" /> - <ClCompile Include="..\..\..\src\Model\model_panel.cxx" /> - <ClCompile Include="..\..\..\src\Model\modelmgr.cxx" /> - <ClCompile Include="..\..\..\src\Model\panelnode.cxx" /> - <ClCompile Include="..\..\..\src\FDM\UFO.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\electrical.cxx" /> - <ClCompile Include="..\..\..\src\Systems\pitot.cxx" /> - <ClCompile Include="..\..\..\src\Systems\static.cxx" /> - <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx" /> - <ClCompile Include="..\..\..\src\Systems\vacuum.cxx" /> - <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx" /> - <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx" /> - <ClCompile Include="..\..\..\src\AIModel\submodel.cxx" /> - <ClCompile Include="..\..\..\src\Time\TimeManager.cxx" /> - <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx" /> - <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx" /> - <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx" /> - <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx" /> - <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx" /> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx" /> - <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\..\src\Aircraft\controls.hxx" /> - <ClInclude Include="..\..\..\src\Aircraft\replay.hxx" /> - <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx" /> - <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx" /> - <ClInclude Include="..\..\..\src\Airports\dynamics.hxx" /> - <ClInclude Include="..\..\..\src\Airports\gnnode.hxx" /> - <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx" /> - <ClInclude Include="..\..\..\src\Airports\parking.hxx" /> - <ClInclude Include="..\..\..\src\Airports\pavement.hxx" /> - <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx" /> - <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx" /> - <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx" /> - <ClInclude Include="..\..\..\src\Airports\runways.hxx" /> - <ClInclude Include="..\..\..\src\Airports\sidstar.hxx" /> - <ClInclude Include="..\..\..\src\Airports\simple.hxx" /> - <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx" /> - <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\..\..\src\ATC\atcutils.hxx" /> - <ClInclude Include="..\..\..\src\ATC\atis.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\component.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\functor.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\logic.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx" /> - <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx" /> - <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx" /> - <ClInclude Include="..\..\..\src\Cockpit\hud.hxx" /> - <ClInclude Include="..\..\..\src\Cockpit\panel.hxx" /> - <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx" /> - <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx" /> - <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx" /> - <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx" /> - <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h" /> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h" /> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h" /> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h" /> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp" /> - <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp" /> - <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp" /> - <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp" /> - <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp" /> - <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp" /> - <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx" /> - <ClInclude Include="..\..\..\src\FDM\flight.hxx" /> - <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx" /> - <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx" /> - <ClInclude Include="..\..\..\src\GUI\AirportList.hxx" /> - <ClInclude Include="..\..\..\src\GUI\dialog.hxx" /> - <ClInclude Include="..\..\..\src\GUI\gui.h" /> - <ClInclude Include="..\..\..\src\GUI\layout.hxx" /> - <ClInclude Include="..\..\..\src\GUI\menubar.hxx" /> - <ClInclude Include="..\..\..\src\GUI\new_gui.hxx" /> - <ClInclude Include="..\..\..\src\Gui\property_list.hxx" /> - <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx" /> - <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx" /> - <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGButton.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx" /> - <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx" /> - <ClInclude Include="..\..\..\src\Input\input.hxx" /> - <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx" /> - <ClInclude Include="..\..\..\src\Main\fg_commands.hxx" /> - <ClInclude Include="..\..\..\src\Main\fg_init.hxx" /> - <ClInclude Include="..\..\..\src\Main\fg_io.hxx" /> - <ClInclude Include="..\..\..\src\Main\fg_os.hxx" /> - <ClInclude Include="..\..\..\src\Main\fg_props.hxx" /> - <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx" /> - <ClInclude Include="..\..\..\src\Main\fgviewer.hxx" /> - <ClInclude Include="..\..\..\src\Main\globals.hxx" /> - <ClInclude Include="..\..\..\src\Main\logger.hxx" /> - <ClInclude Include="..\..\..\src\Main\main.hxx" /> - <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx" /> - <ClInclude Include="..\..\..\src\Main\options.hxx" /> - <ClInclude Include="..\..\..\src\Main\renderer.hxx" /> - <ClInclude Include="..\..\..\src\Main\splash.hxx" /> - <ClInclude Include="..\..\..\src\Main\util.hxx" /> - <ClInclude Include="..\..\..\src\Main\viewer.hxx" /> - <ClInclude Include="..\..\..\src\Main\viewmgr.hxx" /> - <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx" /> - <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\awynet.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\fix.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\nav.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\navdb.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\navlist.hxx" /> - <ClInclude Include="..\..\..\src\Navaids\positioned.hxx" /> - <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx" /> - <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx" /> - <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx" /> - <ClInclude Include="..\..\..\src\Network\atlas.hxx" /> - <ClInclude Include="..\..\..\src\Network\AV400.hxx" /> - <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx" /> - <ClInclude Include="..\..\..\src\Network\garmin.hxx" /> - <ClInclude Include="..\..\..\src\Network\generic.hxx" /> - <ClInclude Include="..\..\..\src\Network\httpd.hxx" /> - <ClInclude Include="..\..\..\src\Network\joyclient.hxx" /> - <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx" /> - <ClInclude Include="..\..\..\src\Network\jsclient.hxx" /> - <ClInclude Include="..\..\..\src\Network\multiplay.hxx" /> - <ClInclude Include="..\..\..\src\Network\native.hxx" /> - <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx" /> - <ClInclude Include="..\..\..\src\Network\native_fdm.hxx" /> - <ClInclude Include="..\..\..\src\Network\native_gui.hxx" /> - <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx" /> - <ClInclude Include="..\..\..\src\Network\net_fdm.hxx" /> - <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx" /> - <ClInclude Include="..\..\..\src\Network\net_gui.hxx" /> - <ClInclude Include="..\..\..\src\Network\nmea.hxx" /> - <ClInclude Include="..\..\..\src\Network\opengc.hxx" /> - <ClInclude Include="..\..\..\src\Network\opengc_data.hxx" /> - <ClInclude Include="..\..\..\src\Network\props.hxx" /> - <ClInclude Include="..\..\..\src\Network\protocol.hxx" /> - <ClInclude Include="..\..\..\src\Network\pve.hxx" /> - <ClInclude Include="..\..\..\src\Network\ray.hxx" /> - <ClInclude Include="..\..\..\src\Network\rul.hxx" /> - <ClInclude Include="..\..\..\src\Scenery\redout.hxx" /> - <ClInclude Include="..\..\..\src\Scenery\scenery.hxx" /> - <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx" /> - <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx" /> - <ClInclude Include="..\..\..\src\Sound\beacon.hxx" /> - <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx" /> - <ClInclude Include="..\..\..\src\Sound\morse.hxx" /> - <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx" /> - <ClInclude Include="..\..\..\src\Sound\voice.hxx" /> - <ClInclude Include="..\..\..\src\Time\light.hxx" /> - <ClInclude Include="..\..\..\src\Time\sunsolver.hxx" /> - <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx" /> - <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx" /> - <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx" /> - <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx" /> - <ClInclude Include="..\..\..\src\Environment\environment.hxx" /> - <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx" /> - <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx" /> - <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx" /> - <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx" /> - <ClInclude Include="..\..\..\src\Environment\fgwind.hxx" /> - <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx" /> - <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx" /> - <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx" /> - <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx" /> - <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx" /> - <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx" /> - <ClInclude Include="..\..\..\src\Model\acmodel.hxx" /> - <ClInclude Include="..\..\..\src\Model\model_panel.hxx" /> - <ClInclude Include="..\..\..\src\Model\modelmgr.hxx" /> - <ClInclude Include="..\..\..\src\Model\panelnode.hxx" /> - <ClInclude Include="..\..\..\src\FDM\UFO.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx" /> - <ClInclude Include="..\..\..\src\Systems\electrical.hxx" /> - <ClInclude Include="..\..\..\src\Systems\pitot.hxx" /> - <ClInclude Include="..\..\..\src\Systems\static.hxx" /> - <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx" /> - <ClInclude Include="..\..\..\src\Systems\vacuum.hxx" /> - <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx" /> - <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx" /> - <ClInclude Include="..\..\..\src\AIModel\submodel.hxx" /> - <ClInclude Include="..\..\..\src\Time\TimeManager.hxx" /> - <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx" /> - <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx" /> - <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx" /> - <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx" /> - <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx" /> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx" /> - <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx" /> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="..\..\..\src\Include\config.h-msvc90"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generation of config.h</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generation of config.h</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generation of config.h</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generation of config.h</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuildStep Include="..\flightgear.ico"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuildStep> - <CustomBuildStep Include="..\flightgear64.ico"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - </CustomBuildStep> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="..\flightgear.rc"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </ResourceCompile> - <ResourceCompile Include="..\flightgear64.rc"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - </ResourceCompile> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\..\SimGear\projects\VC100\SimGear.vcxproj"> - <Project>{22540cd3-d3ca-4c86-a773-80aeee3acded}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{49142EAF-B264-4B9F-B096-F669999EBB2E}</ProjectGuid> + <RootNamespace>FlightGear</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> + <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> + <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> + <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> + <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> + <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> + <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> + <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" /> + <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" /> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fgfs</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">fgfs</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">fgfs</TargetName> + <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fgfs</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Midl> + <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <BasicRuntimeChecks>Default</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <RuntimeTypeInfo>true</RuntimeTypeInfo> + <BrowseInformation>true</BrowseInformation> + <WarningLevel>Level3</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0c09</Culture> + </ResourceCompile> + <Link> + <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> + <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies> + <OutputFile>$(OutDir)fgfs.exe</OutputFile> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + <TypeLibraryName>.\Debug/FlightGear.tlb</TypeLibraryName> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\..\SimGear;..\..\..\src\FDM\JSBSim;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_DEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <BasicRuntimeChecks>Default</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <RuntimeTypeInfo>true</RuntimeTypeInfo> + <BrowseInformation>true</BrowseInformation> + <WarningLevel>Level3</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0c09</Culture> + </ResourceCompile> + <Link> + <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg_d.lib;net_d.lib;pui_d.lib;puaux_d.lib;fnt_d.lib;js_d.lib;ul_d.lib;zlibd.lib;OpenAL32.lib;ALut.lib;osgd.lib;osgDBd.lib;osgUtild.lib;osgViewerd.lib;osgGAd.lib;osgTextd.lib;osgParticled.lib;OpenThreadsd.lib;libjpegd.lib;%(AdditionalDependencies)</AdditionalDependencies> + <OutputFile>$(OutDir)fgfs.exe</OutputFile> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX64</TargetMachine> + <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Midl> + <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName> + </Midl> + <ClCompile> + <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100\OpenSceneGraph\include;..\..\..\..\3rdParty\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <RuntimeTypeInfo>true</RuntimeTypeInfo> + <WarningLevel>Level3</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <CompileAs>Default</CompileAs> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0c09</Culture> + </ResourceCompile> + <Link> + <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions> + <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies> + <OutputFile>$(OutDir)fgfs.exe</OutputFile> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>..\..\..\..\install\msvc100\OpenSceneGraph\lib;..\..\..\..\3rdParty\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Midl> + <TargetEnvironment>X64</TargetEnvironment> + <TypeLibraryName>.\Release/FlightGear.tlb</TypeLibraryName> + </Midl> + <ClCompile> + <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\src;..\..\..\src\include;..\..\..\src\FDM\JSBSim;..\..\..\..\SimGear;..\..\..\..\install\msvc100-64\OpenSceneGraph\include;..\..\..\..\3rdParty.x64\include;..\..\..\..\boost_1_43_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>NDEBUG;WIN32;_CONSOLE;HAVE_CONFIG_H;FGFS;ENABLE_AUDIO_SUPPORT;_FG_NDEBUG;ENABLE_THREADS=1;FG_ENABLE_MULTIPASS_CLOUDS;ENABLE_SP_FMDS;_USE_MATH_DEFINES;FG_JPEG_SERVER;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;PU_USE_NATIVE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <RuntimeTypeInfo>true</RuntimeTypeInfo> + <WarningLevel>Level3</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <CompileAs>Default</CompileAs> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0c09</Culture> + </ResourceCompile> + <Link> + <AdditionalDependencies>opengl32.lib;glu32.lib;winmm.lib;wsock32.lib;sg.lib;net.lib;pui.lib;puAux.lib;fnt.lib;js.lib;ul.lib;zlib.lib;OpenAL32.lib;ALut.lib;osg.lib;osgDB.lib;osgUtil.lib;osgViewer.lib;osgGA.lib;osgText.lib;osgParticle.lib;OpenThreads.lib;libjpeg.lib;%(AdditionalDependencies)</AdditionalDependencies> + <OutputFile>$(OutDir)fgfs.exe</OutputFile> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>..\..\..\..\install\msvc100-64\OpenSceneGraph\lib;..\..\..\..\3rdParty.x64\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX64</TargetMachine> + <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\..\..\src\Aircraft\controls.cxx" /> + <ClCompile Include="..\..\..\src\Aircraft\replay.cxx" /> + <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx" /> + <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx" /> + <ClCompile Include="..\..\..\src\Airports\dynamics.cxx" /> + <ClCompile Include="..\..\..\src\Airports\gnnode.cxx" /> + <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx" /> + <ClCompile Include="..\..\..\src\Airports\parking.cxx" /> + <ClCompile Include="..\..\..\src\Airports\pavement.cxx" /> + <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx" /> + <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx" /> + <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx" /> + <ClCompile Include="..\..\..\src\Airports\runways.cxx" /> + <ClCompile Include="..\..\..\src\Airports\sidstar.cxx" /> + <ClCompile Include="..\..\..\src\Airports\simple.cxx" /> + <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx" /> + <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\src\ATC\atcutils.cxx" /> + <ClCompile Include="..\..\..\src\ATC\atis.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\component.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\logic.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx" /> + <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\panel.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx" /> + <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx" /> + <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx" /> + <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx" /> + <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp" /> + <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c" /> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp" /> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp" /> + <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp" /> + <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx" /> + <ClCompile Include="..\..\..\src\FDM\flight.cxx" /> + <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx" /> + <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx" /> + <ClCompile Include="..\..\..\src\GUI\AirportList.cxx" /> + <ClCompile Include="..\..\..\src\GUI\dialog.cxx" /> + <ClCompile Include="..\..\..\src\Gui\fonts.cxx" /> + <ClCompile Include="..\..\..\src\GUI\gui.cxx" /> + <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx" /> + <ClCompile Include="..\..\..\src\GUI\layout-props.cxx" /> + <ClCompile Include="..\..\..\src\GUI\layout.cxx" /> + <ClCompile Include="..\..\..\src\GUI\menubar.cxx" /> + <ClCompile Include="..\..\..\src\GUI\new_gui.cxx" /> + <ClCompile Include="..\..\..\src\Gui\property_list.cxx" /> + <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx" /> + <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx" /> + <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGButton.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx" /> + <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx" /> + <ClCompile Include="..\..\..\src\Input\input.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx" /> + <ClCompile Include="..\..\..\src\Main\bootstrap.cxx" /> + <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_commands.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_init.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_io.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx" /> + <ClCompile Include="..\..\..\src\Main\fg_props.cxx" /> + <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx" /> + <ClCompile Include="..\..\..\src\Main\fgviewer.cxx" /> + <ClCompile Include="..\..\..\src\Main\globals.cxx" /> + <ClCompile Include="..\..\..\src\Main\logger.cxx" /> + <ClCompile Include="..\..\..\src\Main\main.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\airways.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\procedure.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\route.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\routePath.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\waypoint.cxx" /> + <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx" /> + <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx" /> + <ClCompile Include="..\..\..\src\Main\options.cxx" /> + <ClCompile Include="..\..\..\src\Main\renderer.cxx" /> + <ClCompile Include="..\..\..\src\Main\splash.cxx" /> + <ClCompile Include="..\..\..\src\Main\util.cxx" /> + <ClCompile Include="..\..\..\src\Main\viewer.cxx" /> + <ClCompile Include="..\..\..\src\Main\viewmgr.cxx" /> + <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx" /> + <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\awynet.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\navdb.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\navlist.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx" /> + <ClCompile Include="..\..\..\src\Navaids\positioned.cxx" /> + <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx" /> + <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx" /> + <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx" /> + <ClCompile Include="..\..\..\src\Network\atlas.cxx" /> + <ClCompile Include="..\..\..\src\Network\AV400.cxx" /> + <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx" /> + <ClCompile Include="..\..\..\src\Network\garmin.cxx" /> + <ClCompile Include="..\..\..\src\Network\generic.cxx" /> + <ClCompile Include="..\..\..\src\Network\httpd.cxx" /> + <ClCompile Include="..\..\..\src\Network\joyclient.cxx" /> + <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx" /> + <ClCompile Include="..\..\..\src\Network\jsclient.cxx" /> + <ClCompile Include="..\..\..\src\Network\multiplay.cxx" /> + <ClCompile Include="..\..\..\src\Network\native.cxx" /> + <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx" /> + <ClCompile Include="..\..\..\src\Network\native_fdm.cxx" /> + <ClCompile Include="..\..\..\src\Network\native_gui.cxx" /> + <ClCompile Include="..\..\..\src\Network\nmea.cxx" /> + <ClCompile Include="..\..\..\src\Network\opengc.cxx" /> + <ClCompile Include="..\..\..\src\Network\props.cxx" /> + <ClCompile Include="..\..\..\src\Network\protocol.cxx" /> + <ClCompile Include="..\..\..\src\Network\pve.cxx" /> + <ClCompile Include="..\..\..\src\Network\ray.cxx" /> + <ClCompile Include="..\..\..\src\Network\rul.cxx" /> + <ClCompile Include="..\..\..\src\Scenery\redout.cxx" /> + <ClCompile Include="..\..\..\src\Scenery\scenery.cxx" /> + <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx" /> + <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx" /> + <ClCompile Include="..\..\..\src\Sound\beacon.cxx" /> + <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx" /> + <ClCompile Include="..\..\..\src\Sound\morse.cxx" /> + <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx" /> + <ClCompile Include="..\..\..\src\Sound\voice.cxx" /> + <ClCompile Include="..\..\..\src\Time\light.cxx" /> + <ClCompile Include="..\..\..\src\Time\sunsolver.cxx" /> + <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx" /> + <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx" /> + <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\environment.cxx" /> + <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx" /> + <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx" /> + <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx" /> + <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx" /> + <ClCompile Include="..\..\..\src\Environment\fgwind.cxx" /> + <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx" /> + <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx" /> + <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx" /> + <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx" /> + <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx" /> + <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx" /> + <ClCompile Include="..\..\..\src\Model\acmodel.cxx" /> + <ClCompile Include="..\..\..\src\Model\model_panel.cxx" /> + <ClCompile Include="..\..\..\src\Model\modelmgr.cxx" /> + <ClCompile Include="..\..\..\src\Model\panelnode.cxx" /> + <ClCompile Include="..\..\..\src\FDM\UFO.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx"> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName> + <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\electrical.cxx" /> + <ClCompile Include="..\..\..\src\Systems\pitot.cxx" /> + <ClCompile Include="..\..\..\src\Systems\static.cxx" /> + <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx" /> + <ClCompile Include="..\..\..\src\Systems\vacuum.cxx" /> + <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx" /> + <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx" /> + <ClCompile Include="..\..\..\src\AIModel\submodel.cxx" /> + <ClCompile Include="..\..\..\src\Time\TimeManager.cxx" /> + <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx" /> + <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx" /> + <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx" /> + <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx" /> + <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx" /> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx" /> + <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\src\Aircraft\controls.hxx" /> + <ClInclude Include="..\..\..\src\Aircraft\replay.hxx" /> + <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx" /> + <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx" /> + <ClInclude Include="..\..\..\src\Airports\dynamics.hxx" /> + <ClInclude Include="..\..\..\src\Airports\gnnode.hxx" /> + <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx" /> + <ClInclude Include="..\..\..\src\Airports\parking.hxx" /> + <ClInclude Include="..\..\..\src\Airports\pavement.hxx" /> + <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx" /> + <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx" /> + <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx" /> + <ClInclude Include="..\..\..\src\Airports\runways.hxx" /> + <ClInclude Include="..\..\..\src\Airports\sidstar.hxx" /> + <ClInclude Include="..\..\..\src\Airports\simple.hxx" /> + <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx" /> + <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\..\src\ATC\atcutils.hxx" /> + <ClInclude Include="..\..\..\src\ATC\atis.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\component.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\functor.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\logic.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx" /> + <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx" /> + <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx" /> + <ClInclude Include="..\..\..\src\Cockpit\hud.hxx" /> + <ClInclude Include="..\..\..\src\Cockpit\panel.hxx" /> + <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx" /> + <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx" /> + <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx" /> + <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx" /> + <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h" /> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h" /> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h" /> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h" /> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp" /> + <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp" /> + <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp" /> + <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp" /> + <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp" /> + <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp" /> + <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx" /> + <ClInclude Include="..\..\..\src\FDM\flight.hxx" /> + <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx" /> + <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx" /> + <ClInclude Include="..\..\..\src\GUI\AirportList.hxx" /> + <ClInclude Include="..\..\..\src\GUI\dialog.hxx" /> + <ClInclude Include="..\..\..\src\GUI\gui.h" /> + <ClInclude Include="..\..\..\src\GUI\layout.hxx" /> + <ClInclude Include="..\..\..\src\GUI\menubar.hxx" /> + <ClInclude Include="..\..\..\src\GUI\new_gui.hxx" /> + <ClInclude Include="..\..\..\src\Gui\property_list.hxx" /> + <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx" /> + <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx" /> + <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGButton.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx" /> + <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx" /> + <ClInclude Include="..\..\..\src\Input\input.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx" /> + <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx" /> + <ClInclude Include="..\..\..\src\Main\fg_commands.hxx" /> + <ClInclude Include="..\..\..\src\Main\fg_init.hxx" /> + <ClInclude Include="..\..\..\src\Main\fg_io.hxx" /> + <ClInclude Include="..\..\..\src\Main\fg_os.hxx" /> + <ClInclude Include="..\..\..\src\Main\fg_props.hxx" /> + <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx" /> + <ClInclude Include="..\..\..\src\Main\fgviewer.hxx" /> + <ClInclude Include="..\..\..\src\Main\globals.hxx" /> + <ClInclude Include="..\..\..\src\Main\logger.hxx" /> + <ClInclude Include="..\..\..\src\Main\main.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\airways.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\procedure.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\route.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\routePath.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\waypoint.hxx" /> + <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx" /> + <ClInclude Include="..\..\..\src\Main\options.hxx" /> + <ClInclude Include="..\..\..\src\Main\renderer.hxx" /> + <ClInclude Include="..\..\..\src\Main\splash.hxx" /> + <ClInclude Include="..\..\..\src\Main\util.hxx" /> + <ClInclude Include="..\..\..\src\Main\viewer.hxx" /> + <ClInclude Include="..\..\..\src\Main\viewmgr.hxx" /> + <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx" /> + <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\awynet.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\fix.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\nav.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\navdb.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\navlist.hxx" /> + <ClInclude Include="..\..\..\src\Navaids\positioned.hxx" /> + <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx" /> + <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx" /> + <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx" /> + <ClInclude Include="..\..\..\src\Network\atlas.hxx" /> + <ClInclude Include="..\..\..\src\Network\AV400.hxx" /> + <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx" /> + <ClInclude Include="..\..\..\src\Network\garmin.hxx" /> + <ClInclude Include="..\..\..\src\Network\generic.hxx" /> + <ClInclude Include="..\..\..\src\Network\httpd.hxx" /> + <ClInclude Include="..\..\..\src\Network\joyclient.hxx" /> + <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx" /> + <ClInclude Include="..\..\..\src\Network\jsclient.hxx" /> + <ClInclude Include="..\..\..\src\Network\multiplay.hxx" /> + <ClInclude Include="..\..\..\src\Network\native.hxx" /> + <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx" /> + <ClInclude Include="..\..\..\src\Network\native_fdm.hxx" /> + <ClInclude Include="..\..\..\src\Network\native_gui.hxx" /> + <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx" /> + <ClInclude Include="..\..\..\src\Network\net_fdm.hxx" /> + <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx" /> + <ClInclude Include="..\..\..\src\Network\net_gui.hxx" /> + <ClInclude Include="..\..\..\src\Network\nmea.hxx" /> + <ClInclude Include="..\..\..\src\Network\opengc.hxx" /> + <ClInclude Include="..\..\..\src\Network\opengc_data.hxx" /> + <ClInclude Include="..\..\..\src\Network\props.hxx" /> + <ClInclude Include="..\..\..\src\Network\protocol.hxx" /> + <ClInclude Include="..\..\..\src\Network\pve.hxx" /> + <ClInclude Include="..\..\..\src\Network\ray.hxx" /> + <ClInclude Include="..\..\..\src\Network\rul.hxx" /> + <ClInclude Include="..\..\..\src\Scenery\redout.hxx" /> + <ClInclude Include="..\..\..\src\Scenery\scenery.hxx" /> + <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx" /> + <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx" /> + <ClInclude Include="..\..\..\src\Sound\beacon.hxx" /> + <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx" /> + <ClInclude Include="..\..\..\src\Sound\morse.hxx" /> + <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx" /> + <ClInclude Include="..\..\..\src\Sound\voice.hxx" /> + <ClInclude Include="..\..\..\src\Time\light.hxx" /> + <ClInclude Include="..\..\..\src\Time\sunsolver.hxx" /> + <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx" /> + <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx" /> + <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx" /> + <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx" /> + <ClInclude Include="..\..\..\src\Environment\environment.hxx" /> + <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx" /> + <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx" /> + <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx" /> + <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx" /> + <ClInclude Include="..\..\..\src\Environment\fgwind.hxx" /> + <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx" /> + <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx" /> + <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx" /> + <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx" /> + <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx" /> + <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx" /> + <ClInclude Include="..\..\..\src\Model\acmodel.hxx" /> + <ClInclude Include="..\..\..\src\Model\model_panel.hxx" /> + <ClInclude Include="..\..\..\src\Model\modelmgr.hxx" /> + <ClInclude Include="..\..\..\src\Model\panelnode.hxx" /> + <ClInclude Include="..\..\..\src\FDM\UFO.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx" /> + <ClInclude Include="..\..\..\src\Systems\electrical.hxx" /> + <ClInclude Include="..\..\..\src\Systems\pitot.hxx" /> + <ClInclude Include="..\..\..\src\Systems\static.hxx" /> + <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx" /> + <ClInclude Include="..\..\..\src\Systems\vacuum.hxx" /> + <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx" /> + <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx" /> + <ClInclude Include="..\..\..\src\AIModel\submodel.hxx" /> + <ClInclude Include="..\..\..\src\Time\TimeManager.hxx" /> + <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx" /> + <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx" /> + <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx" /> + <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx" /> + <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx" /> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx" /> + <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx" /> + </ItemGroup> + <ItemGroup> + <CustomBuild Include="..\..\..\src\Include\config.h-msvc90"> + <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generation of config.h</Message> + <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h +</Command> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> + <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generation of config.h</Message> + <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h +</Command> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> + <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generation of config.h</Message> + <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h +</Command> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> + <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generation of config.h</Message> + <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy %(FullPath) %(RootDir)%(Directory)\%(Filename).h +</Command> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\Include\config.h;%(Outputs)</Outputs> + </CustomBuild> + <CustomBuildStep Include="..\flightgear.ico"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\flightgear64.ico"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="..\flightgear.rc"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ResourceCompile> + <ResourceCompile Include="..\flightgear64.rc"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </ResourceCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\..\..\SimGear\projects\VC100\SimGear.vcxproj"> + <Project>{22540cd3-d3ca-4c86-a773-80aeee3acded}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> </Project> \ No newline at end of file diff --git a/projects/VC100/FlightGear/FlightGear.vcxproj.filters b/projects/VC100/FlightGear/FlightGear.vcxproj.filters index 8c7e59f3d..392ec0ef7 100644 --- a/projects/VC100/FlightGear/FlightGear.vcxproj.filters +++ b/projects/VC100/FlightGear/FlightGear.vcxproj.filters @@ -1,2942 +1,2978 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Lib_Aircraft"> - <UniqueIdentifier>{5b5a7035-1789-4175-be3c-5ba77c37de44}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Airports"> - <UniqueIdentifier>{8efb426e-e23e-42d6-9e6e-406c51e3a65c}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_ATCDCL"> - <UniqueIdentifier>{7d7c9038-3ad4-4e1f-b67d-d27baa06f8e8}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Autopilot"> - <UniqueIdentifier>{a2116df7-5e2f-40d8-a56f-ef96cdebd6c6}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Cockpit"> - <UniqueIdentifier>{6ed1f548-d273-46c6-a0bb-b9ee2303f481}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Cockpit\build_in"> - <UniqueIdentifier>{eacbd83d-0087-44ce-a78f-73d5498b2af1}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim"> - <UniqueIdentifier>{d8c4cb07-9e19-43f0-a85a-dcf30b2545c7}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\math"> - <UniqueIdentifier>{183efdbf-00a8-427a-98da-dec58255128e}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\models"> - <UniqueIdentifier>{411dbaca-baf6-4170-b100-71a554209935}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\models\atmosphere"> - <UniqueIdentifier>{9436baf4-76e7-4226-a161-60eab79eb34b}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\models\flight_control"> - <UniqueIdentifier>{2487fd19-c144-45be-aea7-289d221345b5}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\models\propulsion"> - <UniqueIdentifier>{d371bccf-2c19-4079-b535-d031216e8490}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\input_output"> - <UniqueIdentifier>{27550555-bc98-408b-b4b0-4ebd297b6a3d}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_JSBSim\initialization"> - <UniqueIdentifier>{b3b2ce93-c999-472a-bfa6-06c1143c7fae}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_LaRCsim"> - <UniqueIdentifier>{cb4d76a1-7275-4cd6-a305-63636b13ade9}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_UIUCModel"> - <UniqueIdentifier>{ff59ef83-e9a1-46ac-8391-e268a9df0dfc}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_YASim"> - <UniqueIdentifier>{fabb1c71-61fb-4a57-88da-26945141c440}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Flight"> - <UniqueIdentifier>{940c9533-0978-40ef-8d39-961d0ad89b4e}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_GUI"> - <UniqueIdentifier>{c9754169-5e10-4035-9544-6294c31d9709}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Input"> - <UniqueIdentifier>{131a31a9-d8bd-4a93-8cce-4798aa9c9bc9}</UniqueIdentifier> - </Filter> - <Filter Include="main"> - <UniqueIdentifier>{0c65f02c-7bae-4389-bf94-5e2c67ba0e68}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Navaids"> - <UniqueIdentifier>{81173da0-37ce-43a2-85a6-0a5efcbfed91}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Network"> - <UniqueIdentifier>{bae088e3-d112-4668-b653-beb723426c96}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Scenery"> - <UniqueIdentifier>{6b8abb03-12fe-470a-a3d6-69f2b99cb082}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Sound"> - <UniqueIdentifier>{56f378cc-a098-4fc1-b6db-708df701363c}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Time"> - <UniqueIdentifier>{10afb571-0a80-4493-9d07-71dbb3e128fb}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Multiplayer"> - <UniqueIdentifier>{5f18d822-922b-4bc5-a197-1f9c749d3aca}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Environment"> - <UniqueIdentifier>{da1bf6b6-517a-4d9b-8de2-b43a126426a8}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Model"> - <UniqueIdentifier>{3a8fdd5f-359c-4867-b542-c680216b835b}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_UFO"> - <UniqueIdentifier>{5ecfbcb6-4b64-419f-8e53-f0cf299087bf}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Instrumentation"> - <UniqueIdentifier>{4d06a2fc-202e-44ed-bf26-22bbef505bc5}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Instrumentation\Lib_HUD"> - <UniqueIdentifier>{1965f1ef-8cc9-40d6-876b-6f1787bd300d}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Systems"> - <UniqueIdentifier>{175c5293-cb40-47ec-bceb-f234bedfd31c}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_ExternalNet"> - <UniqueIdentifier>{bed96b77-e07c-42c9-956a-df71af33a794}</UniqueIdentifier> - </Filter> - <Filter Include="ExternalPipe"> - <UniqueIdentifier>{0a02d14a-7bb7-4564-a1b9-7a8f5ccc9cbd}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_AIModel"> - <UniqueIdentifier>{044334ac-08b1-409d-acd5-b950b9d57ced}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_Traffic"> - <UniqueIdentifier>{22009ac9-4ac5-4518-afd8-0b237abe6d00}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_SP"> - <UniqueIdentifier>{9a55973a-7b5a-4fbd-9873-93012209f7e0}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_KLN89"> - <UniqueIdentifier>{8cae8c55-248a-4be4-a389-24f651d7b9ea}</UniqueIdentifier> - </Filter> - <Filter Include="Lib_ATC"> - <UniqueIdentifier>{8f862bbd-b18e-4576-989c-a9463482781a}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\..\src\Aircraft\controls.cxx"> - <Filter>Lib_Aircraft</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Aircraft\replay.cxx"> - <Filter>Lib_Aircraft</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\dynamics.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\gnnode.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\parking.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\pavement.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\runways.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\sidstar.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\simple.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx"> - <Filter>Lib_Airports</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx"> - <Filter>Lib_ATCDCL</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\panel.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx"> - <Filter>Lib_Cockpit</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx"> - <Filter>Lib_Cockpit\build_in</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp"> - <Filter>Lib_JSBSim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp"> - <Filter>Lib_JSBSim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp"> - <Filter>Lib_JSBSim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx"> - <Filter>Lib_JSBSim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp"> - <Filter>Lib_JSBSim\models</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp"> - <Filter>Lib_JSBSim\models\atmosphere</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp"> - <Filter>Lib_JSBSim\models\atmosphere</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp"> - <Filter>Lib_JSBSim\models\atmosphere</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c"> - <Filter>Lib_LaRCsim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp"> - <Filter>Lib_UIUCModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx"> - <Filter>Lib_YASim</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\flight.cxx"> - <Filter>Lib_Flight</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx"> - <Filter>Lib_Flight</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx"> - <Filter>Lib_Flight</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\AirportList.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\dialog.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Gui\fonts.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\gui.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\layout-props.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\layout.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\menubar.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\new_gui.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Gui\property_list.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx"> - <Filter>Lib_GUI</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGButton.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Input\input.cxx"> - <Filter>Lib_Input</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\bootstrap.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_commands.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_init.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_io.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fg_props.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\fgviewer.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\globals.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\logger.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\main.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\options.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\renderer.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\splash.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\util.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\viewer.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\viewmgr.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx"> - <Filter>main</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\awynet.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\navdb.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\navlist.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Navaids\positioned.cxx"> - <Filter>Lib_Navaids</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\atlas.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\AV400.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\garmin.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\generic.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\httpd.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\joyclient.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\jsclient.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\multiplay.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\native.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\native_fdm.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\native_gui.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\nmea.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\opengc.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\props.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\protocol.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\pve.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\ray.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Network\rul.cxx"> - <Filter>Lib_Network</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scenery\redout.cxx"> - <Filter>Lib_Scenery</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scenery\scenery.cxx"> - <Filter>Lib_Scenery</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx"> - <Filter>Lib_Scenery</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx"> - <Filter>Lib_Scenery</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Sound\beacon.cxx"> - <Filter>Lib_Sound</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx"> - <Filter>Lib_Sound</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Sound\morse.cxx"> - <Filter>Lib_Sound</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx"> - <Filter>Lib_Sound</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Sound\voice.cxx"> - <Filter>Lib_Sound</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Time\light.cxx"> - <Filter>Lib_Time</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Time\sunsolver.cxx"> - <Filter>Lib_Time</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx"> - <Filter>Lib_Multiplayer</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx"> - <Filter>Lib_Multiplayer</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\environment.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\fgwind.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Model\acmodel.cxx"> - <Filter>Lib_Model</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Model\model_panel.cxx"> - <Filter>Lib_Model</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Model\modelmgr.cxx"> - <Filter>Lib_Model</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Model\panelnode.cxx"> - <Filter>Lib_Model</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\UFO.cxx"> - <Filter>Lib_UFO</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx"> - <Filter>Lib_Instrumentation</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\electrical.cxx"> - <Filter>Lib_Systems</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\pitot.cxx"> - <Filter>Lib_Systems</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\static.cxx"> - <Filter>Lib_Systems</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx"> - <Filter>Lib_Systems</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Systems\vacuum.cxx"> - <Filter>Lib_Systems</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx"> - <Filter>Lib_ExternalNet</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx"> - <Filter>ExternalPipe</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\AIModel\submodel.cxx"> - <Filter>Lib_AIModel</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx"> - <Filter>Lib_Traffic</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx"> - <Filter>Lib_Traffic</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx"> - <Filter>Lib_Traffic</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx"> - <Filter>Lib_SP</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx"> - <Filter>Lib_SP</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx"> - <Filter>Lib_KLN89</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx"> - <Filter>Lib_ATC</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx"> - <Filter>Lib_Flight</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATC\atcutils.cxx"> - <Filter>Lib_ATC</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\component.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\logic.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx"> - <Filter>Lib_Autopilot</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx"> - <Filter>Lib_Flight</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx"> - <Filter>Lib_Environment</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\ATC\atis.cxx"> - <Filter>Lib_ATC</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\Time\TimeManager.cxx"> - <Filter>Lib_Time</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp"> - <Filter>Lib_JSBSim\math</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\..\src\Aircraft\controls.hxx"> - <Filter>Lib_Aircraft</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Aircraft\replay.hxx"> - <Filter>Lib_Aircraft</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\dynamics.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\gnnode.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\parking.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\pavement.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\runways.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\sidstar.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\simple.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx"> - <Filter>Lib_Airports</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx"> - <Filter>Lib_ATCDCL</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx"> - <Filter>Lib_Cockpit</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Cockpit\hud.hxx"> - <Filter>Lib_Cockpit</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Cockpit\panel.hxx"> - <Filter>Lib_Cockpit</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx"> - <Filter>Lib_Cockpit</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx"> - <Filter>Lib_Cockpit\build_in</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h"> - <Filter>Lib_JSBSim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h"> - <Filter>Lib_JSBSim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h"> - <Filter>Lib_JSBSim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx"> - <Filter>Lib_JSBSim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h"> - <Filter>Lib_JSBSim\models</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h"> - <Filter>Lib_JSBSim\models\atmosphere</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h"> - <Filter>Lib_JSBSim\models\atmosphere</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h"> - <Filter>Lib_JSBSim\models\flight_control</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h"> - <Filter>Lib_JSBSim\models\propulsion</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx"> - <Filter>Lib_JSBSim\input_output</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h"> - <Filter>Lib_JSBSim\initialization</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h"> - <Filter>Lib_LaRCsim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h"> - <Filter>Lib_UIUCModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx"> - <Filter>Lib_YASim</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\flight.hxx"> - <Filter>Lib_Flight</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx"> - <Filter>Lib_Flight</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx"> - <Filter>Lib_Flight</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\AirportList.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\dialog.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\gui.h"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\layout.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\menubar.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\new_gui.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Gui\property_list.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx"> - <Filter>Lib_GUI</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGButton.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Input\input.hxx"> - <Filter>Lib_Input</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fg_commands.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fg_init.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fg_io.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fg_os.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fg_props.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\fgviewer.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\globals.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\logger.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\main.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\options.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\renderer.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\splash.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\util.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\viewer.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\viewmgr.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx"> - <Filter>main</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\awynet.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\fix.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\nav.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\navdb.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\navlist.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Navaids\positioned.hxx"> - <Filter>Lib_Navaids</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\atlas.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\AV400.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\garmin.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\generic.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\httpd.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\joyclient.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\jsclient.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\multiplay.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\native.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\native_fdm.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\native_gui.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\net_fdm.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\net_gui.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\nmea.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\opengc.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\opengc_data.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\props.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\protocol.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\pve.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\ray.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Network\rul.hxx"> - <Filter>Lib_Network</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Scenery\redout.hxx"> - <Filter>Lib_Scenery</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Scenery\scenery.hxx"> - <Filter>Lib_Scenery</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx"> - <Filter>Lib_Scenery</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx"> - <Filter>Lib_Scenery</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Sound\beacon.hxx"> - <Filter>Lib_Sound</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx"> - <Filter>Lib_Sound</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Sound\morse.hxx"> - <Filter>Lib_Sound</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx"> - <Filter>Lib_Sound</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Sound\voice.hxx"> - <Filter>Lib_Sound</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Time\light.hxx"> - <Filter>Lib_Time</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Time\sunsolver.hxx"> - <Filter>Lib_Time</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx"> - <Filter>Lib_Multiplayer</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx"> - <Filter>Lib_Multiplayer</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx"> - <Filter>Lib_Multiplayer</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\environment.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\fgwind.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Model\acmodel.hxx"> - <Filter>Lib_Model</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Model\model_panel.hxx"> - <Filter>Lib_Model</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Model\modelmgr.hxx"> - <Filter>Lib_Model</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Model\panelnode.hxx"> - <Filter>Lib_Model</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\UFO.hxx"> - <Filter>Lib_UFO</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx"> - <Filter>Lib_Instrumentation</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx"> - <Filter>Lib_Instrumentation\Lib_HUD</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Systems\electrical.hxx"> - <Filter>Lib_Systems</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Systems\pitot.hxx"> - <Filter>Lib_Systems</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Systems\static.hxx"> - <Filter>Lib_Systems</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx"> - <Filter>Lib_Systems</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Systems\vacuum.hxx"> - <Filter>Lib_Systems</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx"> - <Filter>Lib_ExternalNet</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx"> - <Filter>ExternalPipe</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\AIModel\submodel.hxx"> - <Filter>Lib_AIModel</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx"> - <Filter>Lib_Traffic</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx"> - <Filter>Lib_Traffic</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx"> - <Filter>Lib_Traffic</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx"> - <Filter>Lib_SP</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx"> - <Filter>Lib_SP</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx"> - <Filter>Lib_KLN89</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx"> - <Filter>Lib_ATC</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx"> - <Filter>Lib_Flight</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATC\atcutils.hxx"> - <Filter>Lib_ATC</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\component.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\functor.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\logic.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx"> - <Filter>Lib_Autopilot</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx"> - <Filter>Lib_Flight</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx"> - <Filter>Lib_Environment</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\ATC\atis.hxx"> - <Filter>Lib_ATC</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\Time\TimeManager.hxx"> - <Filter>Lib_Time</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h"> - <Filter>Lib_JSBSim\math</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="..\flightgear.rc" /> - <ResourceCompile Include="..\flightgear64.rc" /> - </ItemGroup> - <ItemGroup> - <CustomBuildStep Include="..\flightgear.ico" /> - <CustomBuildStep Include="..\flightgear64.ico" /> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="..\..\..\src\Include\config.h-msvc90" /> - </ItemGroup> +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Lib_Aircraft"> + <UniqueIdentifier>{5b5a7035-1789-4175-be3c-5ba77c37de44}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Airports"> + <UniqueIdentifier>{8efb426e-e23e-42d6-9e6e-406c51e3a65c}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_ATCDCL"> + <UniqueIdentifier>{7d7c9038-3ad4-4e1f-b67d-d27baa06f8e8}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Autopilot"> + <UniqueIdentifier>{a2116df7-5e2f-40d8-a56f-ef96cdebd6c6}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Cockpit"> + <UniqueIdentifier>{6ed1f548-d273-46c6-a0bb-b9ee2303f481}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Cockpit\build_in"> + <UniqueIdentifier>{eacbd83d-0087-44ce-a78f-73d5498b2af1}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim"> + <UniqueIdentifier>{d8c4cb07-9e19-43f0-a85a-dcf30b2545c7}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\math"> + <UniqueIdentifier>{183efdbf-00a8-427a-98da-dec58255128e}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\models"> + <UniqueIdentifier>{411dbaca-baf6-4170-b100-71a554209935}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\models\atmosphere"> + <UniqueIdentifier>{9436baf4-76e7-4226-a161-60eab79eb34b}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\models\flight_control"> + <UniqueIdentifier>{2487fd19-c144-45be-aea7-289d221345b5}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\models\propulsion"> + <UniqueIdentifier>{d371bccf-2c19-4079-b535-d031216e8490}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\input_output"> + <UniqueIdentifier>{27550555-bc98-408b-b4b0-4ebd297b6a3d}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_JSBSim\initialization"> + <UniqueIdentifier>{b3b2ce93-c999-472a-bfa6-06c1143c7fae}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_LaRCsim"> + <UniqueIdentifier>{cb4d76a1-7275-4cd6-a305-63636b13ade9}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_UIUCModel"> + <UniqueIdentifier>{ff59ef83-e9a1-46ac-8391-e268a9df0dfc}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_YASim"> + <UniqueIdentifier>{fabb1c71-61fb-4a57-88da-26945141c440}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Flight"> + <UniqueIdentifier>{940c9533-0978-40ef-8d39-961d0ad89b4e}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_GUI"> + <UniqueIdentifier>{c9754169-5e10-4035-9544-6294c31d9709}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Input"> + <UniqueIdentifier>{131a31a9-d8bd-4a93-8cce-4798aa9c9bc9}</UniqueIdentifier> + </Filter> + <Filter Include="main"> + <UniqueIdentifier>{0c65f02c-7bae-4389-bf94-5e2c67ba0e68}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Navaids"> + <UniqueIdentifier>{81173da0-37ce-43a2-85a6-0a5efcbfed91}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Network"> + <UniqueIdentifier>{bae088e3-d112-4668-b653-beb723426c96}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Scenery"> + <UniqueIdentifier>{6b8abb03-12fe-470a-a3d6-69f2b99cb082}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Sound"> + <UniqueIdentifier>{56f378cc-a098-4fc1-b6db-708df701363c}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Time"> + <UniqueIdentifier>{10afb571-0a80-4493-9d07-71dbb3e128fb}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Multiplayer"> + <UniqueIdentifier>{5f18d822-922b-4bc5-a197-1f9c749d3aca}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Environment"> + <UniqueIdentifier>{da1bf6b6-517a-4d9b-8de2-b43a126426a8}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Model"> + <UniqueIdentifier>{3a8fdd5f-359c-4867-b542-c680216b835b}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_UFO"> + <UniqueIdentifier>{5ecfbcb6-4b64-419f-8e53-f0cf299087bf}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Instrumentation"> + <UniqueIdentifier>{4d06a2fc-202e-44ed-bf26-22bbef505bc5}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Instrumentation\Lib_HUD"> + <UniqueIdentifier>{1965f1ef-8cc9-40d6-876b-6f1787bd300d}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Systems"> + <UniqueIdentifier>{175c5293-cb40-47ec-bceb-f234bedfd31c}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_ExternalNet"> + <UniqueIdentifier>{bed96b77-e07c-42c9-956a-df71af33a794}</UniqueIdentifier> + </Filter> + <Filter Include="ExternalPipe"> + <UniqueIdentifier>{0a02d14a-7bb7-4564-a1b9-7a8f5ccc9cbd}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_AIModel"> + <UniqueIdentifier>{044334ac-08b1-409d-acd5-b950b9d57ced}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_Traffic"> + <UniqueIdentifier>{22009ac9-4ac5-4518-afd8-0b237abe6d00}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_SP"> + <UniqueIdentifier>{9a55973a-7b5a-4fbd-9873-93012209f7e0}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_KLN89"> + <UniqueIdentifier>{8cae8c55-248a-4be4-a389-24f651d7b9ea}</UniqueIdentifier> + </Filter> + <Filter Include="Lib_ATC"> + <UniqueIdentifier>{8f862bbd-b18e-4576-989c-a9463482781a}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\src\Aircraft\controls.cxx"> + <Filter>Lib_Aircraft</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Aircraft\replay.cxx"> + <Filter>Lib_Aircraft</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\apt_loader.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\dynamicloader.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\dynamics.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\gnnode.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\groundnetwork.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\parking.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\pavement.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\runwaybase.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\runwayprefloader.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\runwayprefs.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\runways.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\sidstar.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\simple.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Airports\xmlloader.cxx"> + <Filter>Lib_Airports</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIEntity.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AILocalTraffic.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIMgr.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\AIPlane.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\approach.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATC.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCDialog.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCmgr.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCProjection.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCutils.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ATCVoice.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\atis.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\commlist.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\ground.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\tower.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\transmission.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATCDCL\transmissionlist.cxx"> + <Filter>Lib_ATCDCL</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\route_mgr.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\cockpit.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_card.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_dnst.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_gaug.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_inst.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_labl.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_ladr.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_rwy.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_scal.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\hud_tbi.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\panel.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\panel_io.cxx"> + <Filter>Lib_Cockpit</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.cxx"> + <Filter>Lib_Cockpit\build_in</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGFDMExec.cpp"> + <Filter>Lib_JSBSim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGJSBBase.cpp"> + <Filter>Lib_JSBSim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\FGState.cpp"> + <Filter>Lib_JSBSim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\JSBSim.cxx"> + <Filter>Lib_JSBSim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\math\FGTable.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGInput.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGModel.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.cpp"> + <Filter>Lib_JSBSim\models</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.cpp"> + <Filter>Lib_JSBSim\models\atmosphere</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.cpp"> + <Filter>Lib_JSBSim\models\atmosphere</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSISData.cpp"> + <Filter>Lib_JSBSim\models\atmosphere</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.cpp"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.cpp"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.cpp"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.cpp"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.cpp"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.cpp"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\atmos_62.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_aero.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_engine.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_gear.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\basic_init.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_aero.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_engine.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_gear.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\c172_init.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_aero.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_engine.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_gear.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\cherokee_init.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\default_model_routines.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\IO360.cxx"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsim.cxx"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.cxx"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_accel.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_aux.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_gravity.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_init.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_interface.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_matrix.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_model.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\ls_step.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_aero.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_engine.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_gear.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\navion_init.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\LaRCsim\uiuc_aero.c"> + <Filter>Lib_LaRCsim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.cpp"> + <Filter>Lib_UIUCModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Airplane.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Atmosphere.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\ControlMap.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\FGFDM.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\FGGround.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Gear.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Glue.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\Ground.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\Hitch.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\Hook.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Integrator.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Jet.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\YASim\Launchbar.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Math.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Model.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\PistonEngine.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Propeller.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\PropEngine.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\RigidBody.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Rotor.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Rotorpart.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\SimpleJet.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Surface.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Thruster.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\TurbineEngine.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Turbulence.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\Wing.cpp"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\YASim\YASim.cxx"> + <Filter>Lib_YASim</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\flight.cxx"> + <Filter>Lib_Flight</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\groundcache.cxx"> + <Filter>Lib_Flight</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\NullFDM.cxx"> + <Filter>Lib_Flight</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\AirportList.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\dialog.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Gui\fonts.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\gui.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\gui_funcs.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\layout-props.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\layout.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\menubar.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\new_gui.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Gui\property_list.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\SafeTexFont.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\WaypointList.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\GUI\MapWidget.cxx"> + <Filter>Lib_GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGButton.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGCommonInput.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGDeviceConfigurationMap.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGJoystickInput.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGKeyboardInput.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\FGMouseInput.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Input\input.cxx"> + <Filter>Lib_Input</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\bootstrap.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\CameraGroup.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_commands.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_init.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_io.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_os_common.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_os_osgviewer.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fg_props.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\FGEventHandler.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\fgviewer.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\globals.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\logger.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\main.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scripting\nasal-props.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scripting\NasalSys.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\options.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\renderer.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\splash.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\util.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\viewer.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\viewmgr.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\WindowBuilder.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Main\WindowSystemAdapter.cxx"> + <Filter>main</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\awynet.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\fixlist.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\markerbeacon.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\navdb.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\navlist.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\navrecord.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\positioned.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\ATC-Inputs.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\ATC-Main.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\ATC-Outputs.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\atlas.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\AV400.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\AV400Sim.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\garmin.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\generic.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\httpd.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\joyclient.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\jpg-httpd.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\jsclient.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\multiplay.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\native.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\native_ctrls.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\native_fdm.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\native_gui.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\nmea.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\opengc.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\props.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\protocol.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\pve.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\ray.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Network\rul.cxx"> + <Filter>Lib_Network</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scenery\redout.cxx"> + <Filter>Lib_Scenery</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scenery\scenery.cxx"> + <Filter>Lib_Scenery</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scenery\SceneryPager.cxx"> + <Filter>Lib_Scenery</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Scenery\tilemgr.cxx"> + <Filter>Lib_Scenery</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Sound\beacon.cxx"> + <Filter>Lib_Sound</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Sound\fg_fx.cxx"> + <Filter>Lib_Sound</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Sound\morse.cxx"> + <Filter>Lib_Sound</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Sound\sample_queue.cxx"> + <Filter>Lib_Sound</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Sound\voice.cxx"> + <Filter>Lib_Sound</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Time\light.cxx"> + <Filter>Lib_Time</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Time\sunsolver.cxx"> + <Filter>Lib_Time</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\MultiPlayer\multiplaymgr.cxx"> + <Filter>Lib_Multiplayer</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\MultiPlayer\tiny_xdr.cxx"> + <Filter>Lib_Multiplayer</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\atmosphere.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\environment.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\environment_ctrl.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\environment_mgr.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\fgclouds.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\fgmetar.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\fgwind.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\precipitation_mgr.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\ridge_lift.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\realwx_ctrl.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\metarproperties.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\metarairportfilter.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\terrainsampler.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Model\acmodel.cxx"> + <Filter>Lib_Model</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Model\model_panel.cxx"> + <Filter>Lib_Model</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Model\modelmgr.cxx"> + <Filter>Lib_Model</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Model\panelnode.cxx"> + <Filter>Lib_Model</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\UFO.cxx"> + <Filter>Lib_UFO</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\adf.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\agradar.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\airspeed_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\altimeter.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\attitude_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\clock.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\dclgps.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\dme.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\gps.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\groundradar.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\gsdi.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\gyro.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_dg.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\heading_indicator_fg.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\instrument_mgr.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\kr_87.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\kt_70.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\mag_compass.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\marker_beacon.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\mk_viii.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\mrg.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\navradio.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\od_gauge.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\rad_alt.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\render_area_2d.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\slip_skid_ball.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\tacan.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\transponder.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\turn_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\vertical_speed_indicator.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\wxradar.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_dial.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_gauge.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_instrument.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_label.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_ladder.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_misc.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_runway.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_scale.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tape.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Hud\HUD_tbi.cxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\electrical.cxx"> + <Filter>Lib_Systems</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\pitot.cxx"> + <Filter>Lib_Systems</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\static.cxx"> + <Filter>Lib_Systems</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\system_mgr.cxx"> + <Filter>Lib_Systems</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Systems\vacuum.cxx"> + <Filter>Lib_Systems</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\ExternalNet\ExternalNet.cxx"> + <Filter>Lib_ExternalNet</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.cxx"> + <Filter>ExternalPipe</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIAircraft.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIBallistic.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIBase.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AICarrier.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIEscort.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlan.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreate.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreateCruise.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIFlightPlanCreatePushBack.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIGroundVehicle.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIManager.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIMultiplayer.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIShip.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIStatic.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIStorm.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AITanker.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIThermal.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\AIWingman.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\performancedata.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\performancedb.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\AIModel\submodel.cxx"> + <Filter>Lib_AIModel</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Traffic\SchedFlight.cxx"> + <Filter>Lib_Traffic</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Traffic\Schedule.cxx"> + <Filter>Lib_Traffic</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Traffic\TrafficMgr.cxx"> + <Filter>Lib_Traffic</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\Sp\ACMS.cxx"> + <Filter>Lib_SP</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Fdm\Sp\ADA.cxx"> + <Filter>Lib_SP</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.cxx"> + <Filter>Lib_KLN89</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Atc\trafficcontrol.cxx"> + <Filter>Lib_ATC</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\flightProperties.cxx"> + <Filter>Lib_Flight</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATC\atcutils.cxx"> + <Filter>Lib_ATC</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\autopilotgroup.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\analogcomponent.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\autopilot.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\component.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\digitalcomponent.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\digitalfilter.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\flipflop.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\inputvalue.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\logic.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\pidcontroller.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\pisimplecontroller.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Autopilot\predictor.cxx"> + <Filter>Lib_Autopilot</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\fdm_shell.cxx"> + <Filter>Lib_Flight</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Environment\ephemeris.cxx"> + <Filter>Lib_Environment</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\ATC\atis.cxx"> + <Filter>Lib_ATC</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Time\TimeManager.cxx"> + <Filter>Lib_Time</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.cpp"> + <Filter>Lib_JSBSim\math</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\airways.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\procedure.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\route.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\routePath.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Navaids\waypoint.cxx"> + <Filter>Lib_Navaids</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\Instrumentation\rnav_waypt_controller.cxx"> + <Filter>Lib_Instrumentation</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\src\Aircraft\controls.hxx"> + <Filter>Lib_Aircraft</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Aircraft\replay.hxx"> + <Filter>Lib_Aircraft</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\apt_loader.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\dynamicloader.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\dynamics.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\gnnode.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\groundnetwork.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\parking.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\pavement.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\runwaybase.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\runwayprefloader.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\runwayprefs.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\runways.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\sidstar.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\simple.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Airports\xmlloader.hxx"> + <Filter>Lib_Airports</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIEntity.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIGAVFRTraffic.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AILocalTraffic.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIMgr.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\AIPlane.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\approach.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATC.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCDialog.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCmgr.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCProjection.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCutils.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ATCVoice.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\atis.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\commlist.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\ground.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\tower.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\transmission.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATCDCL\transmissionlist.hxx"> + <Filter>Lib_ATCDCL</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\route_mgr.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Cockpit\cockpit.hxx"> + <Filter>Lib_Cockpit</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Cockpit\hud.hxx"> + <Filter>Lib_Cockpit</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Cockpit\panel.hxx"> + <Filter>Lib_Cockpit</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Cockpit\panel_io.hxx"> + <Filter>Lib_Cockpit</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Cockpit\built_in\FGMagRibbon.hxx"> + <Filter>Lib_Cockpit\build_in</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGFDMExec.h"> + <Filter>Lib_JSBSim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGJSBBase.h"> + <Filter>Lib_JSBSim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\FGState.h"> + <Filter>Lib_JSBSim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\JSBSim.hxx"> + <Filter>Lib_JSBSim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGColumnVector3.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGCondition.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGFunction.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGLocation.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGMatrix33.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGParameter.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGPropertyValue.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGQuaternion.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGRealValue.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\math\FGTable.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAerodynamics.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAircraft.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAtmosphere.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGAuxiliary.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGBuoyantForces.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalForce.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGExternalReactions.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGFCS.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGasCell.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGGroundReactions.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGGyro.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInertial.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGInput.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGLGear.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGMagnetometer.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGMassBalance.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGModel.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGOutput.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropagate.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\FGPropulsion.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\models\flight_control\FGSensorOrientation.h"> + <Filter>Lib_JSBSim\models</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMars.h"> + <Filter>Lib_JSBSim\models\atmosphere</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\atmosphere\FGMSIS.h"> + <Filter>Lib_JSBSim\models\atmosphere</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGAccelerometer.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGActuator.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGDeadBand.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSComponent.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFCSFunction.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGFilter.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGain.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGGradient.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGKinemat.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGPID.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSensor.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSummer.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\flight_control\FGSwitch.h"> + <Filter>Lib_JSBSim\models\flight_control</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGElectric.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGEngine.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGForce.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGNozzle.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPiston.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGPropeller.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRocket.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGRotor.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTank.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGThruster.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurbine.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\models\propulsion\FGTurboProp.h"> + <Filter>Lib_JSBSim\models\propulsion</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGfdmSocket.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGGroundCallback.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGPropertyManager.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGScript.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLElement.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLFileRead.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\FGXMLParse.h"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\input_output\net_fdm.hxx"> + <Filter>Lib_JSBSim\input_output</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGInitialCondition.h"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrim.h"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\JSBSim\initialization\FGTrimAxis.h"> + <Filter>Lib_JSBSim\initialization</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\atmos_62.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_aero.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\basic_init.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_aero.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\c172_init.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\default_model_routines.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\IO360.hxx"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsim.hxx"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\LaRCsimIC.hxx"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_accel.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_aux.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_cockpit.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_constants.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_generic.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_geodesy.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_gravity.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_init.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_interface.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_matrix.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_model.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sim_control.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_step.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_sym.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\ls_types.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\LaRCsim\navion_init.h"> + <Filter>Lib_LaRCsim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1DdataFileReader.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_1Dinterpolation.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2DdataFileReader.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_2Dinterpolation.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_3Dinterpolation.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aerodeflections.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraft.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_aircraftdir.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_alh_ap.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_auto_pilot.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_betaprobe.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_drag.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_lift.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_pitch.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_roll.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_sideforce.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coef_yaw.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_coefficients.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_controlInput.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_convert.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_engine.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_find_position.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_flapdata.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_fog.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_gear.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_get_flapper.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_getwind.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_hh_ap.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_ice.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iceboot.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_iced_nonlin.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_icing_demo.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_initializemaps.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CD.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CL.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cm.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Cn.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_controlSurface.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_Croll.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_CY.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_engine.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_fog.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_gear.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_geometry.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_ice.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_init.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_keyword.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_mass.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_misc.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record1.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record2.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record3.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record4.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record5.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_map_record6.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CD.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CL.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cm.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Cn.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_controlSurface.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_Croll.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_CY.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_engine.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_fog.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_functions.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_gear.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_geometry.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_ice.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_init.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_mass.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_misc.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_menu_record.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_pah_ap.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_parsefile.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_rah_ap.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_recorder.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_warnings_errors.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UIUCModel\uiuc_wrapper.h"> + <Filter>Lib_UIUCModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Airplane.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Atmosphere.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\BodyEnvironment.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\ControlMap.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\FGFDM.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\YASim\FGGround.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Gear.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Glue.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\YASim\Ground.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\YASim\Hitch.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\YASim\Hook.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Integrator.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Jet.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\YASim\Launchbar.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Math.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Model.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\PistonEngine.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Propeller.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\PropEngine.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\RigidBody.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Rotor.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Rotorpart.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\SimpleJet.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Surface.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Thruster.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\TurbineEngine.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Turbulence.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Vector.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\Wing.hpp"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\YASim\YASim.hxx"> + <Filter>Lib_YASim</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\flight.hxx"> + <Filter>Lib_Flight</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\groundcache.hxx"> + <Filter>Lib_Flight</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\NullFDM.hxx"> + <Filter>Lib_Flight</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\AirportList.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\dialog.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\gui.h"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\layout.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\menubar.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\new_gui.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Gui\property_list.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\SafeTexFont.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\WaypointList.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\GUI\MapWidget.hxx"> + <Filter>Lib_GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGButton.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGCommonInput.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGDeviceConfigurationMap.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGJoystickInput.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGKeyboardInput.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\FGMouseInput.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Input\input.hxx"> + <Filter>Lib_Input</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\CameraGroup.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fg_commands.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fg_init.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fg_io.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fg_os.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fg_props.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\FGEventHandler.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\fgviewer.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\globals.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\logger.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\main.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Scripting\NasalSys.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\options.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\renderer.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\splash.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\util.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\viewer.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\viewmgr.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\WindowBuilder.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Main\WindowSystemAdapter.hxx"> + <Filter>main</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\awynet.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\fix.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\fixlist.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\markerbeacon.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\nav.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\navdb.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\navlist.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\positioned.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\ATC-Inputs.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\ATC-Main.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\ATC-Outputs.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\atlas.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\AV400.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\AV400Sim.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\garmin.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\generic.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\httpd.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\joyclient.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\jpg-httpd.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\jsclient.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\multiplay.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\native.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\native_ctrls.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\native_fdm.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\native_gui.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\net_ctrls.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\net_fdm.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\net_fdm_mini.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\net_gui.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\nmea.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\opengc.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\opengc_data.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\props.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\protocol.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\pve.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\ray.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Network\rul.hxx"> + <Filter>Lib_Network</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Scenery\redout.hxx"> + <Filter>Lib_Scenery</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Scenery\scenery.hxx"> + <Filter>Lib_Scenery</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Scenery\SceneryPager.hxx"> + <Filter>Lib_Scenery</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Scenery\tilemgr.hxx"> + <Filter>Lib_Scenery</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Sound\beacon.hxx"> + <Filter>Lib_Sound</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Sound\fg_fx.hxx"> + <Filter>Lib_Sound</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Sound\morse.hxx"> + <Filter>Lib_Sound</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Sound\sample_queue.hxx"> + <Filter>Lib_Sound</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Sound\voice.hxx"> + <Filter>Lib_Sound</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Time\light.hxx"> + <Filter>Lib_Time</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Time\sunsolver.hxx"> + <Filter>Lib_Time</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\MultiPlayer\mpmessages.hxx"> + <Filter>Lib_Multiplayer</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\MultiPlayer\multiplaymgr.hxx"> + <Filter>Lib_Multiplayer</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\MultiPlayer\tiny_xdr.hxx"> + <Filter>Lib_Multiplayer</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\atmosphere.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\environment.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\environment_ctrl.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\environment_mgr.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\fgclouds.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\fgmetar.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\fgwind.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\precipitation_mgr.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\ridge_lift.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\realwx_ctrl.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\metarproperties.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\metarairportfilter.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\terrainsampler.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Model\acmodel.hxx"> + <Filter>Lib_Model</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Model\model_panel.hxx"> + <Filter>Lib_Model</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Model\modelmgr.hxx"> + <Filter>Lib_Model</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Model\panelnode.hxx"> + <Filter>Lib_Model</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\UFO.hxx"> + <Filter>Lib_UFO</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\adf.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\agradar.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\airspeed_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\altimeter.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\attitude_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\clock.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\dclgps.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\dme.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\gps.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\groundradar.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\gsdi.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\gyro.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_dg.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\heading_indicator_fg.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\inst_vertical_speed_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\instrument_mgr.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\kr_87.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\kt_70.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\mag_compass.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\marker_beacon.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\mk_viii.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\mrg.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\navradio.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\od_gauge.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\rad_alt.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\render_area_2d.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\slip_skid_ball.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\tacan.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\transponder.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\turn_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\vertical_speed_indicator.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\wxradar.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Hud\HUD.hxx"> + <Filter>Lib_Instrumentation\Lib_HUD</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Systems\electrical.hxx"> + <Filter>Lib_Systems</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Systems\pitot.hxx"> + <Filter>Lib_Systems</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Systems\static.hxx"> + <Filter>Lib_Systems</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Systems\system_mgr.hxx"> + <Filter>Lib_Systems</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Systems\vacuum.hxx"> + <Filter>Lib_Systems</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\ExternalNet\ExternalNet.hxx"> + <Filter>Lib_ExternalNet</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\ExternalPipe\ExternalPipe.hxx"> + <Filter>ExternalPipe</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIAircraft.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIBallistic.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIBase.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AICarrier.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIEscort.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIFlightPlan.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIGroundVehicle.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIManager.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIMultiplayer.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIShip.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIStatic.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIStorm.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AITanker.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIThermal.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\AIWingman.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\performancedata.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\performancedb.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\AIModel\submodel.hxx"> + <Filter>Lib_AIModel</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Traffic\SchedFlight.hxx"> + <Filter>Lib_Traffic</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Traffic\Schedule.hxx"> + <Filter>Lib_Traffic</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Traffic\TrafficMgr.hxx"> + <Filter>Lib_Traffic</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\Sp\ACMS.hxx"> + <Filter>Lib_SP</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Fdm\Sp\ADA.hxx"> + <Filter>Lib_SP</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_act.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_apt.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_cal.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_dir.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_fpl.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_int.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nav.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_ndb.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_nrst.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_oth.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_set.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_usr.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_page_vor.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\Kln89\kln89_symbols.hxx"> + <Filter>Lib_KLN89</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Atc\trafficcontrol.hxx"> + <Filter>Lib_ATC</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGRungeKutta.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\flightProperties.hxx"> + <Filter>Lib_Flight</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATC\atcutils.hxx"> + <Filter>Lib_ATC</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\autopilotgroup.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\analogcomponent.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\autopilot.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\component.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\digitalcomponent.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\digitalfilter.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\flipflop.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\functor.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\inputvalue.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\logic.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\pidcontroller.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\pisimplecontroller.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Autopilot\predictor.hxx"> + <Filter>Lib_Autopilot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\fdm_shell.hxx"> + <Filter>Lib_Flight</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Environment\ephemeris.hxx"> + <Filter>Lib_Environment</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\ATC\atis.hxx"> + <Filter>Lib_ATC</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Time\TimeManager.hxx"> + <Filter>Lib_Time</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\FDM\JSBSim\math\FGModelFunctions.h"> + <Filter>Lib_JSBSim\math</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\airways.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\procedure.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\route.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\routePath.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Navaids\waypoint.hxx"> + <Filter>Lib_Navaids</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\Instrumentation\rnav_waypt_controller.hxx"> + <Filter>Lib_Instrumentation</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="..\flightgear.rc" /> + <ResourceCompile Include="..\flightgear64.rc" /> + </ItemGroup> + <ItemGroup> + <CustomBuildStep Include="..\flightgear.ico" /> + <CustomBuildStep Include="..\flightgear64.ico" /> + </ItemGroup> + <ItemGroup> + <CustomBuild Include="..\..\..\src\Include\config.h-msvc90" /> + </ItemGroup> </Project> \ No newline at end of file From 957a59e57a7be92fd64a0c1278a6f04d0f31d327 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sat, 23 Oct 2010 19:09:08 +0100 Subject: [PATCH 30/45] Investigating an intermittent shutdown crash; fix deletion of AIManager. --- src/Main/globals.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index ee5fcf2fd..33f36ecc8 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -166,8 +166,9 @@ FGGlobals::~FGGlobals() // deallocation of AIModel objects. To ensure we can safely // shut down all subsystems, make sure we take down the // AIModels system first. - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model"); - + SGSubsystem* ai = subsystem_mgr->remove("ai_model"); + delete ai; + subsystem_mgr->unbind(); delete subsystem_mgr; From 984900d84dcfce3ab7708550b79e3c107d8bfce1 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sun, 24 Oct 2010 07:10:02 +0100 Subject: [PATCH 31/45] Make v2 HUD a top-level subsystem, so it can be reinit()ed correctly. --- src/Instrumentation/instrument_mgr.cxx | 3 ++- src/Main/renderer.cxx | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Instrumentation/instrument_mgr.cxx b/src/Instrumentation/instrument_mgr.cxx index 2e3f21e3f..19fcaeb06 100644 --- a/src/Instrumentation/instrument_mgr.cxx +++ b/src/Instrumentation/instrument_mgr.cxx @@ -55,7 +55,8 @@ FGInstrumentMgr::FGInstrumentMgr () : _explicitGps(false) { set_subsystem("od_gauge", new FGODGauge); - set_subsystem("hud", new HUD); + + globals->add_subsystem("hud", new HUD, SGSubsystemMgr::DISPLAY); } FGInstrumentMgr::~FGInstrumentMgr () diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index 0cb00c5ab..388701d67 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -89,7 +89,6 @@ #include <Scenery/redout.hxx> #include <Scenery/tilemgr.hxx> #include <GUI/new_gui.hxx> -#include <Instrumentation/instrument_mgr.hxx> #include <Instrumentation/HUD/HUD.hxx> #include <Environment/precipitation_mgr.hxx> @@ -209,8 +208,7 @@ public: fgCockpitUpdate(&state); - FGInstrumentMgr *instr = static_cast<FGInstrumentMgr*>(globals->get_subsystem("instrumentation")); - HUD *hud = static_cast<HUD*>(instr->get_subsystem("hud")); + HUD *hud = static_cast<HUD*>(globals->get_subsystem("hud")); hud->draw(state); // update the panel subsystem From 0e53e2cbb1e7f511c40121ade43a539d15e0e155 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sat, 23 Oct 2010 20:37:26 +0100 Subject: [PATCH 32/45] PLIB net removed from FlightGear --- src/FDM/ExternalNet/ExternalNet.cxx | 44 +++++++++++++++++++++++++ src/FDM/ExternalNet/ExternalNet.hxx | 51 ++--------------------------- src/Main/Makefile.am | 7 ++-- src/Main/main.cxx | 5 +-- src/MultiPlayer/multiplaymgr.cxx | 9 +++-- src/MultiPlayer/multiplaymgr.hxx | 10 +++--- src/MultiPlayer/tiny_xdr.cxx | 3 -- src/Network/ATC-Main.hxx | 2 -- src/Network/httpd.cxx | 2 +- src/Network/httpd.hxx | 10 +++--- src/Network/jpg-httpd.cxx | 2 +- src/Network/jpg-httpd.hxx | 10 +++--- src/Network/props.cxx | 16 ++++----- src/Network/props.hxx | 9 ++--- utils/TerraSync/Makefile.am | 8 +---- utils/TerraSync/terrasync.cxx | 14 ++++---- 16 files changed, 93 insertions(+), 109 deletions(-) diff --git a/src/FDM/ExternalNet/ExternalNet.cxx b/src/FDM/ExternalNet/ExternalNet.cxx index 741bb3b78..7a3a14156 100644 --- a/src/FDM/ExternalNet/ExternalNet.cxx +++ b/src/FDM/ExternalNet/ExternalNet.cxx @@ -26,6 +26,7 @@ #include <simgear/debug/logstream.hxx> #include <simgear/io/lowlevel.hxx> // endian tests +#include <simgear/io/sg_netBuffer.hxx> #include <Main/fg_props.hxx> #include <Network/native_ctrls.hxx> @@ -34,6 +35,49 @@ #include "ExternalNet.hxx" +class HTTPClient : public simgear::NetBufferChannel +{ + + bool done; + SGTimeStamp start; + +public: + + HTTPClient ( const char* host, int port, const char* path ) : + done( false ) + { + open (); + connect (host, port); + + char buffer[256]; + ::snprintf (buffer, 256, "GET %s HTTP/1.0\r\n\r\n", path ); + bufferSend(buffer, strlen(buffer) ) ; + + start.stamp(); + } + + virtual void handleBufferRead (simgear::NetBuffer& buffer) + { + const char* s = buffer.getData(); + while (*s) + fputc(*s++,stdout); + + printf("done\n"); + buffer.remove(); + printf("after buffer.remove()\n"); + done = true; + } + + bool isDone() const { return done; } + bool isDone( long usec ) const { + if ( start + SGTimeStamp::fromUSec(usec) < SGTimeStamp::now() ) { + return true; + } else { + return done; + } + } +}; + FGExternalNet::FGExternalNet( double dt, string host, int dop, int dip, int cp ) { // set_delta_t( dt ); diff --git a/src/FDM/ExternalNet/ExternalNet.hxx b/src/FDM/ExternalNet/ExternalNet.hxx index 92d76a322..a3f80891a 100644 --- a/src/FDM/ExternalNet/ExternalNet.hxx +++ b/src/FDM/ExternalNet/ExternalNet.hxx @@ -23,59 +23,14 @@ #ifndef _EXTERNAL_NET_HXX #define _EXTERNAL_NET_HXX -#include <plib/netBuffer.h> -#include <plib/netSocket.h> - #include <simgear/timing/timestamp.hxx> // fine grained timing measurements +#include <simgear/io/raw_socket.hxx> #include <Network/net_ctrls.hxx> #include <Network/net_fdm.hxx> #include <FDM/flight.hxx> -class HTTPClient : public netBufferChannel -{ - - bool done; - SGTimeStamp start; - -public: - - HTTPClient ( const char* host, int port, const char* path ) : - done( false ) - { - open (); - connect (host, port); - - const char* s = netFormat ( "GET %s HTTP/1.0\r\n\r\n", path ); - bufferSend( s, strlen(s) ) ; - - start.stamp(); - } - - virtual void handleBufferRead (netBuffer& buffer) - { - const char* s = buffer.getData(); - while (*s) - fputc(*s++,stdout); - - printf("done\n"); - buffer.remove(); - printf("after buffer.remove()\n"); - done = true; - } - - bool isDone() const { return done; } - bool isDone( long usec ) const { - if ( start + SGTimeStamp::fromUSec(usec) < SGTimeStamp::now() ) { - return true; - } else { - return done; - } - } -}; - - class FGExternalNet: public FGInterface { private: @@ -85,8 +40,8 @@ private: int cmd_port; string fdm_host; - netSocket data_client; - netSocket data_server; + simgear::Socket data_client; + simgear::Socket data_server; bool valid; diff --git a/src/Main/Makefile.am b/src/Main/Makefile.am index bafc88324..b7d7ed87c 100644 --- a/src/Main/Makefile.am +++ b/src/Main/Makefile.am @@ -24,11 +24,9 @@ endif if HAVE_FRAMEWORK_PLIB fgfs_PLIB_FW = $(plib_FRAMEWORK) -metar_PLIB_FW = $(plib_FRAMEWORK) else -fgfs_PLIB_LIBS = -lplibpuaux -lplibpu -lplibfnt -lplibjs -lplibnet \ +fgfs_PLIB_LIBS = -lplibpuaux -lplibpu -lplibfnt -lplibjs \ -lplibsg -lplibul -metar_PLIB_LIBS = -lplibnet -lplibul endif if HAVE_FRAMEWORK_OSG @@ -133,9 +131,8 @@ metar_SOURCES = metar_main.cxx metar_LDADD = \ -lsgenvironment -lsgio -lsgbucket -lsgmisc -lsgstructure -lsgdebug \ - $(metar_PLIB_LIBS) $(network_LIBS) \ + $(network_LIBS) \ -lz $(base_LIBS) -metar_LDFLAGS = $(metar_PLIB_FW) INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 8849644b3..fc28ce963 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -48,6 +48,7 @@ #include <simgear/props/props.hxx> #include <simgear/timing/sg_time.hxx> #include <simgear/math/sg_random.h> +#include <simgear/io/raw_socket.hxx> #include <Time/light.hxx> #include <Aircraft/replay.hxx> @@ -588,8 +589,8 @@ int fgMainInit( int argc, char **argv ) { fgRegisterIdleHandler( &fgIdleFunction ); fgRegisterDrawHandler( &FGRenderer::update ); - // Initialize plib net interface - netInit( &argc, argv ); + // Initialize sockets (WinSock needs this) + simgear::Socket::initSockets(); // Clouds3D requires an alpha channel fgOSOpenWindow(true /* request stencil buffer */); diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx index 317d2df41..27c455c25 100644 --- a/src/MultiPlayer/multiplaymgr.cxx +++ b/src/MultiPlayer/multiplaymgr.cxx @@ -35,7 +35,6 @@ #include <algorithm> #include <cstring> #include <osg/Math> // isNaN -#include <plib/netSocket.h> #include <simgear/misc/stdint.hxx> #include <simgear/timing/timestamp.hxx> @@ -411,7 +410,7 @@ FGMultiplayMgr::init (void) SG_LOG(SG_NETWORK,SG_INFO,"FGMultiplayMgr::init-callsign= "<<mCallsign); Close(); // Should Init be called twice, close Socket first // A memory leak was reported here by valgrind - mSocket = new netSocket(); + mSocket = new simgear::Socket(); if (!mSocket->open(false)) { SG_LOG( SG_NETWORK, SG_DEBUG, "FGMultiplayMgr::init - Failed to create data socket" ); @@ -731,7 +730,7 @@ FGMultiplayMgr::update(double) // returned will only be that of the next // packet waiting to be processed. ////////////////////////////////////////////////// - netAddress SenderAddress; + simgear::IPAddress SenderAddress; bytes = mSocket->recvfrom(msgBuf.Msg, sizeof(msgBuf.Msg), 0, &SenderAddress); ////////////////////////////////////////////////// @@ -815,7 +814,7 @@ FGMultiplayMgr::update(double) ////////////////////////////////////////////////////////////////////// void FGMultiplayMgr::ProcessPosMsg(const FGMultiplayMgr::MsgBuf& Msg, - const netAddress& SenderAddress, long stamp) + const simgear::IPAddress& SenderAddress, long stamp) { const T_MsgHdr* MsgHdr = Msg.msgHdr(); if (MsgHdr->MsgLen < sizeof(T_MsgHdr) + sizeof(T_PositionMsg)) { @@ -965,7 +964,7 @@ FGMultiplayMgr::ProcessPosMsg(const FGMultiplayMgr::MsgBuf& Msg, ////////////////////////////////////////////////////////////////////// void FGMultiplayMgr::ProcessChatMsg(const MsgBuf& Msg, - const netAddress& SenderAddress) + const simgear::IPAddress& SenderAddress) { const T_MsgHdr* MsgHdr = Msg.msgHdr(); if (MsgHdr->MsgLen < sizeof(T_MsgHdr) + 1) { diff --git a/src/MultiPlayer/multiplaymgr.hxx b/src/MultiPlayer/multiplaymgr.hxx index b2417f8dd..5a08e1aab 100644 --- a/src/MultiPlayer/multiplaymgr.hxx +++ b/src/MultiPlayer/multiplaymgr.hxx @@ -38,8 +38,8 @@ #include <simgear/compiler.h> #include <simgear/props/props.hxx> -#include <plib/netSocket.h> #include <Main/globals.hxx> +#include <simgear/io/raw_socket.hxx> #include <simgear/structure/subsystem_mgr.hxx> #include <AIModel/AIMultiplayer.hxx> @@ -78,16 +78,16 @@ private: const std::string& modelName); FGAIMultiplayer* getMultiplayer(const std::string& callsign); void FillMsgHdr(T_MsgHdr *MsgHdr, int iMsgId, unsigned _len = 0u); - void ProcessPosMsg(const MsgBuf& Msg, const netAddress& SenderAddress, + void ProcessPosMsg(const MsgBuf& Msg, const simgear::IPAddress& SenderAddress, long stamp); - void ProcessChatMsg(const MsgBuf& Msg, const netAddress& SenderAddress); + void ProcessChatMsg(const MsgBuf& Msg, const simgear::IPAddress& SenderAddress); /// maps from the callsign string to the FGAIMultiplayer typedef std::map<std::string, SGSharedPtr<FGAIMultiplayer> > MultiPlayerMap; MultiPlayerMap mMultiPlayerMap; - netSocket* mSocket; - netAddress mServer; + simgear::Socket* mSocket; + simgear::IPAddress mServer; bool mHaveServer; bool mInitialised; std::string mCallsign; diff --git a/src/MultiPlayer/tiny_xdr.cxx b/src/MultiPlayer/tiny_xdr.cxx index b0c57d3a7..e8f292141 100644 --- a/src/MultiPlayer/tiny_xdr.cxx +++ b/src/MultiPlayer/tiny_xdr.cxx @@ -13,9 +13,6 @@ #include <string> -#include <plib/ul.h> -#include <plib/netSocket.h> - #include "tiny_xdr.hxx" /* XDR 8bit integers */ diff --git a/src/Network/ATC-Main.hxx b/src/Network/ATC-Main.hxx index f72bd8da5..b6adc73ef 100644 --- a/src/Network/ATC-Main.hxx +++ b/src/Network/ATC-Main.hxx @@ -28,8 +28,6 @@ # include <config.h> #endif -#include <plib/netChat.h> - #include <simgear/misc/sg_path.hxx> #include <Main/fg_props.hxx> diff --git a/src/Network/httpd.cxx b/src/Network/httpd.cxx index 7adc4214d..e2e6a918f 100644 --- a/src/Network/httpd.cxx +++ b/src/Network/httpd.cxx @@ -66,7 +66,7 @@ bool FGHttpd::open() { bool FGHttpd::process() { - netChannel::poll(); + simgear::NetChannel::poll(); return true; } diff --git a/src/Network/httpd.hxx b/src/Network/httpd.hxx index 487ddd3f2..580097ffb 100644 --- a/src/Network/httpd.hxx +++ b/src/Network/httpd.hxx @@ -32,7 +32,7 @@ # include <config.h> #endif -#include <plib/netChat.h> +#include <simgear/io/sg_netChat.hxx> #include "protocol.hxx" @@ -40,10 +40,10 @@ /* simple httpd server that makes an hasty stab at following the http 1.1 rfc. */ -class HttpdChannel : public netChat +class HttpdChannel : public simgear::NetChat { - netBuffer buffer ; + simgear::NetBuffer buffer ; string urlEncode(string); string urlDecode(string); @@ -61,12 +61,12 @@ public: } ; -class HttpdServer : private netChannel +class HttpdServer : private simgear::NetChannel { virtual bool writable (void) { return false ; } virtual void handleAccept (void) { - netAddress addr ; + simgear::IPAddress addr ; int handle = accept ( &addr ) ; SG_LOG( SG_IO, SG_INFO, "Client " << addr.getHost() << ":" << addr.getPort() << " connected" ); diff --git a/src/Network/jpg-httpd.cxx b/src/Network/jpg-httpd.cxx index abf2911e3..ba5e5e3c2 100644 --- a/src/Network/jpg-httpd.cxx +++ b/src/Network/jpg-httpd.cxx @@ -75,7 +75,7 @@ bool FGJpegHttpd::open() { bool FGJpegHttpd::process() { - netChannel::poll(); + simgear::NetChannel::poll(); return true; } diff --git a/src/Network/jpg-httpd.hxx b/src/Network/jpg-httpd.hxx index 1628dff7b..e4fde9e9b 100644 --- a/src/Network/jpg-httpd.hxx +++ b/src/Network/jpg-httpd.hxx @@ -32,7 +32,7 @@ # include <config.h> #endif -#include <plib/netChat.h> +#include <simgear/io/sg_netChat.hxx> #ifdef FG_JPEG_SERVER # include <simgear/screen/jpgfactory.hxx> @@ -57,10 +57,10 @@ class trJpgFactory; /* simple httpd server that makes an hasty stab at following the http 1.1 rfc. */ -class HttpdImageChannel : public netChat +class HttpdImageChannel : public simgear::NetChat { - netBuffer buffer ; + simgear::NetBuffer buffer ; trJpgFactory *JpgFactory; public: @@ -89,12 +89,12 @@ public: }; -class HttpdImageServer : private netChannel +class HttpdImageServer : private simgear::NetChannel { virtual bool writable (void) { return false ; } virtual void handleAccept (void) { - netAddress addr ; + simgear::IPAddress addr ; int handle = accept ( &addr ) ; SG_LOG( SG_IO, SG_INFO, "Client " << addr.getHost() << ":" << addr.getPort() << " connected" ); diff --git a/src/Network/props.cxx b/src/Network/props.cxx index e6760eaff..5b9eb7a1a 100644 --- a/src/Network/props.cxx +++ b/src/Network/props.cxx @@ -40,7 +40,7 @@ #include <Main/globals.hxx> #include <Main/viewmgr.hxx> -#include <plib/netChat.h> +#include <simgear/io/sg_netChat.hxx> #include "props.hxx" @@ -54,9 +54,9 @@ using std::endl; * Props connection class. * This class represents a connection to props client. */ -class PropsChannel : public netChat +class PropsChannel : public simgear::NetChat { - netBuffer buffer; + simgear::NetBuffer buffer; /** * Current property node name. @@ -471,9 +471,9 @@ FGProps::open() return false; } - netChannel::open(); - netChannel::bind( "", port ); - netChannel::listen( 5 ); + simgear::NetChannel::open(); + simgear::NetChannel::bind( "", port ); + simgear::NetChannel::listen( 5 ); SG_LOG( SG_IO, SG_INFO, "Props server started on port " << port ); set_enabled( true ); @@ -496,7 +496,7 @@ FGProps::close() bool FGProps::process() { - netChannel::poll(); + simgear::NetChannel::poll(); return true; } @@ -506,7 +506,7 @@ FGProps::process() void FGProps::handleAccept() { - netAddress addr; + simgear::IPAddress addr; int handle = accept( &addr ); SG_LOG( SG_IO, SG_INFO, "Props server accepted connection from " << addr.getHost() << ":" << addr.getPort() ); diff --git a/src/Network/props.hxx b/src/Network/props.hxx index bb661aed1..e55f7c133 100644 --- a/src/Network/props.hxx +++ b/src/Network/props.hxx @@ -30,10 +30,7 @@ #include <string> #include <vector> -using std::string; -using std::vector; - -#include <plib/netChannel.h> +#include <simgear/io/sg_netChannel.hxx> #include "protocol.hxx" @@ -43,7 +40,7 @@ using std::vector; * FlightGear properties. */ class FGProps : public FGProtocol, - public netChannel + public simgear::NetChannel { private: @@ -58,7 +55,7 @@ public: * * @param tokens Tokenized configuration parameters */ - FGProps( const vector<string>& tokens ); + FGProps( const std::vector<std::string>& tokens ); /** * Destructor. diff --git a/utils/TerraSync/Makefile.am b/utils/TerraSync/Makefile.am index 0b71b9ea4..7106cc72f 100644 --- a/utils/TerraSync/Makefile.am +++ b/utils/TerraSync/Makefile.am @@ -6,10 +6,4 @@ terrasync_SOURCES = terrasync.cxx AM_CPPFLAGS = $(svn_CPPFLAGS) -if HAVE_FRAMEWORK_PLIB -terrasync_LDFLAGS = $(plib_FRAMEWORK) -else -terrasync_PLIB_LIBS = -lplibnet -lplibul -endif - -terrasync_LDADD = $(terrasync_PLIB_LIBS) -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS) +terrasync_LDADD = -lsgio -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS) diff --git a/utils/TerraSync/terrasync.cxx b/utils/TerraSync/terrasync.cxx index c8138e708..0628e2aef 100644 --- a/utils/TerraSync/terrasync.cxx +++ b/utils/TerraSync/terrasync.cxx @@ -47,9 +47,7 @@ #include <deque> #include <map> -#include <plib/netSocket.h> -#include <plib/ul.h> - +#include <simgear/io/raw_socket.hxx> #include <simgear/bucket/newbucket.hxx> #include <simgear/misc/sg_path.hxx> @@ -115,7 +113,7 @@ static void usage( const string& prog ) { deque<string> waitingTiles; typedef map<string,time_t> CompletedTiles; CompletedTiles completedTiles; -netSocket theSocket; +simgear::Socket theSocket; #ifdef HAVE_SVN_CLIENT_H @@ -513,7 +511,7 @@ int main( int argc, char **argv ) { } // Must call this before any other net stuff - netInit( &argc,argv ); + simgear::Socket::initSockets(); if ( ! theSocket.open( false ) ) { // open a UDP socket printf("error opening socket\n"); @@ -624,7 +622,11 @@ int main( int argc, char **argv ) { terminating = true; } else - ulSleep( 1 ); + #ifdef _WIN32 + Sleep(1000); +#else + sleep(1); +#endif } // while !terminating return 0; From 7ccba95b9c2fd4a6b2e4491dee26c951f748ce82 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sun, 24 Oct 2010 01:09:06 +0100 Subject: [PATCH 33/45] Remove direct uses of PLIB ulXXX functions --- src/Airports/dynamics.cxx | 2 - src/GUI/new_gui.cxx | 88 ++++++++------------------ src/GUI/new_gui.hxx | 2 +- src/Input/FGCommonInput.hxx | 1 - src/Input/FGDeviceConfigurationMap.cxx | 38 +++++------ src/Input/FGDeviceConfigurationMap.hxx | 5 +- src/Network/ATC-Main.cxx | 4 +- src/Traffic/TrafficMgr.cxx | 46 ++++---------- 8 files changed, 62 insertions(+), 124 deletions(-) diff --git a/src/Airports/dynamics.cxx b/src/Airports/dynamics.cxx index f5ebd05d1..11cb454b9 100644 --- a/src/Airports/dynamics.cxx +++ b/src/Airports/dynamics.cxx @@ -26,8 +26,6 @@ #include <simgear/compiler.h> -#include <plib/ul.h> - #include <Environment/environment_mgr.hxx> #include <Environment/environment.hxx> #include <simgear/misc/sg_path.hxx> diff --git a/src/GUI/new_gui.cxx b/src/GUI/new_gui.cxx index 034484e27..0e6346f0c 100644 --- a/src/GUI/new_gui.cxx +++ b/src/GUI/new_gui.cxx @@ -10,14 +10,13 @@ #include <iostream> #include <cstring> #include <sys/types.h> -#include <plib/ul.h> #include <plib/pu.h> -#include <plib/ul.h> #include <simgear/compiler.h> #include <simgear/structure/exception.hxx> #include <simgear/props/props_io.hxx> +#include <simgear/misc/sg_dir.hxx> #include <boost/algorithm/string/case_conv.hpp> @@ -56,11 +55,8 @@ void NewGUI::init () { setStyle(); - char path1[1024]; - char path2[1024]; - ulMakePath(path1, globals->get_fg_root().c_str(), "gui"); - ulMakePath(path2, path1, "dialogs"); - readDir(path2); + SGPath p(globals->get_fg_root(), "gui/dialogs"); + readDir(p); _menubar->init(); } @@ -233,19 +229,6 @@ NewGUI::setMenuBarVisible (bool visible) _menubar->hide(); } -static bool -test_extension (const char * path, const char * ext) -{ - int pathlen = strlen(path); - int extlen = strlen(ext); - - for (int i = 1; i <= pathlen && i <= extlen; i++) { - if (path[pathlen-i] != ext[extlen-i]) - return false; - } - return true; -} - void NewGUI::newDialog (SGPropertyNode* props) { @@ -260,49 +243,34 @@ NewGUI::newDialog (SGPropertyNode* props) } void -NewGUI::readDir (const char * path) +NewGUI::readDir (const SGPath& path) { - ulDir * dir = ulOpenDir(path); + simgear::Dir dir(path); + simgear::PathList xmls = dir.children(simgear::Dir::TYPE_FILE, ".xml"); + + for (unsigned int i=0; i<xmls.size(); ++i) { + SGPropertyNode * props = new SGPropertyNode; + try { + readProperties(xmls[i].str(), props); + } catch (const sg_exception &) { + SG_LOG(SG_INPUT, SG_ALERT, "Error parsing dialog " + << xmls[i].str()); + delete props; + continue; + } + SGPropertyNode *nameprop = props->getNode("name"); + if (!nameprop) { + SG_LOG(SG_INPUT, SG_WARN, "dialog " << xmls[i].str() + << " has no name; skipping."); + delete props; + continue; + } + string name = nameprop->getStringValue(); + if (_dialog_props[name]) + delete (SGPropertyNode *)_dialog_props[name]; - if (dir == 0) { - SG_LOG(SG_GENERAL, SG_ALERT, "Failed to read GUI files from " - << path); - return; + _dialog_props[name] = props; } - - for (ulDirEnt * dirEnt = ulReadDir(dir); - dirEnt != 0; - dirEnt = ulReadDir(dir)) { - - char subpath[1024]; - - ulMakePath(subpath, path, dirEnt->d_name); - - if (!dirEnt->d_isdir && test_extension(subpath, ".xml")) { - SGPropertyNode * props = new SGPropertyNode; - try { - readProperties(subpath, props); - } catch (const sg_exception &) { - SG_LOG(SG_INPUT, SG_ALERT, "Error parsing dialog " - << subpath); - delete props; - continue; - } - SGPropertyNode *nameprop = props->getNode("name"); - if (!nameprop) { - SG_LOG(SG_INPUT, SG_WARN, "dialog " << subpath - << " has no name; skipping."); - delete props; - continue; - } - string name = nameprop->getStringValue(); - if (_dialog_props[name]) - delete (SGPropertyNode *)_dialog_props[name]; - - _dialog_props[name] = props; - } - } - ulCloseDir(dir); } diff --git a/src/GUI/new_gui.hxx b/src/GUI/new_gui.hxx index 5932512fd..0797d53a6 100644 --- a/src/GUI/new_gui.hxx +++ b/src/GUI/new_gui.hxx @@ -219,7 +219,7 @@ private: void clear_colors(); // Read all the configuration files in a directory. - void readDir (const char * path); + void readDir (const SGPath& path); FGMenuBar * _menubar; FGDialog * _active_dialog; diff --git a/src/Input/FGCommonInput.hxx b/src/Input/FGCommonInput.hxx index 046ce8264..558510021 100644 --- a/src/Input/FGCommonInput.hxx +++ b/src/Input/FGCommonInput.hxx @@ -27,7 +27,6 @@ #include <vector> #include <simgear/structure/SGBinding.hxx> -#include <plib/ul.h> #if defined( UL_WIN32 ) #define TGT_PLATFORM "windows" diff --git a/src/Input/FGDeviceConfigurationMap.cxx b/src/Input/FGDeviceConfigurationMap.cxx index 5ad2a0bd7..b8ce13505 100644 --- a/src/Input/FGDeviceConfigurationMap.cxx +++ b/src/Input/FGDeviceConfigurationMap.cxx @@ -30,8 +30,7 @@ #include "FGDeviceConfigurationMap.hxx" -#include <plib/ul.h> - +#include <simgear/misc/sg_dir.hxx> #include <simgear/props/props_io.hxx> #include <Main/globals.hxx> @@ -41,11 +40,8 @@ FGDeviceConfigurationMap::FGDeviceConfigurationMap( const char * relative_path, base(aBase), childname(aChildname) { - SGPath path(globals->get_fg_root()); - path.append( relative_path ); - int index = 1000; - scan_dir( path, &index); + scan_dir( SGPath(globals->get_fg_root(), relative_path), &index); PropertyList childNodes = base->getChildren(childname); for (int k = (int)childNodes.size() - 1; k >= 0; k--) { @@ -62,26 +58,22 @@ FGDeviceConfigurationMap::~FGDeviceConfigurationMap() base->removeChildren( childname ); } -void FGDeviceConfigurationMap::scan_dir( SGPath & path, int *index) +void FGDeviceConfigurationMap::scan_dir(const SGPath & path, int *index) { - ulDir *dir = ulOpenDir(path.c_str()); - if (dir) { - ulDirEnt* dent; - while ((dent = ulReadDir(dir)) != 0) { - if (dent->d_name[0] == '.') - continue; + simgear::Dir dir(path); + simgear::PathList children = dir.children(simgear::Dir::TYPE_FILE | + simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT); - SGPath p(path.str()); - p.append(dent->d_name); - scan_dir(p, index); + for (unsigned int c=0; c<children.size(); ++c) { + SGPath path(children[c]); + if (path.isDir()) { + scan_dir(path, index); + } else if (path.extension() == "xml") { + SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str()); + SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true); + readProperties(path.str(), n); + n->setStringValue("source", path.c_str()); } - ulCloseDir(dir); - - } else if (path.extension() == "xml") { - SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str()); - SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true); - readProperties(path.str(), n); - n->setStringValue("source", path.c_str()); } } diff --git a/src/Input/FGDeviceConfigurationMap.hxx b/src/Input/FGDeviceConfigurationMap.hxx index e89addc96..6a6aceae3 100644 --- a/src/Input/FGDeviceConfigurationMap.hxx +++ b/src/Input/FGDeviceConfigurationMap.hxx @@ -30,16 +30,17 @@ #endif #include <simgear/props/props.hxx> -#include <simgear/misc/sg_path.hxx> #include <map> +class SGPath; + class FGDeviceConfigurationMap : public std::map<std::string,SGPropertyNode_ptr> { public: FGDeviceConfigurationMap ( const char * relative_path, SGPropertyNode_ptr base, const char * childname ); virtual ~FGDeviceConfigurationMap(); private: - void scan_dir( SGPath & path, int *index); + void scan_dir(const SGPath & path, int *index); SGPropertyNode_ptr base; const char * childname; }; diff --git a/src/Network/ATC-Main.cxx b/src/Network/ATC-Main.cxx index b70b4abf3..bdaf70936 100644 --- a/src/Network/ATC-Main.cxx +++ b/src/Network/ATC-Main.cxx @@ -31,6 +31,8 @@ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> +#include <errno.h> + #include <stdio.h> //snprintf #ifdef _WIN32 # include <io.h> //lseek, read, write @@ -38,8 +40,6 @@ #include <string> -#include <plib/ul.h> - #include <simgear/debug/logstream.hxx> #include <simgear/props/props_io.hxx> #include <simgear/io/iochannel.hxx> diff --git a/src/Traffic/TrafficMgr.cxx b/src/Traffic/TrafficMgr.cxx index 615bb6c8c..d9fcb6fff 100644 --- a/src/Traffic/TrafficMgr.cxx +++ b/src/Traffic/TrafficMgr.cxx @@ -51,10 +51,9 @@ #include <vector> #include <algorithm> -#include <plib/ul.h> - #include <simgear/compiler.h> #include <simgear/misc/sg_path.hxx> +#include <simgear/misc/sg_dir.hxx> #include <simgear/props/props.hxx> #include <simgear/route/waypoint.hxx> #include <simgear/structure/subsystem_mgr.hxx> @@ -126,41 +125,22 @@ FGTrafficManager::~FGTrafficManager() void FGTrafficManager::init() { - ulDir *d, *d2; - ulDirEnt *dent, *dent2; - heuristicsVector heuristics; HeuristicMap heurMap; if (string(fgGetString("/sim/traffic-manager/datafile")) == string("")) { - SGPath aircraftDir = globals->get_fg_root(); - SGPath path = aircraftDir; - - aircraftDir.append("AI/Traffic"); - if ((d = ulOpenDir(aircraftDir.c_str())) != NULL) { - while ((dent = ulReadDir(d)) != NULL) { - if (string(dent->d_name) != string(".") && - string(dent->d_name) != string("..") && dent->d_isdir) { - SGPath currACDir = aircraftDir; - currACDir.append(dent->d_name); - if ((d2 = ulOpenDir(currACDir.c_str())) == NULL) - return; - while ((dent2 = ulReadDir(d2)) != NULL) { - SGPath currFile = currACDir; - currFile.append(dent2->d_name); - if (currFile.extension() == string("xml")) { - SGPath currFile = currACDir; - currFile.append(dent2->d_name); - SG_LOG(SG_GENERAL, SG_DEBUG, - "Scanning " << currFile. - str() << " for traffic"); - readXML(currFile.str(), *this); - } - } - ulCloseDir(d2); - } - } - ulCloseDir(d); + simgear::Dir trafficDir(SGPath(globals->get_fg_root(), "AI/Traffic")); + simgear::PathList d = trafficDir.children(simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT); + + for (unsigned int i=0; i<d.size(); ++i) { + simgear::Dir d2(d[i]); + simgear::PathList trafficFiles = d2.children(simgear::Dir::TYPE_FILE, ".xml"); + for (unsigned int j=0; j<trafficFiles.size(); ++j) { + SGPath curFile = trafficFiles[j]; + SG_LOG(SG_GENERAL, SG_DEBUG, + "Scanning " << curFile.str() << " for traffic"); + readXML(curFile.str(), *this); + } } } else { fgSetBool("/sim/traffic-manager/heuristics", false); From db4b84bc5c72025021eb4139148919ac55df3687 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sun, 24 Oct 2010 07:09:05 +0100 Subject: [PATCH 34/45] Convert nasal directory() helper to use simgear::Dir --- src/Scripting/NasalSys.cxx | 39 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/Scripting/NasalSys.cxx b/src/Scripting/NasalSys.cxx index 17fdb67d5..72c964c04 100644 --- a/src/Scripting/NasalSys.cxx +++ b/src/Scripting/NasalSys.cxx @@ -14,12 +14,11 @@ #include <fstream> #include <sstream> -#include <plib/ul.h> - #include <simgear/nasal/nasal.h> #include <simgear/props/props.hxx> #include <simgear/math/sg_random.h> #include <simgear/misc/sg_path.hxx> +#include <simgear/misc/sg_dir.hxx> #include <simgear/misc/interpolator.hxx> #include <simgear/scene/material/mat.hxx> #include <simgear/structure/commands.hxx> @@ -364,15 +363,17 @@ static naRef f_directory(naContext c, naRef me, int argc, naRef* args) { if(argc != 1 || !naIsString(args[0])) naRuntimeError(c, "bad arguments to directory()"); - naRef ldir = args[0]; - ulDir* dir = ulOpenDir(naStr_data(args[0])); - if(!dir) return naNil(); + + simgear::Dir d(SGPath(naStr_data(args[0]))); + if(!d.exists()) return naNil(); naRef result = naNewVector(c); - ulDirEnt* dent; - while((dent = ulReadDir(dir))) - naVec_append(result, naStr_fromdata(naNewString(c), dent->d_name, - strlen(dent->d_name))); - ulCloseDir(dir); + + simgear::PathList paths = d.children(simgear::Dir::TYPE_FILE | simgear::Dir::TYPE_DIR); + for (unsigned int i=0; i<paths.size(); ++i) { + std::string p = paths[i].file(); + naVec_append(result, naStr_fromdata(naNewString(c), p.c_str(), p.size())); + } + return result; } @@ -722,18 +723,14 @@ void FGNasalSys::init() hashset(_globals, "__gcsave", _gcHash); // Now load the various source files in the Nasal directory - SGPath p(globals->get_fg_root()); - p.append("Nasal"); - ulDirEnt* dent; - ulDir* dir = ulOpenDir(p.c_str()); - while(dir && (dent = ulReadDir(dir)) != 0) { - SGPath fullpath(p); - fullpath.append(dent->d_name); - SGPath file(dent->d_name); - if(file.extension() != "nas") continue; - loadModule(fullpath, file.base().c_str()); + simgear::Dir nasalDir(SGPath(globals->get_fg_root(), "Nasal")); + simgear::PathList scripts = nasalDir.children(simgear::Dir::TYPE_FILE, ".nas"); + + for (unsigned int i=0; i<scripts.size(); ++i) { + SGPath fullpath(scripts[i]); + SGPath file = fullpath.file(); + loadModule(fullpath, file.base().c_str()); } - ulCloseDir(dir); // set signal and remove node to avoid restoring at reinit const char *s = "nasal-dir-initialized"; From 987c1bdfda75029208fc84413c6e27d03835dd87 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Sun, 24 Oct 2010 11:04:14 +0100 Subject: [PATCH 35/45] Automake build fixes for PLIB net/ul removal. --- src/FDM/ExternalNet/ExternalNet.cxx | 2 ++ src/FDM/fdm_shell.cxx | 1 + src/Network/httpd.cxx | 4 ++-- src/Network/multiplay.cxx | 3 +-- utils/TerraSync/Makefile.am | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/FDM/ExternalNet/ExternalNet.cxx b/src/FDM/ExternalNet/ExternalNet.cxx index 7a3a14156..9d2f3e7b2 100644 --- a/src/FDM/ExternalNet/ExternalNet.cxx +++ b/src/FDM/ExternalNet/ExternalNet.cxx @@ -24,6 +24,8 @@ # include <config.h> #endif +#include <cstring> + #include <simgear/debug/logstream.hxx> #include <simgear/io/lowlevel.hxx> // endian tests #include <simgear/io/sg_netBuffer.hxx> diff --git a/src/FDM/fdm_shell.cxx b/src/FDM/fdm_shell.cxx index a4cfad309..aaf94a6e7 100644 --- a/src/FDM/fdm_shell.cxx +++ b/src/FDM/fdm_shell.cxx @@ -24,6 +24,7 @@ # include <config.h> #endif +#include <cassert> #include <simgear/structure/exception.hxx> #include <FDM/fdm_shell.hxx> diff --git a/src/Network/httpd.cxx b/src/Network/httpd.cxx index e2e6a918f..31d4b9337 100644 --- a/src/Network/httpd.cxx +++ b/src/Network/httpd.cxx @@ -32,8 +32,8 @@ #include <simgear/compiler.h> #include <algorithm> // sort() -#include <stdlib.h> // atoi() atof() - +#include <cstdlib> // atoi() atof() +#include <cstring> #include <string> #include <simgear/debug/logstream.hxx> diff --git a/src/Network/multiplay.cxx b/src/Network/multiplay.cxx index e7991e6b8..a9cd32bf3 100644 --- a/src/Network/multiplay.cxx +++ b/src/Network/multiplay.cxx @@ -28,8 +28,7 @@ #include <simgear/compiler.h> -#include <string> - +#include <cstring> #include <iostream> #include <map> #include <string> diff --git a/utils/TerraSync/Makefile.am b/utils/TerraSync/Makefile.am index 7106cc72f..3932be524 100644 --- a/utils/TerraSync/Makefile.am +++ b/utils/TerraSync/Makefile.am @@ -6,4 +6,4 @@ terrasync_SOURCES = terrasync.cxx AM_CPPFLAGS = $(svn_CPPFLAGS) -terrasync_LDADD = -lsgio -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS) +terrasync_LDADD = -lsgio -lsgstructure -lsgmisc -lsgdebug $(network_LIBS) $(svn_LIBS) From d7440d8fc529f6efaa03e65d886943543b0351cc Mon Sep 17 00:00:00 2001 From: Anders Gidenstam <anders@gidenstam.org> Date: Sun, 24 Oct 2010 15:21:26 +0200 Subject: [PATCH 36/45] src/Network/jpg-httpd.cxx: Include C++ C headers instead of plain C headers. --- src/Network/jpg-httpd.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Network/jpg-httpd.cxx b/src/Network/jpg-httpd.cxx index ba5e5e3c2..55e5e79c0 100644 --- a/src/Network/jpg-httpd.cxx +++ b/src/Network/jpg-httpd.cxx @@ -31,9 +31,9 @@ #include <simgear/compiler.h> -#include <stdlib.h> // atoi() atof() +#include <cstdlib> // atoi() atof() -#include <string> +#include <cstring> #include <simgear/debug/logstream.hxx> #include <simgear/io/iochannel.hxx> From d61e992d765f0b7c59c74e8cb0d6004d5f2e596d Mon Sep 17 00:00:00 2001 From: ThorstenB <brehmt@gmail.com> Date: Sun, 24 Oct 2010 21:36:15 +0200 Subject: [PATCH 37/45] Fix occasional start-up crash when reading GUI XMLs. _dialog_props holds SGSharedPtrs (pointers managed by reference counters). Explicitly casting the object to an unmanaged SGPropertyNode* and deleting it may cause heap corruption, since the following assignment "_dialog_props[..] = ..." also tries to delete the (already deleted) object. --- src/GUI/new_gui.cxx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/GUI/new_gui.cxx b/src/GUI/new_gui.cxx index 034484e27..51bc82fc9 100644 --- a/src/GUI/new_gui.cxx +++ b/src/GUI/new_gui.cxx @@ -296,9 +296,6 @@ NewGUI::readDir (const char * path) continue; } string name = nameprop->getStringValue(); - if (_dialog_props[name]) - delete (SGPropertyNode *)_dialog_props[name]; - _dialog_props[name] = props; } } From 657cd883d714ff7a6ee4974f6bb82b0812d480cc Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <Torsten@t3r.de> Date: Mon, 25 Oct 2010 14:48:56 +0200 Subject: [PATCH 38/45] Compile again, replace clib strXXX with std::string --- src/Input/FGEventInput.cxx | 10 +++++----- src/Input/FGLinuxEventInput.cxx | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Input/FGEventInput.cxx b/src/Input/FGEventInput.cxx index 31e6fc978..29ee0977c 100644 --- a/src/Input/FGEventInput.cxx +++ b/src/Input/FGEventInput.cxx @@ -66,7 +66,7 @@ bool FGEventSetting::Test() static inline bool StartsWith( string & s, const char * cp ) { - return s.compare( 0, strlen(cp), cp ) == 0; + return s.find( cp ) == 0; } FGInputEvent * FGInputEvent::NewObject( FGInputDevice * device, SGPropertyNode_ptr node ) @@ -223,8 +223,8 @@ FGInputDevice::~FGInputDevice() if( nasal ) { SGPropertyNode_ptr nasalClose = nasal->getNode("close"); if (nasalClose) { - const char *s = nasalClose->getStringValue(); - nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s, strlen(s), deviceNode ); + const string s = nasalClose->getStringValue(); + nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode ); } } nas->deleteModule(nasalModule.c_str()); @@ -253,10 +253,10 @@ void FGInputDevice::Configure( SGPropertyNode_ptr aDeviceNode ) if (nasal) { SGPropertyNode_ptr open = nasal->getNode("open"); if (open) { - const char *s = open->getStringValue(); + const string s = open->getStringValue(); FGNasalSys *nas = (FGNasalSys *)globals->get_subsystem("nasal"); if (nas) - nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s, strlen(s), deviceNode ); + nas->createModule(nasalModule.c_str(), nasalModule.c_str(), s.c_str(), s.length(), deviceNode ); } } diff --git a/src/Input/FGLinuxEventInput.cxx b/src/Input/FGLinuxEventInput.cxx index 183c7b3ab..621e15fd8 100644 --- a/src/Input/FGLinuxEventInput.cxx +++ b/src/Input/FGLinuxEventInput.cxx @@ -29,6 +29,8 @@ #include <poll.h> #include <linux/input.h> #include <dbus/dbus.h> +#include <fcntl.h> + struct TypeCode { unsigned type; @@ -238,7 +240,7 @@ static EventNameByType EVENT_NAME_BY_TYPE; struct ltstr { bool operator()(const char * s1, const char * s2 ) const { - return strcmp( s1, s2 ) < 0; + return string(s1).compare( s2 ) < 0; } }; From 25b333c07d3aaee4b375e2d091601f05a963c5b9 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier <fredfgfs01@free.fr> Date: Mon, 25 Oct 2010 23:16:37 +0200 Subject: [PATCH 39/45] Document changes to effect files syntax: adding mipmap-control --- docs-mini/README.effects | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs-mini/README.effects b/docs-mini/README.effects index c46d392c2..0e2814e7c 100644 --- a/docs-mini/README.effects +++ b/docs-mini/README.effects @@ -192,6 +192,15 @@ texture-unit - has several child properties: wrap-s wrap-t wrap-r + mipmap-control - controls how the mipmap levels are computed. + Each color channel can be computed with different functions + among average, sum, product, min and max. For example : + <function-r>average</function-r> + <function-a>min</function-a> + function-r - function for red + function-g - function for green + function-b - function for blue + function-a - function for alpha The following built-in types are supported: white - 1 pixel white texture noise - a 3d noise texture From 68f54290481701429a04cd33c06be2674fc2b3a4 Mon Sep 17 00:00:00 2001 From: Erik Hofman <erik@ehofman.com> Date: Tue, 26 Oct 2010 09:48:56 +0200 Subject: [PATCH 40/45] Sync with JSBSim cvs + Anders' patch to get it working with FlightGear. --- src/FDM/JSBSim/FGFDMExec.cpp | 69 ++++--- src/FDM/JSBSim/FGFDMExec.h | 52 ++--- src/FDM/JSBSim/FGState.cpp | 178 ------------------ src/FDM/JSBSim/FGState.h | 166 ---------------- src/FDM/JSBSim/JSBSim.cxx | 22 ++- src/FDM/JSBSim/JSBSim.hxx | 6 +- src/FDM/JSBSim/Makefile.am | 4 +- .../initialization/FGInitialCondition.cpp | 46 +++-- .../JSBSim/input_output/FGGroundCallback.cpp | 3 +- .../JSBSim/input_output/FGGroundCallback.h | 7 +- src/FDM/JSBSim/input_output/FGXMLElement.cpp | 9 +- src/FDM/JSBSim/input_output/FGXMLParse.cpp | 4 +- src/FDM/JSBSim/input_output/FGfdmSocket.h | 4 +- src/FDM/JSBSim/math/FGLocation.cpp | 12 +- src/FDM/JSBSim/math/FGQuaternion.h | 17 +- src/FDM/JSBSim/math/FGTable.cpp | 80 ++++++-- src/FDM/JSBSim/models/FGAerodynamics.cpp | 11 +- src/FDM/JSBSim/models/FGAuxiliary.cpp | 9 +- src/FDM/JSBSim/models/FGFCS.cpp | 4 +- src/FDM/JSBSim/models/FGFCS.h | 9 +- src/FDM/JSBSim/models/FGInertial.cpp | 5 +- src/FDM/JSBSim/models/FGLGear.cpp | 14 +- src/FDM/JSBSim/models/FGLGear.h | 5 +- src/FDM/JSBSim/models/FGModel.h | 4 +- src/FDM/JSBSim/models/FGOutput.cpp | 53 +++--- src/FDM/JSBSim/models/FGOutput.h | 20 +- src/FDM/JSBSim/models/FGPropagate.cpp | 59 +++++- src/FDM/JSBSim/models/FGPropagate.h | 35 ++-- src/FDM/JSBSim/models/FGPropulsion.cpp | 53 +++--- src/FDM/JSBSim/models/propulsion/FGEngine.cpp | 8 +- .../JSBSim/models/propulsion/FGPropeller.cpp | 28 +-- 31 files changed, 407 insertions(+), 589 deletions(-) delete mode 100644 src/FDM/JSBSim/FGState.cpp delete mode 100644 src/FDM/JSBSim/FGState.h diff --git a/src/FDM/JSBSim/FGFDMExec.cpp b/src/FDM/JSBSim/FGFDMExec.cpp index 4cba2d0f9..bc81cd6f8 100644 --- a/src/FDM/JSBSim/FGFDMExec.cpp +++ b/src/FDM/JSBSim/FGFDMExec.cpp @@ -71,16 +71,9 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.80 2010/08/21 22:56:10 jberndt Exp $"; +static const char *IdSrc = "$Id: FGFDMExec.cpp,v 1.82 2010/10/07 03:17:29 jberndt Exp $"; static const char *IdHdr = ID_FDMEXEC; -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -GLOBAL DECLARATIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -unsigned int FGFDMExec::FDMctr = 0; -FGPropertyManager* FGFDMExec::master=0; - /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ @@ -102,11 +95,21 @@ void checkTied ( FGPropertyManager *node ) } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// Constructor - +// Constructors FGFDMExec::FGFDMExec(FGPropertyManager* root) : Root(root) { + FDMctr = new unsigned int; + *FDMctr = 0; + Initialize(); +} +FGFDMExec::FGFDMExec(FGPropertyManager* root, unsigned int* fdmctr) : Root(root), FDMctr(fdmctr) +{ + Initialize(); +} + +void FGFDMExec::Initialize() +{ Frame = 0; Error = 0; GroundCallback = 0; @@ -138,22 +141,26 @@ FGFDMExec::FGFDMExec(FGPropertyManager* root) : Root(root) dT = 1.0/120.0; // a default timestep size. This is needed for when JSBSim is // run in standalone mode with no initialization file. - IdFDM = FDMctr; // The main (parent) JSBSim instance is always the "zeroth" - FDMctr++; // instance. "child" instances are loaded last. - try { char* num = getenv("JSBSIM_DEBUG"); if (num) debug_lvl = atoi(num); // set debug level - } catch (...) { // if error set to 1 + } catch (...) { // if error set to 1 debug_lvl = 1; } - if (Root == 0) { - if (master == 0) - master = new FGPropertyManager; - Root = master; + if (Root == 0) { // Then this is the root FDM + Root = new FGPropertyManager; // Create the property manager + + FDMctr = new unsigned int; // Create and initialize the child FDM counter + (*FDMctr) = 0; } + // Store this FDM's ID + IdFDM = (*FDMctr); // The main (parent) JSBSim instance is always the "zeroth" + + // Prepare FDMctr for the next child FDM id + (*FDMctr)++; // instance. "child" instances are loaded last. + instance = Root->GetNode("/fdm/jsbsim",IdFDM,true); Debug(0); // this is to catch errors in binding member functions to the property tree. @@ -186,7 +193,17 @@ FGFDMExec::~FGFDMExec() try { checkTied( instance ); DeAllocate(); - if (Root == 0) delete master; + + if (IdFDM == 0) { // Meaning this is no child FDM + if(Root != 0) { + delete Root; + Root = 0; + } + if(FDMctr != 0) { + delete FDMctr; + FDMctr = 0; + } + } } catch ( string msg ) { cout << "Caught error: " << msg << endl; } @@ -439,7 +456,7 @@ vector <string> FGFDMExec::EnumerateFDMs(void) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bool FGFDMExec::LoadScript(string script, double deltaT) +bool FGFDMExec::LoadScript(const string& script, double deltaT) { bool result; @@ -451,8 +468,8 @@ bool FGFDMExec::LoadScript(string script, double deltaT) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bool FGFDMExec::LoadModel(string AircraftPath, string EnginePath, string SystemsPath, - string model, bool addModelToPath) +bool FGFDMExec::LoadModel(const string& AircraftPath, const string& EnginePath, const string& SystemsPath, + const string& model, bool addModelToPath) { FGFDMExec::AircraftPath = RootDir + AircraftPath; FGFDMExec::EnginePath = RootDir + EnginePath; @@ -463,7 +480,7 @@ bool FGFDMExec::LoadModel(string AircraftPath, string EnginePath, string Systems //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bool FGFDMExec::LoadModel(string model, bool addModelToPath) +bool FGFDMExec::LoadModel(const string& model, bool addModelToPath) { string token; string aircraftCfgFileName; @@ -730,7 +747,7 @@ void FGFDMExec::BuildPropertyCatalog(struct PropertyCatalogStructure* pcs) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -string FGFDMExec::QueryPropertyCatalog(string in) +string FGFDMExec::QueryPropertyCatalog(const string& in) { string results=""; for (unsigned i=0; i<PropertyCatalog.size(); i++) { @@ -852,7 +869,7 @@ bool FGFDMExec::ReadChild(Element* el) struct childData* child = new childData; - child->exec = new FGFDMExec(); + child->exec = new FGFDMExec(Root, FDMctr); child->exec->SetChild(true); string childAircraft = el->GetAttributeValue("name"); @@ -922,7 +939,7 @@ void FGFDMExec::EnableOutput(void) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -bool FGFDMExec::SetOutputDirectives(string fname) +bool FGFDMExec::SetOutputDirectives(const string& fname) { bool result; diff --git a/src/FDM/JSBSim/FGFDMExec.h b/src/FDM/JSBSim/FGFDMExec.h index 8c91cb2c9..231cadcaa 100644 --- a/src/FDM/JSBSim/FGFDMExec.h +++ b/src/FDM/JSBSim/FGFDMExec.h @@ -60,7 +60,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.52 2010/07/04 13:50:21 jberndt Exp $" +#define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.54 2010/10/07 03:17:29 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -169,7 +169,7 @@ CLASS DOCUMENTATION property actually maps toa function call of DoTrim(). @author Jon S. Berndt - @version $Revision: 1.52 $ + @version $Revision: 1.54 $ */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -206,8 +206,9 @@ class FGFDMExec : public FGJSBBase, public FGXMLFileRead public: - /// Default constructor + /// Default constructors FGFDMExec(FGPropertyManager* root = 0); + FGFDMExec(FGPropertyManager* root, unsigned int* fdmctr); /// Default destructor ~FGFDMExec(); @@ -252,8 +253,8 @@ public: @param addModelToPath set to true to add the model name to the AircraftPath, defaults to true @return true if successful */ - bool LoadModel(string AircraftPath, string EnginePath, string SystemsPath, - string model, bool addModelToPath = true); + bool LoadModel(const string& AircraftPath, const string& EnginePath, const string& SystemsPath, + const string& model, bool addModelToPath = true); /** Loads an aircraft model. The paths to the aircraft and engine config file directories must be set prior to calling this. See @@ -265,28 +266,28 @@ public: @param addModelToPath set to true to add the model name to the AircraftPath, defaults to true @return true if successful*/ - bool LoadModel(string model, bool addModelToPath = true); + bool LoadModel(const string& model, bool addModelToPath = true); /** Loads a script @param Script the full path name and file name for the script to be loaded. @return true if successfully loadsd; false otherwise. */ - bool LoadScript(string Script, double deltaT); + bool LoadScript(const string& Script, double deltaT); /** Sets the path to the engine config file directories. @param path path to the directory under which engine config files are kept, for instance "engine" */ - bool SetEnginePath(string path) { EnginePath = RootDir + path; return true; } + bool SetEnginePath(const string& path) { EnginePath = RootDir + path; return true; } /** Sets the path to the aircraft config file directories. @param path path to the aircraft directory. For instance: "aircraft". Under aircraft, then, would be directories for various modeled aircraft such as C172/, x15/, etc. */ - bool SetAircraftPath(string path) { AircraftPath = RootDir + path; return true; } + bool SetAircraftPath(const string& path) { AircraftPath = RootDir + path; return true; } /** Sets the path to the systems config file directories. @param path path to the directory under which systems config files are kept, for instance "systems" */ - bool SetSystemsPath(string path) { SystemsPath = RootDir + path; return true; } + bool SetSystemsPath(const string& path) { SystemsPath = RootDir + path; return true; } /// @name Top-level executive State and Model retrieval mechanism //@{ @@ -327,28 +328,28 @@ public: //@} /// Retrieves the engine path. - inline string GetEnginePath(void) {return EnginePath;} + inline const string& GetEnginePath(void) {return EnginePath;} /// Retrieves the aircraft path. - inline string GetAircraftPath(void) {return AircraftPath;} + inline const string& GetAircraftPath(void) {return AircraftPath;} /// Retrieves the systems path. - inline string GetSystemsPath(void) {return SystemsPath;} + inline const string& GetSystemsPath(void) {return SystemsPath;} /// Retrieves the full aircraft path name. - inline string GetFullAircraftPath(void) {return FullAircraftPath;} + inline const string& GetFullAircraftPath(void) {return FullAircraftPath;} /** Retrieves the value of a property. @param property the name of the property @result the value of the specified property */ - inline double GetPropertyValue(string property) {return instance->GetDouble(property);} + inline double GetPropertyValue(const string& property) {return instance->GetDouble(property);} /** Sets a property value. @param property the property to be set @param value the value to set the property to */ - inline void SetPropertyValue(string property, double value) { + inline void SetPropertyValue(const string& property, double value) { instance->SetDouble(property, value); } /// Returns the model name. - string GetModelName(void) { return modelName; } + const string& GetModelName(void) { return modelName; } /* /// Returns the current time. double GetSimTime(void); @@ -382,12 +383,12 @@ public: be logged. @param fname the filename of an output directives file. */ - bool SetOutputDirectives(string fname); + bool SetOutputDirectives(const string& fname); /** Sets (or overrides) the output filename @param fname the name of the file to output data to @return true if successful, false if there is no output specified for the flight model */ - bool SetOutputFileName(string fname) { + bool SetOutputFileName(const string& fname) { if (Outputs.size() > 0) Outputs[0]->SetOutputFileName(fname); else return false; return true; @@ -447,7 +448,7 @@ public: * @param check The string to search for in the property catalog. * @return the carriage-return-delimited string containing all matching strings * in the catalog. */ - string QueryPropertyCatalog(string check); + string QueryPropertyCatalog(const string& check); // Print the contents of the property catalog for the loaded aircraft. void PrintPropertyCatalog(void); @@ -495,11 +496,11 @@ public: /** Sets the root directory where JSBSim starts looking for its system directories. @param rootDir the string containing the root directory. */ - void SetRootDir(string rootDir) {RootDir = rootDir;} + void SetRootDir(const string& rootDir) {RootDir = rootDir;} /** Retrieves teh Root Directory. @return the string representing the root (base) JSBSim directory. */ - string GetRootDir(void) const {return RootDir;} + const string& GetRootDir(void) const {return RootDir;} /** Increments the simulation time. @return the new simulation time. */ @@ -512,7 +513,6 @@ public: int GetDebugLevel(void) const {return debug_lvl;}; private: - static unsigned int FDMctr; int Error; unsigned int Frame; unsigned int IdFDM; @@ -536,8 +536,6 @@ private: bool trim_status; int ta_mode; - static FGPropertyManager *master; - FGGroundCallback* GroundCallback; FGAtmosphere* Atmosphere; FGFCS* FCS; @@ -558,12 +556,16 @@ private: FGPropertyManager* Root; FGPropertyManager* instance; + + // The FDM counter is used to give each child FDM an unique ID. The root FDM has the ID 0 + unsigned int* FDMctr; vector <string> PropertyCatalog; vector <FGOutput*> Outputs; vector <childData*> ChildFDMList; vector <FGModel*> Models; + void Initialize(); bool ReadFileHeader(Element*); bool ReadChild(Element*); bool ReadPrologue(Element*); diff --git a/src/FDM/JSBSim/FGState.cpp b/src/FDM/JSBSim/FGState.cpp deleted file mode 100644 index 08e38a690..000000000 --- a/src/FDM/JSBSim/FGState.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Module: FGState.cpp - Author: Jon Berndt - Date started: 11/17/98 - Called by: FGFDMExec and accessed by all models. - - ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) ------------- - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -FUNCTIONAL DESCRIPTION --------------------------------------------------------------------------------- -See header file. - -HISTORY --------------------------------------------------------------------------------- -11/17/98 JSB Created - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include <cmath> -#include <iostream> - -#include "FGState.h" - -using namespace std; - -namespace JSBSim { - -static const char *IdSrc = "$Id: FGState.cpp,v 1.15 2009/10/24 22:59:30 jberndt Exp $"; -static const char *IdHdr = ID_STATE; - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -MACROS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS IMPLEMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -FGState::FGState(FGFDMExec* fdex) -{ - FDMExec = fdex; - - sim_time = 0.0; - dt = 1.0/120.0; // a default timestep size. This is needed for when JSBSim is - // run in standalone mode with no initialization file. - - Aircraft = FDMExec->GetAircraft(); - Propagate = FDMExec->GetPropagate(); - Auxiliary = FDMExec->GetAuxiliary(); - FCS = FDMExec->GetFCS(); - Atmosphere = FDMExec->GetAtmosphere(); - Aerodynamics = FDMExec->GetAerodynamics(); - GroundReactions = FDMExec->GetGroundReactions(); - Propulsion = FDMExec->GetPropulsion(); - PropertyManager = FDMExec->GetPropertyManager(); - - bind(); - - Debug(0); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -FGState::~FGState() -{ - Debug(1); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void FGState::Initialize(FGInitialCondition *FGIC) -{ - sim_time = 0.0; - - Propagate->SetInitialState( FGIC ); - - Atmosphere->Run(); - Atmosphere->SetWindNED( FGIC->GetWindNFpsIC(), - FGIC->GetWindEFpsIC(), - FGIC->GetWindDFpsIC() ); - - FGColumnVector3 vAeroUVW; - vAeroUVW = Propagate->GetUVW() + Propagate->GetTl2b()*Atmosphere->GetTotalWindNED(); - - double alpha, beta; - if (vAeroUVW(eW) != 0.0) - alpha = vAeroUVW(eU)*vAeroUVW(eU) > 0.0 ? atan2(vAeroUVW(eW), vAeroUVW(eU)) : 0.0; - else - alpha = 0.0; - if (vAeroUVW(eV) != 0.0) - beta = vAeroUVW(eU)*vAeroUVW(eU)+vAeroUVW(eW)*vAeroUVW(eW) > 0.0 ? atan2(vAeroUVW(eV), (fabs(vAeroUVW(eU))/vAeroUVW(eU))*sqrt(vAeroUVW(eU)*vAeroUVW(eU) + vAeroUVW(eW)*vAeroUVW(eW))) : 0.0; - else - beta = 0.0; - - Auxiliary->SetAB(alpha, beta); - - double Vt = vAeroUVW.Magnitude(); - Auxiliary->SetVt(Vt); - - Auxiliary->SetMach(Vt/Atmosphere->GetSoundSpeed()); - - double qbar = 0.5*Vt*Vt*Atmosphere->GetDensity(); - Auxiliary->Setqbar(qbar); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void FGState::bind(void) -{ - PropertyManager->Tie("sim-time-sec", this, &FGState::Getsim_time); -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -// The bitmasked value choices are as follows: -// unset: In this case (the default) JSBSim would only print -// out the normally expected messages, essentially echoing -// the config files as they are read. If the environment -// variable is not set, debug_lvl is set to 1 internally -// 0: This requests JSBSim not to output any messages -// whatsoever. -// 1: This value explicity requests the normal JSBSim -// startup messages -// 2: This value asks for a message to be printed out when -// a class is instantiated -// 4: When this value is set, a message is displayed when a -// FGModel object executes its Run() method -// 8: When this value is set, various runtime state variables -// are printed out periodically -// 16: When set various parameters are sanity checked and -// a message is printed out when they go out of bounds - -void FGState::Debug(int from) -{ - if (debug_lvl <= 0) return; - - if (debug_lvl & 1) { // Standard console startup message output - if (from == 0) { // Constructor - - } - } - if (debug_lvl & 2 ) { // Instantiation/Destruction notification - if (from == 0) cout << "Instantiated: FGState" << endl; - if (from == 1) cout << "Destroyed: FGState" << endl; - } - if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects - } - if (debug_lvl & 8 ) { // Runtime state variables - } - if (debug_lvl & 16) { // Sanity checking - } - if (debug_lvl & 64) { - if (from == 0) { // Constructor - cout << IdSrc << endl; - cout << IdHdr << endl; - } - } -} -} diff --git a/src/FDM/JSBSim/FGState.h b/src/FDM/JSBSim/FGState.h deleted file mode 100644 index 220f042fd..000000000 --- a/src/FDM/JSBSim/FGState.h +++ /dev/null @@ -1,166 +0,0 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Header: FGState.h - Author: Jon S. Berndt - Date started: 11/17/98 - - ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) ------------- - - This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - details. - - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. - -FUNCTIONAL DESCRIPTION --------------------------------------------------------------------------------- - -HISTORY --------------------------------------------------------------------------------- -11/17/98 JSB Created - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -SENTRY -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#ifndef FGSTATE_H -#define FGSTATE_H - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include <fstream> -#include <string> -#include <map> -#include "FGJSBBase.h" -#include "initialization/FGInitialCondition.h" -#include "math/FGColumnVector3.h" -#include "math/FGQuaternion.h" -#include "FGFDMExec.h" -#include "models/FGAtmosphere.h" -#include "models/FGFCS.h" -#include "models/FGPropagate.h" -#include "models/FGAuxiliary.h" -#include "models/FGAerodynamics.h" -#include "models/FGAircraft.h" -#include "models/FGGroundReactions.h" -#include "models/FGPropulsion.h" - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -DEFINITIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#define ID_STATE "$Id: FGState.h,v 1.15 2009/10/02 10:30:07 jberndt Exp $" - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FORWARD DECLARATIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -namespace JSBSim { - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DOCUMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/** Encapsulates the calculation of aircraft state. - <h3>Properties</h3> - @property sim-time-sec (read only) cumulative simulation in seconds. - @author Jon S. Berndt - @version $Revision: 1.15 $ -*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -CLASS DECLARATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -class FGState : public FGJSBBase -{ -public: - /** Constructor - @param Executive a pointer to the parent executive object */ - FGState(FGFDMExec*); - /// Destructor - ~FGState(); - - /** Initializes the simulation state based on parameters from an Initial Conditions object. - @param FGIC pointer to an initial conditions object. - @see FGInitialConditions. */ - void Initialize(FGInitialCondition *FGIC); - - /// Returns the cumulative simulation time in seconds. - inline double Getsim_time(void) const { return sim_time; } - - /// Returns the simulation delta T. - inline double Getdt(void) {return dt;} - - /// Suspends the simulation and sets the delta T to zero. - inline void SuspendIntegration(void) {saved_dt = dt; dt = 0.0;} - - /// Resumes the simulation by resetting delta T to the correct value. - inline void ResumeIntegration(void) {dt = saved_dt;} - - /** Returns the simulation suspension state. - @return true if suspended, false if executing */ - bool IntegrationSuspended(void) {return dt == 0.0;} - - /** Sets the current sim time. - @param cur_time the current time - @return the current simulation time. */ - inline double Setsim_time(double cur_time) { - sim_time = cur_time; - return sim_time; - } - - /** Sets the integration time step for the simulation executive. - @param delta_t the time step in seconds. */ - inline void Setdt(double delta_t) { dt = delta_t; } - - /** Increments the simulation time. - @return the new simulation time. */ - inline double IncrTime(void) { - sim_time+=dt; - return sim_time; - } - - /** Prints a summary of simulator state (speed, altitude, - configuration, etc.) */ -// void ReportState(void); - -private: - double sim_time, dt; - double saved_dt; - - FGFDMExec* FDMExec; - - FGAircraft* Aircraft; - FGPropagate* Propagate; - FGAtmosphere* Atmosphere; - FGFCS* FCS; - FGAerodynamics* Aerodynamics; - FGGroundReactions* GroundReactions; - FGPropulsion* Propulsion; - FGAuxiliary* Auxiliary; - FGPropertyManager* PropertyManager; - - void bind(); - - void Debug(int from); -}; -} -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -#endif - diff --git a/src/FDM/JSBSim/JSBSim.cxx b/src/FDM/JSBSim/JSBSim.cxx index a915539cc..612424629 100644 --- a/src/FDM/JSBSim/JSBSim.cxx +++ b/src/FDM/JSBSim/JSBSim.cxx @@ -18,7 +18,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// $Id: JSBSim.cxx,v 1.62 2010/07/14 05:50:40 ehofman Exp $ +// $Id: JSBSim.cxx,v 1.63 2010/10/07 03:45:40 jberndt Exp $ #ifdef HAVE_CONFIG_H @@ -97,14 +97,15 @@ public: /** Compute the altitude above ground. */ virtual double GetAGLevel(double t, const FGLocation& l, - FGLocation& cont, - FGColumnVector3& n, FGColumnVector3& v) const { + FGLocation& cont, FGColumnVector3& n, + FGColumnVector3& v, FGColumnVector3& w) const { double loc_cart[3] = { l(eX), l(eY), l(eZ) }; - double contact[3], normal[3], vel[3], agl = 0; + double contact[3], normal[3], vel[3], angularVel[3], agl = 0; mInterface->get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, normal, - vel, &agl); + vel, angularVel, &agl); n = FGColumnVector3( normal[0], normal[1], normal[2] ); v = FGColumnVector3( vel[0], vel[1], vel[2] ); + w = FGColumnVector3( angularVel[0], angularVel[1], angularVel[2] ); cont = FGColumnVector3( contact[0], contact[1], contact[2] ); return agl; } @@ -489,7 +490,7 @@ void FGJSBsim::update( double dt ) if ( startup_trim->getBoolValue() ) { double contact[3], d[3], agl; get_agl_ft(fdmex->GetSimTime(), cart_pos, SG_METER_TO_FEET*2, contact, - d, d, &agl); + d, d, d, &agl); double terrain_alt = sqrt(contact[0]*contact[0] + contact[1]*contact[1] + contact[2]*contact[2]) - fgic->GetSeaLevelRadiusFtIC(); @@ -743,7 +744,7 @@ bool FGJSBsim::copy_from_JSBsim() double loc_cart[3] = { l(FGJSBBase::eX), l(FGJSBBase::eY), l(FGJSBBase::eZ) }; double contact[3], d[3], sd, t; is_valid_m(&t, d, &sd); - get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, d, d, &sd); + get_agl_ft(t, loc_cart, SG_METER_TO_FEET*2, contact, d, d, d, &sd); double rwrad = FGColumnVector3( contact[0], contact[1], contact[2] ).Magnitude(); _set_Runway_altitude( rwrad - get_Sea_level_radius() ); @@ -1204,9 +1205,8 @@ void FGJSBsim::update_ic(void) bool FGJSBsim::get_agl_ft(double t, const double pt[3], double alt_off, double contact[3], double normal[3], double vel[3], - double *agl) + double angularVel[3], double *agl) { - double angularVel[3]; const SGMaterial* material; simgear::BVHNode::Id id; if (!FGInterface::get_agl_ft(t, pt, alt_off, contact, normal, vel, @@ -1289,10 +1289,12 @@ void FGJSBsim::update_external_forces(double t_off) double contact[3]; double ground_normal[3]; double ground_vel[3]; + double ground_angular_vel[3]; double root_agl_ft; if (!got_wire) { - bool got = get_agl_ft(t_off, hook_area[1], 0, contact, ground_normal, ground_vel, &root_agl_ft); + bool got = get_agl_ft(t_off, hook_area[1], 0, contact, ground_normal, + ground_vel, ground_angular_vel, &root_agl_ft); if (got && root_agl_ft > 0 && root_agl_ft < hook_length) { FGColumnVector3 ground_normal_body = Tl2b * (Tec2l * FGColumnVector3(ground_normal[0], ground_normal[1], ground_normal[2])); FGColumnVector3 contact_body = Tl2b * Location.LocationToLocal(FGColumnVector3(contact[0], contact[1], contact[2])); diff --git a/src/FDM/JSBSim/JSBSim.hxx b/src/FDM/JSBSim/JSBSim.hxx index 38c952bd2..6729a141f 100644 --- a/src/FDM/JSBSim/JSBSim.hxx +++ b/src/FDM/JSBSim/JSBSim.hxx @@ -58,7 +58,6 @@ FORWARD DECLARATIONS #include <FDM/JSBSim/FGFDMExec.h> namespace JSBSim { -class FGState; class FGAtmosphere; class FGFCS; class FGPropulsion; @@ -86,7 +85,7 @@ CLASS DOCUMENTATION documentation for main for direction on running JSBSim apart from FlightGear. @author Curtis L. Olson (original) @author Tony Peden (Maintained and refined) - @version $Id: JSBSim.hxx,v 1.13 2010/07/07 20:46:36 andgi Exp $ + @version $Id: JSBSim.hxx,v 1.15 2010/10/07 03:45:40 jberndt Exp $ @see main in file JSBSim.cpp (use main() wrapper for standalone usage) */ @@ -208,13 +207,12 @@ public: bool get_agl_ft(double t, const double pt[3], double alt_off, double contact[3], double normal[3], double vel[3], - double *agl); + double angularVel[3], double *agl); private: JSBSim::FGFDMExec *fdmex; JSBSim::FGInitialCondition *fgic; bool needTrim; - JSBSim::FGState* State; JSBSim::FGAtmosphere* Atmosphere; JSBSim::FGFCS* FCS; JSBSim::FGPropulsion* Propulsion; diff --git a/src/FDM/JSBSim/Makefile.am b/src/FDM/JSBSim/Makefile.am index c2d2b93c7..2d3b6414a 100644 --- a/src/FDM/JSBSim/Makefile.am +++ b/src/FDM/JSBSim/Makefile.am @@ -2,8 +2,8 @@ SUBDIRS = initialization models input_output math noinst_LIBRARIES = libJSBSim.a -libJSBSim_a_SOURCES = FGFDMExec.cpp FGJSBBase.cpp FGState.cpp JSBSim.cxx +libJSBSim_a_SOURCES = FGFDMExec.cpp FGJSBBase.cpp JSBSim.cxx -noinst_HEADERS = FGFDMExec.h FGJSBBase.h FGState.h JSBSim.hxx +noinst_HEADERS = FGFDMExec.h FGJSBBase.h JSBSim.hxx INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/FDM/JSBSim diff --git a/src/FDM/JSBSim/initialization/FGInitialCondition.cpp b/src/FDM/JSBSim/initialization/FGInitialCondition.cpp index ed17c6944..d8452c77b 100644 --- a/src/FDM/JSBSim/initialization/FGInitialCondition.cpp +++ b/src/FDM/JSBSim/initialization/FGInitialCondition.cpp @@ -62,7 +62,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGInitialCondition.cpp,v 1.44 2010/09/18 22:48:12 jberndt Exp $"; +static const char *IdSrc = "$Id: FGInitialCondition.cpp,v 1.46 2010/09/29 02:19:05 jberndt Exp $"; static const char *IdHdr = ID_INITIALCONDITION; //****************************************************************************** @@ -120,7 +120,7 @@ void FGInitialCondition::ResetIC(double u0, double v0, double w0, FGQuaternion Quat( phi, theta, psi ); Quat.Normalize(); - const FGMatrix33& _Tl2b = Quat.GetT(); // local to body frame +// const FGMatrix33& _Tl2b = Quat.GetT(); // local to body frame const FGMatrix33& _Tb2l = Quat.GetTInv(); // body to local FGColumnVector3 _vUVW_BODY(u,v,w); @@ -863,17 +863,22 @@ bool FGInitialCondition::Load(string rstfile, bool useStoredPath) } double version = document->GetAttributeValueAsNumber("version"); + bool result = false; + if (version == HUGE_VAL) { - return Load_v1(); // Default to the old version + result = Load_v1(); // Default to the old version } else if (version >= 3.0) { cerr << "Only initialization file formats 1 and 2 are currently supported" << endl; exit (-1); } else if (version >= 2.0) { - return Load_v2(); + result = Load_v2(); } else if (version >= 1.0) { - return Load_v1(); + result = Load_v1(); } + fdmex->GetPropagate()->DumpState(); + + return result; } //****************************************************************************** @@ -962,6 +967,7 @@ bool FGInitialCondition::Load_v1(void) bool FGInitialCondition::Load_v2(void) { int n; + double epa = 0.0; FGColumnVector3 vLoc, vOrient; bool result = true; FGInertial* Inertial = fdmex->GetInertial(); @@ -969,10 +975,10 @@ bool FGInitialCondition::Load_v2(void) FGColumnVector3 vOmegaEarth = FGColumnVector3(0.0, 0.0, Inertial->omega()); if (document->FindElement("earth_position_angle")) { - double epa = document->FindElementValueAsNumberConvertTo("earth_position_angle", "RAD"); + epa = document->FindElementValueAsNumberConvertTo("earth_position_angle", "RAD"); + } Inertial->SetEarthPositionAngle(epa); Propagate->GetVState()->vLocation.SetEarthPositionAngle(epa); - } Propagate->SetSeaLevelRadius(GetSeaLevelRadiusFtIC()); @@ -989,15 +995,15 @@ bool FGInitialCondition::Load_v2(void) Element* position = document->FindElement("position"); if (position) { - vLoc = position->FindElementTripletConvertTo("FT"); string frame = position->GetAttributeValue("frame"); frame = to_lower(frame); if (frame == "eci") { // Need to transform vLoc to ECEF for storage and use in FGLocation. + vLoc = position->FindElementTripletConvertTo("FT"); vLoc = Propagate->GetTi2ec()*vLoc; Propagate->SetLocation(vLoc); } else if (frame == "ecef") { double AltitudeASL = 0.0; - if (vLoc.Magnitude() == 0.0) { + if (!position->FindElement("x") && !position->FindElement("y") && !position->FindElement("z")) { if (position->FindElement("radius")) { AltitudeASL = position->FindElementValueAsNumberConvertTo("radius", "FT") - sea_level_radius; } else if (position->FindElement("altitudeAGL")) { @@ -1008,11 +1014,15 @@ bool FGInitialCondition::Load_v2(void) cerr << endl << " No altitude or radius initial condition is given." << endl; result = false; } - Propagate->SetPosition( - position->FindElementValueAsNumberConvertTo("longitude", "RAD"), - position->FindElementValueAsNumberConvertTo("latitude", "RAD"), - AltitudeASL + GetSeaLevelRadiusFtIC()); + double lat_rad=0.0; + double long_rad = 0.0; + if (position->FindElement("longitude")) + long_rad = position->FindElementValueAsNumberConvertTo("longitude", "RAD"); + if (position->FindElement("latitude")) + lat_rad = position->FindElementValueAsNumberConvertTo("latitude", "RAD"); + Propagate->SetPosition(long_rad, lat_rad, AltitudeASL + GetSeaLevelRadiusFtIC()); } else { + vLoc = position->FindElementTripletConvertTo("FT"); Propagate->SetLocation(vLoc); } } else { @@ -1072,7 +1082,9 @@ bool FGInitialCondition::Load_v2(void) // Q_b/i = Q_e/i * Q_b/e FGQuaternion QuatEC2Body(vOrient); // Store relationship of Body frame wrt ECEF frame, Q_b/e + QuatEC2Body.Normalize(); FGQuaternion QuatI2EC = Propagate->GetTi2ec(); // Get Q_e/i from matrix + QuatI2EC.Normalize(); QuatI2Body = QuatI2EC * QuatEC2Body; // Q_b/i = Q_e/i * Q_b/e } else if (frame == "local") { @@ -1089,8 +1101,11 @@ bool FGInitialCondition::Load_v2(void) // Q_b/i = Q_e/i * Q_n/e * Q_b/n FGQuaternion QuatLocal2Body = FGQuaternion(vOrient); // Store relationship of Body frame wrt local (NED) frame, Q_b/n + QuatLocal2Body.Normalize(); FGQuaternion QuatEC2Local = Propagate->GetTec2l(); // Get Q_n/e from matrix + QuatEC2Local.Normalize(); FGQuaternion QuatI2EC = Propagate->GetTi2ec(); // Get Q_e/i from matrix + QuatI2EC.Normalize(); QuatI2Body = QuatI2EC * QuatEC2Local * QuatLocal2Body; // Q_b/i = Q_e/i * Q_n/e * Q_b/n } else { @@ -1102,6 +1117,7 @@ bool FGInitialCondition::Load_v2(void) } } + QuatI2Body.Normalize(); Propagate->SetInertialOrientation(QuatI2Body); // Initialize vehicle velocity @@ -1201,7 +1217,9 @@ bool FGInitialCondition::Load_v2(void) running_elements = document->FindNextElement("running"); } - // fdmex->RunIC(); + fdmex->SuspendIntegration(); // saves the integration rate, dt, then sets it to 0.0. + fdmex->Run(); + fdmex->ResumeIntegration(); // Restores the integration rate to what it was. return result; } diff --git a/src/FDM/JSBSim/input_output/FGGroundCallback.cpp b/src/FDM/JSBSim/input_output/FGGroundCallback.cpp index bf1cfb1b5..8933101ca 100644 --- a/src/FDM/JSBSim/input_output/FGGroundCallback.cpp +++ b/src/FDM/JSBSim/input_output/FGGroundCallback.cpp @@ -68,9 +68,10 @@ double FGGroundCallback::GetAltitude(const FGLocation& loc) const double FGGroundCallback::GetAGLevel(double t, const FGLocation& loc, FGLocation& contact, FGColumnVector3& normal, - FGColumnVector3& vel) const + FGColumnVector3& vel, FGColumnVector3& angularVel) const { vel = FGColumnVector3(0.0, 0.0, 0.0); + angularVel = FGColumnVector3(0.0, 0.0, 0.0); normal = FGColumnVector3(loc).Normalize(); double loc_radius = loc.GetRadius(); // Get the radius of the given location // (e.g. the CG) diff --git a/src/FDM/JSBSim/input_output/FGGroundCallback.h b/src/FDM/JSBSim/input_output/FGGroundCallback.h index 63955a4d0..bb6780915 100644 --- a/src/FDM/JSBSim/input_output/FGGroundCallback.h +++ b/src/FDM/JSBSim/input_output/FGGroundCallback.h @@ -45,7 +45,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_GROUNDCALLBACK "$Id: FGGroundCallback.h,v 1.8 2009/10/02 10:30:09 jberndt Exp $" +#define ID_GROUNDCALLBACK "$Id: FGGroundCallback.h,v 1.9 2010/10/07 03:45:40 jberndt Exp $" namespace JSBSim { @@ -59,7 +59,7 @@ CLASS DOCUMENTATION ball formed earth. @author Mathias Froehlich - @version $Id: FGGroundCallback.h,v 1.8 2009/10/02 10:30:09 jberndt Exp $ + @version $Id: FGGroundCallback.h,v 1.9 2010/10/07 03:45:40 jberndt Exp $ */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -85,7 +85,8 @@ public: virtual double GetAltitude(const FGLocation& l) const; /** Compute the altitude above ground. Defaults to sealevel altitude. */ virtual double GetAGLevel(double t, const FGLocation& l, FGLocation& cont, - FGColumnVector3& n, FGColumnVector3& v) const; + FGColumnVector3& n, FGColumnVector3& v, + FGColumnVector3& w) const; virtual void SetTerrainGeoCentRadius(double radius) {mReferenceRadius = radius;} virtual double GetTerrainGeoCentRadius(void) const {return mReferenceRadius;} private: diff --git a/src/FDM/JSBSim/input_output/FGXMLElement.cpp b/src/FDM/JSBSim/input_output/FGXMLElement.cpp index 3f7becc5c..832b2c8c6 100755 --- a/src/FDM/JSBSim/input_output/FGXMLElement.cpp +++ b/src/FDM/JSBSim/input_output/FGXMLElement.cpp @@ -42,7 +42,7 @@ FORWARD DECLARATIONS namespace JSBSim { -static const char *IdSrc = "$Id: FGXMLElement.cpp,v 1.30 2010/09/04 14:15:15 jberndt Exp $"; +static const char *IdSrc = "$Id: FGXMLElement.cpp,v 1.31 2010/09/29 02:22:03 jberndt Exp $"; static const char *IdHdr = ID_XMLELEMENT; bool Element::converterIsInitialized = false; @@ -93,10 +93,10 @@ Element::Element(const string& nm) convert["SLUG*FT2"]["KG*M2"] = 1.35594; convert["KG*M2"]["SLUG*FT2"] = 1.0/convert["SLUG*FT2"]["KG*M2"]; // Angles - convert["RAD"]["DEG"] = 360.0/(2.0*3.1415926); + convert["RAD"]["DEG"] = 180.0/M_PI; convert["DEG"]["RAD"] = 1.0/convert["RAD"]["DEG"]; // Angular rates - convert["RAD/SEC"]["DEG/SEC"] = 360.0/(2.0*3.1415926); + convert["RAD/SEC"]["DEG/SEC"] = convert["RAD"]["DEG"]; convert["DEG/SEC"]["RAD/SEC"] = 1.0/convert["RAD/SEC"]["DEG/SEC"]; // Spring force convert["LBS/FT"]["N/M"] = 14.5939; @@ -478,7 +478,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units if (!supplied_units.empty()) value *= convert[supplied_units][target_units]; } else { value = 0.0; - cerr << "Could not find an X triplet item for this column vector." << endl; } triplet(1) = value; @@ -489,7 +488,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units if (!supplied_units.empty()) value *= convert[supplied_units][target_units]; } else { value = 0.0; - cerr << "Could not find a Y triplet item for this column vector." << endl; } triplet(2) = value; @@ -500,7 +498,6 @@ FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units if (!supplied_units.empty()) value *= convert[supplied_units][target_units]; } else { value = 0.0; - cerr << "Could not find a Z triplet item for this column vector." << endl; } triplet(3) = value; diff --git a/src/FDM/JSBSim/input_output/FGXMLParse.cpp b/src/FDM/JSBSim/input_output/FGXMLParse.cpp index 90fe0e7b9..22d30a255 100755 --- a/src/FDM/JSBSim/input_output/FGXMLParse.cpp +++ b/src/FDM/JSBSim/input_output/FGXMLParse.cpp @@ -40,7 +40,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGXMLParse.cpp,v 1.10 2009/10/24 22:59:30 jberndt Exp $"; +static const char *IdSrc = "$Id: FGXMLParse.cpp,v 1.11 2010/09/28 02:54:03 jberndt Exp $"; static const char *IdHdr = ID_XMLPARSE; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -122,7 +122,7 @@ void FGXMLParse::endElement (const char * name) { if (!working_string.empty()) { vector <string> work_strings = split(working_string, '\n'); - for (int i=0; i<work_strings.size(); i++) current_element->AddData(work_strings[i]); + for (unsigned int i=0; i<work_strings.size(); i++) current_element->AddData(work_strings[i]); } current_element = current_element->GetParent(); diff --git a/src/FDM/JSBSim/input_output/FGfdmSocket.h b/src/FDM/JSBSim/input_output/FGfdmSocket.h index 4c9e34b3c..7090c6fc2 100644 --- a/src/FDM/JSBSim/input_output/FGfdmSocket.h +++ b/src/FDM/JSBSim/input_output/FGfdmSocket.h @@ -65,7 +65,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.19 2010/05/13 03:07:59 jberndt Exp $" +#define ID_FDMSOCKET "$Id: FGfdmSocket.h,v 1.20 2010/10/15 11:30:28 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -107,7 +107,7 @@ public: void Close(void); bool GetConnectStatus(void) {return connected;} - enum {ptUDP, ptTCP}; + enum ProtocolType {ptUDP, ptTCP} ; private: int sckt; diff --git a/src/FDM/JSBSim/math/FGLocation.cpp b/src/FDM/JSBSim/math/FGLocation.cpp index 9e0a62a23..fcba3289e 100644 --- a/src/FDM/JSBSim/math/FGLocation.cpp +++ b/src/FDM/JSBSim/math/FGLocation.cpp @@ -45,7 +45,7 @@ INCLUDES namespace JSBSim { -static const char *IdSrc = "$Id: FGLocation.cpp,v 1.22 2010/09/18 22:47:17 jberndt Exp $"; +static const char *IdSrc = "$Id: FGLocation.cpp,v 1.23 2010/09/22 11:34:09 jberndt Exp $"; static const char *IdHdr = ID_LOCATION; using std::cerr; using std::endl; @@ -319,7 +319,7 @@ void FGLocation::ComputeDerivedUnconditional(void) const if (a != 0.0 && b != 0.0) { double c, p, q, s, t, u, v, w, z, p2, u2, r0; - double Ne, P, Q0, Q, signz0, sqrt_q; + double Ne, P, Q0, Q, signz0, sqrt_q, z_term; p = fabs(mECLoc(eZ))/eps2; s = r02/(e2*eps2); p2 = p*p; @@ -328,8 +328,7 @@ void FGLocation::ComputeDerivedUnconditional(void) const if (q>0) { u = p/sqrt_q; -// u2 = p2/q; - u2 = u*u; + u2 = p2/q; v = b2*u2/q; P = 27.0*v*s/q; Q0 = sqrt(P+1) + sqrt(P); @@ -338,10 +337,11 @@ void FGLocation::ComputeDerivedUnconditional(void) const c = sqrt(u2 - 1 + 2.0*t); w = (c - u)/2.0; signz0 = mECLoc(eZ)>=0?1.0:-1.0; - if ((sqrt(t*t+v)-u*w-0.5*t-0.25) < 0.0) { + z_term = sqrt(t*t+v)-u*w-0.5*t-0.25; + if (z_term < 0.0) { z = 0.0; } else { - z = signz0*sqrt_q*(w+sqrt(sqrt(t*t+v)-u*w-0.5*t-0.25)); + z = signz0*sqrt_q*(w+sqrt(z_term)); } Ne = a*sqrt(1+eps2*z*z/b2); mGeodLat = asin((eps2+1.0)*(z/Ne)); diff --git a/src/FDM/JSBSim/math/FGQuaternion.h b/src/FDM/JSBSim/math/FGQuaternion.h index 104a52f39..69f304eb3 100644 --- a/src/FDM/JSBSim/math/FGQuaternion.h +++ b/src/FDM/JSBSim/math/FGQuaternion.h @@ -47,7 +47,7 @@ SENTRY DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_QUATERNION "$Id: FGQuaternion.h,v 1.17 2010/06/30 03:13:40 jberndt Exp $" +#define ID_QUATERNION "$Id: FGQuaternion.h,v 1.18 2010/09/29 02:19:05 jberndt Exp $" namespace JSBSim { @@ -177,7 +177,7 @@ public: const FGMatrix33& GetTInv(void) const { ComputeDerived(); return mTInv; } /** Retrieves the Euler angles. - @return a reference to the triad of euler angles corresponding + @return a reference to the triad of Euler angles corresponding to this quaternion rotation. units radians */ const FGColumnVector3& GetEuler(void) const { @@ -186,7 +186,7 @@ public: } /** Retrieves the Euler angles. - @param i the euler angle index. + @param i the Euler angle index. units radians. @return a reference to the i-th euler angles corresponding to this quaternion rotation. @@ -197,7 +197,7 @@ public: } /** Retrieves the Euler angles. - @param i the euler angle index. + @param i the Euler angle index. @return a reference to the i-th euler angles corresponding to this quaternion rotation. units degrees */ @@ -206,6 +206,15 @@ public: return radtodeg*mEulerAngles(i); } + /** Retrieves the Euler angle vector. + @return an Euler angle column vector corresponding + to this quaternion rotation. + units degrees */ + FGColumnVector3 const GetEulerDeg(void) const { + ComputeDerived(); + return radtodeg*mEulerAngles; + } + /** Retrieves sine of the given euler angle. @return the sine of the Euler angle theta (pitch attitude) corresponding to this quaternion rotation. */ diff --git a/src/FDM/JSBSim/math/FGTable.cpp b/src/FDM/JSBSim/math/FGTable.cpp index 3f23fd144..0780739c9 100644 --- a/src/FDM/JSBSim/math/FGTable.cpp +++ b/src/FDM/JSBSim/math/FGTable.cpp @@ -47,7 +47,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGTable.cpp,v 1.23 2010/09/16 11:01:24 jberndt Exp $"; +static const char *IdSrc = "$Id: FGTable.cpp,v 1.27 2010/10/21 11:09:56 jberndt Exp $"; static const char *IdHdr = ID_TABLE; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -143,13 +143,12 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop internal = true; } else { // internal table is a child element of a restricted type - cerr << endl << fgred << " An internal table cannot be nested within another type," << endl; - cerr << " such as a function. The 'internal' keyword is ignored." << fgdef << endl << endl; + throw(" An internal table cannot be nested within another type," + " such as a function. The 'internal' keyword is ignored."); } } else if (!call_type.empty()) { - cerr << endl << fgred << " An unknown table type attribute is listed: " << call_type - << ". Execution cannot continue." << fgdef << endl << endl; - abort(); + throw(" An unknown table type attribute is listed: " + ". Execution cannot continue."); } // Determine and store the lookup properties for this table unless this table @@ -218,8 +217,7 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop brkpt_string = el->GetAttributeValue("breakPoint"); if (brkpt_string.empty()) { // no independentVars found, and table is not marked as internal, nor is it a 3D table - cerr << endl << fgred << "No independent variable found for table." << fgdef << endl << endl; - abort(); + throw("No independent variable found for table."); } } // end lookup property code @@ -249,10 +247,11 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop case 2: nRows = tableData->GetNumDataLines()-1; - if (nRows >= 2) nCols = FindNumColumns(tableData->GetDataLine(0)); - else { - cerr << endl << fgred << "Not enough rows in this table." << fgdef << endl; - abort(); + if (nRows >= 2) { + nCols = FindNumColumns(tableData->GetDataLine(0)); + if (nCols < 2) throw(string("Not enough columns in table data.")); + } else { + throw(string("Not enough rows in the table data.")); } Type = tt2D; @@ -290,6 +289,63 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el) : PropertyManager(prop break; } + // Sanity checks: lookup indices must be increasing monotonically + unsigned int r,c,b; + + // find next xml element containing a name attribute + // to indicate where the error occured + Element* nameel = el; + while (nameel != 0 && nameel->GetAttributeValue("name") == "") + nameel=nameel->GetParent(); + + // check breakpoints, if applicable + if (dimension > 2) { + for (b=2; b<=nTables; ++b) { + if (Data[b][1] <= Data[b-1][1]) { + stringstream errormsg; + errormsg << fgred << highint << endl + << " FGTable: breakpoint lookup is not monotonically increasing" << endl + << " in breakpoint " << b; + if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name"); + errormsg << ":" << reset << endl + << " " << Data[b][1] << "<=" << Data[b-1][1] << endl; + throw(errormsg.str()); + } + } + } + + // check columns, if applicable + if (dimension > 1) { + for (c=2; c<=nCols; ++c) { + if (Data[0][c] <= Data[0][c-1]) { + stringstream errormsg; + errormsg << fgred << highint << endl + << " FGTable: column lookup is not monotonically increasing" << endl + << " in column " << c; + if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name"); + errormsg << ":" << reset << endl + << " " << Data[0][c] << "<=" << Data[0][c-1] << endl; + throw(errormsg.str()); + } + } + } + + // check rows + if (dimension < 3) { // in 3D tables, check only rows of subtables + for (r=2; r<=nRows; ++r) { + if (Data[r][0]<=Data[r-1][0]) { + stringstream errormsg; + errormsg << fgred << highint << endl + << " FGTable: row lookup is not monotonically increasing" << endl + << " in row " << r; + if (nameel != 0) errormsg << " of table in " << nameel->GetAttributeValue("name"); + errormsg << ":" << reset << endl + << " " << Data[r][0] << "<=" << Data[r-1][0] << endl; + throw(errormsg.str()); + } + } + } + bind(); if (debug_lvl & 1) Print(); diff --git a/src/FDM/JSBSim/models/FGAerodynamics.cpp b/src/FDM/JSBSim/models/FGAerodynamics.cpp index 7f5359e98..0a384447d 100644 --- a/src/FDM/JSBSim/models/FGAerodynamics.cpp +++ b/src/FDM/JSBSim/models/FGAerodynamics.cpp @@ -52,7 +52,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGAerodynamics.cpp,v 1.32 2010/09/07 00:40:03 jberndt Exp $"; +static const char *IdSrc = "$Id: FGAerodynamics.cpp,v 1.34 2010/10/15 11:32:41 jberndt Exp $"; static const char *IdHdr = ID_AERODYNAMICS; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -349,7 +349,14 @@ bool FGAerodynamics::Load(Element *element) axis = axis_element->GetAttributeValue("name"); function_element = axis_element->FindElement("function"); while (function_element) { - ca.push_back( new FGFunction(PropertyManager, function_element) ); + string current_func_name = function_element->GetAttributeValue("name"); + try { + ca.push_back( new FGFunction(PropertyManager, function_element) ); + } catch (string const str) { + cerr << endl << fgred << "Error loading aerodynamic function in " + << current_func_name << ":" << str << " Aborting." << reset << endl; + return false; + } function_element = axis_element->FindNextElement("function"); } Coeff[AxisIdx[axis]] = ca; diff --git a/src/FDM/JSBSim/models/FGAuxiliary.cpp b/src/FDM/JSBSim/models/FGAuxiliary.cpp index ededdc1cc..630a9712a 100755 --- a/src/FDM/JSBSim/models/FGAuxiliary.cpp +++ b/src/FDM/JSBSim/models/FGAuxiliary.cpp @@ -59,7 +59,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGAuxiliary.cpp,v 1.42 2010/07/27 23:18:19 jberndt Exp $"; +static const char *IdSrc = "$Id: FGAuxiliary.cpp,v 1.44 2010/10/10 15:10:15 jberndt Exp $"; static const char *IdHdr = ID_AUXILIARY; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -173,7 +173,7 @@ bool FGAuxiliary::Run() vAeroUVW = vUVW - wind; Vt = vAeroUVW.Magnitude(); - if ( Vt > 0.05) { + if ( Vt > 1.0 ) { if (vAeroUVW(eW) != 0.0) alpha = vAeroUVW(eU)*vAeroUVW(eU) > 0.0 ? atan2(vAeroUVW(eW), vAeroUVW(eU)) : 0.0; if (vAeroUVW(eV) != 0.0) @@ -182,10 +182,9 @@ bool FGAuxiliary::Run() double mUW = (vAeroUVW(eU)*vAeroUVW(eU) + vAeroUVW(eW)*vAeroUVW(eW)); double signU=1; - if (vAeroUVW(eU) != 0.0) - signU = vAeroUVW(eU)/fabs(vAeroUVW(eU)); + if (vAeroUVW(eU) < 0.0) signU=-1; - if ( (mUW == 0.0) || (Vt == 0.0) ) { + if ( mUW < 1.0 ) { adot = 0.0; bdot = 0.0; } else { diff --git a/src/FDM/JSBSim/models/FGFCS.cpp b/src/FDM/JSBSim/models/FGFCS.cpp index 368fa90ae..3de0c7135 100644 --- a/src/FDM/JSBSim/models/FGFCS.cpp +++ b/src/FDM/JSBSim/models/FGFCS.cpp @@ -63,7 +63,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGFCS.cpp,v 1.70 2010/08/21 22:56:11 jberndt Exp $"; +static const char *IdSrc = "$Id: FGFCS.cpp,v 1.71 2010/09/28 02:54:03 jberndt Exp $"; static const char *IdHdr = ID_FCS; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -187,7 +187,7 @@ bool FGFCS::InitModel(void) void FGFCS::LateBind(void) { - int i; + unsigned int i; for (i=0; i<Systems.size(); i++) Systems[i]->LateBind(); for (i=0; i<APComponents.size(); i++) APComponents[i]->LateBind(); diff --git a/src/FDM/JSBSim/models/FGFCS.h b/src/FDM/JSBSim/models/FGFCS.h index a2b592768..1a57835f9 100644 --- a/src/FDM/JSBSim/models/FGFCS.h +++ b/src/FDM/JSBSim/models/FGFCS.h @@ -51,7 +51,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_FCS "$Id: FGFCS.h,v 1.30 2010/09/05 17:31:40 jberndt Exp $" +#define ID_FCS "$Id: FGFCS.h,v 1.31 2010/09/22 11:33:40 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -168,7 +168,7 @@ CLASS DOCUMENTATION @property gear/tailhook-pos-norm @author Jon S. Berndt - @version $Revision: 1.30 $ + @version $Revision: 1.31 $ @see FGActuator @see FGDeadBand @see FGFCSFunction @@ -345,11 +345,6 @@ public: bool GetPropFeather(int engine) const { return PropFeather[engine]; } //@} - /** Retrieves the State object pointer. - This is used by the FGFCS-owned components. - @return pointer to the State object */ - FGState* GetState(void) { return State; } - /** Retrieves all component names for inclusion in output stream @param delimiter either a tab or comma string depending on output type @return a string containing the descriptive names for all components */ diff --git a/src/FDM/JSBSim/models/FGInertial.cpp b/src/FDM/JSBSim/models/FGInertial.cpp index ab2670eb9..0779c6954 100644 --- a/src/FDM/JSBSim/models/FGInertial.cpp +++ b/src/FDM/JSBSim/models/FGInertial.cpp @@ -45,7 +45,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGInertial.cpp,v 1.18 2010/03/28 05:57:00 jberndt Exp $"; +static const char *IdSrc = "$Id: FGInertial.cpp,v 1.19 2010/10/10 15:06:38 jberndt Exp $"; static const char *IdHdr = ID_INERTIAL; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -148,7 +148,8 @@ FGColumnVector3 FGInertial::GetGravityJ2(FGColumnVector3 position) const double lat = Propagate->GetLatitude(); double sinLat = sin(lat); - double preCommon = 1.5*J2*(a/r)*(a/r); + double adivr = a/r; + double preCommon = 1.5*J2*adivr*adivr; double xy = 1.0 - 5.0*(sinLat*sinLat); double z = 3.0 - 5.0*(sinLat*sinLat); double GMOverr2 = GM/(r*r); diff --git a/src/FDM/JSBSim/models/FGLGear.cpp b/src/FDM/JSBSim/models/FGLGear.cpp index 569b76ee4..4106f5ab0 100644 --- a/src/FDM/JSBSim/models/FGLGear.cpp +++ b/src/FDM/JSBSim/models/FGLGear.cpp @@ -48,6 +48,7 @@ INCLUDES #include "FGMassBalance.h" #include "math/FGTable.h" #include <cstdlib> +#include <cstring> using namespace std; @@ -61,7 +62,7 @@ DEFINITIONS GLOBAL DATA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -static const char *IdSrc = "$Id: FGLGear.cpp,v 1.76 2010/07/30 11:50:01 jberndt Exp $"; +static const char *IdSrc = "$Id: FGLGear.cpp,v 1.78 2010/10/07 03:45:40 jberndt Exp $"; static const char *IdHdr = ID_LGEAR; // Body To Structural (body frame is rotated 180 deg about Y and lengths are given in @@ -76,7 +77,8 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : FGForce(fdmex), GearNumber(number), SteerAngle(0.0), - Castered(false) + Castered(false), + StaticFriction(false) { Element *force_table=0; Element *dampCoeff=0; @@ -254,9 +256,7 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : Curvature = 1.03; // Initialize Lagrange multipliers - LMultiplier[ftRoll].value = 0.; - LMultiplier[ftSide].value = 0.; - LMultiplier[ftRoll].value = 0.; + memset(LMultiplier, 0, sizeof(LMultiplier)); Debug(0); } @@ -281,13 +281,15 @@ FGColumnVector3& FGLGear::GetBodyForces(void) if (isRetractable) ComputeRetractionState(); if (GearDown) { + FGColumnVector3 angularVel; + vWhlBodyVec = MassBalance->StructuralToBody(vXYZn); // Get wheel in body frame vLocalGear = Propagate->GetTb2l() * vWhlBodyVec; // Get local frame wheel location gearLoc = Propagate->GetLocation().LocalToLocation(vLocalGear); // Compute the height of the theoretical location of the wheel (if strut is // not compressed) with respect to the ground level - double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel); + double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel, angularVel); vGroundNormal = Propagate->GetTec2b() * normal; // The height returned above is the AGL and is expressed in the Z direction diff --git a/src/FDM/JSBSim/models/FGLGear.h b/src/FDM/JSBSim/models/FGLGear.h index 2190f8b9c..f1828f8cf 100644 --- a/src/FDM/JSBSim/models/FGLGear.h +++ b/src/FDM/JSBSim/models/FGLGear.h @@ -47,7 +47,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_LGEAR "$Id: FGLGear.h,v 1.40 2010/07/30 11:50:01 jberndt Exp $" +#define ID_LGEAR "$Id: FGLGear.h,v 1.41 2010/09/22 11:33:40 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -58,7 +58,6 @@ namespace JSBSim { class FGAircraft; class FGPropagate; class FGFCS; -class FGState; class FGMassBalance; class FGAuxiliary; class FGTable; @@ -181,7 +180,7 @@ CLASS DOCUMENTATION </contact> @endcode @author Jon S. Berndt - @version $Id: FGLGear.h,v 1.40 2010/07/30 11:50:01 jberndt Exp $ + @version $Id: FGLGear.h,v 1.41 2010/09/22 11:33:40 jberndt Exp $ @see Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at NASA-Ames", NASA CR-2497, January 1975 @see Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics", diff --git a/src/FDM/JSBSim/models/FGModel.h b/src/FDM/JSBSim/models/FGModel.h index d107d28a5..775ea9f29 100644 --- a/src/FDM/JSBSim/models/FGModel.h +++ b/src/FDM/JSBSim/models/FGModel.h @@ -48,7 +48,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_MODEL "$Id: FGModel.h,v 1.15 2010/09/07 00:19:46 jberndt Exp $" +#define ID_MODEL "$Id: FGModel.h,v 1.16 2010/09/22 11:33:40 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -57,7 +57,6 @@ FORWARD DECLARATIONS namespace JSBSim { class FGFDMExec; -class FGState; class FGAtmosphere; class FGFCS; class FGPropulsion; @@ -119,7 +118,6 @@ protected: virtual void Debug(int from); FGFDMExec* FDMExec; - FGState* State; FGAtmosphere* Atmosphere; FGFCS* FCS; FGPropulsion* Propulsion; diff --git a/src/FDM/JSBSim/models/FGOutput.cpp b/src/FDM/JSBSim/models/FGOutput.cpp index a974915f4..c074d9813 100644 --- a/src/FDM/JSBSim/models/FGOutput.cpp +++ b/src/FDM/JSBSim/models/FGOutput.cpp @@ -61,9 +61,6 @@ INCLUDES #include <cstring> #include <cstdlib> -#include "input_output/net_fdm.hxx" -#include "input_output/FGfdmSocket.h" - #if defined(WIN32) && !defined(__CYGWIN__) # include <windows.h> #else @@ -77,7 +74,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGOutput.cpp,v 1.48 2010/04/12 12:25:19 jberndt Exp $"; +static const char *IdSrc = "$Id: FGOutput.cpp,v 1.49 2010/10/15 11:30:29 jberndt Exp $"; static const char *IdHdr = ID_OUTPUT; // (stolen from FGFS native_fdm.cxx) @@ -132,7 +129,6 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex) Name = "FGOutput"; sFirstPass = dFirstPass = true; socket = 0; - flightGearSocket = 0; runID_postfix = 0; Type = otNone; SubSystems = 0; @@ -153,7 +149,6 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex) FGOutput::~FGOutput() { delete socket; - delete flightGearSocket; OutputProperties.clear(); Debug(1); } @@ -231,6 +226,15 @@ void FGOutput::SetType(const string& type) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +void FGOutput::SetProtocol(const string& protocol) +{ + if (protocol == "UDP") Protocol = FGfdmSocket::ptUDP; + else if (protocol == "TCP") Protocol = FGfdmSocket::ptTCP; + else Protocol = FGfdmSocket::ptTCP; // Default to TCP +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + void FGOutput::DelimitedOutput(const string& fname) { streambuf* buffer; @@ -566,7 +570,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net) } } - // Consumables net->num_tanks = Propulsion->GetNumTanks(); // Max number of fuel tanks @@ -574,7 +577,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net) net->fuel_quantity[i] = (float)(((FGTank *)Propulsion->GetTank(i))->GetContents()); } - // Gear status net->num_wheels = GroundReactions->GetNumGearUnits(); @@ -588,13 +590,11 @@ void FGOutput::SocketDataFill(FGNetFDM* net) net->gear_compression[i] = (float)(GroundReactions->GetGearUnit(i)->GetCompLen()); } - // Environment - net->cur_time = (long int)1234567890; // Friday, Feb 13, 2009, 23:31:30 UTC (not processed by FGFS anyway) + net->cur_time = (long int)1234567890; // Friday, Feb 13, 2009, 23:31:30 UTC (not processed by FGFS anyway) net->warp = 0; // offset in seconds to unix time net->visibility = 25000.0; // visibility in meters (for env. effects) - // Control surface positions (normalized values) net->elevator = (float)(FCS->GetDePos(ofNorm)); // Norm Elevator Pos, -- net->elevator_trim_tab = (float)(FCS->GetPitchTrimCmd()); // Norm Elev Trim Tab Pos, -- @@ -607,7 +607,6 @@ void FGOutput::SocketDataFill(FGNetFDM* net) net->speedbrake = (float)(FCS->GetDsbPos(ofNorm)); // Norm Speedbrake Pos, -- net->spoilers = (float)(FCS->GetDspPos(ofNorm)); // Norm Spoiler Pos, -- - // Convert the net buffer to network format if ( isLittleEndian ) { net->version = htonl(net->version); @@ -691,12 +690,11 @@ void FGOutput::FlightGearSocketOutput(void) { int length = sizeof(fgSockBuf); - - if (flightGearSocket == NULL) return; - if (!flightGearSocket->GetConnectStatus()) return; + if (socket == NULL) return; + if (!socket->GetConnectStatus()) return; SocketDataFill(&fgSockBuf); - flightGearSocket->Send((char *)&fgSockBuf, length); + socket->Send((char *)&fgSockBuf, length); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -944,11 +942,9 @@ void FGOutput::SocketStatusOutput(const string& out_str) bool FGOutput::Load(Element* element) { - string type="", parameter=""; + string parameter=""; string name=""; - string protocol="tcp"; int OutRate = 0; - string property; unsigned int port; Element *property_element; @@ -967,19 +963,12 @@ bool FGOutput::Load(Element* element) if (!document) return false; name = FDMExec->GetRootDir() + document->GetAttributeValue("name"); - type = document->GetAttributeValue("type"); - SetType(type); - if (!document->GetAttributeValue("port").empty() && type == string("SOCKET")) { - port = atoi(document->GetAttributeValue("port").c_str()); - socket = new FGfdmSocket(name, port); - } else if (!document->GetAttributeValue("port").empty() && type == string("FLIGHTGEAR")) { - port = atoi(document->GetAttributeValue("port").c_str()); - if (!document->GetAttributeValue("protocol").empty()) - protocol = document->GetAttributeValue("protocol"); - if (protocol == "udp") - flightGearSocket = new FGfdmSocket(name, port, FGfdmSocket::ptUDP); // create udp socket - else - flightGearSocket = new FGfdmSocket(name, port, FGfdmSocket::ptTCP); // create tcp socket (default) + SetType(document->GetAttributeValue("type")); + Port = document->GetAttributeValue("port"); + if (!Port.empty() && (Type == otSocket || Type == otFlightGear)) { + port = atoi(Port.c_str()); + SetProtocol(document->GetAttributeValue("protocol")); + socket = new FGfdmSocket(name, port, Protocol); } else { BaseFilename = Filename = name; } diff --git a/src/FDM/JSBSim/models/FGOutput.h b/src/FDM/JSBSim/models/FGOutput.h index f1cfef7d0..c4ef388d5 100644 --- a/src/FDM/JSBSim/models/FGOutput.h +++ b/src/FDM/JSBSim/models/FGOutput.h @@ -45,12 +45,13 @@ INCLUDES #include "input_output/FGXMLFileRead.h" #include "input_output/net_fdm.hxx" +#include "input_output/FGfdmSocket.h" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_OUTPUT "$Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $" +#define ID_OUTPUT "$Id: FGOutput.h,v 1.18 2010/10/15 11:30:29 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -123,7 +124,7 @@ CLASS DOCUMENTATION propulsion ON|OFF </pre> NOTE that Time is always output with the data. - @version $Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $ + @version $Id: FGOutput.h,v 1.18 2010/10/15 11:30:29 jberndt Exp $ */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -145,17 +146,19 @@ public: void SocketStatusOutput(const std::string&); void SocketDataFill(FGNetFDM* net); - void SetType(const std::string& type); + void SetProtocol(const std::string& protocol); + void SetPort(const std::string& port); void SetStartNewFile(bool tt) {StartNewFile = tt;} void SetSubsystems(int tt) {SubSystems = tt;} - void Enable(void) { enabled = true; } - void Disable(void) { enabled = false; } - bool Toggle(void) {enabled = !enabled; return enabled;} - bool Load(Element* el); void SetOutputFileName(const std::string& fname) {Filename = fname;} void SetDirectivesFile(const std::string& fname) {DirectivesFile = fname;} void SetRate(int rt); + void Enable(void) { enabled = true; } + void Disable(void) { enabled = false; } + bool Toggle(void) {enabled = !enabled; return enabled;} + + bool Load(Element* el); string GetOutputFileName(void) const {return Filename;} /// Subsystem types for specifying which will be output in the FDM data logging @@ -180,14 +183,15 @@ public: private: enum {otNone, otCSV, otTab, otSocket, otTerminal, otFlightGear, otUnknown} Type; + FGfdmSocket::ProtocolType Protocol; bool sFirstPass, dFirstPass, enabled; int SubSystems; int runID_postfix; bool StartNewFile; std::string output_file_name, delimeter, BaseFilename, Filename, DirectivesFile; + std::string Port; std::ofstream datafile; FGfdmSocket* socket; - FGfdmSocket* flightGearSocket; std::vector <FGPropertyManager*> OutputProperties; void Debug(int from); diff --git a/src/FDM/JSBSim/models/FGPropagate.cpp b/src/FDM/JSBSim/models/FGPropagate.cpp index 1e11074f9..0fec89b0c 100644 --- a/src/FDM/JSBSim/models/FGPropagate.cpp +++ b/src/FDM/JSBSim/models/FGPropagate.cpp @@ -71,7 +71,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.65 2010/09/18 22:48:12 jberndt Exp $"; +static const char *IdSrc = "$Id: FGPropagate.cpp,v 1.71 2010/10/15 11:34:09 jberndt Exp $"; static const char *IdHdr = ID_PROPAGATE; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -82,7 +82,7 @@ FGPropagate::FGPropagate(FGFDMExec* fdmex) : FGModel(fdmex) { Debug(0); Name = "FGPropagate"; - gravType = gtStandard; + gravType = gtWGS84; vPQRdot.InitMatrix(); vQtrndot = FGQuaternion(0,0,0); @@ -95,6 +95,7 @@ FGPropagate::FGPropagate(FGFDMExec* fdmex) : FGModel(fdmex) integrator_translational_position = eTrapezoidal; VState.dqPQRdot.resize(4, FGColumnVector3(0.0,0.0,0.0)); + VState.dqPQRidot.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqUVWidot.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqInertialVelocity.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqQtrndot.resize(4, FGQuaternion(0.0,0.0,0.0)); @@ -129,6 +130,7 @@ bool FGPropagate::InitModel(void) vInertialVelocity.InitMatrix(); VState.dqPQRdot.resize(4, FGColumnVector3(0.0,0.0,0.0)); + VState.dqPQRidot.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqUVWidot.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqInertialVelocity.resize(4, FGColumnVector3(0.0,0.0,0.0)); VState.dqQtrndot.resize(4, FGColumnVector3(0.0,0.0,0.0)); @@ -204,6 +206,7 @@ void FGPropagate::SetInitialState(const FGInitialCondition *FGIC) FGIC->GetRRadpsIC() ) + Tl2b*vOmegaLocal; VState.vPQRi = VState.vPQR + Ti2b * vOmegaEarth; + VState.vPQRi_i = Tb2i * VState.vPQRi; // Make an initial run and set past values InitializeDerivatives(); @@ -246,10 +249,11 @@ bool FGPropagate::Run(void) CalculateUVW(); // Translational position derivative (velocities are integrated in the inertial frame) // Propagate rotational / translational velocity, angular /translational position, respectively. - Integrate(VState.vPQRi, vPQRdot, VState.dqPQRdot, dt, integrator_rotational_rate); - Integrate(VState.vInertialVelocity, vUVWidot, VState.dqUVWidot, dt, integrator_translational_rate); + + Integrate(VState.vPQRi_i, vPQRidot, VState.dqPQRidot, dt, integrator_rotational_rate); // ECI integration Integrate(VState.qAttitudeECI, vQtrndot, VState.dqQtrndot, dt, integrator_rotational_position); Integrate(VState.vInertialPosition, VState.vInertialVelocity, VState.dqInertialVelocity, dt, integrator_translational_position); + Integrate(VState.vInertialVelocity, vUVWidot, VState.dqUVWidot, dt, integrator_translational_rate); // CAUTION : the order of the operations below is very important to get transformation // matrices that are consistent with the new state of the vehicle @@ -280,6 +284,7 @@ bool FGPropagate::Run(void) VehicleRadius = GetRadius(); // Calculate current aircraft radius from center of planet + VState.vPQRi = Ti2b * VState.vPQRi_i; VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth; VState.qAttitudeLocal = Tl2b.GetQuaternion(); @@ -318,6 +323,7 @@ void FGPropagate::CalculatePQRdot(void) // frame. vPQRdot = Jinv*(vMoments - VState.vPQRi*(J*VState.vPQRi)); + vPQRidot = Tb2i * vPQRdot; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -502,7 +508,7 @@ void FGPropagate::ResolveFrictionForces(double dt) // Instruct the algorithm to zero out the relative movement between the // aircraft and the ground. vdot += (VState.vUVW - Tec2b * LocalTerrainVelocity) / dt; - wdot += VState.vPQR / dt; + wdot += (VState.vPQR - Tec2b * LocalTerrainAngularVelocity) / dt; } // Assemble the linear system of equations @@ -557,6 +563,7 @@ void FGPropagate::ResolveFrictionForces(double dt) vUVWdot += invMass * Fc; vUVWidot += invMass * Tb2i * Fc; vPQRdot += Jinv * Mc; + vPQRidot += Tb2i* Jinv * Mc; // Save the value of the Lagrange multipliers to accelerate the convergence // of the Gauss-Seidel algorithm at next iteration. @@ -609,7 +616,8 @@ void FGPropagate::SetInertialVelocity(FGColumnVector3 Vi) { //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void FGPropagate::SetInertialRates(FGColumnVector3 vRates) { - VState.vPQRi = Ti2b * vRates; + VState.vPQRi_i = vRates; + VState.vPQRi = Ti2b * VState.vPQRi_i; VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth; } @@ -626,11 +634,13 @@ void FGPropagate::InitializeDerivatives(void) // Initialize past values deques VState.dqPQRdot.clear(); + VState.dqPQRidot.clear(); VState.dqUVWidot.clear(); VState.dqInertialVelocity.clear(); VState.dqQtrndot.clear(); for (int i=0; i<4; i++) { VState.dqPQRdot.push_front(vPQRdot); + VState.dqPQRidot.push_front(vPQRidot); VState.dqUVWidot.push_front(vUVWdot); VState.dqInertialVelocity.push_front(VState.vInertialVelocity); VState.dqQtrndot.push_front(vQtrndot); @@ -647,7 +657,7 @@ void FGPropagate::RecomputeLocalTerrainRadius(void) // Get the LocalTerrain radius. FDMExec->GetGroundCallback()->GetAGLevel(t, VState.vLocation, contactloc, dv, - LocalTerrainVelocity); + LocalTerrainVelocity, LocalTerrainAngularVelocity); LocalTerrainRadius = contactloc.GetRadius(); } @@ -712,6 +722,41 @@ void FGPropagate::SetDistanceAGL(double tt) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +void FGPropagate::DumpState(void) +{ + cout << endl; + cout << fgblue + << "------------------------------------------------------------------" << reset << endl; + cout << highint + << "State Report at sim time: " << FDMExec->GetSimTime() << " seconds" << reset << endl; + cout << " " << underon + << "Position" << underoff << endl; + cout << " ECI: " << VState.vInertialPosition.Dump(", ") << " (x,y,z, in ft)" << endl; + cout << " ECEF: " << VState.vLocation << " (x,y,z, in ft)" << endl; + cout << " Local: " << VState.vLocation.GetLatitudeDeg() + << ", " << VState.vLocation.GetLongitudeDeg() + << ", " << GetAltitudeASL() << " (lat, lon, alt in deg and ft)" << endl; + + cout << endl << " " << underon + << "Orientation" << underoff << endl; + cout << " ECI: " << VState.qAttitudeECI.GetEulerDeg().Dump(", ") << " (phi, theta, psi in deg)" << endl; + cout << " Local: " << VState.qAttitudeLocal.GetEulerDeg().Dump(", ") << " (phi, theta, psi in deg)" << endl; + + cout << endl << " " << underon + << "Velocity" << underoff << endl; + cout << " ECI: " << VState.vInertialVelocity.Dump(", ") << " (x,y,z in ft/s)" << endl; + cout << " ECEF: " << (GetTb2ec() * VState.vUVW).Dump(", ") << " (x,y,z in ft/s)" << endl; + cout << " Local: " << GetVel() << " (n,e,d in ft/sec)" << endl; + cout << " Body: " << GetUVW() << " (u,v,w in ft/sec)" << endl; + + cout << endl << " " << underon + << "Body Rates (relative to given frame, expressed in body frame)" << underoff << endl; + cout << " ECI: " << (VState.vPQRi*radtodeg).Dump(", ") << " (p,q,r in deg/s)" << endl; + cout << " ECEF: " << (VState.vPQR*radtodeg).Dump(", ") << " (p,q,r in deg/s)" << endl; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + void FGPropagate::bind(void) { typedef double (FGPropagate::*PMF)(int) const; diff --git a/src/FDM/JSBSim/models/FGPropagate.h b/src/FDM/JSBSim/models/FGPropagate.h index be8ebd224..86e5cd6a0 100644 --- a/src/FDM/JSBSim/models/FGPropagate.h +++ b/src/FDM/JSBSim/models/FGPropagate.h @@ -49,7 +49,7 @@ INCLUDES DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_PROPAGATE "$Id: FGPropagate.h,v 1.48 2010/09/18 22:48:12 jberndt Exp $" +#define ID_PROPAGATE "$Id: FGPropagate.h,v 1.51 2010/10/07 03:45:40 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -102,7 +102,7 @@ CLASS DOCUMENTATION @endcode @author Jon S. Berndt, Mathias Froehlich - @version $Id: FGPropagate.h,v 1.48 2010/09/18 22:48:12 jberndt Exp $ + @version $Id: FGPropagate.h,v 1.51 2010/10/07 03:45:40 jberndt Exp $ */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -135,6 +135,11 @@ public: units rad/sec */ FGColumnVector3 vPQRi; + /** The angular velocity vector for the vehicle body frame relative to the + ECI frame, expressed in the ECI frame. + units rad/sec */ + FGColumnVector3 vPQRi_i; + /** The current orientation of the vehicle, that is, the orientation of the body frame relative to the local, NED frame. */ FGQuaternion qAttitudeLocal; @@ -148,6 +153,7 @@ public: FGColumnVector3 vInertialPosition; deque <FGColumnVector3> dqPQRdot; + deque <FGColumnVector3> dqPQRidot; deque <FGColumnVector3> dqUVWidot; deque <FGColumnVector3> dqInertialVelocity; deque <FGQuaternion> dqQtrndot; @@ -566,16 +572,6 @@ public: VState.vInertialPosition = GetTec2i() * VState.vLocation; UpdateLocationMatrices(); } - void SetLocation(const FGLocation& l) { - VState.vLocation = l; - VState.vInertialPosition = GetTec2i() * VState.vLocation; - UpdateLocationMatrices(); - } - void SetLocation(const FGColumnVector3& l) { - VState.vLocation = l; - VState.vInertialPosition = GetTec2i() * VState.vLocation; - UpdateLocationMatrices(); - } void SetAltitudeASL(double altASL); void SetAltitudeASLmeters(double altASL) {SetAltitudeASL(altASL/fttom);} void SetSeaLevelRadius(double tt) { SeaLevelRadius = tt; } @@ -588,6 +584,16 @@ public: VehicleRadius = GetRadius(); UpdateLocationMatrices(); } + void SetLocation(const FGLocation& l) { + VState.vLocation = l; + VState.vInertialPosition = GetTec2i() * VState.vLocation; + UpdateLocationMatrices(); + } + void SetLocation(const FGColumnVector3& l) { + VState.vLocation = l; + VState.vInertialPosition = GetTec2i() * VState.vLocation; + UpdateLocationMatrices(); + } void RecomputeLocalTerrainRadius(void); @@ -604,6 +610,8 @@ public: double value; }; + void DumpState(void); + private: // state vector @@ -612,6 +620,7 @@ private: FGColumnVector3 vVel; FGColumnVector3 vPQRdot; + FGColumnVector3 vPQRidot; FGColumnVector3 vUVWdot, vUVWidot; FGColumnVector3 vInertialVelocity; FGColumnVector3 vLocation; @@ -633,7 +642,7 @@ private: FGMatrix33 Tl2i; double LocalTerrainRadius, SeaLevelRadius, VehicleRadius; - FGColumnVector3 LocalTerrainVelocity; + FGColumnVector3 LocalTerrainVelocity, LocalTerrainAngularVelocity; eIntegrateType integrator_rotational_rate; eIntegrateType integrator_translational_rate; eIntegrateType integrator_rotational_position; diff --git a/src/FDM/JSBSim/models/FGPropulsion.cpp b/src/FDM/JSBSim/models/FGPropulsion.cpp index f0fbe04b3..21f469c1f 100644 --- a/src/FDM/JSBSim/models/FGPropulsion.cpp +++ b/src/FDM/JSBSim/models/FGPropulsion.cpp @@ -65,7 +65,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGPropulsion.cpp,v 1.40 2010/09/07 00:40:03 jberndt Exp $"; +static const char *IdSrc = "$Id: FGPropulsion.cpp,v 1.41 2010/10/15 11:32:41 jberndt Exp $"; static const char *IdHdr = ID_PROPULSION; extern short debug_lvl; @@ -295,29 +295,34 @@ bool FGPropulsion::Load(Element* el) document->SetParent(engine_element); type = document->GetName(); - if (type == "piston_engine") { - HavePistonEngine = true; - if (!IsBound) bind(); - Engines.push_back(new FGPiston(FDMExec, document, numEngines)); - } else if (type == "turbine_engine") { - HaveTurbineEngine = true; - if (!IsBound) bind(); - Engines.push_back(new FGTurbine(FDMExec, document, numEngines)); - } else if (type == "turboprop_engine") { - HaveTurboPropEngine = true; - if (!IsBound) bind(); - Engines.push_back(new FGTurboProp(FDMExec, document, numEngines)); - } else if (type == "rocket_engine") { - HaveRocketEngine = true; - if (!IsBound) bind(); - Engines.push_back(new FGRocket(FDMExec, document, numEngines)); - } else if (type == "electric_engine") { - HaveElectricEngine = true; - if (!IsBound) bind(); - Engines.push_back(new FGElectric(FDMExec, document, numEngines)); - } else { - cerr << "Unknown engine type: " << type << endl; - exit(-5); + try { + if (type == "piston_engine") { + HavePistonEngine = true; + if (!IsBound) bind(); + Engines.push_back(new FGPiston(FDMExec, document, numEngines)); + } else if (type == "turbine_engine") { + HaveTurbineEngine = true; + if (!IsBound) bind(); + Engines.push_back(new FGTurbine(FDMExec, document, numEngines)); + } else if (type == "turboprop_engine") { + HaveTurboPropEngine = true; + if (!IsBound) bind(); + Engines.push_back(new FGTurboProp(FDMExec, document, numEngines)); + } else if (type == "rocket_engine") { + HaveRocketEngine = true; + if (!IsBound) bind(); + Engines.push_back(new FGRocket(FDMExec, document, numEngines)); + } else if (type == "electric_engine") { + HaveElectricEngine = true; + if (!IsBound) bind(); + Engines.push_back(new FGElectric(FDMExec, document, numEngines)); + } else { + cerr << "Unknown engine type: " << type << endl; + exit(-5); + } + } catch (std::string str) { + cerr << endl << fgred << str << reset << endl; + return false; } FCS->AddThrottle(); diff --git a/src/FDM/JSBSim/models/propulsion/FGEngine.cpp b/src/FDM/JSBSim/models/propulsion/FGEngine.cpp index 6cc525a53..e48e27426 100644 --- a/src/FDM/JSBSim/models/propulsion/FGEngine.cpp +++ b/src/FDM/JSBSim/models/propulsion/FGEngine.cpp @@ -54,7 +54,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGEngine.cpp,v 1.39 2010/08/21 17:13:48 jberndt Exp $"; +static const char *IdSrc = "$Id: FGEngine.cpp,v 1.40 2010/10/15 11:32:41 jberndt Exp $"; static const char *IdHdr = ID_ENGINE; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -109,7 +109,11 @@ FGEngine::FGEngine(FGFDMExec* exec, Element* engine_element, int engine_number) // Load thruster local_element = engine_element->GetParent()->FindElement("thruster"); if (local_element) { - if (!LoadThruster(local_element)) exit(-1); + try { + if (!LoadThruster(local_element)) exit(-1); + } catch (std::string str) { + throw("Error loading engine " + Name + ". " + str); + } } else { cerr << "No thruster definition supplied with engine definition." << endl; } diff --git a/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp b/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp index 8204bb9d2..f83f961b8 100644 --- a/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp +++ b/src/FDM/JSBSim/models/propulsion/FGPropeller.cpp @@ -48,7 +48,7 @@ using namespace std; namespace JSBSim { -static const char *IdSrc = "$Id: FGPropeller.cpp,v 1.30 2010/05/02 15:10:07 jberndt Exp $"; +static const char *IdSrc = "$Id: FGPropeller.cpp,v 1.32 2010/10/21 03:27:40 jberndt Exp $"; static const char *IdHdr = ID_PROPELLER; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -105,16 +105,20 @@ FGPropeller::FGPropeller(FGFDMExec* exec, Element* prop_element, int num) for (int i=0; i<2; i++) { table_element = prop_element->FindNextElement("table"); name = table_element->GetAttributeValue("name"); - if (name == "C_THRUST") { - cThrust = new FGTable(PropertyManager, table_element); - } else if (name == "C_POWER") { - cPower = new FGTable(PropertyManager, table_element); - } else if (name == "CT_MACH") { - CtMach = new FGTable(PropertyManager, table_element); - } else if (name == "CP_MACH") { - CpMach = new FGTable(PropertyManager, table_element); - } else { - cerr << "Unknown table type: " << name << " in propeller definition." << endl; + try { + if (name == "C_THRUST") { + cThrust = new FGTable(PropertyManager, table_element); + } else if (name == "C_POWER") { + cPower = new FGTable(PropertyManager, table_element); + } else if (name == "CT_MACH") { + CtMach = new FGTable(PropertyManager, table_element); + } else if (name == "CP_MACH") { + CpMach = new FGTable(PropertyManager, table_element); + } else { + cerr << "Unknown table type: " << name << " in propeller definition." << endl; + } + } catch (std::string str) { + throw("Error loading propeller table:" + name + ". " + str); } } @@ -334,7 +338,7 @@ double FGPropeller::GetPowerRequired(void) if (CL > 1.5) CL = 1.5; double BladeArea = Diameter * Diameter / 32.0 * numBlades; vTorque(eX) = -Sense*BladeArea*Diameter*Vel*Vel*rho*0.19*CL; - PowerRequired = vTorque(eX)*0.2*M_PI; + PowerRequired = fabs(vTorque(eX))*0.2*M_PI; } return PowerRequired; From b1e257781e443d17863b300b7dd1f1de5e7aa58b Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Tue, 26 Oct 2010 10:12:05 +0100 Subject: [PATCH 41/45] Fix VC90 build for JSBSim update --- projects/VC90/FlightGear/FlightGear.vcproj | 8 -------- 1 file changed, 8 deletions(-) diff --git a/projects/VC90/FlightGear/FlightGear.vcproj b/projects/VC90/FlightGear/FlightGear.vcproj index e97cba54f..6db57814d 100644 --- a/projects/VC90/FlightGear/FlightGear.vcproj +++ b/projects/VC90/FlightGear/FlightGear.vcproj @@ -2055,14 +2055,6 @@ RelativePath="..\..\..\src\FDM\JSBSim\FGJSBBase.h" > </File> - <File - RelativePath="..\..\..\src\FDM\JSBSim\FGState.cpp" - > - </File> - <File - RelativePath="..\..\..\src\FDM\JSBSim\FGState.h" - > - </File> <File RelativePath="..\..\..\src\FDM\JSBSim\JSBSim.cxx" > From 4371a18771829f97c9efa1145ac12f67954574ff Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <Torsten@t3r.de> Date: Tue, 26 Oct 2010 21:20:01 +0200 Subject: [PATCH 42/45] resurrection of /sim/rendering/draw-otw --- src/Main/viewer.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Main/viewer.cxx b/src/Main/viewer.cxx index ab5f6aa44..05816f8bc 100644 --- a/src/Main/viewer.cxx +++ b/src/Main/viewer.cxx @@ -651,6 +651,8 @@ FGViewer::update (double dt) } } recalc(); - _cameraGroup->update(toOsg(_absolute_view_pos), toOsg(mViewOrientation)); - _cameraGroup->setCameraParameters(get_v_fov(), get_aspect_ratio()); + if( fgGetBool( "/sim/rendering/draw-otw", true ) ) { + _cameraGroup->update(toOsg(_absolute_view_pos), toOsg(mViewOrientation)); + _cameraGroup->setCameraParameters(get_v_fov(), get_aspect_ratio()); + } } From c96206aafd6c9f6e7d3d83b2507e9df5eda3fb55 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Tue, 26 Oct 2010 23:42:34 +0100 Subject: [PATCH 43/45] Tweak shutdown code, chasing intermittent segfaults on shutdown. --- src/Main/globals.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 33f36ecc8..db6eef28c 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -167,6 +167,7 @@ FGGlobals::~FGGlobals() // shut down all subsystems, make sure we take down the // AIModels system first. SGSubsystem* ai = subsystem_mgr->remove("ai_model"); + ai->unbind(); delete ai; subsystem_mgr->unbind(); From 0320010d955019c6746d7a04ab63daab9a1c0690 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Thu, 28 Oct 2010 13:54:01 +0100 Subject: [PATCH 44/45] Make use of view[0] in HUD-runway lazy. --- src/Instrumentation/HUD/HUD.hxx | 1 - src/Instrumentation/HUD/HUD_runway.cxx | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Instrumentation/HUD/HUD.hxx b/src/Instrumentation/HUD/HUD.hxx index 3ef9d7ee7..3408e54c5 100644 --- a/src/Instrumentation/HUD/HUD.hxx +++ b/src/Instrumentation/HUD/HUD.hxx @@ -599,7 +599,6 @@ private: double _default_heading; GLint _view[4]; FGRunway* _runway; - FGViewer* _cockpit_view; unsigned short _stipple_out; // stipple pattern of the outline of the runway unsigned short _stipple_center; // stipple pattern of the center line of the runway bool _draw_arrow; // draw arrow when runway is not visible in HUD diff --git a/src/Instrumentation/HUD/HUD_runway.cxx b/src/Instrumentation/HUD/HUD_runway.cxx index fcf4f1127..ae6ebba65 100644 --- a/src/Instrumentation/HUD/HUD_runway.cxx +++ b/src/Instrumentation/HUD/HUD_runway.cxx @@ -49,7 +49,6 @@ HUD::Runway::Runway(HUD *hud, const SGPropertyNode *node, float x, float y) : _scale_dist(node->getDoubleValue("scale-dist-nm")), _default_pitch(fgGetDouble("/sim/view[0]/config/pitch-pitch-deg", 0.0)), _default_heading(fgGetDouble("/sim/view[0]/config/pitch-heading-deg", 0.0)), - _cockpit_view(globals->get_viewmgr()->get_view(0)), _stipple_out(node->getIntValue("outer_stipple", 0xFFFF)), _stipple_center(node->getIntValue("center-stipple", 0xFFFF)), _draw_arrow(_arrow_scale > 0 ? true : false), @@ -69,7 +68,6 @@ HUD::Runway::Runway(HUD *hud, const SGPropertyNode *node, float x, float y) : _top = _center_y + (_h / 2) + _y; } - void HUD::Runway::draw() { _runway = get_active_runway(); @@ -87,8 +85,10 @@ void HUD::Runway::draw() double po = curr_view->getPitchOffset_deg(); double ho = curr_view->getHeadingOffset_deg(); - double yaw = -(_cockpit_view->getHeadingOffset_deg() - _default_heading) * SG_DEGREES_TO_RADIANS; - double pitch = (_cockpit_view->getPitchOffset_deg() - _default_pitch) * SG_DEGREES_TO_RADIANS; + FGViewer* cockpitView = globals->get_viewmgr()->get_view(0); + + double yaw = -(cockpitView->getHeadingOffset_deg() - _default_heading) * SG_DEGREES_TO_RADIANS; + double pitch = (cockpitView->getPitchOffset_deg() - _default_pitch) * SG_DEGREES_TO_RADIANS; //double roll = fgGetDouble("/sim/view[0]/config/roll-offset-deg",0.0) //TODO: adjust for default roll offset double sPitch = sin(pitch), cPitch = cos(pitch), sYaw = sin(yaw), cYaw = cos(yaw); From e9f4106bc16b4dc55cdff4fae5f22ad31d30651a Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Thu, 28 Oct 2010 13:54:45 +0100 Subject: [PATCH 45/45] Remove confusing default (missing) path from 2D panel code. --- src/Main/fg_commands.cxx | 8 +++++--- src/Main/fg_init.cxx | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 74551bc91..4fa1a7dc0 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -392,9 +392,11 @@ static bool do_panel_load (const SGPropertyNode * arg) { string panel_path = - arg->getStringValue("path", - fgGetString("/sim/panel/path", - "Panels/Default/default.xml")); + arg->getStringValue("path", fgGetString("/sim/panel/path")); + if (panel_path.empty()) { + return false; + } + FGPanel * new_panel = fgReadPanel(panel_path); if (new_panel == 0) { SG_LOG(SG_INPUT, SG_ALERT, diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index f154ab658..b3af6a617 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -1414,20 +1414,20 @@ bool fgInitSubsystems() { // Add a new 2D panel. //////////////////////////////////////////////////////////////////// - string panel_path = fgGetString("/sim/panel/path", - "Panels/Default/default.xml"); - - globals->set_current_panel( fgReadPanel(panel_path) ); - if (globals->get_current_panel() == 0) { + string panel_path(fgGetString("/sim/panel/path")); + if (!panel_path.empty()) { + FGPanel* p = fgReadPanel(panel_path); + if (p) { + globals->set_current_panel(p); + p->init(); + p->bind(); + SG_LOG( SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path ); + } else { SG_LOG( SG_INPUT, SG_ALERT, "Error reading new panel from " << panel_path ); - } else { - SG_LOG( SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path ); - globals->get_current_panel()->init(); - globals->get_current_panel()->bind(); + } } - //////////////////////////////////////////////////////////////////// // Initialize the controls subsystem. ////////////////////////////////////////////////////////////////////