]> git.mxchange.org Git - simgear.git/commitdiff
Allows to load submodels with path relative to current model path.
authorfredb <fredb>
Wed, 2 Apr 2008 22:25:12 +0000 (22:25 +0000)
committerfredb <fredb>
Wed, 2 Apr 2008 22:25:12 +0000 (22:25 +0000)
Submodel path must be prefixed by ./ otherwise path is relative to fg_root ( current behavior )

simgear/scene/model/SGReaderWriterXML.cxx

index 36a3ebedc7c9be18f6010c2885eba0798dc3e30d..88f9e6454467a2e210c2eca76d30e2d7efecc9d9 100644 (file)
@@ -214,10 +214,17 @@ sgLoad3DModel_internal(const string &path,
     for (unsigned i = 0; i < model_nodes.size(); i++) {
         SGPropertyNode_ptr sub_props = model_nodes[i];
 
+        SGPath submodelpath;
         osg::ref_ptr<osg::Node> submodel;
-        const char* submodelFileName = sub_props->getStringValue("path");
+        string submodelFileName = sub_props->getStringValue("path");
+        if ( submodelFileName.size() > 2 && submodelFileName.substr( 0, 2 ) == "./" ) {
+            submodelpath = modelpath.dir();
+            submodelpath.append( submodelFileName.substr( 2 ) );
+        } else {
+            submodelpath = submodelFileName;
+        }
         try {
-            submodel = sgLoad3DModel_internal(submodelFileName, prop_root, 0, load_panel);
+            submodel = sgLoad3DModel_internal(submodelpath.str(), prop_root, 0, load_panel);
         } catch (const sg_throwable &t) {
             SG_LOG(SG_INPUT, SG_ALERT, "Failed to load submodel: " << t.getFormattedMessage());
             throw;