From 6745d27691039e2ce477b2e823dbae6c59bc5d00 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Tue, 4 Sep 2012 23:57:25 +0200 Subject: [PATCH] #858: Fix loading issue with aircraft models in "--fg-aircraft" directories Something after FG 2.8.0 has broken loading aircraft models from --fg-aircraft directories. Issue is fixed by resolving the aircraft path in FGAircraftModel (though this module itself hasn't changed and things were working before...). --- src/Model/acmodel.cxx | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/Model/acmodel.cxx b/src/Model/acmodel.cxx index 51f4082f3..cfc111dfc 100644 --- a/src/Model/acmodel.cxx +++ b/src/Model/acmodel.cxx @@ -63,19 +63,34 @@ FGAircraftModel::~FGAircraftModel () void FGAircraftModel::init () { + osg::Node *model = NULL; + _aircraft = new SGModelPlacement; string path = fgGetString("/sim/model/path", "Models/Geometry/glider.ac"); - try { - osg::Node *model = fgLoad3DModelPanel( path, globals->get_props()); - _aircraft->init( model ); - } catch (const sg_exception &ex) { - SG_LOG(SG_AIRCRAFT, SG_ALERT, "Failed to load aircraft from " << path << ':'); - SG_LOG(SG_AIRCRAFT, SG_ALERT, " " << ex.getFormattedMessage()); - SG_LOG(SG_AIRCRAFT, SG_ALERT, "(Falling back to glider.ac.)"); - osg::Node *model = fgLoad3DModelPanel( "Models/Geometry/glider.ac", - globals->get_props()); - _aircraft->init( model ); + + SGPath resolvedPath = globals->resolve_aircraft_path(path); + if (resolvedPath.isNull()) + { + SG_LOG(SG_AIRCRAFT, SG_ALERT, "Failed to load aircraft from " << path << ':'); } + else + { + try { + model = fgLoad3DModelPanel( resolvedPath.str(), globals->get_props()); + } catch (const sg_exception &ex) { + SG_LOG(SG_AIRCRAFT, SG_ALERT, "Failed to load aircraft from " << path << ':'); + SG_LOG(SG_AIRCRAFT, SG_ALERT, " " << ex.getFormattedMessage()); + SG_LOG(SG_AIRCRAFT, SG_ALERT, "(Falling back to glider.ac.)"); + } + } + + if (!model) + { + model = fgLoad3DModelPanel( "Models/Geometry/glider.ac", + globals->get_props()); + } + _aircraft->init( model ); + osg::Node* node = _aircraft->getSceneGraph(); // Do not do altitude computations with that model node->setNodeMask(~SG_NODEMASK_TERRAIN_BIT);