7#ifndef PXR_USD_USD_SCHEMA_REGISTRY_H
8#define PXR_USD_USD_SCHEMA_REGISTRY_H
11#include "pxr/usd/usd/api.h"
20#include <unordered_map>
23PXR_NAMESPACE_OPEN_SCOPE
32using UsdSchemaVersion =
unsigned int;
57 using TokenToTokenVectorMap =
58 std::unordered_map<TfToken, TfTokenVector, TfHash>;
108 UsdSchemaVersion schemaVersion);
128 static std::pair<TfToken, UsdSchemaVersion>
170 template <
class SchemaType>
173 static_assert(std::is_base_of<UsdSchemaBase, SchemaType>::value,
174 "Provided type must derive UsdSchemaBase.");
182 static const SchemaInfo *
205 static const std::vector<const SchemaInfo *> &
213 static std::vector<const SchemaInfo *>
216 UsdSchemaVersion schemaVersion,
226 template <
class SchemaType>
427 TokenToTokenVectorMap *autoApplyAPISchemas);
448 const std::string &namespacePrefix,
449 const std::string &baseName);
467 const std::string &nameTemplate,
468 const std::string &instanceName);
481 const std::string &nameTemplate);
493 const std::string &nameTemplate);
499 const TfToken &typeName)
const {
500 const auto it = _concreteTypedPrimDefinitions.find(typeName);
501 return it != _concreteTypedPrimDefinitions.end() ?
502 it->second.get() :
nullptr;
509 const TfToken &typeName)
const {
510 const auto it = _appliedAPIPrimDefinitions.find(typeName);
511 return it != _appliedAPIPrimDefinitions.end() ?
512 it->second.primDef.get() :
nullptr;
517 return _emptyPrimDefinition;
525 std::unique_ptr<UsdPrimDefinition>
541 return _fallbackPrimTypes;
549 using _FamilyAndInstanceToVersionMap =
550 std::unordered_map<std::pair<TfToken, TfToken>, UsdSchemaVersion,
TfHash>;
552 void _ComposeAPISchemasIntoPrimDefinition(
555 _FamilyAndInstanceToVersionMap *seenSchemaFamilyVersions)
const;
560 class _SchemaDefInitHelper;
562 std::vector<SdfLayerRefPtr> _schematicsLayers;
564 std::unordered_map<TfToken, const std::unique_ptr<UsdPrimDefinition>,
565 TfHash> _concreteTypedPrimDefinitions;
567 struct _APISchemaDefinitionInfo {
568 std::unique_ptr<UsdPrimDefinition> primDef;
569 bool applyExpectsInstanceName;
571 std::unordered_map<TfToken, const _APISchemaDefinitionInfo, TfHash>
572 _appliedAPIPrimDefinitions;
587void Usd_GetAPISchemaPluginApplyToInfoForType(
588 const TfType &apiSchemaType,
590 UsdSchemaRegistry::TokenToTokenVectorMap *autoApplyAPISchemasMap,
591 UsdSchemaRegistry::TokenToTokenVectorMap *canOnlyApplyAPISchemasMap,
592 TfHashMap<TfToken, TfToken::Set, TfHash> *allowedInstanceNamesMap);
597void Usd_SortAutoAppliedAPISchemas(
600PXR_NAMESPACE_CLOSE_SCOPE
A subclass of SdfPropertySpec that holds typed data.
A property that contains a reference to one or more SdfPrimSpec instances.
A user-extensible hashing mechanism for use with runtime hash tables.
Manage a single instance of an object (see.
static T & GetInstance()
Return a reference to an object of type T, creating it if necessary.
Token for efficient comparison, assignment, and hashing of known strings.
TfType represents a dynamic runtime type.
Enable a concrete base class for use with TfWeakPtr.
Class representing the builtin definition of a prim given the schemas registered in the schema regist...
The base class for all schema types in Usd.
Singleton registry that provides access to schema type information and the prim definitions for regis...
static USD_API bool IsAllowedSchemaFamily(const TfToken &schemaFamily)
Returns whether the given schemaFamily is an allowed schema family name.
UsdSchemaVersion version
The version number of the schema within its schema family.
static USD_API std::pair< TfToken, UsdSchemaVersion > ParseSchemaFamilyAndVersionFromIdentifier(const TfToken &schemaIdentifier)
Parses and returns the schema family and version values from the given schemaIdentifier.
static const SchemaInfo * FindSchemaInfo()
Finds and returns the schema info for a registered schema with the C++ schema class SchemaType.
static USD_API TfToken GetMultipleApplyNameTemplateBaseName(const std::string &nameTemplate)
Returns the base name for the multiple apply schema name template nameTemplate.
TfType type
The schema's type as registered with the TfType registry.
const UsdPrimDefinition * FindAppliedAPIPrimDefinition(const TfToken &typeName) const
Finds the prim definition for the given typeName token if typeName is a registered applied API schema...
static USD_API TfToken MakeMultipleApplyNameInstance(const std::string &nameTemplate, const std::string &instanceName)
Returns an instance of a multiple apply schema name from the given nameTemplate for the given instanc...
static USD_API const TfTokenVector & GetAPISchemaCanOnlyApplyToTypeNames(const TfToken &apiSchemaName, const TfToken &instanceName=TfToken())
Returns a list of prim type names that the given apiSchemaName can only be applied to.
static USD_API TfType GetConcreteTypeFromSchemaTypeName(const TfToken &typeName)
Return the TfType of the schema corresponding to the given concrete prim type name typeName.
USD_API std::unique_ptr< UsdPrimDefinition > BuildComposedPrimDefinition(const TfToken &primType, const TfTokenVector &appliedAPISchemas) const
Composes and returns a new UsdPrimDefinition from the given primType and list of appliedSchemas.
const UsdPrimDefinition * GetEmptyPrimDefinition() const
Returns the empty prim definition.
TfToken family
The name of the family of schema's which the schema is a version of.
static USD_API TfToken MakeSchemaIdentifierForFamilyAndVersion(const TfToken &schemaFamily, UsdSchemaVersion schemaVersion)
Creates the schema identifier that would be used to define a schema of the given schemaFamily with th...
VersionPolicy
A policy for filtering by schema version when querying for schemas in a particular schema family.
static USD_API bool IsConcrete(const TfType &primType)
Returns true if the prim type primType is instantiable in scene description.
static USD_API bool IsAbstract(const TfType &primType)
Returns true if the prim type primType is an abstract schema type and, unlike a concrete type,...
static USD_API bool IsMultipleApplyAPISchema(const TfType &apiSchemaType)
Returns true if apiSchemaType is a multiple-apply API schema type.
static USD_API bool IsAppliedAPISchema(const TfToken &apiSchemaType)
Returns true if apiSchemaType is an applied API schema type.
TfToken identifier
The schema's identifier which is how the schema type is referred to in scene description and is also ...
static USD_API bool IsAllowedAPISchemaInstanceName(const TfToken &apiSchemaName, const TfToken &instanceName)
Returns true if the given instanceName is an allowed instance name for the multiple apply API schema ...
static USD_API bool IsAppliedAPISchema(const TfType &apiSchemaType)
Returns true if apiSchemaType is an applied API schema type.
const UsdPrimDefinition * FindConcretePrimDefinition(const TfToken &typeName) const
Finds the prim definition for the given typeName token if typeName is a registered concrete typed sch...
UsdSchemaKind kind
The schema's kind: ConcreteTyped, SingleApplyAPI, etc.
static USD_API bool IsTyped(const TfType &primType)
Returns true if the prim type primType inherits from UsdTyped.
static USD_API std::vector< const SchemaInfo * > FindSchemaInfosInFamily(const TfToken &schemaFamily, UsdSchemaVersion schemaVersion, VersionPolicy versionPolicy)
Finds all schemas in the given schemaFamily, filtered according to the given schemaVersion and versio...
static USD_API const SchemaInfo * FindSchemaInfo(const TfToken &schemaIdentifier)
Finds and returns the schema info for a registered schema with the given schemaIdentifier.
static USD_API bool IsAllowedSchemaIdentifier(const TfToken &schemaIdentifier)
Returns whether the given schemaIdentifier is an allowed schema identifier.
static USD_API TfToken GetConcreteSchemaTypeName(const TfType &schemaType)
Return the type name in the USD schema for concrete prim types only from the given registered schemaT...
static USD_API const std::vector< const SchemaInfo * > & FindSchemaInfosInFamily(const TfToken &schemaFamily)
Finds all schemas in the given schemaFamily and returns their their schema info ordered from highest ...
static TfToken GetSchemaTypeName()
Return the type name in the USD schema for prims or API schemas of the given registered SchemaType.
static USD_API const SchemaInfo * FindSchemaInfo(const TfToken &schemaFamily, UsdSchemaVersion schemaVersion)
Finds and returns the schema info for a registered schema in the given schemaFamily with the given sc...
static USD_API bool IsMultipleApplyAPISchema(const TfToken &apiSchemaType)
Returns true if apiSchemaType is a multiple-apply API schema type.
static USD_API bool IsDisallowedField(const TfToken &fieldName)
Returns true if the field fieldName cannot have fallback values specified in schemas.
const VtDictionary & GetFallbackPrimTypes() const
Returns a dictionary mapping concrete schema prim type names to a VtTokenArray of fallback prim type ...
static USD_API TfToken GetSchemaTypeName(const TfType &schemaType)
Return the type name in the USD schema for prims or API schemas of the given registered schemaType.
static USD_API TfType GetTypeFromSchemaTypeName(const TfToken &typeName)
Return the TfType of the schema corresponding to the given prim or API schema name typeName.
static USD_API std::pair< TfToken, TfToken > GetTypeNameAndInstance(const TfToken &apiSchemaName)
Returns the schema type name and the instance name parsed from the given apiSchemaName.
static USD_API const SchemaInfo * FindSchemaInfo(const TfType &schemaType)
Finds and returns the schema info for a registered schema with the given schemaType.
static USD_API bool IsMultipleApplyNameTemplate(const std::string &nameTemplate)
Returns true if nameTemplate is a multiple apply schema name template.
static USD_API bool IsConcrete(const TfToken &primType)
Returns true if the prim type primType is instantiable in scene description.
static USD_API TfType GetAPITypeFromSchemaTypeName(const TfToken &typeName)
Return the TfType of the schema corresponding to the given API schema type name typeName.
static USD_API const TokenToTokenVectorMap & GetAutoApplyAPISchemas()
Returns a map of the names of all registered auto apply API schemas to the list of type names each is...
static USD_API TfToken MakeMultipleApplyNameTemplate(const std::string &namespacePrefix, const std::string &baseName)
Creates a name template that can represent a property or API schema that belongs to a multiple apply ...
static USD_API UsdSchemaKind GetSchemaKind(const TfToken &typeName)
Returns the kind of the schema the given typeName represents.
static USD_API TfToken GetAPISchemaTypeName(const TfType &schemaType)
Return the type name in the USD schema for API schema types only from the given registered schemaType...
static USD_API TfType GetTypeFromName(const TfToken &typeName)
Finds the TfType of a schema with typeName.
static USD_API UsdSchemaKind GetSchemaKind(const TfType &schemaType)
Returns the kind of the schema the given schemaType represents.
static USD_API bool IsAbstract(const TfToken &primType)
Returns true if the prim type primType is an abstract schema type and, unlike a concrete type,...
static USD_API void CollectAddtionalAutoApplyAPISchemasFromPlugins(TokenToTokenVectorMap *autoApplyAPISchemas)
Collects all the additional auto apply schemas that can be defined in a plugin through "AutoApplyAPIS...
Structure that holds the information about a schema that is registered with the schema registry.
A map with string keys and VtValue values.
UsdSchemaKind
An enum representing which kind of schema a given schema class belongs to.
Manage a single instance of an object.
std::vector< TfToken > TfTokenVector
Convenience types.