## ClipEffect

Object Hierarchy | Related C++ Class: ClipEffect

### Inheritance

###

SIObject

ClipEffect

### Introduced

v4.0

### Description

The ClipEffect object represents the set of effects associated with a clip. Each ClipEffect object contains one item corresponding to a MappedItem. These ClipEffectItems contain expressions that control the clip without affecting the Source on which the clip was instantiated. For example, you can create a walk cycle with a progressive offset by using an expression similar to this: '(cid * 10) + this'
ClipEffects are available from the Clip object using the Clip.Effect property.

### Methods

IsClassOf | IsEqualTo |  |

### Properties

Application | Categories | FullName | Help
IsActive | IsPoseEffectActive | Items | Name
NestedObjects | Origin | OriginPath | Parent
PoseEffect | TimeReference | Type | Variables

### Examples

#### 1. Python Example

    oRoot = Application.ActiveSceneRoot

    oCube = oRoot.AddGeometry("Cube", "MeshSurface")

    #Creating the first animation source

    oSource = Application.StoreAction(oRoot, "cube.kine.local.posx,cube.kine.local.posy,cube.kine.local.posz",

    	1, "StoredStaticPose", 1, 1, 5, 0, 0)

    #Creating the first clip

    oClip = Application.AddClip(oRoot, oSource)

    for i in range(oClip.MappedItems.Count):

    	oCurrMappedItem = oClip.MappedItems(i)

    	oParam = oCurrMappedItem.Destination

    	if oParam.FullName == "cube.kine.local.posy":

    		Application.SetMappingRule(oClip.FullName + ".ActionClip",oParam,"frame",i+1)

    		break

    Application.LogMessage("The expression associated with the posy item is "

    	+ oCurrMappedItem.ClipEffectItem.Expression)

#### 2. JScript Example

    /*

    	This example demonstrates how to get at the ClipEffect objects by creating some

    	sources and clips with clip effects and then finding them again through the mapped

    	items on the clips in the mixer.

    */

    NewScene( ActiveProject, false );

    // Set up some sources and clips in the scene (see end of example for details)

    CreateFCurveAction( ActiveSceneRoot );

    // Get all the clips in the mixer and then the sources

    var clips = ActiveSceneRoot.Mixer.Clips;

    for ( var i=0; i<clips.Count; i++ ) {

    	// Look at their mapped items, but avoid the audio clips

    	if ( clips(i).Type != siClipAudioType && clips(i).MappedItems ) {

    		var clp = clips(i);

    		LogMessage( "Found " + clp.MappedItems.Count + " mapped items(s)" );

    		for ( var j=0; j<clp.MappedItems.Count; j++ ) {

    			var mapping = clp.MappedItems(j);

    			if ( mapping.ClipEffectItem.Expression != "" ) {

    				LogMessage( "\t...this clip has a clip effect item matching this expression:" );

    				LogMessage( "\t\t" + mapping.ClipEffectItem.Expression );

    			}

    			LogMessage( "\t...destination parameter: " + mapping.Destination );

    		}

    	}

    }

    // Expected results:

    //INFO : Found 3 mapped items(s)

    //INFO : 	...this clip has a clip effect item matching this expression:

    //INFO : 		this+5

    //INFO : 	...destination parameter: null.kine.local.sclx

    //INFO : 	...destination parameter: null.kine.local.scly

    //INFO : 	...destination parameter: null.kine.local.sclz

    // Convenience function

    function CreateFCurveAction( in_model )

    {

    	var obj = in_model.AddNull();

    	// Set FCurves on the null's scaling

    	var keys = new Array( 5, 1.2,  20, 1.7,  45, 2.0,  90, 2.5 );

    	obj.sclx.AddFCurve2( keys );

    	var keyfactor = Math.random() * 10;

    	var posfactor = Math.random();

    	for ( var i=0; i<keys.length; i=i+2 ) {

    		keys[i] = keys[i] + keyfactor;

    		keys[i+1] = keys[i+1] * posfactor;

    	}

    	obj.scly.AddFCurve2( keys );

    	var keyfactor = Math.random() * 10;

    	var posfactor = Math.random();

    	for ( var i=0; i<keys.length; i=i+2 ) {

    		keys[i] = keys[i] - keyfactor;

    		keys[i+1] = keys[i+1] * posfactor;

    	}

    	obj.sclz.AddFCurve2( keys );

    	// Get list of parameters to mark

    	var params = obj.sclx.FullName + ",";

    	params += obj.scly.FullName + ",";

    	params += obj.sclz.FullName;

    	// Make the FCurves into an Action

    	var src = StoreAction( in_model, params, 2, "StoredAnimFCrvAction" );

    	var clip = AddClip( in_model, src );

    	// Add some clip effects to it

    	var toclip = clip+".ActionClip";

    	var rtn = GetMappingRule( toclip, 0 );

    	var from = rtn.Value( "From" );

    	SetMappingRule( toclip, from, "this+5", 1 );

    }

### See Also

ClipEffectItem Clip.Effect GetMappingRule SetMappingRule