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;
112 const string&
getType()
const override;
155 bool validate(
string* message =
nullptr)
const override;
164 bool isVersionCompatible(
const string& version)
const;
173 static const string CATEGORY;
174 static const string NODE_ATTRIBUTE;
175 static const string NODE_GROUP_ATTRIBUTE;
177 static const string TEXTURE_NODE_GROUP;
178 static const string PROCEDURAL_NODE_GROUP;
179 static const string GEOMETRIC_NODE_GROUP;
180 static const string ADJUSTMENT_NODE_GROUP;
181 static const string CONDITIONAL_NODE_GROUP;
182 static const string ORGANIZATION_NODE_GROUP;
183 static const string TRANSLATION_NODE_GROUP;
282 bool validate(
string* message =
nullptr)
const override;
295 static const string CATEGORY;
296 static const string FILE_ATTRIBUTE;
297 static const string FUNCTION_ATTRIBUTE;
298 static const string NODE_GRAPH_ATTRIBUTE;
307 Element(parent, CATEGORY, name)
366 return addChild<Member>(name);
372 return getChildOfType<Member>(name);
378 return getChildrenOfType<Member>();
384 removeChildOfType<Member>(name);
390 static const string CATEGORY;
391 static const string SEMANTIC_ATTRIBUTE;
392 static const string CONTEXT_ATTRIBUTE;
413 static const string CATEGORY;
428 static const string CATEGORY;
437 Element(parent, CATEGORY, name)
443 static const string CATEGORY;
452 Element(parent, CATEGORY, name)
490 throw Exception(
"A unit definition name cannot be empty");
492 return addChild<Unit>(name);
498 return getChildOfType<Unit>(name);
504 return getChildrenOfType<Unit>();
510 removeChildOfType<Unit>(name);
516 static const string CATEGORY;
517 static const string UNITTYPE_ATTRIBUTE;
526 Element(parent, CATEGORY, name)
532 vector<UnitDefPtr> getUnitDefs()
const;
535 static const string CATEGORY;
597 template <
class T>
void setValue(
const T& value,
const string& type = EMPTY_STRING)
599 setType(!type.empty() ? type : getTypeString<T>());
600 setValueString(toValueString(value));
604 void setValue(
const char* value,
const string& type = EMPTY_STRING)
606 setValue(value ?
string(value) : EMPTY_STRING, type);
656 setTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE, value);
663 return getTypedAttribute<bool>(EXPORTABLE_ATTRIBUTE);
669 static const string CATEGORY;
670 static const string ATTRNAME_ATTRIBUTE;
671 static const string VALUE_ATTRIBUTE;
672 static const string ELEMENTS_ATTRIBUTE;
673 static const string EXPORTABLE_ATTRIBUTE;
676MATERIALX_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:57
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
An attribute definition element within a Document.
Definition: Definition.h:541
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:620
void setAttrName(const string &name)
Set the element's attrname string.
Definition: Definition.h:553
const string & getValueString() const
Get the value string of a element.
Definition: Definition.h:587
const string & getAttrName() const
Return the element's attrname string.
Definition: Definition.h:565
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:604
bool getExportable() const
Return the exportable boolean for the element.
Definition: Definition.h:661
bool hasElements() const
Return true if the element has an elements string.
Definition: Definition.h:638
void setExportable(bool value)
Set the exportable boolean for the element.
Definition: Definition.h:654
void setValueString(const string &value)
Set the value string of an element.
Definition: Definition.h:575
bool hasAttrName() const
Return true if this element has an attrname string.
Definition: Definition.h:559
void setValue(const T &value, const string &type=EMPTY_STRING)
Set the typed value of an element.
Definition: Definition.h:597
void setElements(const string &elements)
Set the element's elements string.
Definition: Definition.h:632
const string & getElements() const
Return the element's elements string.
Definition: Definition.h:644
bool hasValueString() const
Return true if the given element has a value string.
Definition: Definition.h:581
bool hasValue() const
Return true if the element possesses a typed value.
Definition: Definition.h:610
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.
Definition: Element.cpp:191
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition: Element.h:497
virtual bool validate(string *message=nullptr) const
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
Definition: Element.cpp:396
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:193
const string & getNodeGraph() const
Return the nodegraph string for the Implementation.
Definition: Definition.h:261
bool hasFile() const
Return true if the given Implementation has a file string.
Definition: Definition.h:211
bool hasFunction() const
Return true if the given Implementation has a function string.
Definition: Definition.h:233
const string & getFunction() const
Return the function string for the Implementation.
Definition: Definition.h:239
void setFunction(const string &function)
Set the function string for the Implementation.
Definition: Definition.h:227
bool hasNodeGraph() const
Return true if the given Implementation has a nodegraph string.
Definition: Definition.h:255
void setNodeGraph(const string &nodegraph)
Set the nodegraph string for the Implementation.
Definition: Definition.h:249
const string & getFile() const
Return the file string for the Implementation.
Definition: Definition.h:217
void setFile(const string &file)
Set the file string for the Implementation.
Definition: Definition.h:205
The base class for interface elements such as Node, NodeDef, and NodeGraph.
Definition: Interface.h:318
virtual ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const
Return the first declaration of this interface, optionally filtered by the given target name.
Definition: Interface.cpp:609
A member element within a TypeDef.
Definition: Definition.h:419
A node definition element within a Document.
Definition: Definition.h:82
void setNodeString(const string &node)
Set the node string of the NodeDef.
Definition: Definition.h:94
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
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:398
A type definition element within a Document.
Definition: Definition.h:304
MemberPtr getMember(const string &name) const
Return the Member, if any, with the given name.
Definition: Definition.h:370
MemberPtr addMember(const string &name=EMPTY_STRING)
Add a Member to the TypeDef.
Definition: Definition.h:364
bool hasSemantic() const
Return true if the given TypeDef has a semantic string.
Definition: Definition.h:322
vector< MemberPtr > getMembers() const
Return a vector of all Member elements in the TypeDef.
Definition: Definition.h:376
bool hasContext() const
Return true if the given TypeDef has a context string.
Definition: Definition.h:344
void setContext(const string &context)
Set the context string of the TypeDef.
Definition: Definition.h:338
void setSemantic(const string &semantic)
Set the semantic string of the TypeDef.
Definition: Definition.h:316
void removeMember(const string &name)
Remove the Member, if any, with the given name.
Definition: Definition.h:382
const string & getContext() const
Return the context string of the TypeDef.
Definition: Definition.h:350
const string & getSemantic() const
Return the semantic string of the TypeDef.
Definition: Definition.h:328
The base class for typed elements.
Definition: Element.h:837
virtual const string & getType() const
Return the element's type string.
Definition: Element.h:867
void setType(const string &type)
Set the element's type string.
Definition: Element.h:855
A unit definition element within a Document.
Definition: Definition.h:449
void removeUnit(const string &name)
Remove the Unit, if any, with the given name.
Definition: Definition.h:508
void setUnitType(const string &type)
Set the element's unittype string.
Definition: Definition.h:461
UnitPtr getUnit(const string &name) const
Return the Unit, if any, with the given name.
Definition: Definition.h:496
bool hasUnitType() const
Return true if the given element has a unittype string.
Definition: Definition.h:467
UnitPtr addUnit(const string &name)
Add a Unit to the UnitDef.
Definition: Definition.h:486
vector< UnitPtr > getUnits() const
Return a vector of all Unit elements in the UnitDef.
Definition: Definition.h:502
const string & getUnitType() const
Return the element's type string.
Definition: Definition.h:473
A unit declaration within a UnitDef.
Definition: Definition.h:434
A unit type definition element within a Document.
Definition: Definition.h:523
static ValuePtr createValueFromStrings(const string &value, const string &type)
Create a new value instance from value and type strings.
Definition: Value.cpp:216