ICENodePort

Object Hierarchy | Related C++ Class: ICENodePort

Inheritance

SIObject
   ICENodePort

Introduced

7.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

IsEqualTo

Properties

Application

Categories

ConnectedNodes

ConnectedPorts

ContextType

DataType

FullName

GroupIndex

GroupInstanceIndex

Help

Index

IsConnected

IsOutput

Name

NestedObjects

Origin

OriginPath

Parameters

Parent

StructureType

Type

 

 

 

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.ActivePrimitive.ICETrees[0]

level = 0
TraverseNodeGraph( cubeICETree, level )


Autodesk Softimage v7.5