## ICEDataProviderNode

Object Hierarchy | Related C++ Class: ICEDataProviderNode

### Inheritance

###

SIObject

ProjectItem

ICENode

ICEDataProviderNode

### Introduced

v7.0

### Description

The ICEDataProviderNode represents the GetData node in an ICE tree. The responsibility of an ICEDataProviderNode is to read the data from Softimage objects and is typically used to initiate the data flow of an ICE tree.

### Methods

AddCustomOp | AddICEAttribute | AddScriptedOp | AddScriptedOpFromFile
AnimatedParameters2 | BelongsTo | EvaluateAt | GetGroupInstanceCount
GetICEAttributeFromName | GetPortCount | GetPortFromIndex | GetPortFromIndex2
GetPortFromName | GetPortFromName2 | IsA | IsAnimated2
IsClassOf | IsEqualTo | IsKindOf | IsLocked
IsSelected | LockOwners | RemoveICEAttribute | SetAsSelected
SetCapabilityFlag | SetLock | TaggedParameters | UnSetLock

### Properties

Application | BranchFlag | Capabilities | Categories
EvaluationID | Families | FullName | Help
HierarchicalEvaluationID | ICEAttributes | InputPorts | IsConnected
LockLevel | LockMasters | LockType | Model
Name | NestedObjects | ObjectID | Origin
OriginPath | OutputPorts | Owners | PPGLayout
Parameters | Parent | Parent3DObject | PortGroupCount
RootNodeContainer | Selected | Type |

### Examples

#### Python Example

    # Sample code to log all the data provider nodes in 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 * '.'

    	# Log the visited node name

    	xsi.LogMessage( indent + in_node.Name )

    	nodeCount = 0

    	nodes = ()

    	if in_node.IsClassOf( constants.siICENodeContainerID ):

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

    		nodes = in_node.DataProviderNodes

    		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 )

### See Also

ICEDataModifierNode