AddBridgeTransition

Introduced

v1.5

Description

Creates a bridge transition between two periodic animation clips. Both clips have to overlap. The "From" clip has to start before the "To" clip. The "To" clip has to start before the "From" clip ends. The periods of both clips are assumed to be the duration of the clips (i.e. time Clip out - Clip in).

Scripting Syntax

oReturn = AddBridgeTransition( [From], [To], [Name] );

Return Value

Returns the Transition.

Parameters

Parameter Type Description
From String The source clip from which to transition.

Default Value: Current selection, if empty: pick session

To String The target clip to which to transition.

Default Value: Current selection, if empty: pick session

Name String Name of the transition. Currently not used.

Examples

VBScript Example

' This example builds a couple of Actions, one which has

' the sphere moving slowly on a three-sided path, the other

' which has the sphere moving quickly on a four-sided path.

' It then uses a bridge transition to perform a correct

' transition between these two looped motions (which have

' different periods). 

slowPeriod = 30		' period of the slow looping Action

fastPeriod = 12		' period of the fast looping Action

preFade = 60		' approx time to cycle before starting transition

crossFade = 100		' approx desired duration of transition

posParams = "/kine.local.posx,kine.local.posy,kine.local.posz"

' Create an object for our example.

set oObj = CreatePrim( "Sphere", "MeshSurface" )

' Make an Action with it moving slowly in a wide (three-sided) loop.

BuildLoop oObj, slowPeriod, 15, false

set oSlowSource = StoreAction( , oObj & posParams, 2, "Slow", True, _

				0, slowPeriod - 1 )

' Make an Action with it moving quickly in a tight (four-sided) loop.

BuildLoop oObj, fastPeriod, 3, true

set oFastSource = StoreAction( , oObj & posParams, 2, "Fast", True, _

				0, fastPeriod - 1 )

' Instantiate the Actions on the mixer -- cycled,

' overlapped and ready for the Bridge Transition.

set oSlowClip = AddClip( "Scene_Root", oSlowSource, , , 1 )

set oFastClip = AddClip( "Scene_Root", oFastSource, , , _

				round( preFade / slowPeriod ) * slowPeriod + 1 )

overlapSlowCycles = round( ( crossFade + preFade - slowPeriod ) / slowPeriod )

SetValue oSlowClip & ".actionclip.timectrl.extrapaft_type", 2

SetValue oSlowClip & ".actionclip.timectrl.extrapaft_nbcycles", overlapSlowCycles

SetValue oFastClip & ".actionclip.timectrl.extrapaft_type", 2

SetValue oFastClip & ".actionclip.timectrl.extrapaft_nbcycles", _

				round( overlapSlowCycles * slowPeriod / fastPeriod ) + 1

' Apply the Bridge Transition, which will match the

' frequency of the periodic motions.  Compare it to

' a regular transition, where the motions tend to

' cancel each other out if they are at different frequencies.

AddBridgeTransition oSlowClip, oFastClip

' Set a suitable timeline start/end for playback of this example.

SetValue "PlayControl.In", 1

SetValue "PlayControl.Out", GetValue( oFastClip & ".actionclip.timectrl.resout" )

'==================================================

' Helper method to create the looping paths (three- or four-sided).

'==================================================

sub BuildLoop( in_oObj, in_period, in_size, in_bFourSided )

	SetPositionKey in_oObj, 0,				-0.5 * in_size, -0.5 * in_size, 0

	if in_bFourSided then

		SetPositionKey in_oObj, in_period / 4,	0.5 * in_size, -0.5 * in_size, 0

		SetPositionKey in_oObj, in_period / 2,	0.5 * in_size, 0.5 * in_size, 0

		SetPositionKey in_oObj, 3 * in_period / 4,	-0.5 * in_size, 0.5 * in_size, 0

	else

		SetPositionKey in_oObj, in_period / 3,	0.5 * in_size, -0.5 * in_size, 0

		SetPositionKey in_oObj, 2 * in_period / 3,	0, 0.5 * in_size, 0

	end if

	SetPositionKey in_oObj, in_period,			-0.5 * in_size, -0.5 * in_size, 0

end sub

'==================================================

' Helper method to key an object somewhere at a given frame.

'==================================================

sub SetPositionKey( in_oObj, in_frame, in_posX, in_posY, in_posZ )

	Translate in_oObj, in_posX, in_posY, in_posZ, siAbsolute, siParent, siObj, siXYZ

	SaveKey in_oObj & posParams, in_frame

end sub

See Also

AddTransition