SceneNode::ScenePath Group::sourcePath( const ScenePath &outputPath, const std::string &groupName, const ScenePlug **source ) const { const InternedString mappedChildName = outputPath[1]; ConstCompoundObjectPtr mapping = boost::static_pointer_cast<const CompoundObject>( mappingPlug()->getValue() ); const CompoundObject *entry = mapping->member<CompoundObject>( mappedChildName ); if( !entry ) { throw Exception( boost::str( boost::format( "Unable to find mapping for output path" ) ) ); } *source = inPlugs()->getChild<ScenePlug>( entry->member<IntData>( "i" )->readable() ); ScenePath result; result.reserve( outputPath.size() - 1 ); result.push_back( entry->member<InternedStringData>( "n" )->readable() ); result.insert( result.end(), outputPath.begin() + 2, outputPath.end() ); return result; }