# ICEDataProviderNode Class Reference

Related Scripting Object: ICEDataProviderNode | Supported Parameter List: SceneReferenceNode

The ICEDataProviderNode object represents a GetDataNode in an ICE graph. More...

`#include <xsi_icedataprovidernode.h>`

Inheritance diagram for ICEDataProviderNode:

List of all members.

## Public Member Functions
| ICEDataProviderNode ()
| ~ICEDataProviderNode ()
| ICEDataProviderNode (const CRef &in_ref)
| ICEDataProviderNode (const ICEDataProviderNode &in_obj)
bool | IsA (siClassID in_ClassID) const
siClassID | GetClassID () const
ICEDataProviderNode & | operator= (const ICEDataProviderNode &in_obj)
ICEDataProviderNode & | operator= (const CRef &in_ref)

## Detailed Description

The ICEDataProviderNode object represents a GetDataNode in an ICE graph.

The responsibility of an ICEDataProviderNode is to to read the data from Softimage objects and is typically used to initiate the data flow of the graph.

See also:
  ICEDataModifierNode

Since:
  7.0

Example:
  This example demonstrates how to log all the data provider nodes in a graph.

              // Some helper function prototypes declaration
              void CreateNodeGraph( );
              void TraverseNodeGraph( const ICENode& in_node );

              // Create the node graph first
              void CreateNodeGraph( );

              CreateNodeGraph( );

              // Get the ICETree off the cube primitive and start navigating the graph
              Application xsi;
              Selection sel = xsi.GetSelection();
              X3DObject cube = sel[0];

              ICETree cubeICETree = cube.GetActivePrimitive().GetICETrees()[0];

              TraverseNodeGraph( cubeICETree );

              void TraverseNodeGraph( const ICENode& in_node )
              {
                  Application xsi;

                  // Log the visited node name
                  xsi.LogMessage( in_node.GetName() );

                  CRefArray nodes;
                  if ( in_node.IsA( siICENodeContainerID ) )
                  {
                      // The input node might be a ICETree or ICECompoundNode, let's get their ICEDataProviderNodes
                      ICENodeContainer container( in_node.GetRef() );
                      nodes = container.GetDataProviderNodes ();
                  }

                  //  Recursively traverse the graph
                  for (LONG i=0; i<nodes.GetCount(); i++)
                  {
                      TraverseNodeGraph( nodes[i] );
                  }
              }

              CValue CreateICECompoundNode( const CValue&  in_inputobj, const CString& in_name );
              void CreatePrim( const CString& in_presetobj, const CString& in_geometrytype, const CString& in_name, const CString& in_parent );
              CValue SetValue( const CString& in_target, const CValue&  in_value, const CValue&  in_time = CValue() );
              CRefArray ApplyOp( const CString& in_presetobj, CString & io_connectionset, const siConstructionMode& in_constructionmode );
              CValue AddICENode( const CValue&  in_presetobj, const CValue&  in_container );
              void AddAttributeToSetDataICENode( const CValue&  in_setdatanode, const CString& in_attributename, siComponentDataType in_attributetype, siComponentDataContext in_attributecontext, siComponentDataStructure in_attributestructure );
              void ConnectICENodes( const CValue&  in_inputport, const CValue&  in_outputport );

              // Create a twist deformer graph on a cube
              void CreateNodeGraph( )
              {
                  CreatePrim( L"Cube", L"MeshSurface", L"", L"" );
                  SetValue( L"cube.polymsh.geom.subdivu", 15, 0 );
                  SetValue( L"cube.polymsh.geom.subdivv", 14, 0 );

                  CString strCube(L"cube");
                  ApplyOp( L"ICETree", strCube, siConstructionModeModeling );

                  AddICENode( L"GetDataNode", L"cube.polymsh.ICETree" );
                  SetValue( L"cube.polymsh.ICETree.SceneReferenceNode.Reference", L"cube.polymsh.PointPosition" );
                  AddICENode( L"RotateVectorNode", L"cube.polymsh.ICETree" );
                  AddICENode( L"3DVectorToScalarNode", L"cube.polymsh.ICETree" );
                  AddICENode( L"SetData", L"cube.polymsh.ICETree" );
                  SetValue( L"cube.polymsh.ICETree.SetData.PredefinedAttributeName", L"PointPosition" );
                  AddAttributeToSetDataICENode( L"cube.polymsh.ICETree.SetData", L"PointPosition", siComponentDataTypeVector3, siComponentDataContextComponent0D, siComponentDataStructureSingle );
                  ConnectICENodes( L"cube.polymsh.ICETree.port1", L"cube.polymsh.ICETree.SetData.set" );
                  ConnectICENodes( L"cube.polymsh.ICETree.RotateVectorNode.vector", L"cube.polymsh.ICETree.SceneReferenceNode.value" );
                  ConnectICENodes( L"cube.polymsh.ICETree.SetData.pointposition", L"cube.polymsh.ICETree.RotateVectorNode.result" );
                  ConnectICENodes( L"cube.polymsh.ICETree.3DVectorToScalarNode.vector", L"cube.polymsh.ICETree.SceneReferenceNode.value" );
                  AddICENode( L"MultiplyNode", L"cube.polymsh.ICETree" );
                  ConnectICENodes( L"cube.polymsh.ICETree.MultiplyNode.value1", L"cube.polymsh.ICETree.3DVectorToScalarNode.y" );
                  AddICENode( L"ScalarToRotationNode", L"cube.polymsh.ICETree" );
                  ConnectICENodes( L"cube.polymsh.ICETree.ScalarToRotationNode.angle", L"cube.polymsh.ICETree.MultiplyNode.result" );
                  ConnectICENodes( L"cube.polymsh.ICETree.RotateVectorNode.rotation", L"cube.polymsh.ICETree.ScalarToRotationNode.rotation" );
                  SetValue( L"cube.polymsh.ICETree.ScalarToRotationNode.y", 1 );
                  SetValue( L"cube.polymsh.ICETree.ScalarToRotationNode.x", 0 );
                  SetValue( L"cube.polymsh.ICETree.MultiplyNode.value2", 20 );
                  CreateICECompoundNode( L"cube.polymsh.ICETree.3DVectorToScalarNode,cube.polymsh.ICETree.MultiplyNode,cube.polymsh.ICETree.ScalarToRotationNode", L"Compound1");
                  CreateICECompoundNode( L"cube.polymsh.ICETree.Compound1.ScalarToRotationNode,cube.polymsh.ICETree.Compound1.MultiplyNode", L"Compound2");
              }

              // Command stubs used by CreateNodeGraph
              CValue CreateICECompoundNode( const CValue&  in_inputobj, const CString& in_name )
              {
                  CValueArray args(2);
                  CValue retval;

                  args[0]= in_inputobj;
                  args[1]= in_name;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"CreateICECompoundNode", args, retval );

                  return retval;
              }
              void CreatePrim( const CString& in_presetobj, const CString& in_geometrytype, const CString& in_name, const CString& in_parent )
              {
                  CValueArray args(4);
                  CValue retval;

                  args[0]= in_presetobj;
                  args[1]= in_geometrytype;
                  args[2]= in_name;
                  args[3]= in_parent;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"CreatePrim", args, retval );

                  return;
              }
              CValue SetValue( const CString& in_target, const CValue& in_value, const CValue&  in_time )
              {
                  CValueArray args(3);
                  CValue retval;

                  args[0]= in_target;
                  args[1]= in_value;
                  args[2]= in_time;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"SetValue", args, retval );

                  return retval;
              }

              CRefArray ApplyOp( const CString& in_presetobj, CString & io_connectionset, const siConstructionMode& in_constructionmode )
              {
                  CValueArray args(6);
                  CValue retval;

                  args[0]=in_presetobj;
                  args[1]=io_connectionset;
                  args[2]=(LONG)siUnspecified;
                  args[3]=(LONG)siPersistentOperation;
                  if ( in_constructionmode != siConstructionModeDefault )
                  {
                      args[5]=(LONG)in_constructionmode;
                  }

                  Application app;
                  CStatus st = app.ExecuteCommand( L"ApplyOp", args, retval );
                  io_connectionset=args[1];
                  return retval;
              }

              CValue AddICENode( const CValue&  in_presetobj, const CValue&  in_container )
              {
                  CValueArray args(2);
                  CValue retval;

                  args[0]= in_presetobj;
                  args[1]= in_container;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"AddICENode", args, retval );

                  return retval;
              }
              void AddAttributeToSetDataICENode( const CValue&  in_setdatanode, const CString& in_attributename, siComponentDataType in_attributetype, siComponentDataContext in_attributecontext, siComponentDataStructure in_attributestructure )
              {
                  CValueArray args(5);
                  CValue retval;

                  args[0]= in_setdatanode;
                  args[1]= in_attributename;
                  args[2]= (LONG)in_attributetype;
                  args[3]= (LONG)in_attributecontext;
                  args[4]= (LONG)in_attributestructure;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"AddAttributeToSetDataICENode", args, retval );

                  return;
              }
              void ConnectICENodes( const CValue&  in_inputport, const CValue&  in_outputport )
              {
                  CValueArray args(2);
                  CValue retval;

                  args[0]= in_inputport;
                  args[1]= in_outputport;

                  Application app;
                  CStatus st = app.ExecuteCommand( L"ConnectICENodes", args, retval );

                  return;
              }

## Constructor & Destructor Documentation

ICEDataProviderNode | ( |  | ) |

Default constructor.

~ICEDataProviderNode | ( |  | ) |

Default destructor.

ICEDataProviderNode | ( | const CRef & | in_ref | ) |

Constructor.

Parameters:

  | in_ref | constant reference object.

ICEDataProviderNode | ( | const ICEDataProviderNode & | in_obj | ) |

Copy constructor.

Parameters:

  | in_obj | constant class object.

## Member Function Documentation

bool IsA | ( | siClassID | in_ClassID | ) | const`[virtual]`

Returns true if a given class type is compatible with this API class.

Parameters:

  | in_ClassID | class type.

Returns:
  true if the class is compatible, false otherwise.

Reimplemented from ICENode.

siClassID GetClassID | ( |  | ) | const`[virtual]`

Returns the type of the API class.

Returns:
  The class type.

Reimplemented from ICENode.

ICEDataProviderNode& operator= | ( | const ICEDataProviderNode & | in_obj | ) |

Creates an object from another object. The newly created object is set to empty if the input object is not compatible.

Parameters:

  | in_obj | constant class object.

Returns:
  The new ICEDataProviderNode object.

ICEDataProviderNode& operator= | ( | const CRef & | in_ref | ) |

Creates an object from a reference object. The newly created object is set to empty if the input reference object is not compatible.

Parameters:

  | in_ref | constant class object.

Returns:
  The new ICEDataProviderNode object.

Reimplemented from ICENode.

The documentation for this class was generated from the following file:

- xsi_icedataprovidernode.h