本文整理汇总了C++中sceneplug::ScenePath::size方法的典型用法代码示例。如果您正苦于以下问题:C++ ScenePath::size方法的具体用法?C++ ScenePath::size怎么用?C++ ScenePath::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sceneplug::ScenePath
的用法示例。
在下文中一共展示了ScenePath::size方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: writeLocation
void SceneWriter::writeLocation( const GafferScene::ScenePlug *scene, const ScenePlug::ScenePath &scenePath, Context *context, IECore::SceneInterface *output, double time ) const
{
context->set( ScenePlug::scenePathContextName, scenePath );
ConstCompoundObjectPtr attributes = scene->attributesPlug()->getValue();
for( CompoundObject::ObjectMap::const_iterator it = attributes->members().begin(), eIt = attributes->members().end(); it != eIt; it++ )
{
output->writeAttribute( it->first, it->second.get(), time );
}
if( scenePath.empty() )
{
ConstCompoundObjectPtr globals = scene->globalsPlug()->getValue();
output->writeAttribute( "gaffer:globals", globals.get(), time );
}
ConstObjectPtr object = scene->objectPlug()->getValue();
if( object->typeId() != IECore::NullObjectTypeId && scenePath.size() > 0 )
{
output->writeObject( object.get(), time );
}
Imath::Box3f b = scene->boundPlug()->getValue();
output->writeBound( Imath::Box3d( Imath::V3f( b.min ), Imath::V3f( b.max ) ), time );
if( scenePath.size() )
{
Imath::M44f t = scene->transformPlug()->getValue();
Imath::M44d transform(
t[0][0], t[0][1], t[0][2], t[0][3],
t[1][0], t[1][1], t[1][2], t[1][3],
t[2][0], t[2][1], t[2][2], t[2][3],
t[3][0], t[3][1], t[3][2], t[3][3]
);
output->writeTransform( new IECore::M44dData( transform ), time );
}
ConstInternedStringVectorDataPtr childNames = scene->childNamesPlug()->getValue();
ScenePlug::ScenePath childScenePath = scenePath;
childScenePath.push_back( InternedString() );
for( vector<InternedString>::const_iterator it=childNames->readable().begin(); it!=childNames->readable().end(); it++ )
{
childScenePath[scenePath.size()] = *it;
SceneInterfacePtr outputChild = output->child( *it, SceneInterface::CreateIfMissing );
writeLocation( scene, childScenePath, context, outputChild.get(), time );
}
}
示例2: computeSet
GafferScene::ConstPathMatcherDataPtr BranchCreator::computeSet( const IECore::InternedString &setName, const Gaffer::Context *context, const ScenePlug *parent ) const
{
ConstPathMatcherDataPtr inputSetData = inPlug()->set( setName );
ConstCompoundDataPtr mapping = boost::static_pointer_cast<const CompoundData>( mappingPlug()->getValue() );
if( !mapping->readable().size() )
{
return inputSetData;
}
ScenePlug::ScenePath parentPath = mapping->member<InternedStringVectorData>( g_parentKey )->readable();
ConstPathMatcherDataPtr branchSetData = computeBranchSet( parentPath, setName, context );
if( !branchSetData )
{
return inputSetData;
}
const PathMatcher &branchSet = branchSetData->readable();
if( branchSet.isEmpty() )
{
return inputSetData;
}
const CompoundData *forwardMapping = mapping->member<CompoundData>( g_forwardMappingKey );
PathMatcherDataPtr outputSetData = inputSetData->copy();
PathMatcher &outputSet = outputSetData->writable();
vector<InternedString> outputPrefix( parentPath );
for( PathMatcher::RawIterator pIt = branchSet.begin(), peIt = branchSet.end(); pIt != peIt; ++pIt )
{
const ScenePlug::ScenePath &branchPath = *pIt;
if( !branchPath.size() )
{
continue; // Skip root
}
assert( branchPath.size() == 1 );
const InternedStringData *outputName = forwardMapping->member<InternedStringData>( branchPath[0], /* throwExceptions = */ true );
outputPrefix.resize( parentPath.size() + 1 );
outputPrefix.back() = outputName->readable();
outputSet.addPaths( branchSet.subTree( *pIt ), outputPrefix );
pIt.prune(); // We only want to visit the first level
}
return outputSetData;
}
示例3: pathToString
void ScenePlug::pathToString( const ScenePlug::ScenePath &path, std::string &s )
{
if( !path.size() )
{
s = "/";
}
else
{
s.clear();
for( ScenePlug::ScenePath::const_iterator it = path.begin(), eIt = path.end(); it != eIt; it++ )
{
s += "/" + it->string();
}
}
}
示例4: updateShadersWalk
void InteractiveRender::updateShadersWalk( const ScenePlug::ScenePath &path )
{
/// \todo Keep a track of the hashes of the shaders at each path,
/// and use it to only update the shaders when they've changed.
ConstCompoundObjectPtr attributes = inPlug()->attributes( path );
// terminate recursion for invisible locations
ConstBoolDataPtr visibility = attributes->member<BoolData>( SceneInterface::visibilityName );
if( visibility && ( !visibility->readable() ) )
{
return;
}
ConstObjectVectorPtr shader = attributes->member<ObjectVector>( "shader" );
if( shader )
{
std::string name;
ScenePlug::pathToString( path, name );
CompoundDataMap parameters;
parameters["exactscopename"] = new StringData( name );
{
EditBlock edit( m_renderer.get(), "attribute", parameters );
for( ObjectVector::MemberContainer::const_iterator it = shader->members().begin(), eIt = shader->members().end(); it != eIt; it++ )
{
const StateRenderable *s = runTimeCast<const StateRenderable>( it->get() );
if( s )
{
s->render( m_renderer.get() );
}
}
}
}
ConstInternedStringVectorDataPtr childNames = inPlug()->childNames( path );
ScenePlug::ScenePath childPath = path;
childPath.push_back( InternedString() ); // for the child name
for( vector<InternedString>::const_iterator it=childNames->readable().begin(); it!=childNames->readable().end(); it++ )
{
childPath[path.size()] = *it;
updateShadersWalk( childPath );
}
}
示例5: pathScope
bool GafferScene::SceneAlgo::exists( const ScenePlug *scene, const ScenePlug::ScenePath &path )
{
ScenePlug::PathScope pathScope( Context::current() );
ScenePlug::ScenePath p; p.reserve( path.size() );
for( ScenePlug::ScenePath::const_iterator it = path.begin(), eIt = path.end(); it != eIt; ++it )
{
pathScope.setPath( p );
ConstInternedStringVectorDataPtr childNamesData = scene->childNamesPlug()->getValue();
const vector<InternedString> &childNames = childNamesData->readable();
if( find( childNames.begin(), childNames.end(), *it ) == childNames.end() )
{
return false;
}
p.push_back( *it );
}
return true;
}
示例6: exists
bool GafferScene::exists( const ScenePlug *scene, const ScenePlug::ScenePath &path )
{
ContextPtr context = new Context( *Context::current(), Context::Borrowed );
Context::Scope scopedContext( context.get() );
ScenePlug::ScenePath p; p.reserve( path.size() );
for( ScenePlug::ScenePath::const_iterator it = path.begin(), eIt = path.end(); it != eIt; ++it )
{
context->set( ScenePlug::scenePathContextName, p );
ConstInternedStringVectorDataPtr childNamesData = scene->childNamesPlug()->getValue();
const vector<InternedString> &childNames = childNamesData->readable();
if( find( childNames.begin(), childNames.end(), *it ) == childNames.end() )
{
return false;
}
p.push_back( *it );
}
return true;
}
示例7: visible
bool GafferScene::visible( const ScenePlug *scene, const ScenePlug::ScenePath &path )
{
ContextPtr context = new Context( *Context::current(), Context::Borrowed );
Context::Scope scopedContext( context.get() );
ScenePlug::ScenePath p; p.reserve( path.size() );
for( ScenePlug::ScenePath::const_iterator it = path.begin(), eIt = path.end(); it != eIt; ++it )
{
p.push_back( *it );
context->set( ScenePlug::scenePathContextName, p );
ConstCompoundObjectPtr attributes = scene->attributesPlug()->getValue();
const BoolData *visibilityData = attributes->member<BoolData>( "scene:visible" );
if( visibilityData && !visibilityData->readable() )
{
return false;
}
}
return true;
}
示例8: collapseSelection
void SceneView::collapseSelection()
{
PathMatcher &selection = const_cast<GafferScene::PathMatcherData *>( m_sceneGadget->getSelection() )->writable();
std::vector<string> toCollapse;
selection.paths( toCollapse );
if( !toCollapse.size() )
{
return;
}
GafferScene::PathMatcherData *expandedData = expandedPaths();
PathMatcher &expanded = expandedData->writable();
for( vector<string>::const_iterator it = toCollapse.begin(), eIt = toCollapse.end(); it != eIt; ++it )
{
/// \todo It would be nice to be able to get ScenePaths out of
/// PathMatcher::paths() directly.
ScenePlug::ScenePath path;
ScenePlug::stringToPath( *it, path );
if( !expanded.removePath( path ) )
{
if( path.size() <= 1 )
{
continue;
}
selection.removePath( path );
path.pop_back(); // now the parent path
expanded.removePath( path );
selection.addPath( path );
}
}
// See comment in expandSelection().
getContext()->changedSignal()( getContext(), "ui:scene:expandedPaths" );
// See comment in expandSelection().
transferSelectionToContext();
}
示例9: StringData
virtual void *operator()( void *item )
{
SceneGraph *s = (SceneGraph*)item;
ScenePlug::ScenePath path;
s->path( path );
std::string name;
ScenePlug::pathToString( path, name );
try
{
if( !m_editMode )
{
// outputting scene for the first time - do some attribute block tracking:
if( path.size() )
{
for( int i = m_previousPath.size(); i >= (int)path.size(); --i )
{
--m_attrBlockCounter;
m_renderer->attributeEnd();
}
}
m_previousPath = path;
++m_attrBlockCounter;
m_renderer->attributeBegin();
// set the name for this location:
m_renderer->setAttribute( "name", new StringData( name ) );
}
// transform:
if( !m_editMode )
{
m_renderer->concatTransform( s->m_transform );
}
// attributes:
if( s->m_attributes )
{
if( m_editMode )
{
CompoundDataMap parameters;
parameters["exactscopename"] = new StringData( name );
m_renderer->editBegin( "attribute", parameters );
}
outputAttributes( s->m_attributes.get(), m_renderer );
s->m_attributes = NULL;
if( m_editMode )
{
m_renderer->editEnd();
}
}
// object:
if( s->m_object && !m_editMode )
{
if( const VisibleRenderable *renderable = runTimeCast< const VisibleRenderable >( s->m_object.get() ) )
{
renderable->render( m_renderer );
}
s->m_object = 0;
}
}
catch( const std::exception &e )
{
IECore::msg( IECore::Msg::Error, "InteractiveRender::update", name + ": " + e.what() );
}
return NULL;
}