HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Definition.h
Go to the documentation of this file.
1 //
2 // Copyright Contributors to the MaterialX Project
3 // SPDX-License-Identifier: Apache-2.0
4 //
5 
6 #ifndef MATERIALX_DEFINITION_H
7 #define MATERIALX_DEFINITION_H
8 
9 /// @file
10 /// Definition element subclasses
11 
12 #include <MaterialXCore/Export.h>
13 
15 
17 
18 extern MX_CORE_API const string COLOR_SEMANTIC;
19 extern MX_CORE_API const string SHADER_SEMANTIC;
20 
21 class NodeDef;
22 class Implementation;
23 class TypeDef;
24 class TargetDef;
25 class Member;
26 class Unit;
27 class UnitDef;
28 class UnitTypeDef;
29 class AttributeDef;
30 
31 /// A shared pointer to a NodeDef
32 using NodeDefPtr = shared_ptr<NodeDef>;
33 /// A shared pointer to a const NodeDef
34 using ConstNodeDefPtr = shared_ptr<const NodeDef>;
35 
36 /// A shared pointer to an Implementation
37 using ImplementationPtr = shared_ptr<Implementation>;
38 /// A shared pointer to a const Implementation
39 using ConstImplementationPtr = shared_ptr<const Implementation>;
40 
41 /// A shared pointer to a TypeDef
42 using TypeDefPtr = shared_ptr<TypeDef>;
43 /// A shared pointer to a const TypeDef
44 using ConstTypeDefPtr = shared_ptr<const TypeDef>;
45 
46 /// A shared pointer to a TargetDef
47 using TargetDefPtr = shared_ptr<TargetDef>;
48 /// A shared pointer to a const TargetDef
49 using ConstTargetDefPtr = shared_ptr<const TargetDef>;
50 
51 /// A shared pointer to a Member
52 using MemberPtr = shared_ptr<Member>;
53 /// A shared pointer to a const Member
54 using ConstMemberPtr = shared_ptr<const Member>;
55 
56 /// A shared pointer to a Unit
57 using UnitPtr = shared_ptr<Unit>;
58 /// A shared pointer to a const Unit
59 using ConstUnitPtr = shared_ptr<const Unit>;
60 
61 /// A shared pointer to a UnitDef
62 using UnitDefPtr = shared_ptr<UnitDef>;
63 /// A shared pointer to a const UnitDef
64 using ConstUnitDefPtr = shared_ptr<const UnitDef>;
65 
66 /// A shared pointer to a UnitTypeDef
67 using UnitTypeDefPtr = shared_ptr<UnitTypeDef>;
68 /// A shared pointer to a const UnitTypeDef
69 using ConstUnitTypeDefPtr = shared_ptr<const UnitTypeDef>;
70 
71 /// A shared pointer to an AttributeDef
72 using AttributeDefPtr = shared_ptr<AttributeDef>;
73 /// A shared pointer to a const AttributeDef
74 using AttributeDefDefPtr = shared_ptr<const AttributeDef>;
75 
76 /// @class NodeDef
77 /// A node definition element within a Document.
78 ///
79 /// A NodeDef provides the declaration of a node interface, which may then
80 /// be instantiated as a Node.
82 {
83  public:
84  NodeDef(ElementPtr parent, const string& name) :
85  InterfaceElement(parent, CATEGORY, name)
86  {
87  }
88  virtual ~NodeDef() { }
89 
90  /// @name Node String
91  /// @{
92 
93  /// Set the node string of the NodeDef.
94  void setNodeString(const string& node)
95  {
96  setAttribute(NODE_ATTRIBUTE, node);
97  }
98 
99  /// Return true if the given NodeDef has a node string.
100  bool hasNodeString() const
101  {
102  return hasAttribute(NODE_ATTRIBUTE);
103  }
104 
105  /// Return the node string of the NodeDef.
106  const string& getNodeString() const
107  {
108  return getAttribute(NODE_ATTRIBUTE);
109  }
110 
111  /// Return the element's output type.
112  const string& getType() const override;
113 
114  /// @}
115  /// @name Node Group
116  /// @{
117 
118  /// Set the node group of the NodeDef.
119  void setNodeGroup(const string& category)
120  {
121  setAttribute(NODE_GROUP_ATTRIBUTE, category);
122  }
123 
124  /// Return true if the given NodeDef has a node group.
125  bool hasNodeGroup() const
126  {
127  return hasAttribute(NODE_GROUP_ATTRIBUTE);
128  }
129 
130  /// Return the node group of the NodeDef.
131  const string& getNodeGroup() const
132  {
133  return getAttribute(NODE_GROUP_ATTRIBUTE);
134  }
135 
136  /// @}
137  /// @name Implementation References
138  /// @{
139 
140  /// Return the first implementation for this nodedef, optionally filtered
141  /// by the given target name.
142  /// @param target An optional target name, which will be used to filter
143  /// the implementations that are considered.
144  /// @return An implementation for this nodedef, or an empty shared pointer
145  /// if none was found. Note that a node implementation may be either
146  /// an Implementation element or a NodeGraph element.
147  InterfaceElementPtr getImplementation(const string& target = EMPTY_STRING) const;
148 
149  /// @}
150  /// @name Hints
151  /// @{
152 
153  /// Return list of input hint pairs of the form { input_name, hint_string }
154  StringMap getInputHints() const;
155 
156  /// @}
157  /// @name Validation
158  /// @{
159 
160  /// Validate that the given element tree, including all descendants, is
161  /// consistent with the MaterialX specification.
162  bool validate(string* message = nullptr) const override;
163 
164  /// @}
165  /// @name Utility
166  /// @{
167 
168  /// Return true if the given version string is compatible with this
169  /// NodeDef. This may be used to test, for example, whether a NodeDef
170  /// and Node may be used together.
171  bool isVersionCompatible(const string& version) const;
172 
173  /// Return the first declaration of this interface, optionally filtered
174  /// by the given target name.
175  ConstInterfaceElementPtr getDeclaration(const string& target = EMPTY_STRING) const override;
176 
177  /// @}
178 
179  public:
180  static const string CATEGORY;
181  static const string NODE_ATTRIBUTE;
182  static const string NODE_GROUP_ATTRIBUTE;
183 
184  static const string TEXTURE_NODE_GROUP;
185  static const string PROCEDURAL_NODE_GROUP;
186  static const string GEOMETRIC_NODE_GROUP;
187  static const string ADJUSTMENT_NODE_GROUP;
188  static const string CONDITIONAL_NODE_GROUP;
189  static const string CHANNEL_NODE_GROUP;
190  static const string ORGANIZATION_NODE_GROUP;
191  static const string TRANSLATION_NODE_GROUP;
192 };
193 
194 /// @class Implementation
195 /// An implementation element within a Document.
196 ///
197 /// An Implementation is used to associate external source code with a specific
198 /// NodeDef, providing a definition for the node that may either be universal or
199 /// restricted to a specific target.
201 {
202  public:
203  Implementation(ElementPtr parent, const string& name) :
204  InterfaceElement(parent, CATEGORY, name)
205  {
206  }
207  virtual ~Implementation() { }
208 
209  /// @name File String
210  /// @{
211 
212  /// Set the file string for the Implementation.
213  void setFile(const string& file)
214  {
215  setAttribute(FILE_ATTRIBUTE, file);
216  }
217 
218  /// Return true if the given Implementation has a file string.
219  bool hasFile() const
220  {
221  return hasAttribute(FILE_ATTRIBUTE);
222  }
223 
224  /// Return the file string for the Implementation.
225  const string& getFile() const
226  {
227  return getAttribute(FILE_ATTRIBUTE);
228  }
229 
230  /// @}
231  /// @name Function String
232  /// @{
233 
234  /// Set the function string for the Implementation.
235  void setFunction(const string& function)
236  {
237  setAttribute(FUNCTION_ATTRIBUTE, function);
238  }
239 
240  /// Return true if the given Implementation has a function string.
241  bool hasFunction() const
242  {
243  return hasAttribute(FUNCTION_ATTRIBUTE);
244  }
245 
246  /// Return the function string for the Implementation.
247  const string& getFunction() const
248  {
249  return getAttribute(FUNCTION_ATTRIBUTE);
250  }
251 
252  /// @}
253  /// @name Nodegraph String
254  /// @{
255 
256  /// Set the nodegraph string for the Implementation.
257  void setNodeGraph(const string& nodegraph)
258  {
259  setAttribute(NODE_GRAPH_ATTRIBUTE, nodegraph);
260  }
261 
262  /// Return true if the given Implementation has a nodegraph string.
263  bool hasNodeGraph() const
264  {
265  return hasAttribute(NODE_GRAPH_ATTRIBUTE);
266  }
267 
268  /// Return the nodegraph string for the Implementation.
269  const string& getNodeGraph() const
270  {
272  }
273 
274  /// @}
275  /// @name NodeDef References
276  /// @{
277 
278  /// Set the NodeDef element referenced by the Implementation.
279  void setNodeDef(ConstNodeDefPtr nodeDef);
280 
281  /// Return the NodeDef element referenced by the Implementation.
282  NodeDefPtr getNodeDef() const;
283 
284  /// @}
285  /// @name Validation
286  /// @{
287 
288  /// Validate that the given element tree, including all descendants, is
289  /// consistent with the MaterialX specification.
290  bool validate(string* message = nullptr) const override;
291 
292  /// @}
293  /// @name Utility
294  /// @{
295 
296  /// Return the first declaration of this interface, optionally filtered
297  /// by the given target name.
298  ConstInterfaceElementPtr getDeclaration(const string& target = EMPTY_STRING) const override;
299 
300  /// @}
301 
302  public:
303  static const string CATEGORY;
304  static const string FILE_ATTRIBUTE;
305  static const string FUNCTION_ATTRIBUTE;
306  static const string NODE_GRAPH_ATTRIBUTE;
307 };
308 
309 /// @class TypeDef
310 /// A type definition element within a Document.
312 {
313  public:
314  TypeDef(ElementPtr parent, const string& name) :
315  Element(parent, CATEGORY, name)
316  {
317  }
318  virtual ~TypeDef() { }
319 
320  /// @name Semantic
321  /// @{
322 
323  /// Set the semantic string of the TypeDef.
324  void setSemantic(const string& semantic)
325  {
326  setAttribute(SEMANTIC_ATTRIBUTE, semantic);
327  }
328 
329  /// Return true if the given TypeDef has a semantic string.
330  bool hasSemantic() const
331  {
332  return hasAttribute(SEMANTIC_ATTRIBUTE);
333  }
334 
335  /// Return the semantic string of the TypeDef.
336  const string& getSemantic() const
337  {
338  return getAttribute(SEMANTIC_ATTRIBUTE);
339  }
340 
341  /// @}
342  /// @name Context
343  /// @{
344 
345  /// Set the context string of the TypeDef.
346  void setContext(const string& context)
347  {
348  setAttribute(CONTEXT_ATTRIBUTE, context);
349  }
350 
351  /// Return true if the given TypeDef has a context string.
352  bool hasContext() const
353  {
354  return hasAttribute(CONTEXT_ATTRIBUTE);
355  }
356 
357  /// Return the context string of the TypeDef.
358  const string& getContext() const
359  {
360  return getAttribute(CONTEXT_ATTRIBUTE);
361  }
362 
363  /// @}
364  /// @name Member Elements
365  /// @{
366 
367  /// Add a Member to the TypeDef.
368  /// @param name The name of the new Member.
369  /// If no name is specified, then a unique name will automatically be
370  /// generated.
371  /// @return A shared pointer to the new Member.
373  {
374  return addChild<Member>(name);
375  }
376 
377  /// Return the Member, if any, with the given name.
378  MemberPtr getMember(const string& name) const
379  {
380  return getChildOfType<Member>(name);
381  }
382 
383  /// Return a vector of all Member elements in the TypeDef.
384  vector<MemberPtr> getMembers() const
385  {
386  return getChildrenOfType<Member>();
387  }
388 
389  /// Remove the Member, if any, with the given name.
390  void removeMember(const string& name)
391  {
392  removeChildOfType<Member>(name);
393  }
394 
395  /// @}
396 
397  public:
398  static const string CATEGORY;
399  static const string SEMANTIC_ATTRIBUTE;
400  static const string CONTEXT_ATTRIBUTE;
401 };
402 
403 /// @class TargetDef
404 /// A definition of an implementation target.
406 {
407  public:
408  TargetDef(ElementPtr parent, const string& name) :
409  TypedElement(parent, CATEGORY, name)
410  {
411  }
412  virtual ~TargetDef() { }
413 
414  /// Return a vector of target names that is matching this targetdef
415  /// either by itself of by its inheritance.
416  /// The vector is ordered by priority starting with this targetdef
417  /// itself and then upwards in the inheritance hierarchy.
418  StringVec getMatchingTargets() const;
419 
420  public:
421  static const string CATEGORY;
422 };
423 
424 /// @class Member
425 /// A member element within a TypeDef.
427 {
428  public:
429  Member(ElementPtr parent, const string& name) :
430  ValueElement(parent, CATEGORY, name)
431  {
432  }
433  virtual ~Member() { }
434 
435  public:
436  static const string CATEGORY;
437 };
438 
439 /// @class Unit
440 /// A unit declaration within a UnitDef.
441 class MX_CORE_API Unit : public Element
442 {
443  public:
444  Unit(ElementPtr parent, const string& name) :
445  Element(parent, CATEGORY, name)
446  {
447  }
448  virtual ~Unit() { }
449 
450  public:
451  static const string CATEGORY;
452 };
453 
454 /// @class UnitDef
455 /// A unit definition element within a Document.
457 {
458  public:
459  UnitDef(ElementPtr parent, const string& name) :
460  Element(parent, CATEGORY, name)
461  {
462  }
463  virtual ~UnitDef() { }
464 
465  /// @name Unit Type methods
466  /// @{
467 
468  /// Set the element's unittype string.
469  void setUnitType(const string& type)
470  {
471  setAttribute(UNITTYPE_ATTRIBUTE, type);
472  }
473 
474  /// Return true if the given element has a unittype string.
475  bool hasUnitType() const
476  {
477  return hasAttribute(UNITTYPE_ATTRIBUTE);
478  }
479 
480  /// Return the element's type string.
481  const string& getUnitType() const
482  {
483  return getAttribute(UNITTYPE_ATTRIBUTE);
484  }
485 
486  /// @}
487  /// @name Unit methods
488  /// @{
489 
490  /// Add a Unit to the UnitDef.
491  /// @param name The name of the new Unit. An exception is thrown
492  /// if the name provided is an empty string.
493  /// @return A shared pointer to the new Unit.
494  UnitPtr addUnit(const string& name)
495  {
496  if (name.empty())
497  {
498  throw Exception("A unit definition name cannot be empty");
499  }
500  return addChild<Unit>(name);
501  }
502 
503  /// Return the Unit, if any, with the given name.
504  UnitPtr getUnit(const string& name) const
505  {
506  return getChildOfType<Unit>(name);
507  }
508 
509  /// Return a vector of all Unit elements in the UnitDef.
510  vector<UnitPtr> getUnits() const
511  {
512  return getChildrenOfType<Unit>();
513  }
514 
515  /// Remove the Unit, if any, with the given name.
516  void removeUnit(const string& name)
517  {
518  removeChildOfType<Unit>(name);
519  }
520 
521  /// @}
522 
523  public:
524  static const string CATEGORY;
525  static const string UNITTYPE_ATTRIBUTE;
526 };
527 
528 /// @class UnitTypeDef
529 /// A unit type definition element within a Document.
531 {
532  public:
533  UnitTypeDef(ElementPtr parent, const string& name) :
534  Element(parent, CATEGORY, name)
535  {
536  }
537  virtual ~UnitTypeDef() { }
538 
539  /// Find all UnitDefs for the UnitTypeDef
540  vector<UnitDefPtr> getUnitDefs() const;
541 
542  public:
543  static const string CATEGORY;
544 };
545 
546 /// @class AttributeDef
547 /// An attribute definition element within a Document.
549 {
550  public:
551  AttributeDef(ElementPtr parent, const string& name) :
552  TypedElement(parent, CATEGORY, name)
553  {
554  }
555  virtual ~AttributeDef() { }
556 
557  /// @name Attribute name
558  /// @{
559 
560  /// Set the element's attrname string.
561  void setAttrName(const string& name)
562  {
563  setAttribute(ATTRNAME_ATTRIBUTE, name);
564  }
565 
566  /// Return true if this element has an attrname string.
567  bool hasAttrName() const
568  {
569  return hasAttribute(ATTRNAME_ATTRIBUTE);
570  }
571 
572  /// Return the element's attrname string.
573  const string& getAttrName() const
574  {
575  return getAttribute(ATTRNAME_ATTRIBUTE);
576  }
577 
578  /// @}
579  /// @name Value String
580  /// @{
581 
582  /// Set the value string of an element.
583  void setValueString(const string& value)
584  {
585  setAttribute(VALUE_ATTRIBUTE, value);
586  }
587 
588  /// Return true if the given element has a value string.
589  bool hasValueString() const
590  {
591  return hasAttribute(VALUE_ATTRIBUTE);
592  }
593 
594  /// Get the value string of a element.
595  const string& getValueString() const
596  {
597  return getAttribute(VALUE_ATTRIBUTE);
598  }
599 
600  /// @}
601  /// @name Typed Value
602  /// @{
603 
604  /// Set the typed value of an element.
605  template <class T> void setValue(const T& value, const string& type = EMPTY_STRING)
606  {
607  setType(!type.empty() ? type : getTypeString<T>());
608  setValueString(toValueString(value));
609  }
610 
611  /// Set the typed value of an element from a C-style string.
612  void setValue(const char* value, const string& type = EMPTY_STRING)
613  {
614  setValue(value ? string(value) : EMPTY_STRING, type);
615  }
616 
617  /// Return true if the element possesses a typed value.
618  bool hasValue() const
619  {
620  return hasAttribute(VALUE_ATTRIBUTE);
621  }
622 
623  /// Return the typed value of an element as a generic value object, which
624  /// may be queried to access its data.
625  ///
626  /// @return A shared pointer to the typed value of this element, or an
627  /// empty shared pointer if no value is present.
628  ValuePtr getValue() const;
629 
630  /// @}
631  /// @name Elements
632  /// @{
633 
634  /// Set the element's elements string.
635  void setElements(const string& elements)
636  {
637  setAttribute(ELEMENTS_ATTRIBUTE, elements);
638  }
639 
640  /// Return true if the element has an elements string.
641  bool hasElements() const
642  {
643  return hasAttribute(ELEMENTS_ATTRIBUTE);
644  }
645 
646  /// Return the element's elements string.
647  const string& getElements() const
648  {
649  return getAttribute(ELEMENTS_ATTRIBUTE);
650  }
651 
652  /// @}
653  /// @name Exportable
654  /// @{
655 
656  /// Set the exportable boolean for the element.
657  void setExportable(bool value)
658  {
659  setTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE, value);
660  }
661 
662  /// Return the exportable boolean for the element.
663  /// Defaults to false if exportable is not set.
664  bool getExportable() const
665  {
666  return getTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE);
667  }
668 
669  /// @}
670 
671  public:
672  static const string CATEGORY;
673  static const string ATTRNAME_ATTRIBUTE;
674  static const string VALUE_ATTRIBUTE;
675  static const string ELEMENTS_ATTRIBUTE;
676  static const string EXPORTABLE_ATTRIBUTE;
677 };
678 
680 
681 #endif
static const string CATEGORY
Definition: Definition.h:180
shared_ptr< const UnitDef > ConstUnitDefPtr
A shared pointer to a const UnitDef.
Definition: Definition.h:64
static const string SEMANTIC_ATTRIBUTE
Definition: Definition.h:399
shared_ptr< const TypeDef > ConstTypeDefPtr
A shared pointer to a const TypeDef.
Definition: Definition.h:44
GLuint GLsizei const GLchar * message
Definition: glcorearb.h:2543
static const string FUNCTION_ATTRIBUTE
Definition: Definition.h:305
shared_ptr< const Implementation > ConstImplementationPtr
A shared pointer to a const Implementation.
Definition: Definition.h:39
virtual const string & getType() const
Return the element's type string.
Definition: Element.h:897
void setType(const string &type)
Set the element's type string.
Definition: Element.h:885
bool hasFile() const
Return true if the given Implementation has a file string.
Definition: Definition.h:219
static const string VALUE_ATTRIBUTE
Definition: Definition.h:674
const string & getNodeGraph() const
Return the nodegraph string for the Implementation.
Definition: Definition.h:269
const string & getFunction() const
Return the function string for the Implementation.
Definition: Definition.h:247
shared_ptr< TypeDef > TypeDefPtr
A shared pointer to a TypeDef.
Definition: Definition.h:42
UnitDef(ElementPtr parent, const string &name)
Definition: Definition.h:459
shared_ptr< TargetDef > TargetDefPtr
A shared pointer to a TargetDef.
Definition: Definition.h:47
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:25
vector< string > StringVec
A vector of strings.
Definition: Library.h:60
void setNodeGroup(const string &category)
Set the node group of the NodeDef.
Definition: Definition.h:119
void setUnitType(const string &type)
Set the element's unittype string.
Definition: Definition.h:469
shared_ptr< const InterfaceElement > ConstInterfaceElementPtr
A shared pointer to a const InterfaceElement.
Definition: Interface.h:43
GLsizei const GLfloat * value
Definition: glcorearb.h:824
virtual ~AttributeDef()
Definition: Definition.h:555
shared_ptr< AttributeDef > AttributeDefPtr
A shared pointer to an AttributeDef.
Definition: Definition.h:72
void setNodeString(const string &node)
Set the node string of the NodeDef.
Definition: Definition.h:94
static const string PROCEDURAL_NODE_GROUP
Definition: Definition.h:185
shared_ptr< Member > MemberPtr
A shared pointer to a Member.
Definition: Definition.h:52
static const string NODE_GROUP_ATTRIBUTE
Definition: Definition.h:182
MATERIALX_NAMESPACE_BEGIN MX_CORE_API const string EMPTY_STRING
static const string CATEGORY
Definition: Definition.h:451
const string & getAttribute(const string &attrib) const
Definition: Element.h:492
void setContext(const string &context)
Set the context string of the TypeDef.
Definition: Definition.h:346
TargetDef(ElementPtr parent, const string &name)
Definition: Definition.h:408
__hostdev__ void setValue(uint32_t offset, bool v)
Definition: NanoVDB.h:5750
shared_ptr< InterfaceElement > InterfaceElementPtr
A shared pointer to an InterfaceElement.
Definition: Interface.h:41
NodeDef(ElementPtr parent, const string &name)
Definition: Definition.h:84
virtual ~TargetDef()
Definition: Definition.h:412
class OCIOEXPORT Exception
#define MX_CORE_API
Definition: Export.h:18
void setFunction(const string &function)
Set the function string for the Implementation.
Definition: Definition.h:235
void setNodeGraph(const string &nodegraph)
Set the nodegraph string for the Implementation.
Definition: Definition.h:257
__hostdev__ float getValue(uint32_t i) const
Definition: NanoVDB.h:5578
shared_ptr< UnitTypeDef > UnitTypeDefPtr
A shared pointer to a UnitTypeDef.
Definition: Definition.h:67
virtual ~TypeDef()
Definition: Definition.h:318
MemberPtr getMember(const string &name) const
Return the Member, if any, with the given name.
Definition: Definition.h:378
bool hasValueString() const
Return true if the given element has a value string.
Definition: Definition.h:589
shared_ptr< const Member > ConstMemberPtr
A shared pointer to a const Member.
Definition: Definition.h:54
AttributeDef(ElementPtr parent, const string &name)
Definition: Definition.h:551
MATERIALX_NAMESPACE_BEGIN MX_CORE_API const string COLOR_SEMANTIC
const string & getAttrName() const
Return the element's attrname string.
Definition: Definition.h:573
MemberPtr addMember(const string &name=EMPTY_STRING)
Definition: Definition.h:372
virtual ~Member()
Definition: Definition.h:433
void removeMember(const string &name)
Remove the Member, if any, with the given name.
Definition: Definition.h:390
void setValueString(const string &value)
Set the value string of an element.
Definition: Definition.h:583
static const string GEOMETRIC_NODE_GROUP
Definition: Definition.h:186
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:108
void setValue(const char *value, const string &type=EMPTY_STRING)
Set the typed value of an element from a C-style string.
Definition: Definition.h:612
void setSemantic(const string &semantic)
Set the semantic string of the TypeDef.
Definition: Definition.h:324
void setValue(const T &value, const string &type=EMPTY_STRING)
Set the typed value of an element.
Definition: Definition.h:605
static const string FILE_ATTRIBUTE
Definition: Definition.h:304
virtual bool validate(string *message=nullptr) const
vector< UnitPtr > getUnits() const
Return a vector of all Unit elements in the UnitDef.
Definition: Definition.h:510
static const string CONTEXT_ATTRIBUTE
Definition: Definition.h:400
virtual ~UnitDef()
Definition: Definition.h:463
bool hasFunction() const
Return true if the given Implementation has a function string.
Definition: Definition.h:241
bool hasNodeGroup() const
Return true if the given NodeDef has a node group.
Definition: Definition.h:125
shared_ptr< Implementation > ImplementationPtr
A shared pointer to an Implementation.
Definition: Definition.h:37
shared_ptr< const UnitTypeDef > ConstUnitTypeDefPtr
A shared pointer to a const UnitTypeDef.
Definition: Definition.h:69
static const string ADJUSTMENT_NODE_GROUP
Definition: Definition.h:187
static const string NODE_GRAPH_ATTRIBUTE
Definition: Interface.h:164
static const string CATEGORY
Definition: Definition.h:398
bool hasUnitType() const
Return true if the given element has a unittype string.
Definition: Definition.h:475
GLenum target
Definition: glcorearb.h:1667
shared_ptr< const Unit > ConstUnitPtr
A shared pointer to a const Unit.
Definition: Definition.h:59
shared_ptr< UnitDef > UnitDefPtr
A shared pointer to a UnitDef.
Definition: Definition.h:62
static const string CATEGORY
Definition: Definition.h:524
static const string EXPORTABLE_ATTRIBUTE
Definition: Definition.h:676
static const string TRANSLATION_NODE_GROUP
Definition: Definition.h:191
vector< MemberPtr > getMembers() const
Return a vector of all Member elements in the TypeDef.
Definition: Definition.h:384
GLuint const GLchar * name
Definition: glcorearb.h:786
const string & getElements() const
Return the element's elements string.
Definition: Definition.h:647
bool hasNodeString() const
Return true if the given NodeDef has a node string.
Definition: Definition.h:100
static const string UNITTYPE_ATTRIBUTE
Definition: Definition.h:525
MX_CORE_API const string SHADER_SEMANTIC
GT_API const UT_StringHolder version
static const string NODE_ATTRIBUTE
Definition: Definition.h:181
virtual ~NodeDef()
Definition: Definition.h:88
bool hasContext() const
Return true if the given TypeDef has a context string.
Definition: Definition.h:352
void setAttribute(const string &attrib, const string &value)
Set the value string of the given attribute.
shared_ptr< const AttributeDef > AttributeDefDefPtr
A shared pointer to a const AttributeDef.
Definition: Definition.h:74
const string & getContext() const
Return the context string of the TypeDef.
Definition: Definition.h:358
static const string CATEGORY
Definition: Definition.h:436
void setElements(const string &elements)
Set the element's elements string.
Definition: Definition.h:635
bool hasNodeGraph() const
Return true if the given Implementation has a nodegraph string.
Definition: Definition.h:263
const string & getNodeString() const
Return the node string of the NodeDef.
Definition: Definition.h:106
static const string CONDITIONAL_NODE_GROUP
Definition: Definition.h:188
shared_ptr< Unit > UnitPtr
A shared pointer to a Unit.
Definition: Definition.h:57
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition: Element.h:485
bool getExportable() const
Definition: Definition.h:664
static const string NODE_GRAPH_ATTRIBUTE
Definition: Definition.h:306
virtual ~Unit()
Definition: Definition.h:448
bool hasAttrName() const
Return true if this element has an attrname string.
Definition: Definition.h:567
shared_ptr< const TargetDef > ConstTargetDefPtr
A shared pointer to a const TargetDef.
Definition: Definition.h:49
bool hasSemantic() const
Return true if the given TypeDef has a semantic string.
Definition: Definition.h:330
virtual ~Implementation()
Definition: Definition.h:207
const string & getFile() const
Return the file string for the Implementation.
Definition: Definition.h:225
virtual ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const
const string & getUnitType() const
Return the element's type string.
Definition: Definition.h:481
static const string ORGANIZATION_NODE_GROUP
Definition: Definition.h:190
static const string ATTRNAME_ATTRIBUTE
Definition: Definition.h:673
std::unordered_map< string, string > StringMap
An unordered map with strings as both keys and values.
Definition: Library.h:62
const string & getSemantic() const
Return the semantic string of the TypeDef.
Definition: Definition.h:336
bool hasValue() const
Return true if the element possesses a typed value.
Definition: Definition.h:618
virtual ~UnitTypeDef()
Definition: Definition.h:537
Unit(ElementPtr parent, const string &name)
Definition: Definition.h:444
static const string CATEGORY
Definition: Definition.h:672
Member(ElementPtr parent, const string &name)
Definition: Definition.h:429
UnitTypeDef(ElementPtr parent, const string &name)
Definition: Definition.h:533
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
const string & getNodeGroup() const
Return the node group of the NodeDef.
Definition: Definition.h:131
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:26
TypeDef(ElementPtr parent, const string &name)
Definition: Definition.h:314
shared_ptr< const NodeDef > ConstNodeDefPtr
A shared pointer to a const NodeDef.
Definition: Definition.h:34
void setAttrName(const string &name)
Set the element's attrname string.
Definition: Definition.h:561
static const string CHANNEL_NODE_GROUP
Definition: Definition.h:189
Implementation(ElementPtr parent, const string &name)
Definition: Definition.h:203
void setExportable(bool value)
Set the exportable boolean for the element.
Definition: Definition.h:657
static const string CATEGORY
Definition: Definition.h:421
bool hasElements() const
Return true if the element has an elements string.
Definition: Definition.h:641
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:30
void setFile(const string &file)
Set the file string for the Implementation.
Definition: Definition.h:213
static const string ELEMENTS_ATTRIBUTE
Definition: Definition.h:675
void removeUnit(const string &name)
Remove the Unit, if any, with the given name.
Definition: Definition.h:516
UnitPtr addUnit(const string &name)
Definition: Definition.h:494
static const string CATEGORY
Definition: Definition.h:303
MX_CORE_API string toValueString(const T &data)
Convert the given data value to a value string.
const string & getValueString() const
Get the value string of a element.
Definition: Definition.h:595
static const string CATEGORY
Definition: Definition.h:543
UnitPtr getUnit(const string &name) const
Return the Unit, if any, with the given name.
Definition: Definition.h:504
static const string TEXTURE_NODE_GROUP
Definition: Definition.h:184
shared_ptr< NodeDef > NodeDefPtr
A shared pointer to a NodeDef.
Definition: Definition.h:32