2 つICENodePortCollectionのオブジェクトのArrayを戻します。最初のコレクションには、外部公開されたポートと、プロキシポートと呼ばれる関連コンパウンドノードポートの
1 つが含まれます。このコレクションは、ペアで機能します。たとえば、最初のコレクションでポジション0
にある外部に公開されたポートは、2 番目のコレクションのポジション0 にあるノードポートと一致します。
外部に公開されたポートは、コンパウンドに含まれるノードポートであり、外側のポートへの接続ポイントとして動作します。これらのポートは、ICENodeInputPortまたはICENodeOutputPortオブジェクトのいずれかになります。このプロパティおよびAddExposedParamToICECompoundNodeコマンドは、一般的に含まれるノードポートを他のグラフノードに外部公開する場合にペアで使用されます。
# 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 ) |