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
42 return _appliedAPISchemas;
73 explicit operator bool()
const
147 _name(name), _layerAndPath(layerAndPath) {}
148 Property(
const _LayerAndPath *layerAndPath):
149 _layerAndPath(layerAndPath) {}
152 const _LayerAndPath *_layerAndPath =
nullptr;
181 explicit operator bool()
const {
247 explicit operator bool()
const{
285 const TfToken& propName)
const;
294 const TfToken& attrName)
const;
313 return _HasField(attrName, SdfFieldKeys->Default, value);
333 return _HasField(
TfToken(), key, value);
346 const TfToken &keyPath, T* value)
const
351 return _HasFieldDictKey(
TfToken(), key, keyPath, value);
376 return prop.GetMetadata(key, value);
392 const TfToken &keyPath, T* value)
const
395 return prop.GetMetadataByDictKey(key, keyPath, value);
431 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
440 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
447 SdfSpecifier newSpecSpecifier = SdfSpecifierOver)
const;
467 primDef._HasField(propName, fieldName, value) :
468 primDef._HasFieldDictKey(propName, fieldName, keyPath, value);
473 struct _LayerAndPath {
484 bool HasField(
const TfToken& fieldName, T* value)
const {
485 return layer->
HasField(path, fieldName, value);
489 bool HasFieldDictKey(
490 const TfToken& fieldName,
const TfToken& keyPath, T* value)
const {
499 bool _HasField(
const TfToken& propName,
503 if (
const _LayerAndPath *layerAndPath =
504 _GetPropertyLayerAndPath(propName)) {
505 return layerAndPath->HasField(fieldName, value);
511 bool _HasFieldDictKey(
const TfToken& propName,
516 if (
const _LayerAndPath *layerAndPath =
517 _GetPropertyLayerAndPath(propName)) {
518 return layerAndPath->HasFieldDictKey(fieldName, keyPath, value);
527 void _IntializeForTypedSchema(
528 const SdfLayerHandle &schematicsLayer,
529 const SdfPath &schematicsPrimPath,
530 const VtTokenArray &propertiesToIgnore);
533 void _IntializeForAPISchema(
535 const SdfLayerHandle &schematicsLayer,
536 const SdfPath &schematicsPrimPath,
537 const VtTokenArray &propertiesToIgnore);
540 bool _MapSchematicsPropertyPaths(
541 const VtTokenArray &propertiesToIgnore);
544 const _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
const
549 _LayerAndPath *_GetPropertyLayerAndPath(
const TfToken& propName)
555 void _ComposePropertiesFromPrimDef(
558 void _ComposePropertiesFromPrimDefInstance(
560 const std::string &instanceName);
562 void _AddOrComposeProperty(
564 const _LayerAndPath &layerAndPath);
566 SdfPropertySpecHandle _FindOrCreatePropertySpecForComposition(
568 const _LayerAndPath &srcLayerAndPath);
570 SdfPropertySpecHandle _CreateComposedPropertyIfNeeded(
572 const _LayerAndPath &strongProp,
573 const _LayerAndPath &weakProp);
576 void _ComposeOverAndReplaceExistingProperty(
581 using _FamilyAndInstanceToVersionMap =
582 std::unordered_map<std::pair<TfToken, TfToken>, UsdSchemaVersion,
TfHash>;
585 bool _ComposeWeakerAPIPrimDefinition(
588 _FamilyAndInstanceToVersionMap *alreadyAppliedSchemaFamilyVersions);
590 static bool _PropertyTypesMatch(
591 const Property &strongProp,
592 const Property &weakProp);
595 _LayerAndPath _primLayerAndPath;
599 using _PrimTypePropNameToPathMap =
600 std::unordered_map<TfToken, _LayerAndPath, TfToken::HashFunctor>;
601 _PrimTypePropNameToPathMap _propLayerAndPathMap;
620 return _layerAndPath->HasField(key, value);
631 return _layerAndPath->HasFieldDictKey(key, keyPath, value);
638 return _layerAndPath->HasField(SdfFieldKeys->Default, value);
642PXR_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.