6#ifndef MATERIALX_NODE_H
7#define MATERIALX_NODE_H
16MATERIALX_NAMESPACE_BEGIN
45using NodePredicate = std::function<bool(
NodePtr node)>;
67 void setConnectedNode(
const string& inputName,
ConstNodePtr node);
71 NodePtr getConnectedNode(
const string& inputName)
const;
75 void setConnectedNodeName(
const string& inputName,
const string& nodeName);
79 string getConnectedNodeName(
const string& inputName)
const;
103 NodeDefPtr getNodeDef(
const string& target = EMPTY_STRING,
104 bool allowRoughMatch =
false)
const;
119 NodeDefPtr nodeDef = getNodeDef(target);
146 vector<PortElementPtr> getDownstreamPorts()
const;
156 return getNodeDef(target);
161 InputPtr addInputFromNodeDef(
const string& inputName);
164 void addInputsFromNodeDef();
172 bool validate(
string* message =
nullptr)
const override;
177 static const string CATEGORY;
204 const string& name = EMPTY_STRING,
205 const string& type = DEFAULT_TYPE_STRING)
207 NodePtr node = addChild<Node>(name);
208 node->setCategory(category);
216 NodePtr node = addNode(nodeDef->getNodeString(), name, nodeDef->getType());
217 node->setNodeDefString(nodeDef->getName());
224 return getChildOfType<Node>(name);
229 vector<NodePtr>
getNodes(
const string& category = EMPTY_STRING)
const
231 return getChildrenOfType<Node>(category);
237 vector<NodePtr> nodes;
238 for (
auto node : getNodes())
240 if (node->getType() == nodeType)
242 nodes.push_back(node);
251 removeChildOfType<Node>(name);
260 NodePtr addMaterialNode(
const string& name = EMPTY_STRING,
ConstNodePtr shaderNode =
nullptr);
265 return getNodesOfType(MATERIAL_TYPE_STRING);
275 return addChild<Backdrop>(name);
281 return getChildOfType<Backdrop>(name);
287 return getChildrenOfType<Backdrop>();
293 removeChildOfType<Backdrop>(name);
307 void flattenSubgraphs(
const string& target = EMPTY_STRING, NodePredicate filter =
nullptr);
311 vector<ElementPtr> topologicalSort()
const;
323 string asStringDot()
const;
343 vector<OutputPtr> getMaterialOutputs()
const;
350 void setNodeDef(ConstNodeDefPtr nodeDef);
353 NodeDefPtr getNodeDef()
const;
366 vector<PortElementPtr> getDownstreamPorts()
const;
379 void addInterfaceName(
const string& inputPath,
const string& interfaceName);
383 void removeInterfaceName(
const string& inputPath);
388 void modifyInterfaceName(
const string& inputPath,
const string& interfaceName);
396 bool validate(
string* message =
nullptr)
const override;
401 static const string CATEGORY;
410 Element(parent, CATEGORY, name)
443 setTypedAttribute<float>(WIDTH_ATTRIBUTE, width);
455 return getTypedAttribute<float>(WIDTH_ATTRIBUTE);
465 setTypedAttribute<float>(HEIGHT_ATTRIBUTE, height);
477 return getTypedAttribute<float>(HEIGHT_ATTRIBUTE);
485 void setContainsElements(
const vector<ConstTypedElementPtr>& nodes);
488 vector<TypedElementPtr> getContainsElements()
const;
496 bool validate(
string* message =
nullptr)
const override;
501 static const string CATEGORY;
502 static const string CONTAINS_ATTRIBUTE;
503 static const string WIDTH_ATTRIBUTE;
504 static const string HEIGHT_ATTRIBUTE;
507MATERIALX_NAMESPACE_END
Definition element subclasses.
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
shared_ptr< const GeomPropDef > ConstGeomPropDefPtr
A shared pointer to a const GeomPropDef.
Definition: Geom.h:50
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
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< const NodeGraph > ConstNodeGraphPtr
A shared pointer to a const NodeGraph.
Definition: Node.h:36
shared_ptr< NodeGraph > NodeGraphPtr
A shared pointer to a NodeGraph.
Definition: Node.h:34
shared_ptr< Backdrop > BackdropPtr
A shared pointer to a Backdrop.
Definition: Node.h:39
shared_ptr< GraphElement > GraphElementPtr
A shared pointer to a GraphElement.
Definition: Node.h:29
shared_ptr< const Backdrop > ConstBackdropPtr
A shared pointer to a const Backdrop.
Definition: Node.h:41
shared_ptr< const Node > ConstNodePtr
A shared pointer to a const Node.
Definition: Node.h:26
shared_ptr< Node > NodePtr
A shared pointer to a Node.
Definition: Node.h:24
shared_ptr< const GraphElement > ConstGraphElementPtr
A shared pointer to a const GraphElement.
Definition: Node.h:31
A layout element used to contain, group and document nodes within a graph.
Definition: Node.h:407
void setContainsString(const string &contains)
Set the contains string for this backdrop.
Definition: Node.h:419
void setHeight(float height)
Set the height attribute of the backdrop.
Definition: Node.h:463
void setWidth(float width)
Set the width attribute of the backdrop.
Definition: Node.h:441
bool hasHeight() const
Return true if this backdrop has a height attribute.
Definition: Node.h:469
float getWidth() const
Return the width attribute of the backdrop.
Definition: Node.h:453
string getContainsString() const
Return the contains string for this backdrop.
Definition: Node.h:431
float getHeight() const
Return the height attribute of the backdrop.
Definition: Node.h:475
bool hasContainsString() const
Return true if this backdrop has a contains string.
Definition: Node.h:425
bool hasWidth() const
Return true if this backdrop has a width attribute.
Definition: Node.h:447
An edge between two connected Elements, returned during graph traversal.
Definition: Traversal.h:30
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
virtual Edge getUpstreamEdge(size_t index=0) const
Return the Edge with the given index that lies directly upstream from this element in the dataflow gr...
Definition: Element.cpp:345
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 graph elements such as NodeGraph and Document.
Definition: Node.h:183
vector< NodePtr > getNodes(const string &category=EMPTY_STRING) const
Return a vector of all Nodes in the graph, optionally filtered by the given category string.
Definition: Node.h:229
vector< BackdropPtr > getBackdrops() const
Return a vector of all Backdrop elements in the graph.
Definition: Node.h:285
BackdropPtr addBackdrop(const string &name=EMPTY_STRING)
Add a Backdrop to the graph.
Definition: Node.h:273
NodePtr addNodeInstance(ConstNodeDefPtr nodeDef, const string &name=EMPTY_STRING)
Add a Node that is an instance of the given NodeDef.
Definition: Node.h:214
vector< NodePtr > getMaterialNodes() const
Return a vector of all material nodes.
Definition: Node.h:263
NodePtr addNode(const string &category, const string &name=EMPTY_STRING, const string &type=DEFAULT_TYPE_STRING)
Add a Node to the graph.
Definition: Node.h:203
NodePtr getNode(const string &name) const
Return the Node, if any, with the given name.
Definition: Node.h:222
BackdropPtr getBackdrop(const string &name) const
Return the Backdrop, if any, with the given name.
Definition: Node.h:279
void removeNode(const string &name)
Remove the Node, if any, with the given name.
Definition: Node.h:249
void removeBackdrop(const string &name)
Remove the Backdrop, if any, with the given name.
Definition: Node.h:291
vector< NodePtr > getNodesOfType(const string &nodeType) const
Return a vector of nodes in the graph which have a given type.
Definition: Node.h:235
The base class for interface elements such as Node, NodeDef, and NodeGraph.
Definition: Interface.h:318
size_t getInputCount() const
Return the number of Input elements.
Definition: Interface.h:387
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
OutputPtr getConnectedOutput(const string &inputName) const
Return the output connected to the given input.
Definition: Interface.cpp:465
void setConnectedOutput(const string &inputName, OutputPtr output)
Set the output to which the given input is connected, creating a child input if needed.
Definition: Interface.cpp:451
A node graph element within a Document.
Definition: Node.h:331
A node element within a NodeGraph or Document.
Definition: Node.h:53
InterfaceElementPtr getImplementation(const string &target=EMPTY_STRING) const
Return the first implementation for this node, optionally filtered by the given target and language n...
Definition: Node.h:117
size_t getUpstreamEdgeCount() const override
Return the number of queriable upstream edges for this element.
Definition: Node.h:132
ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const override
Return the first declaration of this interface, optionally filtered by the given target name.
Definition: Node.h:154