Returns an Array of 2 ICENodePortCollection objects. The
first collection contains the exposed ports and the second one the
associated compound node ports also known as proxy ports. The
collections work as a pair, the exposed port at position 0 in the
first collection matches the node port at position 0 in the second
collection, etc.
The exposed ports are the contained nodes ports of a compound node
and act as connection points to outer nodes. These ports can be
either ICENodeInputPort or
ICENodeOutputPort objects.
This property and the AddExposedParamToICECompoundNode
command are typically used in pair for exposing the contained node
ports to other graph nodes.
# Sample code to access the exposed ports on the compound nodes of a graph import win32com.client from win32com.client import constants xsi = Application # Recursive function for traversing a node graph def TraverseNodeGraph( in_node, level ): indent = level * '.' if in_node.IsClassOf( constants.siICECompoundNodeID ): # Log the visited compound node name xsi.LogMessage( indent + in_node.Name ) # Get the exposed port info for the compound node ports = in_node.ExposedPorts # The exposed ports exposedPorts = ports[0] exposedPortsCount = exposedPorts.Count # The compound node ports nodePorts = ports[1] for i in range(exposedPortsCount): xsi.LogMessage( indent + "Node port " + str(i) + ": " + str(nodePorts[i]) ) xsi.LogMessage( indent + "Exposed port " + str(i) + ": " + str(exposedPorts[i]) ) nodeCount = 0 nodes = () if in_node.IsClassOf( constants.siICENodeContainerID ): # The input node is a ICENodeContainer, let's get its inner compound nodes nodes = in_node.CompoundNodes 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.NewScene("", "") 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", "Compound1") xsi.CreateICECompoundNode("cube.polymsh.ICETree.Compound1.ScalarToRotationNode,cube.polymsh.ICETree.Compound1.MultiplyNode", "Compound2") xsi.CreateICECompoundNode("cube.polymsh.ICETree.Compound1", "CompoundTop") # Get the ICETree off the cube primitive and start iterating the graph cube = xsi.Selection(0) cubeICETree = cube.ActivePrimitive.ICETrees[0] level = 0 TraverseNodeGraph( cubeICETree, level ) |