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)
105 bool allowRoughMatch =
false)
const;
173 bool validate(
string* message =
nullptr)
const override;
178 static const string CATEGORY;
183class MX_CORE_API GraphElement :
public InterfaceElement
186 GraphElement(
ElementPtr parent,
const string& category,
const string& name) :
187 InterfaceElement(parent, category, name)
192 virtual ~GraphElement() { }
205 const string& name = EMPTY_STRING,
206 const string& type = DEFAULT_TYPE_STRING)
209 node->setCategory(category);
217 NodePtr node =
addNode(nodeDef->getNodeString(), name, nodeDef->getType());
218 node->setNodeDefString(nodeDef->getName());
230 vector<NodePtr>
getNodes(
const string& category = EMPTY_STRING)
const
238 vector<NodePtr> nodes;
241 if (node->getType() == nodeType)
243 nodes.push_back(node);
308 void flattenSubgraphs(
const string& target = EMPTY_STRING, NodePredicate filter =
nullptr);
331class MX_CORE_API NodeGraph :
public GraphElement
334 NodeGraph(
ElementPtr parent,
const string& name) :
335 GraphElement(parent, CATEGORY, name)
338 virtual ~NodeGraph() { }
408 bool validate(
string* message =
nullptr)
const override;
413 static const string CATEGORY;
418class MX_CORE_API Backdrop :
public Element
421 Backdrop(
ElementPtr parent,
const string& name) :
422 Element(parent, CATEGORY, name)
425 virtual ~Backdrop() { }
508 bool validate(
string* message =
nullptr)
const override;
513 static const string CATEGORY;
514 static const string CONTAINS_ATTRIBUTE;
515 static const string WIDTH_ATTRIBUTE;
516 static const string HEIGHT_ATTRIBUTE;
519MATERIALX_NAMESPACE_END
Definition element subclasses.
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition Element.h:31
vector< ElementPtr > ElementVec
A vector of elements.
Definition Element.h:69
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:419
void setContainsString(const string &contains)
Set the contains string for this backdrop.
Definition Node.h:431
void setHeight(float height)
Set the height attribute of the backdrop.
Definition Node.h:475
void setWidth(float width)
Set the width attribute of the backdrop.
Definition Node.h:453
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:481
float getWidth() const
Return the width attribute of the backdrop.
Definition Node.h:465
string getContainsString() const
Return the contains string for this backdrop.
Definition Node.h:443
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:487
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:437
bool hasWidth() const
Return true if this backdrop has a width attribute.
Definition Node.h:459
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:492
shared_ptr< T > addChild(const string &name=EMPTY_STRING)
Add a child element of the given subclass and name.
Definition Element.h:1402
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:507
T getTypedAttribute(const string &attrib) const
Return the value of an implicitly typed attribute.
Definition Element.h:515
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:485
void removeChildOfType(const string &name)
Remove the child element, if any, with the given name and subclass.
Definition Element.h:471
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:184
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:230
vector< BackdropPtr > getBackdrops() const
Return a vector of all Backdrop elements in the graph.
Definition Node.h:286
BackdropPtr addBackdrop(const string &name=EMPTY_STRING)
Add a Backdrop to the graph.
Definition Node.h:274
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:215
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:264
ElementVec 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:204
NodePtr getNode(const string &name) const
Return the Node, if any, with the given name.
Definition Node.h:223
BackdropPtr getBackdrop(const string &name) const
Return the Backdrop, if any, with the given name.
Definition Node.h:280
void removeNode(const string &name)
Remove the Node, if any, with the given name.
Definition Node.h:250
void removeBackdrop(const string &name)
Remove the Backdrop, if any, with the given name.
Definition Node.h:292
vector< NodePtr > getNodesOfType(const string &nodeType) const
Return a vector of nodes in the graph which have a given type.
Definition Node.h:236
size_t getInputCount() const
Return the number of Input elements.
Definition Interface.h:381
A node graph element within a Document.
Definition Node.h:332
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...
void setNameGlobal(const string &name)
Set the name string of this NodeGraph, propagating the updated name to all downstream ports.
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:118
size_t getUpstreamEdgeCount() const override
Return the number of queryable upstream edges for this element.
Definition Node.h:133
void setNameGlobal(const string &name)
Set the name string of this Node, propagating the updated name to all downstream ports.
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:155