ICENode

Object Hierarchy | Related C++ Class: ICENode

Inheritance

SIObject

ProjectItem

ICENode

Introduced

v7.0

Description

The ICENode class represents a built-in or custom effect node in the Softimage ICE graph. ICENodes can be assembled in sub-graphs called compound nodes, which are represented as ICECompoundNode objects.

The ICENode class API is convenient for accessing the different components of an effect node such as ports, port groups and port group instances. The node ports are organized in groups similar to the Softimage operator Ports, where groups are logical groupings of multiple port connections. Other ICENode objects can connect to an ICENode object via its ports represented as ICENodeInputPort and ICENodeOutputPort.

Methods

AddCustomOp AddScriptedOp AddScriptedOpFromFile AnimatedParameters2
BelongsTo operator EvaluateAt GetGroupInstanceCount GetICEAttributeFromName
GetPortCount GetPortFromIndex GetPortFromName IsA
IsAnimated2 IsClassOf operator IsEqualTo operator IsKindOf
IsLocked operator IsSelected operator LockOwners SetAsSelected operator
SetCapabilityFlag operator SetLock TaggedParameters UnSetLock

Properties

Application BranchFlag operator Capabilities operator Categories
EvaluationID Families operator FullName operator Help
HierarchicalEvaluationID ICEAttributes InputPorts IsConnected
LockLevel operator LockMasters operator LockType operator Model
Name operator NestedObjects ObjectID Origin
OriginPath OutputPorts Owners PPGLayout operator
Parameters operator Parent Parent3DObject PortGroupCount
RootNodeContainer Selected operator Type operator  
       

Examples

Python Example

# Sample code to show how to access the ICENode elements.
import win32com.client
from win32com.client import constants
xsi = Application
# Recursive function for traversing a node graph
def TraverseNodeGraph( node, level ):
        indent = level * '.'
        # Log info on the visited node 
        xsi.LogMessage( "* * *" )
        # Node info
        xsi.LogMessage( indent + "node: " + node.FullName );
        xsi.LogMessage( indent + "node type: " + node.Type );
        xsi.LogMessage( indent + "node proxy class: " + xsi.ClassName(node) );
        xsi.LogMessage( indent + "node connected: " + str(node.IsConnected) );
        xsi.LogMessage( indent + "node parent: " + str(node.Parent.Name) )
        xsi.LogMessage( indent + "node root: " + str(node.RootNodeContainer.Name) )
        # Node port group info
        portGroupCount = node.PortGroupCount
        xsi.LogMessage( indent + "number of groups: " + str(portGroupCount) )
        for iGroup in range(portGroupCount):
                nPortsInGroup = node.GetPortCount(iGroup)
                xsi.LogMessage( indent + "number of ports in group " + str(iGroup) + ": " + str(nPortsInGroup) )
                nGroupInst = node.GetGroupInstanceCount(iGroup)
                xsi.LogMessage( indent + "number of instances of group " + str(iGroup) + ": " + str(nGroupInst) )
                for iInst in range( nGroupInst ):       
                        for iPort in range( nPortsInGroup ):
                                xsi.LogMessage( indent + "port " + str(iPort) + "," + str(iGroup) + "," + str(iInst) )                  
                                p = node.GetPortFromIndex(iPort,iGroup,iInst)
                                xsi.LogMessage( indent + "port name: " + p.Name )
                                xsi.LogMessage( indent + "output port: " + str(p.IsOutput) )
        # Node input port info
        inPorts = node.InputPorts
        inputPortCount = inPorts.Count
        xsi.LogMessage( indent + "node input ports: " + str(inputPortCount) )
        # Node output port info
        outPorts = node.OutputPorts
        outputPortCount = outPorts.Count
        xsi.LogMessage( indent + "node output ports: " + str(outputPortCount) )
        nodeCount = 0
        nodes = ()
        if node.IsClassOf( constants.siICENodeContainerID ):    
                # The input node might be a ICETree or ICECompoundNode, let's get their ICENodes
                nodes = node.Nodes
                nodeCount = nodes.Count
        # Recursively traverse the graph
        for i in range(nodeCount):
                TraverseNodeGraph( nodes[i], level+2 )
# Create a sample twist deformer graph first
xsi.CreatePrim( "Cube", "MeshSurface" )
xsi.SetValue( "cube.polymsh.geom.subdivu", 15 )
xsi.SetValue( "cube.polymsh.geom.subdivv", 14 )
xsi.ApplyOp( "ICETree", "cube", None, None, None, 0 )
xsi.AddICENode( "GetDataNode", "cube.polymsh.ICETree" )
xsi.SetValue( "cube.polymsh.ICETree.SceneReferenceNode.Reference", "cube.polymsh.PointPosition" )
xsi.AddICENode( "RotateVectorNode", "cube.polymsh.ICETree" )
xsi.AddICENode( "3DVectorToScalarNode", "cube.polymsh.ICETree" )
xsi.AddICENode( "SetData", "cube.polymsh.ICETree" )
xsi.SetValue( "cube.polymsh.ICETree.SetData.PredefinedAttributeName", "PointPosition" )
xsi.AddAttributeToSetDataICENode( "cube.polymsh.ICETree.SetData", "PointPosition", constants.siComponentDataTypeVector3, constants.siComponentDataContextComponent0D, constants.siComponentDataStructureSingle )
xsi.ConnectICENodes( "cube.polymsh.ICETree.port1", "cube.polymsh.ICETree.SetData.set" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.RotateVectorNode.vector", "cube.polymsh.ICETree.SceneReferenceNode.value" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.SetData.pointposition", "cube.polymsh.ICETree.RotateVectorNode.result" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.3DVectorToScalarNode.vector", "cube.polymsh.ICETree.SceneReferenceNode.value" )
xsi.AddICENode( "MultiplyNode", "cube.polymsh.ICETree" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.MultiplyNode.value1", "cube.polymsh.ICETree.3DVectorToScalarNode.y" )
xsi.AddICENode( "ScalarToRotationNode", "cube.polymsh.ICETree" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.ScalarToRotationNode.angle", "cube.polymsh.ICETree.MultiplyNode.result" )
xsi.ConnectICENodes( "cube.polymsh.ICETree.RotateVectorNode.rotation", "cube.polymsh.ICETree.ScalarToRotationNode.rotation" )
xsi.SetValue( "cube.polymsh.ICETree.ScalarToRotationNode.y", 1 )
xsi.SetValue( "cube.polymsh.ICETree.ScalarToRotationNode.x", 0 )
xsi.SetValue( "cube.polymsh.ICETree.MultiplyNode.value2", 20 )
xsi.CreateICECompoundNode("cube.polymsh.ICETree.3DVectorToScalarNode,cube.polymsh.ICETree.MultiplyNode,cube.polymsh.ICETree.ScalarToRotationNode", "")
# Get the ICETree off the cube primitive and start navigating the graph
cube = xsi.Selection(0)
cubeICETree = cube.ActivePrimitive.ICETrees[0]
level = 0
TraverseNodeGraph( cubeICETree, level )

See Also

ICENodeInputPort ICENodeOutputPort ICENodeContainer ICETree ICECompoundNode