FCurve.ScaleKeys

Introduced

v6.0

Description

Scales fcurve keys in time or value by a relative amount. The scaling amount is relative to the keyframe bounding box and the anchor point so that a value of 0.5 would scale the keys by 50%.

Note: If the KeyCollection is from a different fcurve then the method will raise an 'Invalid argument' (E_INVALIDARG) error.

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

C# Syntax

FCurve.ScaleKeys( FCurveKeyCollection in_Keys, Double in_FrameFactor, Double in_ValueFactor, Object in_FrameAnchor, Object in_ValueAnchor, Boolean in_Ripple );

Scripting Syntax

FCurve.ScaleKeys( KeyCollection, [FrameFactor], [ValueFactor], [FrameAnchor], [ValueAnchor], [Ripple] );

Parameters

Parameter Type Description
KeyCollection FCurveKeyCollection The keys to offset.
FrameFactor Double The relative amount to scale the fcurve's time.

Default Value: 1.0

ValueFactor Double The relative amount to scale the fcurve's value.

Default Value: 1.0

FrameAnchor Variant The center point for frame scaling.

Default Value: 0.0

ValueAnchor Variant The center point for value scaling.

Default Value: 0.0

Ripple Boolean If true then keys before the first and after the last key in KeyCollection will be offset to maintain their distance from the scaled keys

Default Value: False

Examples

JScript Example

// 
// This example illustrates how to scale some fcurve keys by 50%.
// Create a new scene
NewScene(null, false);
// Create a null
oNull = Application.GetPrim("Null");
// Get the posx parameter of the null
oPosX = oNull.posx
// Create array of time-value pairs
aKeys = new Array( 0.00, 5.00,
				1.00, 6.00,
				2.00, 7.00,
				3.00, 8.00,
				4.00, 9.00,
				5.00, 10.00 );
// Create an empty FCurve
oFCurve = oPosX.AddFCurve2( null, siStandardFCurve );
// Set the fcurve keys
oFCurve.SetKeys( aKeys );
Application.LogMessage( 'Before Scaling:', siInfo );
for (var i = 0; i < oFCurve.Keys.Count; i++) 
{
	Application.LogMessage( 'Time: ' + oFCurve.Keys(i).Time + ', Value: ' + oFCurve.Keys(i).Value, siInfo );
}
oFCurve.ScaleKeys( oFCurve.GetKeysBetween( 2, 4 ), 0.5, 0.5, 3.0, 7.5, false );
Application.LogMessage( 'After Scaling:', siInfo );
for (var i = 0; i < oFCurve.Keys.Count; i++) 
{
	Application.LogMessage( 'Time: ' + oFCurve.Keys(i).Time + ', Value: ' + oFCurve.Keys(i).Value, siInfo );
}
// Produces the following output:
//
//INFO : Before Scaling:
//INFO : Time: 0, Value: 5
//INFO : Time: 1, Value: 6
//INFO : Time: 2, Value: 7
//INFO : Time: 3, Value: 8
//INFO : Time: 4, Value: 9
//INFO : Time: 5, Value: 10
//INFO : After Scaling:
//INFO : Time: 0, Value: 5
//INFO : Time: 1, Value: 6
//INFO : Time: 2.5, Value: 7.25
//INFO : Time: 3, Value: 7.75
//INFO : Time: 3.5, Value: 8.25
//INFO : Time: 5, Value: 10

See Also

FCurve.Scale FCurve.Offset FCurve.OffsetKeys