ICENodePort

Object Hierarchy | Related C++ Class: ICENodePort

Inheritance

SIObject

ICENodePort

Introduced

v7.0

Description

ICENodePort is the base class for ICENode ports such as ICENodeInputPort and ICENodeOutputPort. An ICENodePort is a connection point on an ICENode and connects to other ICENodePort objects. ICENodePort may be connected to something or not connected at all. Ports are organized in groups similar to the Softimage operator Ports, where groups are logical groupings of multiple port connections.

Methods

IsClassOf operator IsEqualTo operator    
       

Properties

Application Categories ConnectedNodes ConnectedPorts
ContextType CustomDataTypes DataType FullName operator
GroupIndex GroupInstanceIndex Help Index
IsConnected IsOutput Name operator NestedObjects
Origin OriginPath Parameters Parent
StructureType Type operator    
       

Examples

Python Example

#

# This example shows how to access the ports of ICENode objects

#

import win32com.client

from win32com.client import constants

xsi = Application

# ICENodePort introspection

def LogICENodePort( in_nodeport, level ):

	indent = level * '.'

	xsi.LogMessage( "* * * " )

	xsi.LogMessage( indent + "node port: " + in_nodeport.FullName )

	xsi.LogMessage( indent + "node port parent: " + in_nodeport.Parent.FullName )

	xsi.LogMessage( indent + "node port class: " + xsi.ClassName( in_nodeport ) )

	xsi.LogMessage( indent + "output node port: " + str(in_nodeport.IsOutput) )

	xsi.LogMessage( indent + "connected: " + str(in_nodeport.IsConnected) )

	xsi.LogMessage( indent + "group port index: " + str(in_nodeport.Index) )

	xsi.LogMessage( indent + "group index: " + str(in_nodeport.GroupIndex) )

	xsi.LogMessage( indent + "group instance index: " + str(in_nodeport.GroupInstanceIndex) )

	xsi.LogMessage( indent + "type: " + str(in_nodeport.DataType) )

	xsi.LogMessage( indent + "structure type: " + str(in_nodeport.StructureType) )

	xsi.LogMessage( indent + "evaluation context type: " + str(in_nodeport.ContextType) )

	connectednodes = in_nodeport.ConnectedNodes

	count = connectednodes.Count

	xsi.LogMessage( indent + "connected nodes: " + str(count) )	

	for i in range(count):

		xsi.LogMessage( indent + "connected node: " + connectednodes[i].Name )

	# Log the port parameters

	params = in_nodeport.Parameters

	for param in params:

		xsi.LogMessage( indent + "parameter: " + param.ScriptName + ":" + str(param.GetValue2()) )

# Recursive function for traversing a node graph

def TraverseNodeGraph( in_node, level ):

	indent = level * '.'

	# Log the visited node name

	xsi.LogMessage( indent + in_node.Name )

	# Log all ICENodePorts for this node

	inPorts = in_node.InputPorts

	inputPortCount = inPorts.Count

	xsi.LogMessage( indent + "node input ports: " + str(inputPortCount) )

	for i in range(inputPortCount ):

		nodeport = inPorts[i]

		LogICENodePort( nodeport, level+2 )			

	outPorts = in_node.OutputPorts

	outputPortCount = outPorts.Count

	xsi.LogMessage( indent + "node output ports: " + str(outputPortCount) )

	for i in range(outputPortCount ):

		nodeport = outPorts[i]

		LogICENodePort( nodeport, level+2 )			

	nodeCount = 0

	nodes = ()

	if in_node.IsClassOf( constants.siICENodeContainerID ):	

		# The input node might be a ICETree or ICECompoundNode, let's get their ICENodes

		nodes = in_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 iterating in the graph

cube = xsi.Selection(0)

cubeICETree = cube.ActivePrimitive2.ICETrees[0]

level = 0

TraverseNodeGraph( cubeICETree, level )