SetKey (FCurve)

Introduced

3.0

Description

Sets the time (in frames) and value of the key at the specified index.

Note: If another key already exists at the new frame value then the method raises a 'Cannot set key' (E_FAIL) error.

If the index is out of range then the method raises an 'Invalid argument' (E_INVALIDARG) error.

If the fcurve is locked then the method raises an 'Access Denied' (E_ACCESSDENIED) error.

Scripting Syntax

FCurve.SetKey( Index, Frame, Value, [OverrideKeyLock] )

C# Syntax

FCurve.SetKey( Int32 in_Index, Object in_Frame, Object in_Value, Boolean in_OverrideKeyLock );

Parameters

Parameter

Type

Description

Index

Long

Index of the key. Must be a value between 0 and (number of keys - 1).

Frame

Variant

The new key time in frames.

Value

Variant

The new key value. Use a value type as follows:

For standard and raw fcurves use a double value (VT_R8)

For integer fcurves use a LONG (VT_I4) For boolean fcurves use a variant bool value (VT_BOOL,VARIANT_TRUE,VARIANT_FALSE).

OverrideKeyLock

Boolean

Override the FCurveKey.Locked value to force key to be removed.

Default Value: false

Examples

JScript Example

/*
   This JScript example illustrates how to use the FCurve.SetKey method
   to translate keys.
*/

// Create a null
Application.NewScene( null, false );
var nullobj = ActiveSceneRoot.AddNull();

// Create an fcurve on the posx parameter from the null
var fc = nullobj.posx.AddFCurve()

// Create a custom property set on the null
var cpset = nullobj.AddCustomProperty( "CustomPSet" );
var empty;
var x = cpset.AddParameter( "X", siDouble, empty, siAnimatable, "X", "X", empty, 5, 0, 5 );
var y = cpset.AddParameter( "Y", siInt4, empty, siAnimatable, "Y", "Y", empty, 5, 0, 5 );

var fc1 = x.AddFCurve();
var fc2 = y.AddFCurve();

// Start editing the fcurves
fc1.BeginEdit();
fc2.BeginEdit();


// Add keys to the fcurves
fc1.Resample();
fc2.Resample();

// Assign some values to keys
var val, X;

for ( i=0; i<fc1.GetNumKeys(); i++ )
{
   X = ( (i+1) - 10 )/10;

   fc1.GetKeyAtIndex(i).Value = Math.atan( X / Sqr( -X * X + 1 ) );

   // Copy the value to fc2 for comparison
   fc2.GetKeyAtIndex(i).Value = fc1.GetKeyValue(i);
}

var ckeys = fc1.GetNumKeys();
var tangents = new Array( ckeys * 4 );
var itan = 0;

// Save tangents
for ( i=0; i<ckeys; i++ )
{
   var key = fc1.GetKeyAtIndex(i);

   // Save the tangents
   tangents[itan++] = key.LeftTanX;
   tangents[itan++] = key.LeftTanY;
   tangents[itan++] = key.RightTanX;
   tangents[itan++] = key.RightTanY;
}

// Translate the keys
for ( i=0; i<ckeys; i++ )
{
   frame = fc1.GetKeyFrame(i);
   val = fc1.GetKeyValue(i);

   key = fc1.GetKey(frame);

   fc1.SetKey( i, frame-100, val * 1.25 );
}

// Reset the tangents
fc1.SetKeyTangents(tangents);

// End editing the fcurves
fc1.EndEdit();
fc2.EndEdit();

// Utility function
function Sqr( x ) 
{
   return x * x;
}

See Also

FCurveKey.Locked

FCurveKey.Set

FCurveKey.Time

FCurveKey.Value



Autodesk Softimage v7.5