All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
schema.h
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef PXR_USD_SDF_SCHEMA_H
25 #define PXR_USD_SDF_SCHEMA_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/usd/sdf/api.h"
29 #include "pxr/usd/sdf/allowed.h"
30 #include "pxr/usd/sdf/types.h"
31 #include "pxr/usd/sdf/valueTypeName.h"
32 
33 #include "pxr/base/plug/notice.h"
34 #include "pxr/base/tf/hash.h"
35 #include "pxr/base/tf/hashmap.h"
36 #include "pxr/base/tf/singleton.h"
37 #include "pxr/base/tf/staticTokens.h"
38 #include "pxr/base/tf/token.h"
39 #include "pxr/base/tf/type.h"
40 #include "pxr/base/tf/weakBase.h"
41 #include "pxr/base/vt/value.h"
42 
43 #include <memory>
44 #include <string>
45 #include <vector>
46 
47 PXR_NAMESPACE_OPEN_SCOPE
48 
49 class JsValue;
50 class SdfPath;
51 class SdfPayload;
52 class SdfReference;
53 class Sdf_ValueTypeRegistry;
54 
56 
62 class SdfSchemaBase : public TfWeakBase, public boost::noncopyable {
63 
64 protected:
65  class _SpecDefiner;
66 
67 public:
73  public:
75  const SdfSchemaBase& schema,
76  const TfToken& name,
77  const VtValue& fallbackValue);
78 
79  typedef std::vector< std::pair<TfToken, JsValue> > InfoVec;
80 
81  SDF_API const TfToken& GetName() const;
82  SDF_API const VtValue& GetFallbackValue() const;
83  SDF_API const InfoVec& GetInfo() const;
84 
85  SDF_API bool IsPlugin() const;
86  SDF_API bool IsReadOnly() const;
87  SDF_API bool HoldsChildren() const;
88 
92 
93  template <class T>
94  SdfAllowed IsValidValue(const T& value) const
95  {
96  return (_valueValidator ?
97  _valueValidator(_schema, VtValue(value)) :
98  SdfAllowed(true));
99  }
100 
101  template <class T>
102  SdfAllowed IsValidListValue(const T& value) const
103  {
104  return (_listValueValidator ?
105  _listValueValidator(_schema, VtValue(value)) :
106  SdfAllowed(true));
107  }
108 
109  template <class T>
110  SdfAllowed IsValidMapKey(const T& value) const
111  {
112  return (_mapKeyValidator ?
113  _mapKeyValidator(_schema, VtValue(value)) :
114  SdfAllowed(true));
115  }
116 
117  template <class T>
118  SdfAllowed IsValidMapValue(const T& value) const
119  {
120  return (_mapValueValidator ?
121  _mapValueValidator(_schema, VtValue(value)) :
122  SdfAllowed(true));
123  }
124 
126 
129 
130  FieldDefinition& FallbackValue(const VtValue& v);
131 
132  FieldDefinition& Plugin();
133  FieldDefinition& Children();
134  FieldDefinition& ReadOnly();
135  FieldDefinition& AddInfo(const TfToken& tok, const JsValue& val);
136 
137  using Validator =
138  SdfAllowed (*) (const SdfSchemaBase&, const VtValue&);
139  FieldDefinition& ValueValidator(Validator v);
140  FieldDefinition& ListValueValidator(Validator v);
141  FieldDefinition& MapKeyValidator(Validator v);
142  FieldDefinition& MapValueValidator(Validator v);
143 
145 
146  private:
147  const SdfSchemaBase& _schema;
148  TfToken _name;
149  VtValue _fallbackValue;
150  InfoVec _info;
151 
152  bool _isPlugin;
153  bool _isReadOnly;
154  bool _holdsChildren;
155 
156  Validator _valueValidator;
157  Validator _listValueValidator;
158  Validator _mapKeyValidator;
159  Validator _mapValueValidator;
160  };
161 
162  // Structure containing information about a field as it pertains to the
163  // spec this object defines.
164  struct _FieldInfo {
165  _FieldInfo(): required(false), metadata(false) { }
166  bool required;
167  bool metadata;
168  TfToken metadataDisplayGroup;
169  };
170 
171  class SpecDefinition;
172 
178  public:
180  SDF_API TfTokenVector GetFields() const;
181 
183  SDF_API TfTokenVector GetRequiredFields() const;
184 
186  SDF_API TfTokenVector GetMetadataFields() const;
187 
189  SDF_API bool IsValidField(const TfToken& name) const;
190 
192  SDF_API bool IsMetadataField(const TfToken& name) const;
193 
197  SDF_API
198  TfToken GetMetadataFieldDisplayGroup(const TfToken& name) const;
199 
201  SDF_API bool IsRequiredField(const TfToken& name) const;
202 
203 
204  private:
205  typedef TfHashMap<TfToken, _FieldInfo, TfToken::HashFunctor>
206  _FieldMap;
207  _FieldMap _fields;
208 
209  private:
210  friend class _SpecDefiner;
211  void _AddField(const TfToken& name, const _FieldInfo& fieldInfo);
212  };
213 
216  SDF_API
217  const FieldDefinition* GetFieldDefinition(const TfToken &fieldKey) const;
218 
221  inline const SpecDefinition* GetSpecDefinition(SdfSpecType specType) const {
222  return _specDefinitions[specType].second ?
223  &_specDefinitions[specType].first : nullptr;
224  }
225 
228 
231  SDF_API
232  bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const;
233 
236  SDF_API
237  bool HoldsChildren(const TfToken &fieldKey) const;
238 
241  SDF_API
242  const VtValue& GetFallback(const TfToken &fieldKey) const;
243 
245  SDF_API
246  VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const;
247 
249  SDF_API
250  bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const;
251 
253  SDF_API TfTokenVector GetFields(SdfSpecType specType) const;
254 
256  SDF_API TfTokenVector GetMetadataFields(SdfSpecType specType) const;
257 
261  SDF_API
263  TfToken const &metadataField) const;
264 
266  SDF_API TfTokenVector GetRequiredFields(SdfSpecType specType) const;
267 
272  inline bool IsRequiredFieldName(const TfToken &fieldName) const {
273  for (size_t i = 0; i != _requiredFieldNames.size(); ++i) {
274  if (_requiredFieldNames[i] == fieldName)
275  return true;
276  }
277  return false;
278  }
279 
281 
286 
288  static SdfAllowed IsValidIdentifier(const std::string& name);
289  static SdfAllowed IsValidNamespacedIdentifier(const std::string& name);
290  static SdfAllowed IsValidInheritPath(const SdfPath& path);
291  static SdfAllowed IsValidPayload(const SdfPayload& payload);
292  static SdfAllowed IsValidReference(const SdfReference& ref);
293  static SdfAllowed IsValidRelationshipTargetPath(const SdfPath& path);
294  static SdfAllowed IsValidRelocatesPath(const SdfPath& path);
295  static SdfAllowed IsValidSpecializesPath(const SdfPath& path);
296  static SdfAllowed IsValidSubLayer(const std::string& sublayer);
297  static SdfAllowed IsValidVariantIdentifier(const std::string& name);
298 
300 
303 
309  SDF_API
310  SdfAllowed IsValidValue(const VtValue& value) const;
311 
313  std::vector<SdfValueTypeName> GetAllTypes() const;
314 
316  SDF_API
317  SdfValueTypeName FindType(const TfToken& typeName) const;
319  SDF_API
320  SdfValueTypeName FindType(const char *typeName) const;
322  SDF_API
323  SdfValueTypeName FindType(std::string const &typeName) const;
324 
326  SDF_API
327  SdfValueTypeName FindType(const TfType& type,
328  const TfToken& role = TfToken()) const;
329 
331  SDF_API
332  SdfValueTypeName FindType(const VtValue& value,
333  const TfToken& role = TfToken()) const;
334 
338  SDF_API
339  SdfValueTypeName FindOrCreateType(const TfToken& typeName) const;
340 
342 
343 protected:
348  class _SpecDefiner {
349  public:
352 
354  const TfToken& name, bool required = false);
355  _SpecDefiner& MetadataField(
356  const TfToken& name, bool required = false);
357  _SpecDefiner& MetadataField(
358  const TfToken& name, const TfToken& displayGroup,
359  bool required = false);
360 
361  _SpecDefiner &CopyFrom(const SpecDefinition &other);
362 
364  private:
365  friend class SdfSchemaBase;
366  explicit _SpecDefiner(SdfSchemaBase *schema, SpecDefinition *definition)
367  : _schema(schema)
368  , _definition(definition)
369  {}
370  SdfSchemaBase *_schema;
371  SpecDefinition *_definition;
372  };
373 
376  public:
377  explicit _ValueTypeRegistrar(Sdf_ValueTypeRegistry*);
378 
379  class Type
380  {
381  public:
382  ~Type();
383 
384  // Specify a type with the given name, default value, and default
385  // array value of VtArray<T>.
386  template <class T>
387  Type(const TfToken& name, const T& defaultValue)
388  : Type(name, VtValue(defaultValue), VtValue(VtArray<T>()))
389  { }
390  template <class T>
391  Type(char const *name, const T& defaultValue)
392  : Type(TfToken(name),
393  VtValue(defaultValue), VtValue(VtArray<T>()))
394  { }
395 
396  // Specify a type with the given name and underlying C++ type.
397  // No default value or array value will be registered.
398  Type(const TfToken& name, const TfType& type);
399 
400  // Set C++ type name string for this type. Defaults to type name
401  // from TfType.
402  Type& CPPTypeName(const std::string& cppTypeName);
403 
404  // Set shape for this type. Defaults to shapeless.
405  Type& Dimensions(const SdfTupleDimensions& dims);
406 
407  // Set default unit for this type. Defaults to dimensionless unit.
408  Type& DefaultUnit(TfEnum unit);
409 
410  // Set role for this type. Defaults to no role.
411  Type& Role(const TfToken& role);
412 
413  // Indicate that arrays of this type are not supported.
414  Type& NoArrays();
415 
416  private:
417  Type(const TfToken& name,
418  const VtValue& defaultValue,
419  const VtValue& defaultArrayValue);
420 
421  class _Impl;
422  std::unique_ptr<_Impl> _impl;
423 
424  friend class _ValueTypeRegistrar;
425  };
426 
428  void AddType(const Type& type);
429 
430  private:
431  Sdf_ValueTypeRegistry* _registry;
432  };
433 
434  SdfSchemaBase();
435 
438  class EmptyTag {};
440 
441  virtual ~SdfSchemaBase();
442 
450  template <class T>
452  const TfToken &fieldKey, const T &fallback, bool plugin = false)
453  {
454  return _CreateField(fieldKey, VtValue(fallback), plugin);
455  }
456 
460  // Mark the definition as valid and return a pointer to it.
461  _specDefinitions[type].second = true;
462  return _SpecDefiner(this, &_specDefinitions[type].first);
463  }
464 
467  _SpecDefiner _ExtendSpecDefinition(SdfSpecType specType);
468 
471 
474  void _RegisterPluginFields();
475 
477  void _RegisterStandardTypes();
478 
480  void _RegisterLegacyTypes();
481 
483  _ValueTypeRegistrar _GetTypeRegistrar() const;
484 
488  typedef std::function<VtValue(const std::string&, const JsValue&)>
490 
493  const std::vector<const SdfSchemaBase::FieldDefinition *>
494  _UpdateMetadataFromPlugins(const PlugPluginPtrVector& plugins,
495  const std::string& metadataTag =
496  std::string(),
497  const _DefaultValueFactoryFn& defFactory =
499 
500 private:
501  friend class _SpecDefiner;
502 
503  void _OnDidRegisterPlugins(const PlugNotice::DidRegisterPlugins& n);
504 
505  // Return a _SpecDefiner for an existing spec definition, \p local.
507  return _SpecDefiner(this, local);
508  }
509 
510  void _AddRequiredFieldName(const TfToken &name);
511 
512  const SpecDefinition* _CheckAndGetSpecDefinition(SdfSpecType type) const;
513 
514  friend struct Sdf_SchemaFieldTypeRegistrar;
515  FieldDefinition& _CreateField(
516  const TfToken &fieldKey, const VtValue &fallback, bool plugin = false);
517 
518  template <class T>
519  FieldDefinition& _DoRegisterField(const TfToken &fieldKey, const T &fallback)
520  {
521  return _DoRegisterField(fieldKey, VtValue(fallback));
522  }
523 
524  FieldDefinition& _DoRegisterField(
525  const TfToken &fieldKey, const VtValue &fallback);
526 
527 private:
528  typedef TfHashMap<TfToken, SdfSchemaBase::FieldDefinition,
530  _FieldDefinitionMap;
531  _FieldDefinitionMap _fieldDefinitions;
532 
533  // Pair of definition and flag indicating validity.
534  std::pair<SdfSchemaBase::SpecDefinition, bool>
535  _specDefinitions[SdfNumSpecTypes];
536 
537  std::unique_ptr<Sdf_ValueTypeRegistry> _valueTypeRegistry;
538  TfTokenVector _requiredFieldNames;
539 };
540 
546 class SdfSchema : public SdfSchemaBase {
547 public:
548  SDF_API
549  static const SdfSchema& GetInstance()
550  {
552  }
553 
554 private:
555  friend class TfSingleton<SdfSchema>;
556  SdfSchema();
557  virtual ~SdfSchema();
558 };
559 
560 SDF_API_TEMPLATE_CLASS(TfSingleton<SdfSchema>);
561 
565 #define SDF_FIELD_KEYS \
566  ((Active, "active")) \
567  ((AllowedTokens, "allowedTokens")) \
568  ((AssetInfo, "assetInfo")) \
569  ((ColorConfiguration, "colorConfiguration")) \
570  ((ColorManagementSystem, "colorManagementSystem")) \
571  ((ColorSpace, "colorSpace")) \
572  ((Comment, "comment")) \
573  ((ConnectionPaths, "connectionPaths")) \
574  ((Custom, "custom")) \
575  ((CustomData, "customData")) \
576  ((CustomLayerData, "customLayerData")) \
577  ((Default, "default")) \
578  ((DefaultPrim, "defaultPrim")) \
579  ((DisplayGroup, "displayGroup")) \
580  ((DisplayName, "displayName")) \
581  ((DisplayUnit, "displayUnit")) \
582  ((Documentation, "documentation")) \
583  ((EndTimeCode, "endTimeCode")) \
584  ((FramePrecision, "framePrecision")) \
585  ((FramesPerSecond, "framesPerSecond")) \
586  ((Hidden, "hidden")) \
587  ((HasOwnedSubLayers, "hasOwnedSubLayers")) \
588  ((InheritPaths, "inheritPaths")) \
589  ((Instanceable, "instanceable")) \
590  ((Kind, "kind")) \
591  ((PrimOrder, "primOrder")) \
592  ((NoLoadHint, "noLoadHint")) \
593  ((Owner, "owner")) \
594  ((Payload, "payload")) \
595  ((Permission, "permission")) \
596  ((Prefix, "prefix")) \
597  ((PrefixSubstitutions, "prefixSubstitutions")) \
598  ((PropertyOrder, "propertyOrder")) \
599  ((References, "references")) \
600  ((Relocates, "relocates")) \
601  ((SessionOwner, "sessionOwner")) \
602  ((Specializes, "specializes")) \
603  ((Specifier, "specifier")) \
604  ((StartTimeCode, "startTimeCode")) \
605  ((SubLayers, "subLayers")) \
606  ((SubLayerOffsets, "subLayerOffsets")) \
607  ((Suffix, "suffix")) \
608  ((SuffixSubstitutions, "suffixSubstitutions")) \
609  ((SymmetricPeer, "symmetricPeer")) \
610  ((SymmetryArgs, "symmetryArgs")) \
611  ((SymmetryArguments, "symmetryArguments")) \
612  ((SymmetryFunction, "symmetryFunction")) \
613  ((TargetPaths, "targetPaths")) \
614  ((TimeSamples, "timeSamples")) \
615  ((TimeCodesPerSecond, "timeCodesPerSecond")) \
616  ((TypeName, "typeName")) \
617  ((VariantSelection, "variantSelection")) \
618  ((Variability, "variability")) \
619  ((VariantSetNames, "variantSetNames")) \
620  \
621  /* XXX: These fields should move into Sd. See bug 123508. */ \
622  ((EndFrame, "endFrame")) \
623  ((StartFrame, "startFrame"))
624 
625 #define SDF_CHILDREN_KEYS \
626  ((ConnectionChildren, "connectionChildren")) \
627  ((ExpressionChildren, "expressionChildren")) \
628  ((MapperArgChildren, "mapperArgChildren")) \
629  ((MapperChildren, "mapperChildren")) \
630  ((PrimChildren, "primChildren")) \
631  ((PropertyChildren, "properties")) \
632  ((RelationshipTargetChildren, "targetChildren")) \
633  ((VariantChildren, "variantChildren")) \
634  ((VariantSetChildren, "variantSetChildren"))
635 
636 TF_DECLARE_PUBLIC_TOKENS(SdfFieldKeys, SDF_API, SDF_FIELD_KEYS);
637 TF_DECLARE_PUBLIC_TOKENS(SdfChildrenKeys, SDF_API, SDF_CHILDREN_KEYS);
638 
639 PXR_NAMESPACE_CLOSE_SCOPE
640 
641 #endif // PXR_USD_SDF_SCHEMA_H
void _RegisterPluginFields()
Registers plugin fields and sets up handling so that fields will be added when additional plugins are...
std::function< VtValue(const std::string &, const JsValue &)> _DefaultValueFactoryFn
Factory function for creating a default value for a metadata field.
Definition: schema.h:489
Manage a single instance of an object (see.
Definition: singleton.h:122
SDF_API bool IsValidField(const TfToken &name) const
Returns whether the given field is valid for this spec.
#define TF_DECLARE_WEAK_PTRS(type)
Define standard weak pointer types.
Definition: declarePtrs.h:62
SDF_API TfTokenVector GetRequiredFields(SdfSpecType specType) const
Returns all required fields registered for the given spec type.
SDF_API TfTokenVector GetRequiredFields() const
Returns all value fields marked as required for this spec.
void _RegisterLegacyTypes()
Registers legacy attribute value types.
Generic class that provides information about scene description fields but doesn&#39;t actually provide a...
Definition: schema.h:62
SDF_API bool IsRequiredField(const TfToken &name) const
Returns whether the given field is required for this spec.
SDF_API VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const
Coerce value to the correct type for the specified field.
Class that defines fields for a spec type.
Definition: schema.h:348
SDF_API TfTokenVector GetMetadataFields(SdfSpecType specType) const
Returns all metadata fields registered for the given spec type.
An enum class that records both enum type and enum value.
Definition: enum.h:140
Functor to use for hash maps from tokens to other things.
Definition: token.h:168
_SpecDefiner & Field(const TfToken &name, bool required=false)
Functions for setting spec attributes during registration.
Represents a value type name, i.e.
Definition: valueTypeName.h:83
SdfSpecType
An enum that specifies the type of an object.
Definition: types.h:91
SDF_API bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const
Return whether the given field is valid for the given spec type.
SDF_API SdfAllowed IsValidValue(const VtValue &value) const
Scene description value types.
SDF_API SdfValueTypeName FindOrCreateType(const TfToken &typeName) const
Return the type name object for the given type name string if it exists otherwise create a temporary ...
SDF_API bool HoldsChildren(const TfToken &fieldKey) const
Returns whether the given field is a &#39;children&#39; field – that is, it indexes certain children beneath ...
const SpecDefinition * GetSpecDefinition(SdfSpecType specType) const
Returns the spec definition for the given spec type.
Definition: schema.h:221
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:89
FieldDefinition & _RegisterField(const TfToken &fieldKey, const T &fallback, bool plugin=false)
Creates and registers a new field named fieldKey with the fallback value fallback.
Definition: schema.h:451
SDF_API const VtValue & GetFallback(const TfToken &fieldKey) const
Return the fallback value for the specified fieldKey or the empty value if fieldKey is not registered...
std::vector< SdfValueTypeName > GetAllTypes() const
Returns all registered type names.
Class defining various attributes for a field.
Definition: schema.h:72
_ValueTypeRegistrar _GetTypeRegistrar() const
Returns a type registrar.
SDF_API bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const
Convenience functions for accessing specific field information.
Indicates if an operation is allowed and, if not, why not.
Definition: allowed.h:47
A discriminated union type for JSON values.
Definition: value.h:61
bool IsRequiredFieldName(const TfToken &fieldName) const
Return true if fieldName is a required field name for at least one spec type, return false otherwise...
Definition: schema.h:272
SdfAllowed IsValidValue(const T &value) const
Validation functions that return true if a given value passes the registered validator or if no valid...
Definition: schema.h:94
_SpecDefiner _ExtendSpecDefinition(SdfSpecType specType)
Returns a _SpecDefiner for the previously-defined spec type for specifying additional fields...
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.
Definition: staticTokens.h:118
SDF_API const FieldDefinition * GetFieldDefinition(const TfToken &fieldKey) const
Returns the field definition for the given field.
Represents a payload and all its meta data.
Definition: payload.h:59
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:433
Class representing fields and other information for a spec type.
Definition: schema.h:177
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:287
static T & GetInstance()
Return a reference to an object of type T, creating it if necessary.
Definition: singleton.h:137
void AddType(const Type &type)
Register a value type and its corresponding array value type.
SDF_API TfTokenVector GetFields() const
Returns all fields for this spec.
A helper for registering value types.
Definition: schema.h:375
void _RegisterStandardTypes()
Registers standard attribute value types.
SDF_API TfToken GetMetadataFieldDisplayGroup(SdfSpecType specType, TfToken const &metadataField) const
Return the metadata field display group for metadata metadataField on specType.
static SdfAllowed IsValidAttributeConnectionPath(const SdfPath &path)
Specific validation functions for various fields.
Represents a reference and all its meta data.
Definition: reference.h:75
Defines an interface to registered plugins.
Definition: plugin.h:59
SDF_API SdfValueTypeName FindType(const TfToken &typeName) const
Return the type name object for the given type name token.
void _RegisterStandardFields()
Registers the standard fields.
Notice sent after new plugins have been registered with the Plug registry.
Definition: notice.h:50
FieldDefinition & FallbackValue(const VtValue &v)
Functions for setting field attributes during registration.
_SpecDefiner _Define(SdfSpecType type)
Registers the given spec type with this schema and return a _SpecDefiner for specifying additional fi...
Definition: schema.h:459
const std::vector< const SdfSchemaBase::FieldDefinition * > _UpdateMetadataFromPlugins(const PlugPluginPtrVector &plugins, const std::string &metadataTag=std::string(), const _DefaultValueFactoryFn &defFactory=_DefaultValueFactoryFn())
Registers all metadata fields specified in the given plugins under the given metadata tag...
TfType represents a dynamic runtime type.
Definition: type.h:70
Represents the shape of a value type (or that of an element in an array).
Definition: valueTypeName.h:46
SDF_API TfTokenVector GetFields(SdfSpecType specType) const
Returns all fields registered for the given spec type.
SDF_API TfTokenVector GetMetadataFields() const
Returns all value fields marked as metadata for this spec.
Class that provides information about the various scene description fields.
Definition: schema.h:546
SDF_API TfToken GetMetadataFieldDisplayGroup(const TfToken &name) const
Returns the display group for this metadata field.
Enable a concrete base class for use with TfWeakPtr.
Definition: weakBase.h:142
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:182
SDF_API bool IsMetadataField(const TfToken &name) const
Returns whether the given field is metadata for this spec.
Construct an SdfSchemaBase but does not populate it with standard fields and types.
Definition: schema.h:438