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