From c4f02cc41e7ddc08a9872f1c2f0f655662229f54 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Thu, 24 Oct 2013 01:30:01 +0200 Subject: [PATCH] Fix for #1244 (Canvas placements with pick animation). --- src/Cockpit/od_gauge.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Cockpit/od_gauge.cxx b/src/Cockpit/od_gauge.cxx index f2343a0aa..5cae2fb8e 100644 --- a/src/Cockpit/od_gauge.cxx +++ b/src/Cockpit/od_gauge.cxx @@ -138,7 +138,7 @@ class ReplaceStaticTextureVisitor: return; osg::Group *parent = node.getParent(0); - if( !_node_name.empty() && parent->getName() != _node_name ) + if( !_node_name.empty() && getNodeName(*parent) != _node_name ) return; if( !_parent_name.empty() ) @@ -233,6 +233,21 @@ class ReplaceStaticTextureVisitor: simgear::canvas::CanvasWeakPtr _canvas; simgear::canvas::Placements _placements; + + const std::string& getNodeName(const osg::Node& node) const + { + if( !node.getName().empty() ) + return node.getName(); + + // Special handling for pick animation which clears the name of the object + // and instead sets the name of a parent group with one or two groups + // attached (one for normal rendering and one for the picking highlight). + osg::Group const* parent = node.getParent(0); + if( parent->getName() == "pick render group" ) + return parent->getParent(0)->getName(); + + return node.getName(); + } }; //------------------------------------------------------------------------------ -- 2.39.5