diff --git a/simgear/props/condition.cxx b/simgear/props/condition.cxx index 53922ce9..5e561144 100644 --- a/simgear/props/condition.cxx +++ b/simgear/props/condition.cxx @@ -537,7 +537,8 @@ readComparison( SGPropertyNode *prop_root, // REVIEW: Memory Leak - 2,880 bytes in 40 blocks are indirectly lost SGComparisonCondition * condition = new SGComparisonCondition(type, reverse); if (node->nChildren() < 2 || node->nChildren() > 3 ) { - throw sg_exception("condition: comparison without two or three children"); + throw sg_exception("condition: comparison without two or three children", + {}, {}, false); } const SGPropertyNode* left = node->getChild(0), @@ -553,7 +554,8 @@ readComparison( SGPropertyNode *prop_root, SGExpressiond* exp = SGReadDoubleExpression(prop_root, left->getChild(0)); condition->setLeftDExpression(exp); } else { - throw sg_exception("Unknown condition comparison left child:" + leftName); + throw sg_exception("Unknown condition comparison left child:" + leftName, + {}, {}, false); } } @@ -567,7 +569,8 @@ readComparison( SGPropertyNode *prop_root, SGExpressiond* exp = SGReadDoubleExpression(prop_root, right->getChild(0)); condition->setRightDExpression(exp); } else { - throw sg_exception("Unknown condition comparison right child:" + rightName); + throw sg_exception("Unknown condition comparison right child:" + rightName, + {}, {}, false); } } @@ -582,7 +585,8 @@ readComparison( SGPropertyNode *prop_root, SGExpressiond* exp = SGReadDoubleExpression(prop_root, n->getChild(0)); condition->setPrecisionDExpression(exp); } else { - throw sg_exception("Unknown condition comparison precision child:" + name ); + throw sg_exception("Unknown condition comparison precision child:" + name, + {}, {}, false); } } diff --git a/simgear/scene/model/SGReaderWriterXML.cxx b/simgear/scene/model/SGReaderWriterXML.cxx index 58edce29..91d0d95f 100644 --- a/simgear/scene/model/SGReaderWriterXML.cxx +++ b/simgear/scene/model/SGReaderWriterXML.cxx @@ -815,13 +815,22 @@ sgLoad3DModel_internal(const SGPath& path, } // of object-names in the animation continue; } - /* - * Setup the model data for the node currently being animated. - */ - modelData.LoadAnimationValuesForElement(animation_nodes[i], i); + + try { + /* + * Setup the model data for the node currently being animated. + */ + modelData.LoadAnimationValuesForElement(animation_nodes[i], i); - /// OSGFIXME: duh, why not only model????? - SGAnimation::animate(modelData); + /// OSGFIXME: duh, why not only model????? + SGAnimation::animate(modelData); + } catch (sg_exception& e) { + simgear::reportFailure(simgear::LoadFailure::NotFound, simgear::ErrorCode::XMLModelLoad, + "Couldn't load animation " + animation_nodes[i]->getNameString() + + ":" + e.getFormattedMessage(), + modelpath); + throw; + } } animationcount += animation_nodes.size();