| 
/*
        This example demonstrates how to retrieve the output arguments through the returned
        ISIVTCollection, comparing using the Item vs. the Value property.
*/
NewScene( null, false );
// Create the Camera and Interest, and parent them to a newly created NULL object 
var rtn = SIGetPrim( "CameraRoot", "MyCamera_Root", ActiveSceneRoot, true );
// Get the output arguments via the ISIVTCollection.Item property
var oPrim = rtn.Item(0);                // equiv. to:  var oPrim = rtn.Value("Primitive")
var o3DObj = rtn.Item(1);               // equiv. to:  var o3DObj = rtn.Value("Value")
//      NB: This is a perfect example of why using the Value property is much 
//              safer than the Item property: you would expect the output arguments
//              to use the same order in the ISIVTCollection, but in this case, they
//              are opposite.
WhatAmI( o3DObj );                      //INFO : MyCamera_Root is a CameraRig
WhatAmI( oPrim );                       //INFO : MyCamera_Root.CameraRoot is a Primitive
SetValue( o3DObj + ".kine.global.posy", 2.0 );
SetValue( o3DObj + ".kine.global.posz", 20.0 );
// Get the output arguments via the ISIVTCollection.Value property
rtn = SIGetPrimCamera( "Camera", "MyCameraName", "MyCameraIntName" );
var o3DObjCamera = rtn.Value("3DObjCamera" );
var o3DObjCameraInterest = rtn.Value("3DObjCameraInterest" );
var oPrimObjCamera = rtn.Value( "PrimObjCamera" );
var oPrimObjCameraInterest = rtn.Value(" PrimObjCameraInterest" );
// For each object, find out its name and class, if possible
WhatAmI( o3DObjCamera );                //INFO : MyCameraName is a Camera
WhatAmI( o3DObjCameraInterest );        //INFO : MyCameraIntName is a Null
WhatAmI( oPrimObjCamera );              //INFO : MyCameraName.camera is a Primitive
WhatAmI( oPrimObjCameraInterest );      //INFO : input object is a undefined
// Convenience function
function WhatAmI( in_obj ) 
{
        // To prevent crashes, use the try...catch statement, because using ClassName 
        // on a simple data type (string, number, etc.) will throw an error
        try {
                LogMessage( in_obj + " is a " + ClassName(in_obj) );
        } catch (e) {
                LogMessage( "input object is " + typeof(in_obj) );
        }
}
 |