6#ifndef MATERIALX_DEFINITION_H
7#define MATERIALX_DEFINITION_H
16MATERIALX_NAMESPACE_BEGIN
18extern MX_CORE_API
const string COLOR_SEMANTIC;
19extern MX_CORE_API
const string SHADER_SEMANTIC;
162 bool validate(
string* message =
nullptr)
const override;
180 static const string CATEGORY;
181 static const string NODE_ATTRIBUTE;
182 static const string NODE_GROUP_ATTRIBUTE;
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;
290 bool validate(
string* message =
nullptr)
const override;
303 static const string CATEGORY;
304 static const string FILE_ATTRIBUTE;
305 static const string FUNCTION_ATTRIBUTE;
306 static const string NODE_GRAPH_ATTRIBUTE;
315 Element(parent, CATEGORY, name)
374 return addChild<Member>(name);
380 return getChildOfType<Member>(name);
386 return getChildrenOfType<Member>();
392 removeChildOfType<Member>(name);
398 static const string CATEGORY;
399 static const string SEMANTIC_ATTRIBUTE;
400 static const string CONTEXT_ATTRIBUTE;
421 static const string CATEGORY;
436 static const string CATEGORY;
445 Element(parent, CATEGORY, name)
451 static const string CATEGORY;
460 Element(parent, CATEGORY, name)
498 throw Exception(
"A unit definition name cannot be empty");
500 return addChild<Unit>(name);
506 return getChildOfType<Unit>(name);
512 return getChildrenOfType<Unit>();
518 removeChildOfType<Unit>(name);
524 static const string CATEGORY;
525 static const string UNITTYPE_ATTRIBUTE;
534 Element(parent, CATEGORY, name)
543 static const string CATEGORY;
605 template <
class T>
void setValue(
const T& value,
const string& type = EMPTY_STRING)
607 setType(!type.empty() ? type : getTypeString<T>());
612 void setValue(
const char* value,
const string& type = EMPTY_STRING)
614 setValue(value ?
string(value) : EMPTY_STRING, type);
664 setTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE, value);
671 return getTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE);
677 static const string CATEGORY;
678 static const string ATTRNAME_ATTRIBUTE;
679 static const string VALUE_ATTRIBUTE;
680 static const string ELEMENTS_ATTRIBUTE;
681 static const string EXPORTABLE_ATTRIBUTE;
684MATERIALX_NAMESPACE_END
shared_ptr< TargetDef > TargetDefPtr
A shared pointer to a TargetDef.
Definition: Definition.h:47
shared_ptr< const UnitTypeDef > ConstUnitTypeDefPtr
A shared pointer to a const UnitTypeDef.
Definition: Definition.h:69
shared_ptr< UnitDef > UnitDefPtr
A shared pointer to a UnitDef.
Definition: Definition.h:62
shared_ptr< Unit > UnitPtr
A shared pointer to a Unit.
Definition: Definition.h:57
shared_ptr< const UnitDef > ConstUnitDefPtr
A shared pointer to a const UnitDef.
Definition: Definition.h:64
shared_ptr< Implementation > ImplementationPtr
A shared pointer to an Implementation.
Definition: Definition.h:37
shared_ptr< const Member > ConstMemberPtr
A shared pointer to a const Member.
Definition: Definition.h:54
shared_ptr< const Unit > ConstUnitPtr
A shared pointer to a const Unit.
Definition: Definition.h:59
shared_ptr< TypeDef > TypeDefPtr
A shared pointer to a TypeDef.
Definition: Definition.h:42
shared_ptr< const TargetDef > ConstTargetDefPtr
A shared pointer to a const TargetDef.
Definition: Definition.h:49
shared_ptr< const Implementation > ConstImplementationPtr
A shared pointer to a const Implementation.
Definition: Definition.h:39
shared_ptr< AttributeDef > AttributeDefPtr
A shared pointer to an AttributeDef.
Definition: Definition.h:72
shared_ptr< const NodeDef > ConstNodeDefPtr
A shared pointer to a const NodeDef.
Definition: Definition.h:34
shared_ptr< const TypeDef > ConstTypeDefPtr
A shared pointer to a const TypeDef.
Definition: Definition.h:44
shared_ptr< const AttributeDef > AttributeDefDefPtr
A shared pointer to a const AttributeDef.
Definition: Definition.h:74
shared_ptr< Member > MemberPtr
A shared pointer to a Member.
Definition: Definition.h:52
shared_ptr< NodeDef > NodeDefPtr
A shared pointer to a NodeDef.
Definition: Definition.h:32
shared_ptr< UnitTypeDef > UnitTypeDefPtr
A shared pointer to a UnitTypeDef.
Definition: Definition.h:67
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
Interface element subclasses.
shared_ptr< InterfaceElement > InterfaceElementPtr
A shared pointer to an InterfaceElement.
Definition: Interface.h:41
shared_ptr< const InterfaceElement > ConstInterfaceElementPtr
A shared pointer to a const InterfaceElement.
Definition: Interface.h:43
Import and export declarations for the Core library.
vector< string > StringVec
A vector of strings.
Definition: Library.h:55
std::unordered_map< string, string > StringMap
An unordered map with strings as both keys and values.
Definition: Library.h:57
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
MX_CORE_API string toValueString(const T &data)
Convert the given data value to a value string.
An attribute definition element within a Document.
Definition: Definition.h:549
ValuePtr getValue() const
Return the typed value of an element as a generic value object, which may be queried to access its da...
Definition: Definition.h:628
void setAttrName(const string &name)
Set the element's attrname string.
Definition: Definition.h:561
const string & getValueString() const
Get the value string of a element.
Definition: Definition.h:595
const string & getAttrName() const
Return the element's attrname string.
Definition: Definition.h:573
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
bool getExportable() const
Return the exportable boolean for the element.
Definition: Definition.h:669
bool hasElements() const
Return true if the element has an elements string.
Definition: Definition.h:646
void setExportable(bool value)
Set the exportable boolean for the element.
Definition: Definition.h:662
void setValueString(const string &value)
Set the value string of an element.
Definition: Definition.h:583
bool hasAttrName() const
Return true if this element has an attrname string.
Definition: Definition.h:567
void setValue(const T &value, const string &type=EMPTY_STRING)
Set the typed value of an element.
Definition: Definition.h:605
void setElements(const string &elements)
Set the element's elements string.
Definition: Definition.h:640
const string & getElements() const
Return the element's elements string.
Definition: Definition.h:652
bool hasValueString() const
Return true if the given element has a value string.
Definition: Definition.h:589
bool hasValue() const
Return true if the element possesses a typed value.
Definition: Definition.h:618
The base class for MaterialX elements.
Definition: Element.h:80
const string & getAttribute(const string &attrib) const
Return the value string of the given attribute.
Definition: Element.h:504
void setAttribute(const string &attrib, const string &value)
Set the value string of the given attribute.
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition: Element.h:497
The base class for exceptions that are propagated from the MaterialX library to the client applicatio...
Definition: Exception.h:22
An implementation element within a Document.
Definition: Definition.h:201
const string & getNodeGraph() const
Return the nodegraph string for the Implementation.
Definition: Definition.h:269
bool hasFile() const
Return true if the given Implementation has a file string.
Definition: Definition.h:219
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
bool hasFunction() const
Return true if the given Implementation has a function string.
Definition: Definition.h:241
const string & getFunction() const
Return the function string for the Implementation.
Definition: Definition.h:247
void setFunction(const string &function)
Set the function string for the Implementation.
Definition: Definition.h:235
NodeDefPtr getNodeDef() const
Return the NodeDef element referenced by the Implementation.
bool hasNodeGraph() const
Return true if the given Implementation has a nodegraph string.
Definition: Definition.h:263
void setNodeGraph(const string &nodegraph)
Set the nodegraph string for the Implementation.
Definition: Definition.h:257
void setNodeDef(ConstNodeDefPtr nodeDef)
Set the NodeDef element referenced by the Implementation.
const string & getFile() const
Return the file string for the Implementation.
Definition: Definition.h:225
void setFile(const string &file)
Set the file string for the Implementation.
Definition: Definition.h:213
ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const override
Return the first declaration of this interface, optionally filtered by the given target name.
The base class for interface elements such as Node, NodeDef, and NodeGraph.
Definition: Interface.h:312
A member element within a TypeDef.
Definition: Definition.h:427
A node definition element within a Document.
Definition: Definition.h:82
bool isVersionCompatible(const string &version) const
Return true if the given version string is compatible with this NodeDef.
void setNodeString(const string &node)
Set the node string of the NodeDef.
Definition: Definition.h:94
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
InterfaceElementPtr getImplementation(const string &target=EMPTY_STRING) const
Return the first implementation for this nodedef, optionally filtered by the given target name.
StringMap getInputHints() const
Return list of input hint pairs of the form { input_name, hint_string }.
const string & getType() const override
Return the element's output type.
const string & getNodeGroup() const
Return the node group of the NodeDef.
Definition: Definition.h:131
bool hasNodeGroup() const
Return true if the given NodeDef has a node group.
Definition: Definition.h:125
const string & getNodeString() const
Return the node string of the NodeDef.
Definition: Definition.h:106
bool hasNodeString() const
Return true if the given NodeDef has a node string.
Definition: Definition.h:100
ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const override
Return the first declaration of this interface, optionally filtered by the given target name.
void setNodeGroup(const string &category)
Set the node group of the NodeDef.
Definition: Definition.h:119
A definition of an implementation target.
Definition: Definition.h:406
StringVec getMatchingTargets() const
Return a vector of target names that is matching this targetdef either by itself of by its inheritanc...
A type definition element within a Document.
Definition: Definition.h:312
MemberPtr getMember(const string &name) const
Return the Member, if any, with the given name.
Definition: Definition.h:378
MemberPtr addMember(const string &name=EMPTY_STRING)
Add a Member to the TypeDef.
Definition: Definition.h:372
bool hasSemantic() const
Return true if the given TypeDef has a semantic string.
Definition: Definition.h:330
vector< MemberPtr > getMembers() const
Return a vector of all Member elements in the TypeDef.
Definition: Definition.h:384
bool hasContext() const
Return true if the given TypeDef has a context string.
Definition: Definition.h:352
void setContext(const string &context)
Set the context string of the TypeDef.
Definition: Definition.h:346
void setSemantic(const string &semantic)
Set the semantic string of the TypeDef.
Definition: Definition.h:324
void removeMember(const string &name)
Remove the Member, if any, with the given name.
Definition: Definition.h:390
const string & getContext() const
Return the context string of the TypeDef.
Definition: Definition.h:358
const string & getSemantic() const
Return the semantic string of the TypeDef.
Definition: Definition.h:336
The base class for typed elements.
Definition: Element.h:854
virtual const string & getType() const
Return the element's type string.
Definition: Element.h:884
void setType(const string &type)
Set the element's type string.
Definition: Element.h:872
A unit definition element within a Document.
Definition: Definition.h:457
void removeUnit(const string &name)
Remove the Unit, if any, with the given name.
Definition: Definition.h:516
void setUnitType(const string &type)
Set the element's unittype string.
Definition: Definition.h:469
UnitPtr getUnit(const string &name) const
Return the Unit, if any, with the given name.
Definition: Definition.h:504
bool hasUnitType() const
Return true if the given element has a unittype string.
Definition: Definition.h:475
UnitPtr addUnit(const string &name)
Add a Unit to the UnitDef.
Definition: Definition.h:494
vector< UnitPtr > getUnits() const
Return a vector of all Unit elements in the UnitDef.
Definition: Definition.h:510
const string & getUnitType() const
Return the element's type string.
Definition: Definition.h:481
A unit declaration within a UnitDef.
Definition: Definition.h:442
A unit type definition element within a Document.
Definition: Definition.h:531
vector< UnitDefPtr > getUnitDefs() const
Find all UnitDefs for the UnitTypeDef.
static ValuePtr createValueFromStrings(const string &value, const string &type)
Create a new value instance from value and type strings.