UsdSkelSkeletonQuery
UsdSkel_CacheImpl::ReadScope::FindOrCreateSkelQuery(const UsdPrim& prim)
{
    TRACE_FUNCTION();

    {
        _PrimToSkelQueryMap::const_accessor a;
        if (_cache->_skelQueryCache.find(a, prim))
            return a->second;
    }

    if (auto skelDef = FindOrCreateSkelDefinition(prim)) {
        _PrimToSkelQueryMap::accessor a;
        if (_cache->_skelQueryCache.insert(a, prim)) {

            UsdSkelAnimQuery animQuery =
                FindOrCreateAnimQuery(
                    UsdSkelBindingAPI(prim).GetInheritedAnimationSource());

            a->second = UsdSkelSkeletonQuery(skelDef, animQuery);
        }
        return a->second;
    }
    return UsdSkelSkeletonQuery();
}
Beispiel #2
0
UsdSkelSkeletonQuery
UsdSkel_CacheImpl::ReadScope::GetSkelQuery(const UsdPrim& prim) const
{
    _PrimToSkelQueryMap::const_accessor a;
    if(_cache->_skelQueryCache.find(a, prim))
        return a->second;
    return UsdSkelSkeletonQuery();
}
Beispiel #3
0
UsdSkelSkeletonQuery
UsdSkel_CacheImpl::ReadScope::_FindOrCreateSkelQuery(
    const UsdPrim& skelPrim,
    const UsdSkelAnimQuery& animQuery)
{
    // TODO: We currently do not deduplicate skeleton queries,
    // but it may be worthwhile to do so.
    return UsdSkelSkeletonQuery(FindOrCreateSkelDefinition(skelPrim),
                                animQuery);
}
Beispiel #4
0
UsdSkelSkeletonQuery
UsdSkel_CacheImpl::ReadScope::GetInheritedSkelQuery(const UsdPrim& prim) const
{
    _PrimToSkelQueryMap::const_accessor a;
    for(UsdPrim p = prim; p; p = p.GetParent()) {
        if(_cache->_skelQueryCache.find(a, p)) {
            return a->second;
        }
        if(prim.IsA<UsdSkelRoot>()) {
            break;
        }
    }
    return UsdSkelSkeletonQuery();
}