24#ifndef PXR_USD_USD_PRIM_DEFINITION_H
25#define PXR_USD_USD_PRIM_DEFINITION_H
28#include "pxr/usd/usd/api.h"
29#include "pxr/usd/usd/schemaRegistry.h"
37#include <unordered_map>
39PXR_NAMESPACE_OPEN_SCOPE
59 return _appliedAPISchemas;
90 explicit operator bool()
const
164 _name(name), _layerAndPath(layerAndPath) {}
165 Property(
const _LayerAndPath *layerAndPath):
166 _layerAndPath(layerAndPath) {}
169 const _LayerAndPath *_layerAndPath =
nullptr;
198 explicit operator bool()
const {
264 explicit operator bool()
const{
302 const TfToken& propName)
const;
311 const TfToken& attrName)
const;
330 return _HasField(attrName, SdfFieldKeys->Default, value);
350 return _HasField(
TfToken(), key, value);
363 const TfToken &keyPath, T* value)
const
368 return _HasFieldDictKey(
TfToken(), key, keyPath, value);
393 return prop.GetMetadata(key, value);
409 const TfToken &keyPath, T* value)
const
412 return prop.GetMetadataByDictKey(key, keyPath, value);
448 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
457 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
464 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
484 primDef._HasField(propName, fieldName, value) :
485 primDef._HasFieldDictKey(propName, fieldName, keyPath, value);
490 struct _LayerAndPath {
501 bool HasField(
const TfToken& fieldName, T* value)
const {
502 return layer->
HasField(path, fieldName, value);
506 bool HasFieldDictKey(
507 const TfToken& fieldName,
const TfToken& keyPath, T* value)
const {
516 bool _HasField(
const TfToken& propName,
520 if (
const _LayerAndPath *layerAndPath =
521 _GetPropertyLayerAndPath(propName)) {
522 return layerAndPath->HasField(fieldName, value);
528 bool _HasFieldDictKey(
const TfToken& propName,
533 if (
const _LayerAndPath *layerAndPath =
534 _GetPropertyLayerAndPath(propName)) {
535 return layerAndPath->HasFieldDictKey(fieldName, keyPath, value);
544 void _IntializeForTypedSchema(
545 const SdfLayerHandle &schematicsLayer,
546 const SdfPath &schematicsPrimPath,
547 const VtTokenArray &propertiesToIgnore);
550 void _IntializeForAPISchema(
552 const SdfLayerHandle &schematicsLayer,
553 const SdfPath &schematicsPrimPath,
554 const VtTokenArray &propertiesToIgnore);
557 bool _MapSchematicsPropertyPaths(
558 const VtTokenArray &propertiesToIgnore);
561 const _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
const
566 _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
572 void _ComposePropertiesFromPrimDef(
575 void _ComposePropertiesFromPrimDefInstance(
577 const std::string &instanceName);
579 void _AddOrComposeProperty(
581 const _LayerAndPath &layerAndPath);
583 SdfPropertySpecHandle _FindOrCreatePropertySpecForComposition(
585 const _LayerAndPath &srcLayerAndPath);
587 SdfPropertySpecHandle _CreateComposedPropertyIfNeeded(
589 const _LayerAndPath &strongProp,
590 const _LayerAndPath &weakProp);
593 void _ComposeOverAndReplaceExistingProperty(
598 using _FamilyAndInstanceToVersionMap =
599 std::unordered_map<std::pair<TfToken, TfToken>, UsdSchemaVersion,
TfHash>;
602 bool _ComposeWeakerAPIPrimDefinition(
605 _FamilyAndInstanceToVersionMap *alreadyAppliedSchemaFamilyVersions);
607 static bool _PropertyTypesMatch(
608 const Property &strongProp,
609 const Property &weakProp);
612 _LayerAndPath _primLayerAndPath;
616 using _PrimTypePropNameToPathMap =
617 std::unordered_map<TfToken, _LayerAndPath, TfToken::HashFunctor>;
618 _PrimTypePropNameToPathMap _propLayerAndPathMap;
637 return _layerAndPath->HasField(key, value);
648 return _layerAndPath->HasFieldDictKey(key, keyPath, value);
655 return _layerAndPath->HasField(SdfFieldKeys->Default, value);
659PXR_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.
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...
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.
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.
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.