1
0
Fork 0

Merge branch 'next' into durk-atc

This commit is contained in:
Durk Talsma 2011-07-24 08:44:22 +02:00
commit 5228053f7f
56 changed files with 763 additions and 248 deletions

View file

@ -56,6 +56,7 @@ option(ENABLE_JSBSIM "Set to ON to build FlightGear with JSBSim FDM" ON)
option(ENABLE_FGADMIN "Set to ON to build FlightGear with FGADMIN" ON) option(ENABLE_FGADMIN "Set to ON to build FlightGear with FGADMIN" ON)
option(EVENT_INPUT "Set to ON to build FlightGear with event-based Input support" OFF) option(EVENT_INPUT "Set to ON to build FlightGear with event-based Input support" OFF)
option(ENABLE_LIBSVN "Set to ON to build FlightGear/terrasync with libsvnclient support" OFF) option(ENABLE_LIBSVN "Set to ON to build FlightGear/terrasync with libsvnclient support" OFF)
option(WITH_FGPANEL "Set to ON to build the fgpanel application" ON)
set(MSVC_3RDPARTY_ROOT NOT_FOUND CACHE PATH "Location where the third-party dependencies are extracted") set(MSVC_3RDPARTY_ROOT NOT_FOUND CACHE PATH "Location where the third-party dependencies are extracted")
@ -131,7 +132,7 @@ if(ENABLE_LIBSVN)
endif(ENABLE_LIBSVN) endif(ENABLE_LIBSVN)
find_package(PLIB REQUIRED puaux pu js fnt) find_package(PLIB REQUIRED puaux pu js fnt)
find_package(SimGear 2.3.0 REQUIRED) find_package(SimGear 2.5.0 REQUIRED)
check_include_file(unistd.h HAVE_UNISTD_H) check_include_file(unistd.h HAVE_UNISTD_H)
check_include_file(sys/time.h HAVE_SYS_TIME_H) check_include_file(sys/time.h HAVE_SYS_TIME_H)

View file

@ -2,7 +2,7 @@
macro(flightgear_component name sources) macro(flightgear_component name sources)
set(libName "fg${name}") set(libName "fg${name}")
add_library(${libName} STATIC ${sources} ) add_library(${libName} STATIC ${sources} ${ARGV2})
set_property(GLOBAL APPEND PROPERTY FG_LIBS ${libName}) set_property(GLOBAL APPEND PROPERTY FG_LIBS ${libName})

108
Thanks
View file

@ -36,9 +36,11 @@ Raul Alonzo <amil@las.es>
Michele America <nomimarketing@mail.telepac.pt> Michele America <nomimarketing@mail.telepac.pt>
Contributed to the HUD code. Contributed to the HUD code.
Emmanuel Baranger <> Emmanuel Baranger <>
Many, many very nice aircraft models. Many, many very nice aircraft models.
Andrei Barbu <andrei@0xab.com> Andrei Barbu <andrei@0xab.com>
Designed and implemented the current version of the FlightGear website. Designed and implemented the current version of the FlightGear website.
@ -74,13 +76,21 @@ Paul Bleisch <pbleisch@acm.org>
Also contributed a first stab at a config file/command line parsing Also contributed a first stab at a config file/command line parsing
system. system.
Matthias Boerner <> Matthias Boerner <>
Coorganizer of the FlightGear booth at the annual LinuxTag event in Coorganizer of the FlightGear booth at the annual LinuxTag event in
Germany. Germany.
Thorsten Brehm
Thorsten provided the TCAS system and fixed an uncountable number of
bugs, closed memory leaks and helps creating new releases.
Alexis Bory Alexis Bory
Very nice models, including the F14-B. Very nice models, including the F14-B.
Jim Brennan <jj@kingmont.com> Jim Brennan <jj@kingmont.com>
Provided a big chunk of online space to store USA scenery for Flight Gear. Provided a big chunk of online space to store USA scenery for Flight Gear.
@ -91,8 +101,10 @@ Bernie Bright <bbright@bigpond.net.au>
Threading support and threaded tile pager. Threading support and threaded tile pager.
Initiate the fgrun project Initiate the fgrun project
Francesco Brisa <> Francesco Brisa <>
Scenery models and ground networks for Italian airports. Scenery models and ground networks for Italian airports.
Scripts for automated source downloads and builds.
Bernhard H. Buckel <buckel@mail.uni-wuerzburg.de> Bernhard H. Buckel <buckel@mail.uni-wuerzburg.de>
@ -128,6 +140,11 @@ John Check <j4strngs@rockfish.net>
New instrument panel configurations New instrument panel configurations
Bertrand Coconnier
Contributed several bugfixes and improvements for the integration of
the JSBSim flight dynamics model.
Dave Cornish <dmc@halcyon.com> Dave Cornish <dmc@halcyon.com>
Created our new, super cool, runway textures. Created our new, super cool, runway textures.
Created some of our cloud textures. Created some of our cloud textures.
@ -139,15 +156,24 @@ Oliver Delise <delise@mail.isis.de>
Founder of the FlightGear MultiPilot Project : Founder of the FlightGear MultiPilot Project :
http://www.isis.de/members/~odelise/progs/flightgear http://www.isis.de/members/~odelise/progs/flightgear
John Denker
Contributed bugfixes and improvements to the navigation and ATIS code.
Jean-Francois Doue Jean-Francois Doue
Vector 2D, 3D, 4D and Matrix 3D and 4D inlined C++ classes. (Based on Vector 2D, 3D, 4D and Matrix 3D and 4D inlined C++ classes. (Based on
Graphics Gems IV ed. Paul S. Heckbert) Graphics Gems IV ed. Paul S. Heckbert)
http://www.animats.com/simpleppp/ftp/public_html/topics/developers.html http://www.animats.com/simpleppp/ftp/public_html/topics/developers.html
Torsten Dreyer Torsten Dreyer
Contributed a very nice Piper Sceneca, closely modelled after the Contributed the very nice Piper Seneca, closely modelled after the
real thing. real thing. Also added many other nice aircraft (such as the ogeL, also
Many other nice aircraft, buildings, etc etc. closely modelled after the real thing), buildings, etc.
Creator of fgpanel. Code maintainer of weather, environment, autopilot
and many other core systems.
Dave Eberly <eberly@magic-software.com> Dave Eberly <eberly@magic-software.com>
Contributed some sphere interpolation code used by Christian Mayer's Contributed some sphere interpolation code used by Christian Mayer's
@ -155,9 +181,11 @@ Dave Eberly <eberly@magic-software.com>
really useful looking code available there. really useful looking code available there.
http://www.magic-software.com http://www.magic-software.com
Martin Eschen <> Martin Eschen <>
Helped enourmously toward finishing the full scale traffic demo at EHAM. Helped enourmously toward finishing the full scale traffic demo at EHAM.
Francine Evans <evans@cs.sunysb.edu> Francine Evans <evans@cs.sunysb.edu>
Wrote the @#$@#$@% GPL'd tri-striper we use and "love". :-) Wrote the @#$@#$@% GPL'd tri-striper we use and "love". :-)
http://www.cs.sunysb.edu/~evans/stripe.html http://www.cs.sunysb.edu/~evans/stripe.html
@ -168,6 +196,7 @@ Oscar Everitt <bigoc@premier.net>
for FS98. They are pretty cool and Oscar was happy to contribute for FS98. They are pretty cool and Oscar was happy to contribute
them to our little project. them to our little project.
Detlef Faber Detlef Faber
Many WWII era aircraft. Many WWII era aircraft.
@ -175,13 +204,16 @@ Detlef Faber
Leidson Campos A. Ferreira <leidson@planetamessenger.org> Leidson Campos A. Ferreira <leidson@planetamessenger.org>
Rewrote the Jpeg screen httpd streaming (--jpg-httpd option) Rewrote the Jpeg screen httpd streaming (--jpg-httpd option)
Olaf Flebbe Olaf Flebbe
Improved the build system for Windows and provided pre-built Improved the build system for Windows and provided pre-built
dependencies. dependencies.
Bruce Finney <bfinney@gte.net> Bruce Finney <bfinney@gte.net>
MSVC5 compatibility. MSVC5 compatibility.
Thomas Förster <> Thomas Förster <>
Updates to the AI system, including the Dykstra route finding algorithm, Updates to the AI system, including the Dykstra route finding algorithm,
adding a performance class, and many code clean-ups. adding a performance class, and many code clean-ups.
@ -209,13 +241,18 @@ Jean-loup Gailly and Mark Adler <zlib@gzip.org>
Thomas Gellekum <tg@ihf.rwth-aachen.de> Thomas Gellekum <tg@ihf.rwth-aachen.de>
Changes and updates for compiling on FreeBSD Changes and updates for compiling on FreeBSD
Ralf Gerlich <> Ralf Gerlich <>
Technical Genius behind the Custom Scenery Project. Technical Genius behind the Custom Scenery Project.
Current maintainer of TaxiDraw Current maintainer of TaxiDraw
Anders Gidenstam <> Anders Gidenstam <>
Support for Lighter than Air vehicles. Added support for lighter than air vehicles to JSBSim.
Author of the ZeppelinNT. Contributed simulation of wildfires and a basic system for dual control
of an aircraft over the multiplayer network.
Author of several airships and one aircraft.
Neetha Girish <neethagirish@usa.net> Neetha Girish <neethagirish@usa.net>
Contributed the xml configurable HUD changes. Contributed the xml configurable HUD changes.
@ -235,18 +272,22 @@ Michael I. Gold <gold@puck.asd.sgi.com>
Habibie <habibie@MailandNews.com> Habibie <habibie@MailandNews.com>
RedHat package building changes for SimGear. RedHat package building changes for SimGear.
Csaba Halász <> Csaba Halász <>
Many bugfixes and code checking. Many bugfixes and code checking.
Ampere Hardraade <> Ampere Hardraade <>
Many detailed 3D models of aircraft, including the MD11, and several Many detailed 3D models of aircraft, including the MD11, and several
Airbuses. Airbuses.
Brett Harrison <> Brett Harrison <>
Ground networks for various airports. Ground networks for various airports.
Most of the liveries for the new C172p by HHS. Most of the liveries for the new C172p by HHS.
AI Repaints for several 737's and C172's AI Repaints for several 737's and C172's
Dave Haskell <dave@haskell.demon.co.uk> Dave Haskell <dave@haskell.demon.co.uk>
Original exterior textures for the Cessna 310 U-3A model. Only a few Original exterior textures for the Cessna 310 U-3A model. Only a few
minor modifications were made. minor modifications were made.
@ -277,6 +318,7 @@ Bruce Jackson of NASA <e.b.jackson@larc.nasa.gov>
the flight model. Bruce has patiently answered my many, many questions. the flight model. Bruce has patiently answered my many, many questions.
http://dcb.larc.nasa.gov/www/DCBStaff/ebj/ebj.html http://dcb.larc.nasa.gov/www/DCBStaff/ebj/ebj.html
Ron Jensen Ron Jensen
Contributed to the piston engine code in JSBSim. Contributed to the piston engine code in JSBSim.
@ -402,10 +444,12 @@ Phil Nelson <phil@cs.wwu.edu>
Author of GNU dbm. gdbm is a set of database routines that use Author of GNU dbm. gdbm is a set of database routines that use
extendible hashing and works similar to the standard UNIX dbm routines. extendible hashing and works similar to the standard UNIX dbm routines.
Tatsuhiro Nishioka Tatsuhiro Nishioka
Maintainer of the Mac port. Maintainer of the Mac port.
Contributed some very nice Japanese aircraft models. Contributed some very nice Japanese aircraft models.
Alexei Novikov <anovikov@heron.itep.ru> Alexei Novikov <anovikov@heron.itep.ru>
Created European Scenery Created European Scenery
Contributed a script to turn fgfs scenery into beautifully rendered Contributed a script to turn fgfs scenery into beautifully rendered
@ -445,9 +489,11 @@ Alex Perry <alex.perry@ieee.org>
Contributed code to more accurately model VSI, DG, Altitude. Contributed code to more accurately model VSI, DG, Altitude.
Contributed to the Install and Getting Started manual. Contributed to the Install and Getting Started manual.
Pigeon <> Pigeon <>
Developed the multiplayer network infrastructure. Developed the multiplayer network infrastructure.
Friedemann Reinhard <mpt218@faupt212.physik.uni-erlangen.de> Friedemann Reinhard <mpt218@faupt212.physik.uni-erlangen.de>
Contributed beginnings of a textured instrument panel. Contributed beginnings of a textured instrument panel.
@ -465,7 +511,6 @@ Frederic Bouvier <fredfgfs01@free.fr>
the windows community. the windows community.
Petter Reinholdtsen <pere@games.no> Petter Reinholdtsen <pere@games.no>
Incorporated the Gnu automake/autoconf system (with libtool). Incorporated the Gnu automake/autoconf system (with libtool).
This should streamline and standardize the build process for all This should streamline and standardize the build process for all
@ -473,22 +518,32 @@ Petter Reinholdtsen <pere@games.no>
environments since the don't use the Unix make system. environments since the don't use the Unix make system.
Thorsten Renk
Created the local weather system, providing beautiful cloudscapes
and an accurate meteorological simulation.
William Riley <riley@technologist.com> William Riley <riley@technologist.com>
Contributed code to add "brakes". Contributed code to add "brakes".
Patch to support a first joystick with more than two axes. Patch to support a first joystick with more than two axes.
World scenery based on vmap0 data. World scenery based on vmap0 data.
Gijs de Rooy <> Gijs de Rooy <>
Contributed some very nice building models, including a very Contributed some very nice building models, including a very
detailed layout of the Amsterdam airport terminals, and many detailed layout of the Amsterdam airport terminals, and many
downtown buildings. downtown buildings.
Redid the Boeing 747-400 3D model Redid the Boeing 747-400 3D model.
Very active first aid responder on the official Flightgear Greatly contributed to the FlightGear community as a very active
forum. first aid responder on the official Flightgear forum, as a forum
and wiki admin, and as the editor of the monthly FlightGear
newsletter.
Gerard Robin <> Gerard Robin <>
Many nice Aircraft models Many nice Aircraft models
Andy Ross <andy@plausible.org> Andy Ross <andy@plausible.org>
Contributed a new configurable FDM, "YASim", based on geometry Contributed a new configurable FDM, "YASim", based on geometry
information rather than aerodynamic coefficients. information rather than aerodynamic coefficients.
@ -497,19 +552,23 @@ Andy Ross <andy@plausible.org>
Modified the UI code to allow a far more flexible grouping system. Modified the UI code to allow a far more flexible grouping system.
Added the Nasal scripting language and added FlightGear integration. Added the Nasal scripting language and added FlightGear integration.
Brian Schack <> Brian Schack <>
Current maintainer of Atlas, the moving map program for FlightGear Current maintainer of Atlas, the moving map program for FlightGear
Paul Schlyter <pausch@saaf.se> Paul Schlyter <pausch@saaf.se>
Mr. Schlyter provided Durk Talsma with all the information Mr. Schlyter provided Durk Talsma with all the information
he needed to write the astro code. Mr. S. is also willing he needed to write the astro code. Mr. S. is also willing
to answer astro-related questions whenever one needs to. to answer astro-related questions whenever one needs to.
http://welcome.to/pausch http://welcome.to/pausch
Christian Schmitt <> Christian Schmitt <>
Detailed Frankfurt airport buildings. Detailed Frankfurt airport buildings.
Contributions to the custom scenery project. Contributions to the custom scenery project.
Chris Schoeneman <crs@millpond.engr.sgi.com> Chris Schoeneman <crs@millpond.engr.sgi.com>
Contributed some 3d sound playing code for Irix, Win32, and Linux Contributed some 3d sound playing code for Irix, Win32, and Linux
It is unclear if this code will be used directly, but it certainly It is unclear if this code will be used directly, but it certainly
@ -519,7 +578,8 @@ Chris Schoeneman <crs@millpond.engr.sgi.com>
Phil Schubert <philip@zedley.com> Phil Schubert <philip@zedley.com>
Contributed various textures and engine modelling. Contributed various textures and engine modelling.
http://www.zedley.com/Philip/index.htm http://www.zedley.com/Philip/index.htm
Heiko Schulz <> Heiko Schulz <>
Contributed AI traffic for EDDF Contributed AI traffic for EDDF
EDDF Night lights EDDF Night lights
@ -548,10 +608,14 @@ Martin Spott <Martin.Spott@uni-duisburg.de>
Coorganizer of the FlightGear booth at the annual LinuxTag event in Coorganizer of the FlightGear booth at the annual LinuxTag event in
Germany. Germany.
Manages the "World Scenery" releases. Manages the "World Scenery" releases.
Maintains world's biggest repository and toolchain for free and
open map and scenery data at http://mapserver.flightgear.org/
Jon Stockill <> Jon Stockill <>
Maintainer of the object database. Maintainer of the object database.
Martin Dressler <dr@musicabona.cz> Martin Dressler <dr@musicabona.cz>
Created some outstanding panel instrumentation textures Created some outstanding panel instrumentation textures
for use in full-screen mode. for use in full-screen mode.
@ -573,16 +637,19 @@ Durk Talsma <d.talsma@chello.nl>
Full scale AI traffic demo for EHAM. Full scale AI traffic demo for EHAM.
Current FlightGear release manager. Current FlightGear release manager.
Gabor Toth <> Gabor Toth <>
Contributed some Livery repaints for AI Aircraft Contributed some Livery repaints for AI Aircraft
Contributed many ideas leading towards the Traffic Manager II format Contributed many ideas leading towards the Traffic Manager II format
Runs FGTracker, an online flight tracking service for FlightGear Runs FGTracker, an online flight tracking service for FlightGear
James Turner <> James Turner <>
Many code cleanups of the internal structure of the airport database, Many code cleanups of the internal structure of the airport database,
runway parsing, route management. runway parsing, route management.
Is currently working on adding flightmanagement support. Is currently working on adding flightmanagement support.
UIUC - Department of Aeronautical and Astronautical Engineering UIUC - Department of Aeronautical and Astronautical Engineering
Contributed modifications to LaRCsim to allow loading of aircraft Contributed modifications to LaRCsim to allow loading of aircraft
parameters from a file. These modifications were made as part of an parameters from a file. These modifications were made as part of an
@ -683,14 +750,17 @@ Jean-Claude Wippler <jcw@equi4.com>
X/MIT-style license. Please see the following URL for more info: X/MIT-style license. Please see the following URL for more info:
http://www.equi4.com/metakit http://www.equi4.com/metakit
Holger Wirtz <> Holger Wirtz <>
Author of FGCom, a voice communication program intented for FlightGear Author of FGCom, a voice communication program intented for FlightGear
multiplayer/ATC. multiplayer/ATC.
John Wojnaroski <castle@mminternet.com> John Wojnaroski <castle@mminternet.com>
Open Glass Cockpit project Open Glass Cockpit project
3d clouds 3d clouds
Marcus Zojer <> Marcus Zojer <>
Contributed a B1B aircraft model. Contributed a B1B aircraft model.
@ -728,6 +798,7 @@ Mathias Fr
land on aircraft carriers. land on aircraft carriers.
Modified YASim, JSBSim and LaRCsim to support the groundcache code. Modified YASim, JSBSim and LaRCsim to support the groundcache code.
Reorganized the code to eliminate the viewer jitter for close by objects. Reorganized the code to eliminate the viewer jitter for close by objects.
Mathias is responsible for the transition to OSG and he added HLA support.
Harald Johnsen <hjohnsen@evc.net> Harald Johnsen <hjohnsen@evc.net>
@ -783,7 +854,7 @@ SkyscraperPage.com http://skyscraperpage.com
WoodSoup Project http://www.woodsoup.org WoodSoup Project http://www.woodsoup.org
[ FlightGear no longer uses woodsoup services, but we appreciate [ FlightGear no longer uses woodsoup services, but we appreciate
the support provided to our project during the time they hosted us. ] the support provided to our project during the time they hosted us. ]
Provided computing resources and services so that the Flight Gear Provided computing resources and services so that the FlightGear
project could have real home. This includes, web services, project could have real home. This includes, web services,
ftp services, shell accounts, email lists, dns services, etc. ftp services, shell accounts, email lists, dns services, etc.
@ -802,12 +873,7 @@ THIS DOCUMENT WAS INITIALLY WRITTEN BY
Curt L. Olson <http://www.flightgear.org/~curt> Curt L. Olson <http://www.flightgear.org/~curt>
Updated 2000-03-08 by Oliver Delise, delise@mail.isis.de
THE CONTENTS WERE LASTLY RESEARCHED AND UPDATED MARCH, 8 2000
Oliver Delise <delise@mail.isis.de>
Updated 2001-12-11 by David Megginson, david@megginson.com Updated 2001-12-11 by David Megginson, david@megginson.com
Updated 2003-04-17, Updated 2003-04-17,
Updated 2004-06-01, Updated 2004-06-01,

View file

@ -583,7 +583,7 @@ if test "x$ac_cv_header_simgear_version_h" != "xyes"; then
exit exit
fi fi
AC_MSG_CHECKING([for SimGear 2.3.0 or newer]) AC_MSG_CHECKING([for SimGear 2.5.0 or newer])
AC_TRY_RUN([ AC_TRY_RUN([
#include <stdio.h> #include <stdio.h>

View file

@ -2,10 +2,10 @@ Use FlightGear.sln to compile fgfs executable for Win32 or x64 architectures wit
Previous versions of Visual Studio are not officially supported anymore. Previous versions of Visual Studio are not officially supported anymore.
Precompiled librairies and headers for compiling Win32 executables with VS2008 : Precompiled librairies and headers for compiling Win32 executables with VS2008 :
ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-win32-VS90-3rdParty+OSG-20110618.zip ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-win32-VS90-3rdParty+OSG-20110703.zip
Precompiled librairies and headers for compiling x64 executables with VS2008 : Precompiled librairies and headers for compiling x64 executables with VS2008 :
ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-x64-VS90-3rdParty+OSG-20110618.zip ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/MSVC/fgfs-x64-VS90-3rdParty+OSG-20110703.zip
The VS2008 / v9.0 project files assume the directory layout below : The VS2008 / v9.0 project files assume the directory layout below :

View file

@ -102,6 +102,16 @@ Section "" ;No components page, name is not important
File ${OSGPluginsDir}\osgdb_png.dll File ${OSGPluginsDir}\osgdb_png.dll
File ${OSGPluginsDir}\osgdb_dds.dll File ${OSGPluginsDir}\osgdb_dds.dll
File ${OSGPluginsDir}\osgdb_txf.dll File ${OSGPluginsDir}\osgdb_txf.dll
File ${OSGPluginsDir}\osgdb_serializers_osg.dll
File ${OSGPluginsDir}\osgdb_serializers_osganimation.dll
File ${OSGPluginsDir}\osgdb_serializers_osgfx.dll
File ${OSGPluginsDir}\osgdb_serializers_osgmanipulator.dll
File ${OSGPluginsDir}\osgdb_serializers_osgparticle.dll
File ${OSGPluginsDir}\osgdb_serializers_osgshadow.dll
File ${OSGPluginsDir}\osgdb_serializers_osgsim.dll
File ${OSGPluginsDir}\osgdb_serializers_osgterrain.dll
File ${OSGPluginsDir}\osgdb_serializers_osgtext.dll
File ${OSGPluginsDir}\osgdb_serializers_osgvolume.dll
File ${OSGPluginsDir}\osgdb_deprecated_osg.dll File ${OSGPluginsDir}\osgdb_deprecated_osg.dll
File ${OSGPluginsDir}\osgdb_deprecated_osgparticle.dll File ${OSGPluginsDir}\osgdb_deprecated_osgparticle.dll

View file

@ -23,6 +23,27 @@ set(SOURCES
performancedb.cxx performancedb.cxx
submodel.cxx submodel.cxx
) )
flightgear_component(AIModel "${SOURCES}") set(HEADERS
AIAircraft.hxx
AIBallistic.hxx
AIBase.hxx
AICarrier.hxx
AIEscort.hxx
AIFlightPlan.hxx
AIGroundVehicle.hxx
AIManager.hxx
AIMultiplayer.hxx
AIShip.hxx
AIStatic.hxx
AIStorm.hxx
AITanker.hxx
AIThermal.hxx
AIWingman.hxx
performancedata.hxx
performancedb.hxx
submodel.hxx
)
flightgear_component(AIModel "${SOURCES}" "${HEADERS}")

View file

@ -250,8 +250,25 @@ void FGATCMgr::FreqSearch(const string navcomm, const int unit) {
_aircraftPos = SGGeod::fromDegFt(lon_node->getDoubleValue(), _aircraftPos = SGGeod::fromDegFt(lon_node->getDoubleValue(),
lat_node->getDoubleValue(), elev_node->getDoubleValue()); lat_node->getDoubleValue(), elev_node->getDoubleValue());
class RangeFilter : public CommStation::Filter {
public:
RangeFilter( const SGGeod & pos ) : CommStation::Filter(), _pos(pos) {}
virtual bool pass(FGPositioned* aPos) const {
flightgear::CommStation * stn = dynamic_cast<flightgear::CommStation*>(aPos);
if( NULL == stn ) return false;
double dist = SGGeodesy::distanceNm( stn->geod(), _pos );
// if range is not configured, assume at least 10NM range
// TODO: maybe ramp down range with proximity to ground?
return dist <= SGMiscd::max( stn->rangeNm(), 10.0 );
}
private:
SGGeod _pos;
};
RangeFilter rangeFilter(_aircraftPos );
CommStation* sta = CommStation::findByFreq(freqKhz, _aircraftPos); CommStation* sta = CommStation::findByFreq(freqKhz, _aircraftPos, &rangeFilter );
if (!sta) { if (!sta) {
ZapOtherService(ncunit, "x x x"); ZapOtherService(ncunit, "x x x");
return; return;

View file

@ -4,5 +4,11 @@ set(SOURCES
controls.cxx controls.cxx
replay.cxx replay.cxx
) )
flightgear_component(Aircraft "${SOURCES}") set(HEADERS
controls.hxx
replay.hxx
)
flightgear_component(Aircraft "${SOURCES}" "${HEADERS}")

View file

@ -2,7 +2,6 @@ include(FlightGearComponent)
set(SOURCES set(SOURCES
apt_loader.cxx apt_loader.cxx
calc_loc.cxx
dynamicloader.cxx dynamicloader.cxx
dynamics.cxx dynamics.cxx
gnnode.cxx gnnode.cxx
@ -17,5 +16,22 @@ set(SOURCES
simple.cxx simple.cxx
xmlloader.cxx xmlloader.cxx
) )
flightgear_component(Airports "${SOURCES}") set(HEADERS
apt_loader.hxx
dynamicloader.hxx
dynamics.hxx
gnnode.hxx
groundnetwork.hxx
parking.hxx
pavement.hxx
runwaybase.hxx
runwayprefloader.hxx
runwayprefs.hxx
runways.hxx
sidstar.hxx
simple.hxx
xmlloader.hxx
)
flightgear_component(Airports "${SOURCES}" "${HEADERS}")

View file

@ -16,4 +16,20 @@ set(SOURCES
route_mgr.cxx route_mgr.cxx
) )
flightgear_component(Autopilot "${SOURCES}") set(HEADERS
analogcomponent.hxx
autopilot.hxx
autopilotgroup.hxx
component.hxx
digitalcomponent.hxx
digitalfilter.hxx
flipflop.hxx
inputvalue.hxx
logic.hxx
pidcontroller.hxx
pisimplecontroller.hxx
predictor.hxx
route_mgr.hxx
)
flightgear_component(Autopilot "${SOURCES}" "${HEADERS}")

View file

@ -119,23 +119,29 @@ void FGXMLAutopilotGroupImplementation::initFrom( SGPropertyNode_ptr rootNode, c
} }
SGPath config = globals->resolve_maybe_aircraft_path(pathNode->getStringValue()); SGPath config = globals->resolve_maybe_aircraft_path(pathNode->getStringValue());
if (config.isNull())
{
SG_LOG( SG_ALL, SG_ALERT, "Cannot find property-rule configuration file '" << pathNode->getStringValue() << "'." );
}
else
{
SG_LOG( SG_ALL, SG_INFO, "Reading property-rule configuration from " << config.str() );
SG_LOG( SG_ALL, SG_INFO, "Reading property-rule configuration from " << config.str() ); try {
SGPropertyNode_ptr root = new SGPropertyNode();
readProperties( config.str(), root );
try { SG_LOG( SG_AUTOPILOT, SG_INFO, "adding property-rule subsystem " << apName );
SGPropertyNode_ptr root = new SGPropertyNode(); FGXMLAutopilot::Autopilot * ap = new FGXMLAutopilot::Autopilot( autopilotNodes[i], root );
readProperties( config.str(), root ); ap->set_name( apName );
set_subsystem( apName, ap );
_autopilotNames.push_back( apName );
SG_LOG( SG_AUTOPILOT, SG_INFO, "adding property-rule subsystem " << apName ); } catch (const sg_exception& e) {
FGXMLAutopilot::Autopilot * ap = new FGXMLAutopilot::Autopilot( autopilotNodes[i], root ); SG_LOG( SG_AUTOPILOT, SG_ALERT, "Failed to load property-rule configuration: "
ap->set_name( apName ); << config.str() << ":" << e.getMessage() );
set_subsystem( apName, ap ); continue;
_autopilotNames.push_back( apName ); }
} catch (const sg_exception& e) {
SG_LOG( SG_AUTOPILOT, SG_ALERT, "Failed to load property-rule configuration: "
<< config.str() << ":" << e.getMessage() );
continue;
} }
} }
} }

View file

@ -379,8 +379,8 @@ void FGRouteMgr::init() {
void FGRouteMgr::postinit() void FGRouteMgr::postinit()
{ {
SGPath path(_pathNode->getStringValue()); SGPath path(_pathNode->getStringValue());
if (path.exists()) { if (!path.isNull()) {
SG_LOG(SG_AUTOPILOT, SG_INFO, "loading flight-plan from:" << path.str()); SG_LOG(SG_AUTOPILOT, SG_INFO, "loading flight-plan from: " << path.str());
loadRoute(path); loadRoute(path);
} }
@ -1303,13 +1303,20 @@ bool FGRouteMgr::saveRoute(const SGPath& path)
writeProperties(path.str(), d, true /* write-all */); writeProperties(path.str(), d, true /* write-all */);
return true; return true;
} catch (sg_exception& e) { } catch (sg_exception& e) {
SG_LOG(SG_IO, SG_WARN, "failed to save flight-plan:" << e.getMessage()); SG_LOG(SG_IO, SG_ALERT, "Failed to save flight-plan '" << path.str() << "'. " << e.getMessage());
return false; return false;
} }
} }
bool FGRouteMgr::loadRoute(const SGPath& path) bool FGRouteMgr::loadRoute(const SGPath& path)
{ {
if (!path.exists())
{
SG_LOG(SG_IO, SG_ALERT, "Failed to load flight-plan '" << path.str()
<< "'. The file does not exist.");
return false;
}
// deactivate route first // deactivate route first
active->setBoolValue(false); active->setBoolValue(false);
@ -1335,8 +1342,8 @@ bool FGRouteMgr::loadRoute(const SGPath& path)
} }
return true; return true;
} catch (sg_exception& e) { } catch (sg_exception& e) {
SG_LOG(SG_IO, SG_WARN, "failed to load flight-plan (from '" << e.getOrigin() SG_LOG(SG_IO, SG_ALERT, "Failed to load flight-plan '" << e.getOrigin()
<< "'):" << e.getMessage()); << "'. " << e.getMessage());
return false; return false;
} }
} }
@ -1456,12 +1463,12 @@ WayptRef FGRouteMgr::parseVersion1XMLWaypt(SGPropertyNode* aWP)
bool FGRouteMgr::loadPlainTextRoute(const SGPath& path) bool FGRouteMgr::loadPlainTextRoute(const SGPath& path)
{ {
sg_gzifstream in(path.str().c_str());
if (!in.is_open()) {
return false;
}
try { try {
sg_gzifstream in(path.str().c_str());
if (!in.is_open()) {
throw sg_io_exception("Cannot open file for reading.");
}
WayptVec wpts; WayptVec wpts;
while (!in.eof()) { while (!in.eof()) {
string line; string line;
@ -1478,7 +1485,7 @@ bool FGRouteMgr::loadPlainTextRoute(const SGPath& path)
WayptRef w = waypointFromString(line); WayptRef w = waypointFromString(line);
if (!w) { if (!w) {
throw sg_io_exception("failed to create waypoint from line:" + line); throw sg_io_exception("Failed to create waypoint from line '" + line + "'.");
} }
wpts.push_back(w); wpts.push_back(w);
@ -1487,7 +1494,7 @@ bool FGRouteMgr::loadPlainTextRoute(const SGPath& path)
_route = wpts; _route = wpts;
return true; return true;
} catch (sg_exception& e) { } catch (sg_exception& e) {
SG_LOG(SG_IO, SG_WARN, "failed to load route from:" << path.str() << ":" << e.getMessage()); SG_LOG(SG_IO, SG_ALERT, "Failed to load route from: '" << path.str() << "'. " << e.getMessage());
return false; return false;
} }
} }

View file

@ -6,4 +6,11 @@ set(SOURCES
built_in/FGMagRibbon.cxx built_in/FGMagRibbon.cxx
) )
flightgear_component(Cockpit "${SOURCES}") set(HEADERS
panel.hxx
panel_io.hxx
built_in/FGMagRibbon.hxx
)
flightgear_component(Cockpit "${SOURCES}" "${HEADERS}")

View file

@ -18,5 +18,24 @@ set(SOURCES
presets.cxx presets.cxx
gravity.cxx gravity.cxx
) )
flightgear_component(Environment "${SOURCES}") set(HEADERS
atmosphere.hxx
environment.hxx
environment_ctrl.hxx
environment_mgr.hxx
ephemeris.hxx
fgclouds.hxx
fgmetar.hxx
fgwind.hxx
metarairportfilter.hxx
metarproperties.hxx
precipitation_mgr.hxx
realwx_ctrl.hxx
ridge_lift.hxx
terrainsampler.hxx
presets.hxx
gravity.hxx
)
flightgear_component(Environment "${SOURCES}" "${HEADERS}")

View file

@ -366,6 +366,7 @@ void TerrainSamplerImplementation::reinit()
if( subsys == NULL ) if( subsys == NULL )
break; break;
remove_subsystem( subsystemName ); remove_subsystem( subsystemName );
delete subsys;
} }
init(); init();

View file

@ -5,7 +5,7 @@
Date started: 01/21/08 Date started: 01/21/08
Purpose: Encapsulates the buoyant forces Purpose: Encapsulates the buoyant forces
------------- Copyright (C) 2008 - 2010 Anders Gidenstam ------------- ------------- Copyright (C) 2008 - 2011 Anders Gidenstam -------------
------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) ------------- ------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -45,7 +45,7 @@ using namespace std;
namespace JSBSim { namespace JSBSim {
static const char *IdSrc = "$Id: FGBuoyantForces.cpp,v 1.17 2011/05/20 03:18:36 jberndt Exp $"; static const char *IdSrc = "$Id: FGBuoyantForces.cpp,v 1.19 2011/07/01 21:22:25 andgi Exp $";
static const char *IdHdr = ID_BUOYANTFORCES; static const char *IdHdr = ID_BUOYANTFORCES;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -179,16 +179,7 @@ const FGMatrix33& FGBuoyantForces::GetGasMassInertia(void)
gasCellJ = FGMatrix33(); gasCellJ = FGMatrix33();
for (unsigned int i=0; i < size; i++) { for (unsigned int i=0; i < size; i++) {
FGColumnVector3 v = FDMExec->GetMassBalance()->StructuralToBody( Cells[i]->GetXYZ() ); gasCellJ += Cells[i]->GetInertia();
// Body basis is in FT.
const double mass = Cells[i]->GetMass();
// FIXME: Verify that this is the correct way to change between the
// coordinate frames.
gasCellJ += Cells[i]->GetInertia() +
FGMatrix33( 0, - mass*v(1)*v(2), - mass*v(1)*v(3),
- mass*v(2)*v(1), 0, - mass*v(2)*v(3),
- mass*v(3)*v(1), - mass*v(3)*v(2), 0 );
} }
return gasCellJ; return gasCellJ;

View file

@ -4,7 +4,7 @@
Author: Anders Gidenstam, Jon S. Berndt Author: Anders Gidenstam, Jon S. Berndt
Date started: 01/21/08 Date started: 01/21/08
------------- Copyright (C) 2008 - 2010 Anders Gidenstam ------------- ------------- Copyright (C) 2008 - 2011 Anders Gidenstam -------------
------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) ------------- ------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
@ -51,7 +51,7 @@ INCLUDES
DEFINITIONS DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#define ID_BUOYANTFORCES "$Id: FGBuoyantForces.h,v 1.12 2011/05/20 03:18:36 jberndt Exp $" #define ID_BUOYANTFORCES "$Id: FGBuoyantForces.h,v 1.13 2011/07/01 21:22:25 andgi Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS FORWARD DECLARATIONS
@ -96,7 +96,7 @@ CLASS DOCUMENTATION
See FGGasCell for the full configuration file format for gas cells. See FGGasCell for the full configuration file format for gas cells.
@author Anders Gidenstam, Jon S. Berndt @author Anders Gidenstam, Jon S. Berndt
@version $Id: FGBuoyantForces.h,v 1.12 2011/05/20 03:18:36 jberndt Exp $ @version $Id: FGBuoyantForces.h,v 1.13 2011/07/01 21:22:25 andgi Exp $
*/ */
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -132,19 +132,19 @@ public:
bool Load(Element* element); bool Load(Element* element);
/** Gets the total Buoyant force vector. /** Gets the total Buoyant force vector.
@return a force vector. */ @return a force vector in lbs. */
const FGColumnVector3& GetForces(void) const {return vTotalForces;} const FGColumnVector3& GetForces(void) const {return vTotalForces;}
/** Gets a component of the total Buoyant force vector. /** Gets a component of the total Buoyant force vector.
@return a component of the force vector. */ @return a component of the force vector in lbs. */
double GetForces(int idx) const {return vTotalForces(idx);} double GetForces(int idx) const {return vTotalForces(idx);}
/** Gets the total Buoyancy moment vector. /** Gets the total Buoyancy moment vector.
@return a moment vector. */ @return a moment vector in the body frame in lbs ft. */
const FGColumnVector3& GetMoments(void) const {return vTotalMoments;} const FGColumnVector3& GetMoments(void) const {return vTotalMoments;}
/** Gets a component of the total Buoyancy moment vector. /** Gets a component of the total Buoyancy moment vector.
@return a component of the moment vector. */ @return a component of the moment vector in the body frame in lbs ft. */
double GetMoments(int idx) const {return vTotalMoments(idx);} double GetMoments(int idx) const {return vTotalMoments(idx);}
/** Gets the total gas mass. The gas mass is part of the aircraft's /** Gets the total gas mass. The gas mass is part of the aircraft's
@ -153,11 +153,12 @@ public:
double GetGasMass(void); double GetGasMass(void);
/** Gets the total moment from the gas mass. /** Gets the total moment from the gas mass.
@return a moment vector. */ @return a moment vector in the structural frame in lbs in. */
const FGColumnVector3& GetGasMassMoment(void); const FGColumnVector3& GetGasMassMoment(void);
/** Gets the total moments of inertia for the gas mass. /** Gets the total moments of inertia for the gas mass in the body frame.
@return . */ @return moments of inertia matrix in the body frame
in slug ft<sup>2</sup>. */
const FGMatrix33& GetGasMassInertia(void); const FGMatrix33& GetGasMassInertia(void);
/** Gets the strings for the current set of gas cells. /** Gets the strings for the current set of gas cells.
@ -174,13 +175,13 @@ public:
private: private:
vector <FGGasCell*> Cells; vector <FGGasCell*> Cells;
// Buoyant forces and moments. Excluding the gas weight. // Buoyant forces and moments. Excluding the gas weight.
FGColumnVector3 vTotalForces; FGColumnVector3 vTotalForces; // [lbs]
FGColumnVector3 vTotalMoments; FGColumnVector3 vTotalMoments; // [lbs ft]
// Gas mass related masses, inertias and moments. // Gas mass related masses, inertias and moments.
FGMatrix33 gasCellJ; FGMatrix33 gasCellJ; // [slug ft^2]
FGColumnVector3 vGasCellXYZ; FGColumnVector3 vGasCellXYZ;
FGColumnVector3 vXYZgasCell_arm; FGColumnVector3 vXYZgasCell_arm; // [lbs in]
bool NoneDefined; bool NoneDefined;

View file

@ -4,7 +4,7 @@
Author: Anders Gidenstam Author: Anders Gidenstam
Date started: 01/21/2006 Date started: 01/21/2006
----- Copyright (C) 2006 - 2008 Anders Gidenstam (anders(at)gidenstam.org) -- ----- Copyright (C) 2006 - 2011 Anders Gidenstam (anders(at)gidenstam.org) --
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU Lesser General Public License as published by the Free Software
@ -53,7 +53,7 @@ using std::max;
namespace JSBSim { namespace JSBSim {
static const char *IdSrc = "$Id: FGGasCell.cpp,v 1.13 2010/12/29 22:39:25 andgi Exp $"; static const char *IdSrc = "$Id: FGGasCell.cpp,v 1.14 2011/07/01 21:22:25 andgi Exp $";
static const char *IdHdr = ID_GASCELL; static const char *IdHdr = ID_GASCELL;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -405,6 +405,9 @@ void FGGasCell::Calculate(double dt)
gasCellJ(2,2) = Iyy; gasCellJ(2,2) = Iyy;
gasCellJ(3,3) = Izz; gasCellJ(3,3) = Izz;
Mass = mass; Mass = mass;
// Transform the moments of inertia to the body frame.
gasCellJ += MassBalance->GetPointmassInertia(Mass, GetXYZ());
gasCellM.InitMatrix(); gasCellM.InitMatrix();
gasCellM(eX) += gasCellM(eX) +=
GetXYZ(eX) * Mass*slugtolb; GetXYZ(eX) * Mass*slugtolb;
@ -415,12 +418,10 @@ void FGGasCell::Calculate(double dt)
if (no_ballonets > 0) { if (no_ballonets > 0) {
// Add the mass, moment and inertia of any ballonets. // Add the mass, moment and inertia of any ballonets.
const FGColumnVector3 p = MassBalance->StructuralToBody( GetXYZ() );
for (i = 0; i < no_ballonets; i++) { for (i = 0; i < no_ballonets; i++) {
Mass += Ballonet[i]->GetMass(); Mass += Ballonet[i]->GetMass();
// Add ballonet moments. // Add ballonet moments due to mass (in the structural frame).
gasCellM(eX) += gasCellM(eX) +=
Ballonet[i]->GetXYZ(eX) * Ballonet[i]->GetMass()*slugtolb; Ballonet[i]->GetXYZ(eX) * Ballonet[i]->GetMass()*slugtolb;
gasCellM(eY) += gasCellM(eY) +=
@ -428,15 +429,7 @@ void FGGasCell::Calculate(double dt)
gasCellM(eZ) += gasCellM(eZ) +=
Ballonet[i]->GetXYZ(eZ) * Ballonet[i]->GetMass()*slugtolb; Ballonet[i]->GetXYZ(eZ) * Ballonet[i]->GetMass()*slugtolb;
// Moments of inertia must be converted to the gas cell frame here. gasCellJ += Ballonet[i]->GetInertia();
FGColumnVector3 v =
MassBalance->StructuralToBody( Ballonet[i]->GetXYZ() ) - p;
// Body basis is in FT.
const double mass = Ballonet[i]->GetMass();
gasCellJ += Ballonet[i]->GetInertia() +
FGMatrix33( 0, - mass*v(1)*v(2), - mass*v(1)*v(3),
- mass*v(2)*v(1), 0, - mass*v(2)*v(3),
- mass*v(3)*v(1), - mass*v(3)*v(2), 0 );
} }
} }
} }
@ -525,6 +518,7 @@ FGBallonet::FGBallonet(FGFDMExec* exec, Element* el, int num, FGGasCell* parent)
Atmosphere = exec->GetAtmosphere(); Atmosphere = exec->GetAtmosphere();
PropertyManager = exec->GetPropertyManager(); PropertyManager = exec->GetPropertyManager();
Inertial = exec->GetInertial(); Inertial = exec->GetInertial();
MassBalance = exec->GetMassBalance();
ballonetJ = FGMatrix33(); ballonetJ = FGMatrix33();
@ -791,6 +785,8 @@ void FGBallonet::Calculate(double dt)
ballonetJ(1,1) = Ixx; ballonetJ(1,1) = Ixx;
ballonetJ(2,2) = Iyy; ballonetJ(2,2) = Iyy;
ballonetJ(3,3) = Izz; ballonetJ(3,3) = Izz;
// Transform the moments of inertia to the body frame.
ballonetJ += MassBalance->GetPointmassInertia(GetMass(), GetXYZ());
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View file

@ -4,7 +4,7 @@
Author: Anders Gidenstam Author: Anders Gidenstam
Date started: 01/21/2006 Date started: 01/21/2006
----- Copyright (C) 2006 - 2008 Anders Gidenstam (anders(at)gidenstam.org) -- ----- Copyright (C) 2006 - 2011 Anders Gidenstam (anders(at)gidenstam.org) --
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU Lesser General Public License as published by the Free Software
@ -50,7 +50,7 @@ INCLUDES
DEFINITIONS DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#define ID_GASCELL "$Id: FGGasCell.h,v 1.10 2009/10/24 22:59:30 jberndt Exp $" #define ID_GASCELL "$Id: FGGasCell.h,v 1.11 2011/07/01 21:22:25 andgi Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS FORWARD DECLARATIONS
@ -189,12 +189,12 @@ public:
/** Get the center of gravity location of the gas cell /** Get the center of gravity location of the gas cell
(including any ballonets) (including any ballonets)
@return CoG location in the structural frame. */ @return CoG location in the structural frame in inches. */
const FGColumnVector3& GetXYZ(void) const {return vXYZ;} const FGColumnVector3& GetXYZ(void) const {return vXYZ;}
/** Get the center of gravity location of the gas cell /** Get the center of gravity location of the gas cell
(including any ballonets) (including any ballonets)
@return CoG location in the structural frame. */ @return CoG location in the structural frame in inches. */
double GetXYZ(int idx) const {return vXYZ(idx);} double GetXYZ(int idx) const {return vXYZ(idx);}
/** Get the current mass of the gas cell (including any ballonets) /** Get the current mass of the gas cell (including any ballonets)
@ -202,7 +202,7 @@ public:
double GetMass(void) const {return Mass;} double GetMass(void) const {return Mass;}
/** Get the moments of inertia of the gas cell (including any ballonets) /** Get the moments of inertia of the gas cell (including any ballonets)
@return moments of inertia matrix relative the gas cell location @return moments of inertia matrix in the body frame
in slug ft<sup>2</sup>. */ in slug ft<sup>2</sup>. */
const FGMatrix33& GetInertia(void) const {return gasCellJ;} const FGMatrix33& GetInertia(void) const {return gasCellJ;}
@ -210,7 +210,7 @@ public:
Note that the buoyancy of the gas cell is handled separately by the Note that the buoyancy of the gas cell is handled separately by the
FGForce part and not included here. FGForce part and not included here.
@return moment vector in lbs ft. */ @return moment vector in the structural frame in lbs in. */
const FGColumnVector3& GetMassMoment(void) const {return gasCellM;} const FGColumnVector3& GetMassMoment(void) const {return gasCellM;}
/** Get the current gas temperature inside the gas cell /** Get the current gas temperature inside the gas cell
@ -229,8 +229,8 @@ private:
std::string type; std::string type;
int CellNum; int CellNum;
// Structural constants // Structural constants
double MaxVolume; // [ft<EFBFBD>] double MaxVolume; // [ft^2]
double MaxOverpressure; // [lbs/ft<EFBFBD>] double MaxOverpressure; // [lbs/ft^2]
FGColumnVector3 vXYZ; // [in] FGColumnVector3 vXYZ; // [in]
double Xradius, Yradius, Zradius; // [ft] double Xradius, Yradius, Zradius; // [ft]
double Xwidth, Ywidth, Zwidth; // [ft] double Xwidth, Ywidth, Zwidth; // [ft]
@ -240,17 +240,17 @@ private:
typedef vector <FGBallonet*> BallonetArray; typedef vector <FGBallonet*> BallonetArray;
BallonetArray Ballonet; BallonetArray Ballonet;
// Variables // Variables
double Pressure; // [lbs/ft<EFBFBD>] double Pressure; // [lbs/ft^2]
double Contents; // [mol] double Contents; // [mol]
double Volume; // [ft<EFBFBD>] double Volume; // [ft^2]
double dVolumeIdeal; // [ft<EFBFBD>] double dVolumeIdeal; // [ft^2]
double Temperature; // [Rankine] double Temperature; // [Rankine]
double Buoyancy; // [lbs] Note: Gross lift. double Buoyancy; // [lbs] Note: Gross lift.
// Does not include the weight of the gas itself. // Does not include the weight of the gas itself.
double ValveOpen; // 0 <= ValveOpen <= 1 (or higher). double ValveOpen; // 0 <= ValveOpen <= 1 (or higher).
double Mass; // [slug] double Mass; // [slug]
FGMatrix33 gasCellJ; // [slug foot<EFBFBD>] FGMatrix33 gasCellJ; // [slug foot^2]
FGColumnVector3 gasCellM; // [lbs ft] FGColumnVector3 gasCellM; // [lbs in]
FGAuxiliary* Auxiliary; FGAuxiliary* Auxiliary;
FGAtmosphere* Atmosphere; FGAtmosphere* Atmosphere;
@ -295,7 +295,6 @@ private:
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/** Models a ballonet inside a gas cell. /** Models a ballonet inside a gas cell.
Models a ballonet inside a gas cell.
Not intended to be used outside FGGasCell. Not intended to be used outside FGGasCell.
See FGGasCell for the configuration file format. See FGGasCell for the configuration file format.
@author Anders Gidenstam @author Anders Gidenstam
@ -312,10 +311,10 @@ public:
/** Get the center of gravity location of the ballonet /** Get the center of gravity location of the ballonet
@return CoG location in the structural frame. */ @return CoG location in the structural frame in inches. */
const FGColumnVector3& GetXYZ(void) const {return vXYZ;} const FGColumnVector3& GetXYZ(void) const {return vXYZ;}
/** Get the center of gravity location of the ballonet /** Get the center of gravity location of the ballonet
@return CoG location in the structural frame. */ @return CoG location in the structural frame in inches. */
double GetXYZ(int idx) const {return vXYZ(idx);} double GetXYZ(int idx) const {return vXYZ(idx);}
/** Get the current mass of the ballonets /** Get the current mass of the ballonets
@ -323,7 +322,8 @@ public:
double GetMass(void) const {return Contents * M_air;} double GetMass(void) const {return Contents * M_air;}
/** Get the moments of inertia of the ballonet /** Get the moments of inertia of the ballonet
@return moments of inertia matrix in slug ft<sup>2</sup>. */ @return moments of inertia matrix in the body frame in
slug ft<sup>2</sup>. */
const FGMatrix33& GetInertia(void) const {return ballonetJ;} const FGMatrix33& GetInertia(void) const {return ballonetJ;}
/** Get the current volume of the ballonet /** Get the current volume of the ballonet
@ -336,8 +336,8 @@ public:
private: private:
int CellNum; int CellNum;
// Structural constants // Structural constants
double MaxVolume; // [ft<EFBFBD>] double MaxVolume; // [ft^2]
double MaxOverpressure; // [lbs/ft<EFBFBD>] double MaxOverpressure; // [lbs/ft^2]
FGColumnVector3 vXYZ; // [in] FGColumnVector3 vXYZ; // [in]
double Xradius, Yradius, Zradius; // [ft] double Xradius, Yradius, Zradius; // [ft]
double Xwidth, Ywidth, Zwidth; // [ft] double Xwidth, Ywidth, Zwidth; // [ft]
@ -347,19 +347,20 @@ private:
FGFunction* BlowerInput; // [ft^3 / sec] FGFunction* BlowerInput; // [ft^3 / sec]
FGGasCell* Parent; FGGasCell* Parent;
// Variables // Variables
double Pressure; // [lbs/ft<EFBFBD>] double Pressure; // [lbs/ft^2]
double Contents; // [mol] double Contents; // [mol]
double Volume; // [ft<EFBFBD>] double Volume; // [ft^2]
double dVolumeIdeal; // [ft<EFBFBD>] double dVolumeIdeal; // [ft^2]
double dU; // [lbs ft / sec] double dU; // [lbs ft / sec]
double Temperature; // [Rankine] double Temperature; // [Rankine]
double ValveOpen; // 0 <= ValveOpen <= 1 (or higher). double ValveOpen; // 0 <= ValveOpen <= 1 (or higher).
FGMatrix33 ballonetJ; // [slug foot<EFBFBD>] FGMatrix33 ballonetJ; // [slug foot^2]
FGAuxiliary* Auxiliary; FGAuxiliary* Auxiliary;
FGAtmosphere* Atmosphere; FGAtmosphere* Atmosphere;
FGPropertyManager* PropertyManager; FGPropertyManager* PropertyManager;
FGInertial* Inertial; FGInertial* Inertial;
FGMassBalance* MassBalance;
void Debug(int from); void Debug(int from);
/* Constants. */ /* Constants. */

View file

@ -259,6 +259,11 @@ void YASim::copyToYASim(bool copyState)
// position // position
sgGeodToCart(lat, lon, alt, s.pos); sgGeodToCart(lat, lon, alt, s.pos);
{
// allow setting of /position/[lat|long|alti]tude
double * dp = &model->getState()->pos[0];
dp[0] = s.pos[0]; dp[1] = s.pos[1]; dp[2] = s.pos[2];
}
// orientation // orientation
Glue::euler2orient(roll, pitch, hdg, s.orient); Glue::euler2orient(roll, pitch, hdg, s.orient);

View file

@ -15,5 +15,18 @@ set(SOURCES
new_gui.cxx new_gui.cxx
property_list.cxx property_list.cxx
) )
flightgear_component(GUI "${SOURCES}") set(HEADERS
AirportList.hxx
MapWidget.hxx
SafeTexFont.hxx
WaypointList.hxx
dialog.hxx
gui.h
layout.hxx
menubar.hxx
new_gui.hxx
property_list.hxx
)
flightgear_component(GUI "${SOURCES}" "${HEADERS}")

View file

@ -21,6 +21,11 @@
#include <Navaids/positioned.hxx> #include <Navaids/positioned.hxx>
#include <Autopilot/route_mgr.hxx> #include <Autopilot/route_mgr.hxx>
// select if the widget grabs keys necessary to fly aircraft from the keyboard,
// or not. See http://code.google.com/p/flightgear-bugs/issues/detail?id=338
// for discussion about why / what is going on.
#define AVOID_FLIGHT_KEYS 1
using namespace flightgear; using namespace flightgear;
enum { enum {
@ -659,6 +664,10 @@ int WaypointList::checkKey (int key, int updown )
if ((updown == PU_UP) || !isVisible () || !isActive () || (window != puGetWindow())) { if ((updown == PU_UP) || !isVisible () || !isActive () || (window != puGetWindow())) {
return FALSE ; return FALSE ;
} }
#ifdef AVOID_FLIGHT_KEYS
return FALSE;
#endif
switch (key) switch (key)
{ {

View file

@ -19,7 +19,8 @@
#define PACKAGE "FlightGear" #define PACKAGE "FlightGear"
/* Define to package version - use in main.cxx */ /* Define to package version - use in main.cxx */
#define FLIGHTGEAR_VERSION "MSVC9.0-WIN32-2.0.0" // define in version.h and no_version.h
/* #define FLIGHTGEAR_VERSION "MSVC9.0-WIN32-2.0.0" */
/* Define as the return type of signal handlers (int or void). */ /* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void #define RETSIGTYPE void

View file

@ -8,9 +8,10 @@
// placeholder values instead. // placeholder values instead.
#define FLIGHTGEAR_VERSION "development " __DATE__ #define FLIGHTGEAR_VERSION "development " __DATE__
#define SIMGEAR_VERSION FLIGHTGEAR_VERSION
#define HUDSON_BUILD_NUMBER 0 #define HUDSON_BUILD_NUMBER 0
#define HUDSON_BUILD_ID "none" #define HUDSON_BUILD_ID "none"
#define REVISION "unknown" #define REVISION "unknown"
#endif #endif

View file

@ -305,7 +305,9 @@ void FGJoystickInput::update( double dt )
// Do nothing if the axis position // Do nothing if the axis position
// is unchanged; only a change in // is unchanged; only a change in
// position fires the bindings. // position fires the bindings.
if (fabs(axis_values[j] - a.last_value) > a.tolerance) { // But only if there are bindings
if (fabs(axis_values[j] - a.last_value) > a.tolerance
&& a.bindings[KEYMOD_NONE].size() > 0 ) {
a.last_value = axis_values[j]; a.last_value = axis_values[j];
for (unsigned int k = 0; k < a.bindings[KEYMOD_NONE].size(); k++) for (unsigned int k = 0; k < a.bindings[KEYMOD_NONE].size(); k++)
a.bindings[KEYMOD_NONE][k]->fire(axis_values[j]); a.bindings[KEYMOD_NONE][k]->fire(axis_values[j]);
@ -329,7 +331,7 @@ void FGJoystickInput::update( double dt )
FGButton &b = bindings[i].buttons[j]; FGButton &b = bindings[i].buttons[j];
b.last_dt += dt; b.last_dt += dt;
if(b.last_dt >= b.interval_sec) { if(b.last_dt >= b.interval_sec) {
bindings[i].buttons[j].update( modifiers, (buttons & (1 << j)) > 0 ); bindings[i].buttons[j].update( modifiers, (buttons & (1u << j)) > 0 );
b.last_dt -= b.interval_sec; b.last_dt -= b.interval_sec;
} }
} }

View file

@ -346,6 +346,11 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden
const int MAXNEST = 10; const int MAXNEST = 10;
SGPath path(globals->resolve_maybe_aircraft_path(file)); SGPath path(globals->resolve_maybe_aircraft_path(file));
if (path.isNull())
{
SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot find configuration file '" << file << "'.");
return 0x2;
}
if (!level) { if (!level) {
SG_LOG(SG_INPUT, TREE, endl << "load " << file); SG_LOG(SG_INPUT, TREE, endl << "load " << file);
@ -362,7 +367,7 @@ int HUD::load(const char *file, float x, float y, int level, const string& inden
int ret = 0; int ret = 0;
ifstream input(path.c_str()); ifstream input(path.c_str());
if (!input.good()) { if (!input.good()) {
SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot read configuration from " << path.str()); SG_LOG(SG_INPUT, SG_ALERT, "HUD: Cannot read configuration from '" << path.c_str() << "'");
return 0x4; return 0x4;
} }

View file

@ -897,7 +897,8 @@ void FGNavRadio::updateAudio()
} }
last_time = now; last_time = now;
play_count = ++play_count % NUM_IDENT_SLOTS; play_count++;
play_count %= NUM_IDENT_SLOTS;
// Previous ident is out of time; if still playing, cut it off: // Previous ident is out of time; if still playing, cut it off:
_sgr->stop( nav_fx_name ); _sgr->stop( nav_fx_name );

View file

@ -31,8 +31,29 @@ set(SOURCES
viewmgr.cxx viewmgr.cxx
${RESOURCE_FILE} ${RESOURCE_FILE}
) )
add_executable(fgfs ${SOURCES}) set(HEADERS
CameraGroup.hxx
FGEventHandler.hxx
WindowBuilder.hxx
WindowSystemAdapter.hxx
fg_commands.hxx
fg_init.hxx
fg_io.hxx
fg_props.hxx
fgviewer.hxx
globals.hxx
logger.hxx
main.hxx
options.hxx
renderer.hxx
splash.hxx
util.hxx
viewer.hxx
viewmgr.hxx
)
add_executable(fgfs ${SOURCES} ${HEADERS})
get_property(FG_LIBS GLOBAL PROPERTY FG_LIBS) get_property(FG_LIBS GLOBAL PROPERTY FG_LIBS)
#message(STATUS "fg libs ${FG_LIBS}") #message(STATUS "fg libs ${FG_LIBS}")

View file

@ -71,10 +71,10 @@ bool free_hostname = false;
void fgExitCleanup(); void fgExitCleanup();
static bool fpeAbort = false; static bool fpeAbort = false;
static void handleFPE(int);
static void initFPE(); static void initFPE();
#if defined(HAVE_FEENABLEEXCEPT) #if defined(HAVE_FEENABLEEXCEPT)
static void handleFPE(int);
static void static void
initFPE () initFPE ()
{ {
@ -93,6 +93,7 @@ static void handleFPE(int)
} }
#elif defined(__linux__) && defined(__i386__) #elif defined(__linux__) && defined(__i386__)
static void handleFPE(int);
static void static void
initFPE () initFPE ()
{ {
@ -115,10 +116,6 @@ handleFPE (int num)
SG_LOG(SG_GENERAL, SG_ALERT, "Floating point interrupt (SIGFPE)"); SG_LOG(SG_GENERAL, SG_ALERT, "Floating point interrupt (SIGFPE)");
} }
#else #else
static void handleFPE(int)
{
}
static void initFPE() static void initFPE()
{ {
} }

View file

@ -726,15 +726,18 @@ static bool
do_property_assign (const SGPropertyNode * arg) do_property_assign (const SGPropertyNode * arg)
{ {
SGPropertyNode * prop = get_prop(arg); SGPropertyNode * prop = get_prop(arg);
const SGPropertyNode * prop2 = get_prop2(arg);
const SGPropertyNode * value = arg->getNode("value"); const SGPropertyNode * value = arg->getNode("value");
if (value != 0) if (value != 0)
return prop->setUnspecifiedValue(value->getStringValue()); return prop->setUnspecifiedValue(value->getStringValue());
else if (prop2)
return prop->setUnspecifiedValue(prop2->getStringValue());
else else
return false; {
const SGPropertyNode * prop2 = get_prop2(arg);
if (prop2)
return prop->setUnspecifiedValue(prop2->getStringValue());
else
return false;
}
} }
@ -1064,14 +1067,9 @@ static bool
do_add_model (const SGPropertyNode * arg) do_add_model (const SGPropertyNode * arg)
{ {
SGPropertyNode * model = fgGetNode("models", true); SGPropertyNode * model = fgGetNode("models", true);
for (int i = 0;; i++) { int i;
if (i < 0) for (i = 0; model->hasChild("model",i); i++);
return false; model = model->getChild("model", i, true);
if (!model->getChild("model", i, false)) {
model = model->getChild("model", i, true);
break;
}
}
copyProperties(arg, model); copyProperties(arg, model);
if (model->hasValue("elevation-m")) if (model->hasValue("elevation-m"))
model->setDoubleValue("elevation-ft", model->getDoubleValue("elevation-m") model->setDoubleValue("elevation-ft", model->getDoubleValue("elevation-m")
@ -1229,7 +1227,15 @@ do_load_xml_to_proptree(const SGPropertyNode * arg)
std::string icao = arg->getStringValue("icao"); std::string icao = arg->getStringValue("icao");
if (icao.empty()) { if (icao.empty()) {
if (file.isRelative()) { if (file.isRelative()) {
file = globals->resolve_maybe_aircraft_path(file.str()); SGPath absPath = globals->resolve_maybe_aircraft_path(file.str());
if (!absPath.isNull())
file = absPath;
else
{
SG_LOG(SG_IO, SG_ALERT, "loadxml: Cannot find XML property file '"
<< file.str() << "'.");
return false;
}
} }
} else { } else {
if (!XMLLoader::findAirportData(icao, file.str(), file)) { if (!XMLLoader::findAirportData(icao, file.str(), file)) {

View file

@ -59,6 +59,7 @@
#include <simgear/misc/sg_path.hxx> #include <simgear/misc/sg_path.hxx>
#include <simgear/misc/sg_dir.hxx> #include <simgear/misc/sg_dir.hxx>
#include <simgear/misc/sgstream.hxx> #include <simgear/misc/sgstream.hxx>
#include <simgear/misc/strutils.hxx>
#include <simgear/misc/interpolator.hxx> #include <simgear/misc/interpolator.hxx>
#include <simgear/scene/material/matlib.hxx> #include <simgear/scene/material/matlib.hxx>
@ -997,18 +998,37 @@ static void fgSetDistOrAltFromGlideSlope() {
// Set current_options lon/lat given an airport id and heading (degrees) // Set current_options lon/lat given an airport id and heading (degrees)
static bool fgSetPosFromNAV( const string& id, const double& freq ) { static bool fgSetPosFromNAV( const string& id, const double& freq, FGPositioned::Type type ) {
FGNavRecord *nav
= globals->get_navlist()->findByIdentAndFreq( id.c_str(), freq );
if (!nav) { const nav_list_type navlist
SG_LOG( SG_GENERAL, SG_ALERT, "Failed to locate NAV = " = globals->get_navlist()->findByIdentAndFreq( id.c_str(), freq, type );
<< id << ":" << freq );
return false; if (navlist.size() == 0 ) {
} SG_LOG( SG_GENERAL, SG_ALERT, "Failed to locate NAV = "
<< id << ":" << freq );
fgApplyStartOffset(nav->geod(), fgGetDouble("/sim/presets/heading-deg")); return false;
return true; }
if( navlist.size() > 1 ) {
ostringstream buf;
buf << "Ambigous NAV-ID: '" << id << "'. Specify id and frequency. Available stations:" << endl;
for( nav_list_type::const_iterator it = navlist.begin(); it != navlist.end(); ++it ) {
// NDB stored in kHz, VOR stored in MHz * 100 :-P
double factor = (*it)->type() == FGPositioned::NDB ? 1.0 : 1/100.0;
string unit = (*it)->type() == FGPositioned::NDB ? "kHz" : "MHz";
buf << (*it)->ident() << " "
<< setprecision(5) << (double)((*it)->get_freq() * factor) << " "
<< (*it)->get_lat() << "/" << (*it)->get_lon()
<< endl;
}
SG_LOG( SG_GENERAL, SG_ALERT, buf.str() );
return false;
}
FGNavRecord *nav = navlist[0];
fgApplyStartOffset(nav->geod(), fgGetDouble("/sim/presets/heading-deg"));
return true;
} }
// Set current_options lon/lat given an aircraft carrier id // Set current_options lon/lat given an aircraft carrier id
@ -1220,14 +1240,14 @@ bool fgInitPosition() {
if ( !set_pos && !vor.empty() ) { if ( !set_pos && !vor.empty() ) {
// a VOR is requested // a VOR is requested
if ( fgSetPosFromNAV( vor, vor_freq ) ) { if ( fgSetPosFromNAV( vor, vor_freq, FGPositioned::VOR ) ) {
set_pos = true; set_pos = true;
} }
} }
if ( !set_pos && !ndb.empty() ) { if ( !set_pos && !ndb.empty() ) {
// an NDB is requested // an NDB is requested
if ( fgSetPosFromNAV( ndb, ndb_freq ) ) { if ( fgSetPosFromNAV( ndb, ndb_freq, FGPositioned::NDB ) ) {
set_pos = true; set_pos = true;
} }
} }

View file

@ -182,8 +182,12 @@ FGGlobals::~FGGlobals()
delete current_panel; delete current_panel;
delete ATC_mgr; delete ATC_mgr;
controls->unbind();
delete controls; if (controls)
{
controls->unbind();
delete controls;
}
delete channel_options_list; delete channel_options_list;
delete initial_waypoints; delete initial_waypoints;

View file

@ -615,7 +615,7 @@ int fgMainInit( int argc, char **argv ) {
fgInitFGRoot(argc, argv); fgInitFGRoot(argc, argv);
// Check for the correct base package version // Check for the correct base package version
static char required_version[] = "2.3.0"; static char required_version[] = "2.5.0";
string base_version = fgBasePackageVersion(); string base_version = fgBasePackageVersion();
if ( !(base_version == required_version) ) { if ( !(base_version == required_version) ) {
// tell the operator how to use this application // tell the operator how to use this application

View file

@ -59,7 +59,6 @@
#include <Main/viewer.hxx> #include <Main/viewer.hxx>
#include <Environment/presets.hxx> #include <Environment/presets.hxx>
#include <simgear/version.h>
#include <osg/Version> #include <osg/Version>
using std::string; using std::string;
@ -70,6 +69,7 @@ using std::endl;
#if defined( HAVE_VERSION_H ) && HAVE_VERSION_H #if defined( HAVE_VERSION_H ) && HAVE_VERSION_H
# include <Include/version.h> # include <Include/version.h>
# include <simgear/version.h>
#else #else
# include <Include/no_version.h> # include <Include/no_version.h>
#endif #endif
@ -1132,10 +1132,16 @@ fgOptDME( const char *arg )
fgSetString("/instrumentation/dme/frequencies/source", fgSetString("/instrumentation/dme/frequencies/source",
"/instrumentation/nav[1]/frequencies/selected-mhz"); "/instrumentation/nav[1]/frequencies/selected-mhz");
} else { } else {
double frequency = atof(arg);
if (frequency==0.0)
{
SG_LOG(SG_INPUT, SG_ALERT, "Invalid DME frequency: '" << arg << "'.");
return FG_OPTIONS_ERROR;
}
fgSetInt("/instrumentation/dme/switch-position", 2); fgSetInt("/instrumentation/dme/switch-position", 2);
fgSetString("/instrumentation/dme/frequencies/source", fgSetString("/instrumentation/dme/frequencies/source",
"/instrumentation/dme/frequencies/selected-mhz"); "/instrumentation/dme/frequencies/selected-mhz");
fgSetString("/instrumentation/dme/frequencies/selected-mhz", arg); fgSetDouble("/instrumentation/dme/frequencies/selected-mhz", frequency);
} }
return FG_OPTIONS_OK; return FG_OPTIONS_OK;
} }
@ -1335,7 +1341,9 @@ struct OptionDesc {
{"airport", true, OPTION_STRING, "/sim/presets/airport-id", false, "", 0 }, {"airport", true, OPTION_STRING, "/sim/presets/airport-id", false, "", 0 },
{"runway", true, OPTION_FUNC, "", false, "", fgOptRunway }, {"runway", true, OPTION_FUNC, "", false, "", fgOptRunway },
{"vor", true, OPTION_FUNC, "", false, "", fgOptVOR }, {"vor", true, OPTION_FUNC, "", false, "", fgOptVOR },
{"vor-frequency", true, OPTION_DOUBLE, "/sim/presets/vor-freq", false, "", fgOptVOR },
{"ndb", true, OPTION_FUNC, "", false, "", fgOptNDB }, {"ndb", true, OPTION_FUNC, "", false, "", fgOptNDB },
{"ndb-frequency", true, OPTION_DOUBLE, "/sim/presets/ndb-freq", false, "", fgOptVOR },
{"carrier", true, OPTION_FUNC, "", false, "", fgOptCarrier }, {"carrier", true, OPTION_FUNC, "", false, "", fgOptCarrier },
{"parkpos", true, OPTION_FUNC, "", false, "", fgOptParkpos }, {"parkpos", true, OPTION_FUNC, "", false, "", fgOptParkpos },
{"fix", true, OPTION_FUNC, "", false, "", fgOptFIX }, {"fix", true, OPTION_FUNC, "", false, "", fgOptFIX },

View file

@ -187,8 +187,19 @@ static osg::Node* fgCreateSplashCamera()
fgSetString("/sim/startup/program-name", namestring); fgSetString("/sim/startup/program-name", namestring);
delete[] namestring; delete[] namestring;
SGPath tpath( globals->get_fg_root() ); SGPath tpath;
if (splash_texture == NULL || !strcmp(splash_texture, "")) { if (splash_texture && strcmp(splash_texture, "")) {
tpath = globals->resolve_maybe_aircraft_path(splash_texture);
if (tpath.isNull())
{
SG_LOG( SG_GENERAL, SG_ALERT, "Cannot find splash screen file '" << splash_texture
<< "'. Using default." );
}
}
if (tpath.isNull()) {
// no splash screen specified - select random image
tpath = globals->get_fg_root();
// load in the texture data // load in the texture data
int num = (int)(sg_random() * 5.0 + 1.0); int num = (int)(sg_random() * 5.0 + 1.0);
char num_str[5]; char num_str[5];
@ -197,10 +208,8 @@ static osg::Node* fgCreateSplashCamera()
tpath.append( "Textures/Splash" ); tpath.append( "Textures/Splash" );
tpath.concat( num_str ); tpath.concat( num_str );
tpath.concat( ".png" ); tpath.concat( ".png" );
} else {
tpath = globals->resolve_maybe_aircraft_path(splash_texture);
} }
osg::Texture2D* splashTexture = new osg::Texture2D; osg::Texture2D* splashTexture = new osg::Texture2D;
splashTexture->setImage(osgDB::readImageFile(tpath.c_str())); splashTexture->setImage(osgDB::readImageFile(tpath.c_str()));

View file

@ -6,5 +6,12 @@ set(SOURCES
modelmgr.cxx modelmgr.cxx
panelnode.cxx panelnode.cxx
) )
flightgear_component(Model "${SOURCES}") set(HEADERS
acmodel.hxx
model_panel.hxx
modelmgr.hxx
panelnode.hxx
)
flightgear_component(Model "${SOURCES}" "${HEADERS}")

View file

@ -5,4 +5,9 @@ set(SOURCES
tiny_xdr.cxx tiny_xdr.cxx
) )
flightgear_component(MultiPlayer "${SOURCES}") set(HEADERS
multiplaymgr.hxx
tiny_xdr.hxx
)
flightgear_component(MultiPlayer "${SOURCES}" "${HEADERS}")

View file

@ -2,7 +2,6 @@ include(FlightGearComponent)
set(SOURCES set(SOURCES
airways.cxx airways.cxx
awynet.cxx
fixlist.cxx fixlist.cxx
markerbeacon.cxx markerbeacon.cxx
navdb.cxx navdb.cxx
@ -16,4 +15,19 @@ set(SOURCES
PositionedBinding.cxx PositionedBinding.cxx
) )
flightgear_component(Navaids "${SOURCES}") set(HEADERS
airways.hxx
fixlist.hxx
markerbeacon.hxx
navdb.hxx
navlist.hxx
navrecord.hxx
positioned.hxx
procedure.hxx
route.hxx
routePath.hxx
waypoint.hxx
PositionedBinding.hxx
)
flightgear_component(Navaids "${SOURCES}" "${HEADERS}")

View file

@ -317,7 +317,7 @@ void FGAirwayNetwork::load(const SGPath& path)
int FGAirwayNetwork::findNearestNode(const SGGeod& aPos) int FGAirwayNetwork::findNearestNode(const SGGeod& aPos)
{ {
double minDist = HUGE_VAL; double minDist = HUGE_VAL;
int index; int index = -1;
SGVec3d cart = SGVec3d::fromGeod(aPos); SGVec3d cart = SGVec3d::fromGeod(aPos);
//cerr << "Lat " << lat << " lon " << lon << endl; //cerr << "Lat " << lat << " lon " << lon << endl;

View file

@ -33,6 +33,8 @@
#include <Airports/runways.hxx> #include <Airports/runways.hxx>
#include <algorithm>
using std::string; using std::string;
// FGNavList ------------------------------------------------------------------ // FGNavList ------------------------------------------------------------------
@ -73,41 +75,74 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position)
return findNavFromList( position, stations ); return findNavFromList( position, stations );
} }
class VORNDBFilter : public FGPositioned::Filter class TypeFilter : public FGPositioned::Filter
{ {
public: public:
TypeFilter( const FGPositioned::Type mintype, const FGPositioned::Type maxtype ) : _mintype(mintype), _maxtype(maxtype) {}
virtual FGPositioned::Type minType() const { virtual FGPositioned::Type minType() const {
return FGPositioned::VOR; return _mintype;
} }
virtual FGPositioned::Type maxType() const { virtual FGPositioned::Type maxType() const {
return FGPositioned::NDB; return _maxtype;
} }
private:
FGPositioned::Type _mintype;
FGPositioned::Type _maxtype;
}; };
// Given an Ident and optional freqency, return the first matching // Given an Ident and optional freqency, return the first matching
// station. // station.
FGNavRecord *FGNavList::findByIdentAndFreq(const string& ident, const double freq ) const nav_list_type FGNavList::findByIdentAndFreq(const string& ident, const double freq, const FGPositioned::Type type )
{ {
FGPositionedRef cur; FGPositionedRef cur;
VORNDBFilter filter; TypeFilter filter(
type == FGPositioned::INVALID ? FGPositioned::VOR : type,
type == FGPositioned::INVALID ? FGPositioned::NDB : type );
nav_list_type reply;
cur = FGPositioned::findNextWithPartialId(cur, ident, &filter); cur = FGPositioned::findNextWithPartialId(cur, ident, &filter);
if (freq <= 0.0) {
return static_cast<FGNavRecord*>(cur.ptr()); // might be null
}
int f = (int)(freq*100.0 + 0.5); int f = (int)(freq*100.0 + 0.5);
while (cur) { while (cur) {
FGNavRecord* nav = static_cast<FGNavRecord*>(cur.ptr()); FGNavRecord* nav = static_cast<FGNavRecord*>(cur.ptr());
if (nav->get_freq() == f) { if ( f <= 0.0 || nav->get_freq() == f) {
return nav; reply.push_back( nav );
} }
cur = FGPositioned::findNextWithPartialId(cur, ident, &filter); cur = FGPositioned::findNextWithPartialId(cur, ident, &filter);
} }
return NULL; return reply;
}
class NavRecordDistanceSortPredicate
{
public:
NavRecordDistanceSortPredicate( const SGGeod & position ) :
_position(SGVec3d::fromGeod(position)) {}
bool operator()( const nav_rec_ptr & n1, const nav_rec_ptr & n2 )
{
if( n1 == NULL || n2 == NULL ) return false;
return distSqr(n1->cart(), _position) < distSqr(n2->cart(), _position);
}
private:
SGVec3d _position;
};
// Given an Ident and optional freqency and type ,
// return a list of matching stations sorted by distance to the given position
const nav_list_type FGNavList::findByIdentAndFreq( const SGGeod & position,
const std::string& ident, const double freq, const FGPositioned::Type type )
{
nav_list_type reply = findByIdentAndFreq( ident, freq, type );
NavRecordDistanceSortPredicate sortPredicate( position );
std::sort( reply.begin(), reply.end(), sortPredicate );
return reply;
} }
// discount navids if they conflict with another on the same frequency // discount navids if they conflict with another on the same frequency

View file

@ -76,10 +76,16 @@ public:
*/ */
FGNavRecord *findByFreq( double freq, const SGGeod& position); FGNavRecord *findByFreq( double freq, const SGGeod& position);
// Given an Ident and optional freqency, return the first matching // Given an Ident and optional freqency and type ,
// station. // return a list of matching stations.
FGNavRecord *findByIdentAndFreq( const std::string& ident, const nav_list_type findByIdentAndFreq( const std::string& ident,
const double freq = 0.0 ); const double freq = 0.0, const FGPositioned::Type = FGPositioned::INVALID );
// Given an Ident and optional freqency and type ,
// return a list of matching stations sorted by distance to the given position
const nav_list_type findByIdentAndFreq( const SGGeod & position,
const std::string& ident, const double freq = 0.0,
const FGPositioned::Type = FGPositioned::INVALID );
// given a frequency returns the first matching entry // given a frequency returns the first matching entry
FGNavRecord *findStationByFreq( double frequency ); FGNavRecord *findStationByFreq( double frequency );

View file

@ -27,8 +27,36 @@ set(SOURCES
ray.cxx ray.cxx
rul.cxx rul.cxx
) )
flightgear_component(Network "${SOURCES}") set(HEADERS
ATC-Inputs.hxx
ATC-Main.hxx
ATC-Outputs.hxx
AV400.hxx
AV400Sim.hxx
AV400WSim.hxx
atlas.hxx
garmin.hxx
generic.hxx
httpd.hxx
joyclient.hxx
jpg-httpd.hxx
jsclient.hxx
lfsglass.hxx
native.hxx
native_ctrls.hxx
native_fdm.hxx
native_gui.hxx
nmea.hxx
opengc.hxx
props.hxx
protocol.hxx
pve.hxx
ray.hxx
rul.hxx
)
flightgear_component(Network "${SOURCES}" "${HEADERS}")
if(RTI_FOUND) if(RTI_FOUND)
add_subdirectory(HLA) add_subdirectory(HLA)

View file

@ -1,5 +1,4 @@
EXTRA_DIST = jpg-httpd.cxx jpg-httpd.hxx \ EXTRA_DIST = jpg-httpd.cxx jpg-httpd.hxx
multiplay.cxx multiplay.hxx
noinst_LIBRARIES = libNetwork.a noinst_LIBRARIES = libNetwork.a

View file

@ -29,7 +29,7 @@
#include <simgear/io/iochannel.hxx> #include <simgear/io/iochannel.hxx>
#include <FDM/flightProperties.hxx> #include <FDM/flightProperties.hxx>
#include <Environment/gravity.hxx>
#include "ray.hxx" #include "ray.hxx"
@ -76,7 +76,7 @@ bool FGRAY::gen_message() {
double dt = 0.05; /* seconds */ double dt = 0.05; /* seconds */
/* get basic information about gravity */ /* get basic information about gravity */
double grav_acc = -9.81; double grav_acc = -Environment::Gravity::instance()->getGravity( f.getPosition() );
double vert_acc = f.get_A_Z_pilot() * 0.3; double vert_acc = f.get_A_Z_pilot() * 0.3;
if ( -3.0 < vert_acc ) if ( -3.0 < vert_acc )
vert_acc = -3.0; vert_acc = -3.0;

View file

@ -6,6 +6,13 @@ set(SOURCES
scenery.cxx scenery.cxx
tilemgr.cxx tilemgr.cxx
) )
flightgear_component(Scenery "${SOURCES}") set(HEADERS
SceneryPager.hxx
redout.hxx
scenery.hxx
tilemgr.hxx
)
flightgear_component(Scenery "${SOURCES}" "${HEADERS}")

View file

@ -87,9 +87,6 @@ FGTileMgr::FGTileMgr():
FGTileMgr::~FGTileMgr() FGTileMgr::~FGTileMgr()
{ {
if (_terra_sync)
_terra_sync->setTileCache(NULL);
// remove all nodes we might have left behind // remove all nodes we might have left behind
osg::Group* group = globals->get_scenery()->get_terrain_branch(); osg::Group* group = globals->get_scenery()->get_terrain_branch();
group->removeChildren(0, group->getNumChildren()); group->removeChildren(0, group->getNumChildren());

View file

@ -4,6 +4,11 @@ set(SOURCES
NasalSys.cxx NasalSys.cxx
nasal-props.cxx nasal-props.cxx
) )
flightgear_component(Scripting "${SOURCES}") set(HEADERS
NasalSys.hxx
)
flightgear_component(Scripting "${SOURCES}" "${HEADERS}")

View file

@ -31,9 +31,10 @@
#include <Main/fg_props.hxx> #include <Main/fg_props.hxx>
#include <Main/util.hxx> #include <Main/util.hxx>
#include <Scenery/scenery.hxx> #include <Scenery/scenery.hxx>
#include <Navaids/navrecord.hxx> #include <Navaids/navlist.hxx>
#include <Navaids/procedure.hxx> #include <Navaids/procedure.hxx>
#include "NasalSys.hxx" #include "NasalSys.hxx"
static FGNasalSys* nasalSys = 0; static FGNasalSys* nasalSys = 0;
@ -695,6 +696,91 @@ static naRef f_airportinfo(naContext c, naRef me, int argc, naRef* args)
} }
// Returns vector of data hash for navaid of a <type>, nil on error
// navaids sorted by ascending distance
// navinfo([<lat>,<lon>],[<type>],[<id>])
// lat/lon (numeric): use latitude/longitude instead of ac position
// type: ("fix"|"vor"|"ndb"|"ils"|"dme"|"tacan"|"any")
// id: (partial) id of the fix
// examples:
// navinfo("vor") returns all vors
// navinfo("HAM") return all navaids who's name start with "HAM"
// navinfo("vor", "HAM") return all vor who's name start with "HAM"
//navinfo(34,48,"vor","HAM") return all vor who's name start with "HAM"
// sorted by distance relative to lat=34, lon=48
static naRef f_navinfo(naContext c, naRef me, int argc, naRef* args)
{
static SGConstPropertyNode_ptr latn = fgGetNode("/position/latitude-deg", true);
static SGConstPropertyNode_ptr lonn = fgGetNode("/position/longitude-deg", true);
SGGeod pos;
if(argc >= 2 && naIsNum(args[0]) && naIsNum(args[1])) {
pos = SGGeod::fromDeg(args[1].num, args[0].num);
args += 2;
argc -= 2;
} else {
pos = SGGeod::fromDeg(lonn->getDoubleValue(), latn->getDoubleValue());
}
FGPositioned::Type type = FGPositioned::INVALID;
nav_list_type navlist;
const char * id = "";
if(argc > 0 && naIsString(args[0])) {
const char *s = naStr_data(args[0]);
if(!strcmp(s, "any")) type = FGPositioned::INVALID;
else if(!strcmp(s, "fix")) type = FGPositioned::FIX;
else if(!strcmp(s, "vor")) type = FGPositioned::VOR;
else if(!strcmp(s, "ndb")) type = FGPositioned::NDB;
else if(!strcmp(s, "ils")) type = FGPositioned::ILS;
else if(!strcmp(s, "dme")) type = FGPositioned::DME;
else if(!strcmp(s, "tacan")) type = FGPositioned::TACAN;
else id = s; // this is an id
++args;
--argc;
}
if(argc > 0 && naIsString(args[0])) {
if( *id != 0 ) {
naRuntimeError(c, "navinfo() called with navaid id");
return naNil();
}
id = naStr_data(args[0]);
++args;
--argc;
}
if( argc > 0 ) {
naRuntimeError(c, "navinfo() called with too many arguments");
return naNil();
}
navlist = globals->get_navlist()->findByIdentAndFreq( pos, id, 0.0, type );
naRef reply = naNewVector(c);
for( nav_list_type::const_iterator it = navlist.begin(); it != navlist.end(); ++it ) {
const FGNavRecord * nav = *it;
// set navdata hash
naRef navdata = naNewHash(c);
#define HASHSET(s,l,n) naHash_set(navdata, naStr_fromdata(naNewString(c),s,l),n)
HASHSET("id", 2, naStr_fromdata(naNewString(c),
const_cast<char *>(nav->ident().c_str()), nav->ident().length()));
HASHSET("name", 4, naStr_fromdata(naNewString(c),
const_cast<char *>(nav->name().c_str()), nav->name().length()));
HASHSET("lat", 3, naNum(nav->get_lat()));
HASHSET("lon", 3, naNum(nav->get_lon()));
HASHSET("elevation", 9, naNum(nav->get_elev_ft() * SG_FEET_TO_METER));
HASHSET("type", 4, naStr_fromdata(naNewString(c),
const_cast<char *>(nav->nameForType(nav->type())), strlen(nav->nameForType(nav->type()))));
HASHSET("distance", 8, naNum(SGGeodesy::distanceNm( pos, nav->geod() ) * SG_NM_TO_METER ) );
HASHSET("bearing", 7, naNum(SGGeodesy::courseDeg( pos, nav->geod() ) ) );
#undef HASHSET
naVec_append( reply, navdata );
}
return reply;
}
// Table of extension functions. Terminate with zeros. // Table of extension functions. Terminate with zeros.
static struct { const char* name; naCFunction func; } funcs[] = { static struct { const char* name; naCFunction func; } funcs[] = {
{ "getprop", f_getprop }, { "getprop", f_getprop },
@ -717,6 +803,7 @@ static struct { const char* name; naCFunction func; } funcs[] = {
{ "geodtocart", f_geodtocart }, { "geodtocart", f_geodtocart },
{ "geodinfo", f_geodinfo }, { "geodinfo", f_geodinfo },
{ "airportinfo", f_airportinfo }, { "airportinfo", f_airportinfo },
{ "navinfo", f_navinfo },
{ 0, 0 } { 0, 0 }
}; };
@ -880,8 +967,13 @@ void FGNasalSys::loadPropertyScripts(SGPropertyNode* n)
if (!p.isAbsolute() || !p.exists()) if (!p.isAbsolute() || !p.exists())
{ {
p = globals->resolve_maybe_aircraft_path(file); p = globals->resolve_maybe_aircraft_path(file);
if (p.isNull())
{
SG_LOG(SG_NASAL, SG_ALERT, "Cannot find Nasal script '" <<
file << "' for module '" << module << "'.");
}
} }
ok &= loadModule(p, module); ok &= p.isNull() ? false : loadModule(p, module);
j++; j++;
} }
@ -1134,7 +1226,7 @@ naRef FGNasalSys::setListener(naContext c, int argc, naRef* args)
FGNasalListener *nl = new FGNasalListener(node, code, this, FGNasalListener *nl = new FGNasalListener(node, code, this,
gcSave(code), _listenerId, init, type); gcSave(code), _listenerId, init, type);
node->addChangeListener(nl, init); node->addChangeListener(nl, init != 0);
_listener[_listenerId] = nl; _listener[_listenerId] = nl;
return naNum(_listenerId++); return naNum(_listenerId++);

View file

@ -8,5 +8,14 @@ set(SOURCES
voice.cxx voice.cxx
voiceplayer.cxx voiceplayer.cxx
) )
flightgear_component(Sound "${SOURCES}") set(HEADERS
beacon.hxx
fg_fx.hxx
morse.hxx
sample_queue.hxx
voice.hxx
voiceplayer.hxx
)
flightgear_component(Sound "${SOURCES}" "${HEADERS}")

View file

@ -7,5 +7,14 @@ set(SOURCES
system_mgr.cxx system_mgr.cxx
vacuum.cxx vacuum.cxx
) )
set(HEADERS
electrical.hxx
pitot.hxx
static.hxx
system_mgr.hxx
vacuum.hxx
)
flightgear_component(Systems "${SOURCES}") flightgear_component(Systems "${SOURCES}" "${HEADERS}")

View file

@ -6,4 +6,10 @@ set(SOURCES
sunsolver.cxx sunsolver.cxx
) )
flightgear_component(Time "${SOURCES}") set(HEADERS
TimeManager.hxx
light.hxx
sunsolver.hxx
)
flightgear_component(Time "${SOURCES}" "${HEADERS}")

View file

@ -227,7 +227,7 @@ bool FGAISchedule::update(time_t now, const SGVec3d& userCart)
// Check if this aircraft has been released. // Check if this aircraft has been released.
FGTrafficManager *tmgr = (FGTrafficManager *) globals->get_subsystem("Traffic Manager"); FGTrafficManager *tmgr = (FGTrafficManager *) globals->get_subsystem("Traffic Manager");
if (tmgr->isReleased(AIManagerRef)) { if (tmgr->isReleased(AIManagerRef)) {
AIManagerRef = NULL; AIManagerRef = 0;
} else { } else {
return true; // in visual range, let the AIManager handle it return true; // in visual range, let the AIManager handle it
} }

View file

@ -2,24 +2,30 @@
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED) find_package(GLUT REQUIRED)
if(GLUT_FOUND)
message(STATUS "found glut")
add_executable(fgpanel main.cxx add_executable(fgpanel main.cxx
FGGLApplication.cxx FGGLApplication.cxx
FGPanelApplication.cxx FGPanelApplication.cxx
FGPNGTextureLoader.cxx FGPNGTextureLoader.cxx
FGRGBTextureLoader.cxx FGRGBTextureLoader.cxx
FGPanelProtocol.cxx FGPanelProtocol.cxx
FGFontCache.cxx FGFontCache.cxx
panel.cxx panel.cxx
panel_io.cxx) panel_io.cxx)
target_link_libraries(fgpanel target_link_libraries(fgpanel
${PNG_LIBRARIES} -lrt
${GLUT_LIBRARIES} ${PNG_LIBRARIES}
${SIMGEAR_LIBRARIES} ${GLUT_LIBRARIES}
${OPENGL_LIBRARIES} ${SIMGEAR_LIBRARIES}
${ZLIB_LIBRARIES} ${OPENGL_LIBRARIES}
${PLIB_LIBRARIES} ${ZLIB_LIBRARIES}
) ${PLIB_LIBRARIES}
)
install(TARGETS fgpanel RUNTIME DESTINATION bin) install(TARGETS fgpanel RUNTIME DESTINATION bin)
else()
message(STATUS "glut NOT found, can't build fgpanel")
endif()

View file

@ -90,29 +90,31 @@ main(int argc, char** argv)
fog->setDensity(1e-6); fog->setDensity(1e-6);
camera->getOrCreateStateSet()->setAttribute(fog); camera->getOrCreateStateSet()->setAttribute(fog);
const char *fg_root_env = std::getenv("FG_ROOT");
std::string fg_root; std::string fg_root;
if (fg_root_env) if (arguments.read("--fg-root", fg_root)) {
} else if (const char *fg_root_env = std::getenv("FG_ROOT")) {
fg_root = fg_root_env; fg_root = fg_root_env;
else } else {
#if defined(PKGDATADIR) #if defined(PKGDATADIR)
fg_root = PKGDATADIR; fg_root = PKGDATADIR;
#else #else
fg_root = "."; fg_root = ".";
#endif #endif
}
osgDB::FilePathList filePathList; std::string fg_scenery;
filePathList.push_back(fg_root);
const char *fg_scenery_env = std::getenv("FG_SCENERY");
string_list path_list; string_list path_list;
if (fg_scenery_env) { if (arguments.read("--fg-scenery", fg_scenery)) {
path_list.push_back(fg_scenery);
} else if (const char *fg_scenery_env = std::getenv("FG_SCENERY")) {
path_list = sgPathSplit(fg_scenery_env); path_list = sgPathSplit(fg_scenery_env);
} else { } else {
SGPath path(fg_root); SGPath path(fg_root);
path.append("Scenery"); path.append("Scenery");
path_list.push_back(path.str()); path_list.push_back(path.str());
} }
osgDB::FilePathList filePathList;
filePathList.push_back(fg_root);
for (unsigned i = 0; i < path_list.size(); ++i) { for (unsigned i = 0; i < path_list.size(); ++i) {
SGPath pt(path_list[i]), po(path_list[i]); SGPath pt(path_list[i]), po(path_list[i]);
pt.append("Terrain"); pt.append("Terrain");
@ -153,6 +155,10 @@ main(int argc, char** argv)
btgOptions->getDatabasePathList() = filePathList; btgOptions->getDatabasePathList() = filePathList;
btgOptions->setMatlib(ml); btgOptions->setMatlib(ml);
// Here, all arguments are processed
arguments.reportRemainingOptionsAsUnrecognized();
arguments.writeErrorMessages(std::cerr);
// read the scene from the list of file specified command line args. // read the scene from the list of file specified command line args.
osg::ref_ptr<osg::Node> loadedModel; osg::ref_ptr<osg::Node> loadedModel;
loadedModel = osgDB::readNodeFiles(arguments, btgOptions); loadedModel = osgDB::readNodeFiles(arguments, btgOptions);

View file

@ -1 +1 @@
2.3.0 2.5.0