6#ifndef MATERIALX_NODE_H
7#define MATERIALX_NODE_H
16MATERIALX_NAMESPACE_BEGIN
45using NodePredicate = std::function<bool(
NodePtr node)>;
52class MX_CORE_API Node :
public InterfaceElement
56 InterfaceElement(parent, CATEGORY, name)
94 NodeDefPtr
getNodeDef(
const string& target = EMPTY_STRING,
95 bool allowRoughMatch =
false)
const;
163 bool validate(
string* message =
nullptr)
const override;
168 static const string CATEGORY;
173class MX_CORE_API GraphElement :
public InterfaceElement
176 GraphElement(
ElementPtr parent,
const string& category,
const string& name) :
177 InterfaceElement(parent, category, name)
182 virtual ~GraphElement() { }
195 const string& name = EMPTY_STRING,
196 const string& type = DEFAULT_TYPE_STRING)
199 node->setCategory(category);
207 NodePtr node =
addNode(nodeDef->getNodeString(), name, nodeDef->getType());
208 node->setNodeDefString(nodeDef->getName());
220 vector<NodePtr>
getNodes(
const string& category = EMPTY_STRING)
const
228 vector<NodePtr> nodes;
231 if (node->getType() == nodeType)
233 nodes.push_back(node);
298 void flattenSubgraphs(
const string& target = EMPTY_STRING, NodePredicate filter =
nullptr);
321class MX_CORE_API NodeGraph :
public GraphElement
324 NodeGraph(
ElementPtr parent,
const string& name) :
325 GraphElement(parent, CATEGORY, name)
328 virtual ~NodeGraph() { }
388 bool validate(
string* message =
nullptr)
const override;
393 static const string CATEGORY;
398class MX_CORE_API Backdrop :
public Element
401 Backdrop(
ElementPtr parent,
const string& name) :
402 Element(parent, CATEGORY, name)
405 virtual ~Backdrop() { }
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
const string & getAttribute(const string &attrib) const
Return the value string of the given attribute.
Definition Element.h:489
shared_ptr< T > addChild(const string &name=EMPTY_STRING)
Add a child element of the given subclass and name.
Definition Element.h:1399
void setAttribute(const string &attrib, const string &value)
Set the value string of the given attribute.
void setTypedAttribute(const string &attrib, const T &data)
Set the value of an implicitly typed attribute.
Definition Element.h:504
T getTypedAttribute(const string &attrib) const
Return the value of an implicitly typed attribute.
Definition Element.h:512
shared_ptr< T > getChildOfType(const string &name) const
Return the child element, if any, with the given name and subclass.
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition Element.h:482
void removeChildOfType(const string &name)
Remove the child element, if any, with the given name and subclass.
Definition Element.h:468
vector< shared_ptr< T > > getChildrenOfType(const string &category=EMPTY_STRING) const
Return a vector of all child elements that are instances of the given subclass, optionally filtered b...
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
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 queryable 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