SceneInterfacePtr HoudiniScene::child( const Name &name, MissingBehaviour missingBehaviour ) { Path contentPath; OP_Node *child = retrieveChild( name, contentPath, missingBehaviour ); if ( !child ) { return 0; } UT_String nodePath; child->getFullPath( nodePath ); Path rootPath; rootPath.resize( m_rootIndex ); std::copy( m_path.begin(), m_path.begin() + m_rootIndex, rootPath.begin() ); /// \todo: is this really what we want? can we just pass rootIndex and contentIndex instead? return new HoudiniScene( nodePath, contentPath, rootPath, m_defaultTime, m_splitter ); }
SceneInterfacePtr LiveScene::retrieveScene( const Path &path, MissingBehaviour missingBehaviour ) const { Path rootPath, emptyPath; rootPath.resize( m_rootIndex ); std::copy( m_path.begin(), m_path.begin() + m_rootIndex, rootPath.begin() ); LiveScenePtr rootScene = new LiveScene(); rootScene->setDefaultTime( m_defaultTime ); for ( Path::const_iterator it = rootPath.begin(); it != rootPath.end(); ++it ) { rootScene = IECore::runTimeCast<LiveScene>( rootScene->child( *it ) ); if ( !rootScene ) { return 0; } } UT_String rootNodePath; OP_Node *node = rootScene->retrieveNode(); if ( !node ) { return 0; } node->getFullPath( rootNodePath ); /// \todo: is this really what we want? can we just pass rootIndex and contentIndex instead? SceneInterfacePtr scene = new LiveScene( rootNodePath, emptyPath, rootPath, m_defaultTime, m_splitter.get() ); for ( Path::const_iterator it = path.begin(); it != path.end(); ++it ) { scene = scene->child( *it, missingBehaviour ); if ( !scene ) { return 0; } } return scene; }