Nodes and properties
The SDNode class enables users to get information about specific nodes, which properties can be accessed with the SDProperty**class. All of these can be either read of modified.
Available node information include:
- definition
- identifier
- position
- bounding box
- properties (as a list)
- resources that are being referenced
Accessing nodes and their properties
import sd
## Import the required classes.
from sd.api.sdproperty import SDPropertyCategory
from sd.api.sdvalueserializer import SDValueSerializer
## Get and print information regarding the selected nodes.
def printSelectedNodesInfo(nodes):
for node in nodes:
definition = node.getDefinition()
nodeId = node.getIdentifier()
print("node %s, id = %s" % (definition.getLabel(), nodeId))
## Create a list of each property category enumeration item.
categories = [
SDPropertyCategory.Annotation,
SDPropertyCategory.Input,
SDPropertyCategory.Output
]
## Get node properties for each property category.
for category in categories:
props = definition.getProperties(category)
## Get the label and identifier of each property.
for prop in props:
label = prop.getLabel()
propId = prop.getId()
## Get the connection for the currently accessed property.
if prop.isConnectable():
connections = node.getPropertyConnections(prop)
if connections:
print("Propery %s is connected!!!" % label)
continue
## Get the current and default values for the currently accessed property.
value = node.getPropertyValue(prop)
valueDefault = prop.getDefaultValue()
value = SDValueSerializer.sToString(value) if value else "None"
valueDefault = SDValueSerializer.sToString(valueDefault) if valueDefault else "None"
print("Property - %sn id = %sn value = %sn default = %s" % (
label,
propId,
value,
valueDefault
))
Accessing node inputs identifiers and types
import sd
## Import the required classes.
from sd.api import sduimgr
from sd.api.sdproperty import *
## Access a node in the current graph, and its properties.
graph = uiMgr.getCurrentGraph()
node = graph.getNodeFromId('<Replace this text with the node ID>')
nodeProps = node.getProperties(SDPropertyCategory.Input)
## List node identifiers and types in console.
for i in range(len(nodeProps)):
print(nodeProps[i].getId())
print(nodeProps[i].getType())
Accessing node Position and bounding box
import sd
app = sd.getContext().getSDApplication()
uiMgr = app.getUIMgr()
currentGraph = uiMgr.getCurrentGraph()
## Works reliably if there is only one Graph View
currentGraphViewID = uiMgr.getGraphViewIDAt(0)
for node in currentGraph.getNodes():
## Position is accessed directly through the node
nodePosition = node.getPosition()
## Bbox is accessed through the UI manager and the Graph View ID
nodeBbox = uiMgr.getGraphNodeBBox(currentGraphViewID, node)
print(f"""
{node.getDefinition().getLabel().upper()}
UID: {node.getIdentifier()}
Position:
* Center X: {nodePosition.x}
* Center Y: {nodePosition.y}
Bounding box:
* Top-left X: {nodeBbox.x}
* Top-left Y: {nodeBbox.y}
* Width: {nodeBbox.z}
* Height: {nodeBbox.w}
""")
recommendation-more-help
dd48abc6-e399-43d2-9777-578ec70c5a23