7#ifndef PXR_USD_USD_PRIM_DEFINITION_H
8#define PXR_USD_USD_PRIM_DEFINITION_H
11#include "pxr/usd/usd/api.h"
12#include "pxr/usd/usd/schemaRegistry.h"
20#include <unordered_map>
22PXR_NAMESPACE_OPEN_SCOPE
50 return _locallyDefinedPropertyNames;
56 return _appliedAPISchemas;
87 explicit operator bool()
const
161 _name(name), _layerAndPath(layerAndPath) {}
162 Property(
const _LayerAndPath *layerAndPath):
163 _layerAndPath(layerAndPath) {}
166 const _LayerAndPath *_layerAndPath =
nullptr;
195 explicit operator bool()
const {
261 explicit operator bool()
const{
299 const TfToken& propName)
const;
308 const TfToken& attrName)
const;
327 return _HasField(attrName, SdfFieldKeys->Default, value);
347 return _HasField(
TfToken(), key, value);
360 const TfToken &keyPath, T* value)
const
365 return _HasFieldDictKey(
TfToken(), key, keyPath, value);
390 return prop.GetMetadata(key, value);
406 const TfToken &keyPath, T* value)
const
409 return prop.GetMetadataByDictKey(key, keyPath, value);
445 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
454 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
461 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
481 primDef._HasField(propName, fieldName, value) :
482 primDef._HasFieldDictKey(propName, fieldName, keyPath, value);
487 struct _LayerAndPath {
498 bool HasField(
const TfToken& fieldName, T* value)
const {
499 return layer->
HasField(path, fieldName, value);
503 bool HasFieldDictKey(
504 const TfToken& fieldName,
const TfToken& keyPath, T* value)
const {
509 return layer->
GetField(path, fieldName);
512 explicit operator bool() const noexcept {
521 bool _HasField(
const TfToken& propName,
525 if (
const _LayerAndPath *layerAndPath =
526 _GetPropertyLayerAndPath(propName)) {
527 return layerAndPath->
HasField(fieldName, value);
533 bool _HasFieldDictKey(
const TfToken& propName,
538 if (
const _LayerAndPath *layerAndPath =
539 _GetPropertyLayerAndPath(propName)) {
540 return layerAndPath->HasFieldDictKey(fieldName, keyPath, value);
548 void _ApplyPropertyOrder();
551 void _InitializeForTypedSchema(
552 const SdfLayerHandle &schematicsLayer,
553 const SdfPath &schematicsPrimPath,
554 const VtTokenArray &propertiesToIgnore);
557 void _InitializeForAPISchema(
559 const SdfLayerHandle &schematicsLayer,
560 const SdfPath &schematicsPrimPath,
561 const VtTokenArray &propertiesToIgnore);
564 bool _MapSchematicsPropertyPaths(
565 const VtTokenArray &propertiesToIgnore);
568 const _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
const
573 _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
579 void _ComposePropertiesFromPrimDef(
582 void _ComposePropertiesFromPrimDefInstance(
584 const std::string &instanceName);
586 void _AddOrComposeProperty(
588 const _LayerAndPath &layerAndPath);
590 SdfSpecHandle _FindOrCreateSpecForComposition(
592 const _LayerAndPath &srcLayerAndPath);
594 SdfSpecHandle _CreateComposedPrimOrPropertyIfNeeded(
596 const _LayerAndPath &strongProp,
597 const _LayerAndPath &weakProp);
600 void _ComposeOverAndReplaceExistingProperty(
605 using _FamilyAndInstanceToVersionMap =
606 std::unordered_map<std::pair<TfToken, TfToken>, UsdSchemaVersion,
TfHash>;
609 bool _ComposeWeakerAPIPrimDefinition(
612 _FamilyAndInstanceToVersionMap *alreadyAppliedSchemaFamilyVersions);
614 static bool _PropertyTypesMatch(
615 const Property &strongProp,
616 const Property &weakProp);
619 _LayerAndPath _primLayerAndPath;
623 using _PrimTypePropNameToPathMap =
624 std::unordered_map<TfToken, _LayerAndPath, TfToken::HashFunctor>;
625 _PrimTypePropNameToPathMap _propLayerAndPathMap;
648 return _layerAndPath->HasField(key, value);
659 return _layerAndPath->HasFieldDictKey(key, keyPath, value);
666 return _layerAndPath->HasField(SdfFieldKeys->Default, value);
670PXR_NAMESPACE_CLOSE_SCOPE
A scene description container that can combine with other such containers to form simple component as...
SDF_API bool HasFieldDictKey(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath, VtValue *value=NULL) const
Return whether a value exists for the given path and fieldName and keyPath.
SDF_API bool HasField(const SdfPath &path, const TfToken &fieldName, VtValue *value=NULL) const
Return whether a value exists for the given path and fieldName.
SDF_API VtValue GetField(const SdfPath &path, const TfToken &fieldName) const
Return the value for the given path and fieldName.
A path value used to locate objects in layers or scenegraphs.
Represents a value type name, i.e.
A user-extensible hashing mechanism for use with runtime hash tables.
Token for efficient comparison, assignment, and hashing of known strings.
bool IsEmpty() const
Returns true iff this token contains the empty string "".
Accessor to a attribute's definition in the prim definition.
USD_API Attribute(const Property &property)
Copy constructor from a Property to allow implicit conversion.
USD_API Attribute(Property &&property)
Move constructor from a Property to allow implicit conversion.
Attribute()=default
Default constructor returns an invalid attribute.
USD_API SdfValueTypeName GetTypeName() const
Returns the value type name of this attribute in the prim definition.
USD_API TfToken GetTypeNameToken() const
Returns the token value of the type name of this attribute in the prim definition.
bool GetFallbackValue(T *value) const
Retrieves the fallback value of type T for this attribute and stores it in value if possible.
Accessor to a property's definition in the prim definition.
USD_API const TfToken & GetName() const
Returns the name of the requested property.
Property()=default
Default constructor returns an invalid property.
USD_API SdfSpecType GetSpecType() const
Returns the spec type of this property in the prim definition.
USD_API bool IsRelationship() const
Return true if the property is a valid is a valid property in the prim definition and is a relationsh...
USD_API SdfVariability GetVariability() const
Returns the variability of this property in the prim definition.
bool GetMetadataByDictKey(const TfToken &key, const TfToken &keyPath, T *value) const
Retrieves the value at keyPath from the dictionary value for the dictionary metadata field named key,...
USD_API bool IsAttribute() const
Return true if the property is a valid is a valid property in the prim definition and is an attribute...
bool GetMetadata(const TfToken &key, T *value) const
Retrieves the fallback value for the metadata field named key, that is defined for this property in t...
USD_API TfTokenVector ListMetadataFields() const
Returns the list of names of metadata fields that are defined for this property in the prim definitio...
USD_API std::string GetDocumentation() const
Returns the documentation metadata defined by the prim definition for this property.
Accessor to a relationship's definition in the prim definition.
Relationship()=default
Default constructor returns an invalid relationship.
USD_API Relationship(Property &&property)
Move constructor from a Property to allow implicit conversion.
USD_API Relationship(const Property &property)
Copy constructor from a Property to allow implicit conversion.
Class representing the builtin definition of a prim given the schemas registered in the schema regist...
const TfTokenVector & GetLocallyDefinedPropertyNames() const
Return the list of names of "local" builtin properties for this prim definition, ordered by this prim...
USD_API SdfRelationshipSpecHandle GetSchemaRelationshipSpec(const TfToken &relName) const
USD_API TfTokenVector ListPropertyMetadataFields(const TfToken &propName) const
Returns the list of names of metadata fields that are defined by this prim definition for property pr...
USD_API SdfSpecType GetSpecType(const TfToken &propName) const
Return the SdfSpecType for propName if it is a builtin property of the prim type represented by this ...
USD_API Attribute GetAttributeDefinition(const TfToken &attrName) const
Returns an attribute accessor the property named attrName if it is defined by this this prim definiti...
USD_API SdfPropertySpecHandle GetSchemaPropertySpec(const TfToken &propName) const
const TfTokenVector & GetPropertyNames() const
Return the list of names of builtin properties for this prim definition, ordered by this prim definit...
USD_API Relationship GetRelationshipDefinition(const TfToken &relName) const
Returns a relationship accessor the property named relName if it is defined by this this prim definit...
USD_API Property GetPropertyDefinition(const TfToken &propName) const
Returns a property accessor the property named propName if it is defined by this this prim definition...
USD_API UsdPrim FlattenTo(const UsdPrim &prim, SdfSpecifier newSpecSpecifier=SdfSpecifierOver) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool GetPropertyMetadata(const TfToken &propName, const TfToken &key, T *value) const
Retrieves the fallback value for the metadata field named key, that is defined by this prim definitio...
USD_API UsdPrim FlattenTo(const UsdPrim &parent, const TfToken &name, SdfSpecifier newSpecSpecifier=SdfSpecifierOver) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
USD_API SdfAttributeSpecHandle GetSchemaAttributeSpec(const TfToken &attrName) const
bool GetAttributeFallbackValue(const TfToken &attrName, T *value) const
Retrieves the fallback value for the attribute named attrName and stores it in value if possible.
const TfTokenVector & GetAppliedAPISchemas() const
Return the list of names of the API schemas that have been applied to this prim definition in order.
bool GetPropertyMetadataByDictKey(const TfToken &propName, const TfToken &key, const TfToken &keyPath, T *value) const
Retrieves the value at keyPath from the fallback dictionary value for the dictionary metadata field n...
USD_API std::string GetPropertyDocumentation(const TfToken &propName) const
Returns the documentation metadata defined by the prim definition for the property named propName if ...
bool GetMetadataByDictKey(const TfToken &key, const TfToken &keyPath, T *value) const
Retrieves the value at keyPath from the fallback dictionary value for the dictionary metadata field n...
bool GetMetadata(const TfToken &key, T *value) const
Retrieves the fallback value for the metadata field named key, that is defined by this prim definitio...
USD_API TfTokenVector ListMetadataFields() const
Returns the list of names of metadata fields that are defined by this prim definition for the prim it...
USD_API bool FlattenTo(const SdfLayerHandle &layer, const SdfPath &path, SdfSpecifier newSpecSpecifier=SdfSpecifierOver) const
Copies the contents of this prim definition to a prim spec on the given layer at the given path.
USD_API std::string GetDocumentation() const
Returns the documentation metadata defined by the prim definition for the prim itself.
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
Singleton registry that provides access to schema type information and the prim definitions for regis...
static USD_API bool IsDisallowedField(const TfToken &fieldName)
Returns true if the field fieldName cannot have fallback values specified in schemas.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Container::mapped_type * TfMapLookupPtr(Container &map, Key const &key)
Checks if an item exists in a map or TfHashMap, without copying it.
std::vector< TfToken > TfTokenVector
Convenience types.
SdfSpecType
An enum that specifies the type of an object.
SdfSpecifier
An enum that identifies the possible specifiers for an SdfPrimSpec.
SdfVariability
An enum that identifies variability types for attributes.