## Parameter.AddFCurve2

### Description

Creates and connects an FCurve to this parameter. This method differs from the Parameter.AddFCurve method in that only the key value array and function curve type are required as arguments. The key value array contains the key frame and value only, the tangents are calculated automatically.
If no type argument is specified, then the type of fcurve added will be based on the parameter's type (which is configured in the parameter's definition). You can override the default fcurve type associated with a parameter by adding the SPDL attribute 'FCurveType = Standard;' or 'FCurveType = Integer;'.
By default standard fcurves will be created for parameters of type: siDouble, siFloat, siInt4, siInt2, siByte, siUInt4, siUInt2 and siUByte (see siVariantType for further details on types). If the parameter represents a boolean, then a boolean fcurve will be created.

### C# Syntax

    FCurve Parameter.AddFCurve2( Object in_KeyValueArray, Object in_Type );

### Scripting Syntax

    oReturn = Parameter.AddFCurve2( [KeyValueArray], [Type] );

### Return Value

FCurve

### Parameters

Parameter | Type | Description
--- | --- | ---
KeyValueArray | Variant | The array may be a 1- or 2-dimensional array. For 2 dimensional arrays the first dimension must define the key values. The key value consists of the key time (in frames) and the key value ( in value units ). For bezier fcurves the tangents will be calculated automatically.
Type | siFCurveType | The type of the FCurve. Default Value: defined by parameter type

### Examples

#### JScript Example

    /*
            This example demonstrates how to set up and populate an fcurve
            using the z-position values from an animation fcurve created
            by setting keys on a null. The newly created z-position fcurve
            is then applied to a sphere's z-position.
    */
    NewScene(null, false);
    // Get a null and animate it.
    var oRoot = Application.ActiveProject.ActiveScene.Root;
    var oNull = oRoot.AddPrimitive("Null");
    SaveKey(oNull + ".kine.local.posx", 1);
    SaveKey(oNull + ".kine.local.posy", 1);
    SaveKey(oNull + ".kine.local.posz", 1);
    SetValue("PlayControl.Current", 50);
    Translate(oNull, -14, 0.5, -12, siRelative, siView, siObj, siXYZ);
    SaveKey(oNull + ".kine.local.posx", 50);
    SaveKey(oNull + ".kine.local.posy", 50);
    SaveKey(oNull + ".kine.local.posz", 50);
    // Loop through the animation and store the z values into a key array for AddFCurve2 (aZKeys).
    var oPosVector = XSIMath.CreateVector3();
    var aZKeys = new Array(50 * 2+1);
    for ( i=0; i<=50; i++ )
    {
            var oCurrentTransform = oNull.Kinematics.Global.Transform(i);
            oCurrentTransform.GetTranslation(oPosVector);
            aZKeys[i*2] = i;
            aZKeys[i*2+1] = oPosVector.z;
    }
    // Now get a sphere and place the FCurves on it.
    var oSphere = oRoot.AddGeometry("Sphere", "MeshSurface");
    oSphere.Kinematics.Global.Parameters("posz").AddFCurve2(aZKeys);

### See Also

Parameter.Source Parameter.AddFCurve