void CreateNodeGraph( );
void TraverseNodeGraph( const ICENode& in_node );
CreateNodeGraph( );
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;
xsi.LogMessage( in_node.GetName() );
CRefArray nodes;
if ( in_node.IsA( siICENodeContainerID ) )
{
ICENodeContainer container( in_node.GetRef() );
nodes = container.GetDataModifierNodes();
}
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 );
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");
}
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;
}