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(); }
UsdSkelSkeletonQuery UsdSkel_CacheImpl::ReadScope::GetSkelQuery(const UsdPrim& prim) const { _PrimToSkelQueryMap::const_accessor a; if(_cache->_skelQueryCache.find(a, prim)) return a->second; return UsdSkelSkeletonQuery(); }
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); }
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(); }