6#ifndef MATERIALX_INTERFACE_H
7#define MATERIALX_INTERFACE_H
16MATERIALX_NAMESPACE_BEGIN
45using CharSet = std::set<char>;
63 using NodePtr = shared_ptr<Node>;
64 using ConstNodePtr = shared_ptr<const Node>;
158 bool validate(
string* message =
nullptr)
const override;
163 static const string NODE_NAME_ATTRIBUTE;
164 static const string NODE_GRAPH_ATTRIBUTE;
165 static const string OUTPUT_ATTRIBUTE;
228 bool validate(
string* message =
nullptr)
const override;
233 static const string CATEGORY;
234 static const string DEFAULT_GEOM_PROP_ATTRIBUTE;
271 bool validate(
string* message =
nullptr)
const override;
276 static const string CATEGORY;
277 static const string DEFAULT_INPUT_ATTRIBUTE;
299 using NodeDefPtr = shared_ptr<NodeDef>;
300 using ConstNodeDefPtr = shared_ptr<const NodeDef>;
335 const string& type = DEFAULT_TYPE_STRING)
337 InputPtr child = addChild<Input>(name);
338 child->setType(type);
345 return getChildOfType<Input>(name);
351 return getChildrenOfType<Input>();
363 removeChildOfType<Input>(name);
385 const string& type = DEFAULT_TYPE_STRING)
387 OutputPtr output = addChild<Output>(name);
388 output->setType(type);
395 return getChildOfType<Output>(name);
401 return getChildrenOfType<Output>();
413 removeChildOfType<Output>(name);
444 return addChild<Token>(name);
450 return getChildOfType<Token>(name);
456 return getChildrenOfType<Token>();
462 removeChildOfType<Token>(name);
480 return getChildOfType<ValueElement>(name);
499 template <
class T>
InputPtr setInputValue(
const string& name,
501 const string& type = EMPTY_STRING);
519 token = addToken(name);
520 token->setValue<
string>(value);
529 return token ? token->getValueString() : EMPTY_STRING;
589 setTypedAttribute<bool>(DEFAULT_VERSION_ATTRIBUTE, defaultVersion);
595 return getTypedAttribute<bool>(DEFAULT_VERSION_ATTRIBUTE);
624 static const string NODE_DEF_ATTRIBUTE;
625 static const string TARGET_ATTRIBUTE;
626 static const string VERSION_ATTRIBUTE;
627 static const string DEFAULT_VERSION_ATTRIBUTE;
630 void registerChildElement(
ElementPtr child)
override;
631 void unregisterChildElement(
ElementPtr child)
override;
642 InputPtr input = getChildOfType<Input>(name);
645 input->setValue(value, type);
649MATERIALX_NAMESPACE_END
shared_ptr< Token > TokenPtr
A shared pointer to a Token.
Definition: Element.h:46
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
shared_ptr< ValueElement > ValueElementPtr
A shared pointer to a ValueElement.
Definition: Element.h:41
Geometric element subclasses.
shared_ptr< GeomPropDef > GeomPropDefPtr
A shared pointer to a GeomPropDef.
Definition: Geom.h:48
shared_ptr< const PortElement > ConstPortElementPtr
A shared pointer to a const PortElement.
Definition: Interface.h:28
shared_ptr< const Output > ConstOutputPtr
A shared pointer to a const Output.
Definition: Interface.h:38
shared_ptr< InterfaceElement > InterfaceElementPtr
A shared pointer to an InterfaceElement.
Definition: Interface.h:41
shared_ptr< PortElement > PortElementPtr
A shared pointer to a PortElement.
Definition: Interface.h:26
shared_ptr< const InterfaceElement > ConstInterfaceElementPtr
A shared pointer to a const InterfaceElement.
Definition: Interface.h:43
shared_ptr< const Input > ConstInputPtr
A shared pointer to a const Input.
Definition: Interface.h:33
shared_ptr< Input > InputPtr
A shared pointer to an Input.
Definition: Interface.h:31
shared_ptr< Output > OutputPtr
A shared pointer to an Output.
Definition: Interface.h:36
Import and export declarations for the Core library.
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
An edge between two connected Elements, returned during graph traversal.
Definition: Traversal.h:30
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 interface elements such as Node, NodeDef, and NodeGraph.
Definition: Interface.h:286
OutputPtr addOutput(const string &name=EMPTY_STRING, const string &type=DEFAULT_TYPE_STRING)
Add an Output to this interface.
Definition: Interface.h:384
ValuePtr getInputValue(const string &name, const string &target=EMPTY_STRING) const
Return the typed value of an input by its name, taking both the calling element and its declaration i...
OutputPtr getOutput(const string &name) const
Return the Output, if any, with the given name.
Definition: Interface.h:393
bool hasNodeDefString() const
Return true if the given interface has a NodeDef string.
Definition: Interface.h:313
TokenPtr getToken(const string &name) const
Return the Token, if any, with the given name.
Definition: Interface.h:448
vector< InputPtr > getInputs() const
Return a vector of all Input elements.
Definition: Interface.h:349
InputPtr addInput(const string &name=EMPTY_STRING, const string &type=DEFAULT_TYPE_STRING)
Add an Input to this interface.
Definition: Interface.h:334
size_t getInputCount() const
Return the number of Input elements.
Definition: Interface.h:355
void removeInput(const string &name)
Remove the Input, if any, with the given name.
Definition: Interface.h:361
void setVersionString(const string &version)
Set the version string of this interface.
Definition: Interface.h:559
virtual std::pair< int, int > getVersionIntegers() const
Return the major and minor versions as an integer pair.
vector< TokenPtr > getTokens() const
Return a vector of all Token elements.
Definition: Interface.h:454
vector< ValueElementPtr > getActiveValueElements() const
Return a vector of all value elements that belong to this interface, taking inheritance into account.
InputPtr getInput(const string &name) const
Return the Input, if any, with the given name.
Definition: Interface.h:343
const string & getVersionString() const
Return the version string of this interface.
Definition: Interface.h:571
vector< OutputPtr > getActiveOutputs() const
Return a vector of all Output elements that belong to this interface, taking inheritance into account...
void setVersionIntegers(int majorVersion, int minorVersion)
Set the major and minor versions as an integer pair.
ValueElementPtr getValueElement(const string &name) const
Return the ValueElement, if any, with the given name.
Definition: Interface.h:478
void clearContent() override
Clear all attributes and descendants from this element.
TokenPtr getActiveToken(const string &name) const
Return the first Token with the given name that belongs to this interface, taking interface inheritan...
OutputPtr getConnectedOutput(const string &inputName) const
Return the output connected to the given input.
TokenPtr setTokenValue(const string &name, const string &value)
Set the string value of a Token by its name, creating a child element to hold the Token if needed.
Definition: Interface.h:515
OutputPtr getActiveOutput(const string &name) const
Return the first Output with the given name that belongs to this interface, taking interface inherita...
InputPtr setInputValue(const string &name, const T &value, const string &type=EMPTY_STRING)
Set the typed value of an input by its name, creating a child element to hold the input if needed.
Definition: Interface.h:638
TokenPtr addToken(const string &name=EMPTY_STRING)
Add a Token to this interface.
Definition: Interface.h:442
void setNodeDefString(const string &nodeDef)
Set the NodeDef string for the interface.
Definition: Interface.h:307
ValueElementPtr getActiveValueElement(const string &name) const
Return the first value element with the given name that belongs to this interface,...
vector< InputPtr > getActiveInputs() const
Return a vector of all Input elements that belong to this interface, taking inheritance into account.
bool hasExactInputMatch(ConstInterfaceElementPtr declaration, string *message=nullptr) const
Return true if this instance has an exact input match with the given declaration, where each input of...
vector< OutputPtr > getOutputs() const
Return a vector of all Output elements.
Definition: Interface.h:399
string getTokenValue(const string &name)
Return the string value of a Token by its name, or an empty string if the given Token is not present.
Definition: Interface.h:526
virtual ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const
Return the first declaration of this interface, optionally filtered by the given target name.
void setConnectedOutput(const string &inputName, OutputPtr output)
Set the output to which the given input is connected, creating a child input if needed.
bool hasVersionString() const
Return true if this interface has a version string.
Definition: Interface.h:565
bool getDefaultVersion() const
Return the default version flag of this element.
Definition: Interface.h:593
const string & getNodeDefString() const
Return the NodeDef string for the interface.
Definition: Interface.h:319
void removeToken(const string &name)
Remove the Token, if any, with the given name.
Definition: Interface.h:460
void removeOutput(const string &name)
Remove the Output, if any, with the given name.
Definition: Interface.h:411
void setTarget(const string &target)
Set the target string of this interface.
Definition: Interface.h:537
InputPtr getActiveInput(const string &name) const
Return the first Input with the given name that belongs to this interface, taking interface inheritan...
void setDefaultVersion(bool defaultVersion)
Set the default version flag of this element.
Definition: Interface.h:587
bool hasTarget() const
Return true if the given interface has a target string.
Definition: Interface.h:543
size_t getOutputCount() const
Return the number of Output elements.
Definition: Interface.h:405
const string & getTarget() const
Return the target string of this interface.
Definition: Interface.h:549
vector< TokenPtr > getActiveTokens() const
Return a vector of all Token elements that belong to this interface, taking inheritance into account.
A node definition element within a Document.
Definition: Definition.h:82
A node element within a NodeGraph or Document.
Definition: Node.h:53
A spatially-varying output element within a NodeGraph or NodeDef.
Definition: Interface.h:240
Edge getUpstreamEdge(size_t index=0) const override
Return the Edge with the given index that lies directly upstream from this element in the dataflow gr...
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
size_t getUpstreamEdgeCount() const override
Return the number of queriable upstream edges for this element.
Definition: Interface.h:257
bool hasUpstreamCycle() const
Return true if a cycle exists in any upstream path from this element.
The base class for port elements such as Input and Output.
Definition: Interface.h:52
bool hasOutputString() const
Return true if this element has an output string.
Definition: Interface.h:122
const string & getNodeGraphString() const
Return the node graph string of this element.
Definition: Interface.h:106
const string & getOutputString() const
Return the output string of this element.
Definition: Interface.h:135
virtual OutputPtr getConnectedOutput() const
Return the output, if any, to which this input is connected.
virtual NodePtr getConnectedNode() const
Return the node, if any, to which this element is connected.
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
void setNodeGraphString(const string &node)
Set the node graph string of this element.
Definition: Interface.h:94
bool hasNodeGraphString() const
Return true if this element has a node graph string.
Definition: Interface.h:100
void setConnectedOutput(ConstOutputPtr output)
Set the output to which this input is connected.
void setNodeName(const string &node)
Set the node name string of this element, creating a connection to the Node with the given name withi...
Definition: Interface.h:72
void setConnectedNode(ConstNodePtr node)
Set the node to which this element is connected.
void setOutputString(const string &output)
Set the output string of this element.
Definition: Interface.h:116
const string & getNodeName() const
Return the node name string of this element.
Definition: Interface.h:84
bool hasNodeName() const
Return true if this element has a node name string.
Definition: Interface.h:78
The base class for typed elements.
Definition: Element.h:854
The base class for elements that support typed values.
Definition: Element.h:918