## SIGetPrimCamera

### Description

Creates a camera primitive with an interest.
Note: This command uses output arguments. C# and some scripting languages (such as JScript, PerlScript and Python) don't support arguments passed by reference so you need to use the best workaround for your situation:
For scripting languages this command returns an ISIVTCollection which you can use to get the output arguments.
For C# you can use the XSIApplication.ExecuteCommand method to call this command. ExecuteCommand packs the output arguments into a C# System.Object containing an Array of the output arguments (see Calling Commands from C#).

### Scripting Syntax

    SIGetPrimCamera( PresetObj, [Name], [InterestName], [Parent], [3DObjCamera], [3DObjCameraInterest], [PrimObjCamera], [PrimObjCameraInterest] );

### Parameters

Parameter | Type | Description
--- | --- | ---
PresetObj | String or a preset object (see SIGetPreset) | Any preset for Camera Primitives
Name | String | Name of the camera.
InterestName | String | Name of the camera interest.
Parent | String | Parent object for the camera.
3DObjCamera | Camera | Returns the camera.
3DObjCameraInterest | Null | Returns the camera interest.
PrimObjCamera | Primitive | Returns the camera primitive.
PrimObjCameraInterest | Null | Returns the camera interest primitive.

### Examples

#### JScript Example

    /*
            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) );
            }
    }

### See Also

GetPrimCamera