6#ifndef MATERIALX_NODE_H
7#define MATERIALX_NODE_H
16MATERIALX_NAMESPACE_BEGIN
45using NodePredicate = std::function<bool(
NodePtr node)>;
94 NodeDefPtr
getNodeDef(
const string& target = EMPTY_STRING,
95 bool allowRoughMatch =
false)
const;
110 NodeDefPtr nodeDef = getNodeDef(target);
147 return getNodeDef(target);
163 bool validate(
string* message =
nullptr)
const override;
168 static const string CATEGORY;
195 const string& name = EMPTY_STRING,
196 const string& type = DEFAULT_TYPE_STRING)
198 NodePtr node = addChild<Node>(name);
199 node->setCategory(category);
207 NodePtr node = addNode(nodeDef->getNodeString(), name, nodeDef->getType());
208 node->setNodeDefString(nodeDef->getName());
215 return getChildOfType<Node>(name);
220 vector<NodePtr>
getNodes(
const string& category = EMPTY_STRING)
const
222 return getChildrenOfType<Node>(category);
228 vector<NodePtr> nodes;
229 for (
auto node : getNodes())
231 if (node->getType() == nodeType)
233 nodes.push_back(node);
242 removeChildOfType<Node>(name);
256 return getNodesOfType(MATERIAL_TYPE_STRING);
266 return addChild<Backdrop>(name);
272 return getChildOfType<Backdrop>(name);
278 return getChildrenOfType<Backdrop>();
284 removeChildOfType<Backdrop>(name);
298 void flattenSubgraphs(
const string& target = EMPTY_STRING, NodePredicate filter =
nullptr);
388 bool validate(
string* message =
nullptr)
const override;
393 static const string CATEGORY;
402 Element(parent, CATEGORY, name)
435 setTypedAttribute<float>(WIDTH_ATTRIBUTE, width);
447 return getTypedAttribute<float>(WIDTH_ATTRIBUTE);
457 setTypedAttribute<float>(HEIGHT_ATTRIBUTE, height);
469 return getTypedAttribute<float>(HEIGHT_ATTRIBUTE);
488 bool validate(
string* message =
nullptr)
const override;
493 static const string CATEGORY;
494 static const string CONTAINS_ATTRIBUTE;
495 static const string WIDTH_ATTRIBUTE;
496 static const string HEIGHT_ATTRIBUTE;
499MATERIALX_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:399
void setContainsString(const string &contains)
Set the contains string for this backdrop.
Definition: Node.h:411
void setHeight(float height)
Set the height attribute of the backdrop.
Definition: Node.h:455
void setWidth(float width)
Set the width attribute of the backdrop.
Definition: Node.h:433
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
bool hasHeight() const
Return true if this backdrop has a height attribute.
Definition: Node.h:461
float getWidth() const
Return the width attribute of the backdrop.
Definition: Node.h:445
string getContainsString() const
Return the contains string for this backdrop.
Definition: Node.h:423
vector< TypedElementPtr > getContainsElements() const
Return the vector of elements that this backdrop contains.
float getHeight() const
Return the height attribute of the backdrop.
Definition: Node.h:467
void setContainsElements(const vector< ConstTypedElementPtr > &nodes)
Set the vector of elements that this backdrop contains.
bool hasContainsString() const
Return true if this backdrop has a contains string.
Definition: Node.h:417
bool hasWidth() const
Return true if this backdrop has a width attribute.
Definition: Node.h:439
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.
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition: Element.h:497
The base class for graph elements such as NodeGraph and Document.
Definition: Node.h:174
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:220
vector< BackdropPtr > getBackdrops() const
Return a vector of all Backdrop elements in the graph.
Definition: Node.h:276
BackdropPtr addBackdrop(const string &name=EMPTY_STRING)
Add a Backdrop to the graph.
Definition: Node.h:264
void flattenSubgraphs(const string &target=EMPTY_STRING, NodePredicate filter=nullptr)
Flatten all subgraphs at the root scope of this graph element, recursively replacing each graph-defin...
NodePtr addNodeInstance(ConstNodeDefPtr nodeDef, const string &name=EMPTY_STRING)
Add a Node that is an instance of the given NodeDef.
Definition: Node.h:205
string asStringDot() const
Convert this graph to a string in the DOT language syntax.
NodePtr addMaterialNode(const string &name=EMPTY_STRING, ConstNodePtr shaderNode=nullptr)
Add a material node to the graph, optionally connecting it to the given shader node.
vector< NodePtr > getMaterialNodes() const
Return a vector of all material nodes.
Definition: Node.h:254
vector< ElementPtr > topologicalSort() const
Return a vector of all children (nodes and outputs) sorted in topological order.
NodePtr addGeomNode(ConstGeomPropDefPtr geomPropDef, const string &namePrefix)
If not yet present, add a geometry node to this graph matching the given property definition and name...
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:194
NodePtr getNode(const string &name) const
Return the Node, if any, with the given name.
Definition: Node.h:213
BackdropPtr getBackdrop(const string &name) const
Return the Backdrop, if any, with the given name.
Definition: Node.h:270
void removeNode(const string &name)
Remove the Node, if any, with the given name.
Definition: Node.h:240
void removeBackdrop(const string &name)
Remove the Backdrop, if any, with the given name.
Definition: Node.h:282
vector< NodePtr > getNodesOfType(const string &nodeType) const
Return a vector of nodes in the graph which have a given type.
Definition: Node.h:226
The base class for interface elements such as Node, NodeDef, and NodeGraph.
Definition: Interface.h:312
size_t getInputCount() const
Return the number of Input elements.
Definition: Interface.h:381
A node graph element within a Document.
Definition: Node.h:322
vector< PortElementPtr > getDownstreamPorts() const
Return a vector of all downstream ports that connect to this graph, ordered by the names of the port ...
void removeInterfaceName(const string &inputPath)
Remove an interface name from an existing NodeDef associated with this NodeGraph.
InputPtr addInterfaceName(const string &inputPath, const string &interfaceName)
Add an interface name to an existing NodeDef associated with this NodeGraph.
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
vector< OutputPtr > getMaterialOutputs() const
Return all material-type outputs of the nodegraph.
void modifyInterfaceName(const string &inputPath, const string &interfaceName)
Modify the interface name on an existing NodeDef associated with this NodeGraph.
InterfaceElementPtr getImplementation() const
Return the first implementation for this node graph.
NodeDefPtr getNodeDef() const
Return the NodeDef element referenced by this NodeGraph.
void setNodeDef(ConstNodeDefPtr nodeDef)
Set the NodeDef element referenced by this NodeGraph.
ConstInterfaceElementPtr getDeclaration(const string &target=EMPTY_STRING) const override
Return the first declaration of this interface, optionally filtered by the given target name.
A node element within a NodeGraph or Document.
Definition: Node.h:53
vector< PortElementPtr > getDownstreamPorts() const
Return a vector of all downstream ports that connect to this node, ordered by the names of the port e...
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...
void setConnectedNodeName(const string &inputName, const string &nodeName)
Set the name of the Node connected to the given input, creating a child element for the input if need...
OutputPtr getNodeDefOutput(ElementPtr connectingElement)
Given a connecting element (Input or Output) return the NodeDef output corresponding to the output th...
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 node, optionally filtered by the given target and language n...
Definition: Node.h:108
size_t getUpstreamEdgeCount() const override
Return the number of queriable upstream edges for this element.
Definition: Node.h:123
NodePtr getConnectedNode(const string &inputName) const
Return the Node connected to the given input.
void addInputsFromNodeDef()
Add inputs based on the corresponding associated node definition.
NodeDefPtr getNodeDef(const string &target=EMPTY_STRING, bool allowRoughMatch=false) const
Return the first NodeDef that declares this node, optionally filtered by the given target name.
string getConnectedNodeName(const string &inputName) const
Return the name of the Node connected to the given input.
void setConnectedNode(const string &inputName, ConstNodePtr node)
Set the node to which the given input is connected, creating a child input if needed.
InputPtr addInputFromNodeDef(const string &inputName)
Add an input based on the corresponding input for the associated node definition.
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:145