v4.0
Partially offloads one or many fcurve action sources for a given range of frames. The action
source needs to have external storage in order to be able to execute this command.
Before offloading an action source, if the action is dirty it is exported. Once offloaded or
partially offloaded, an action source never exports the data again. When an action source is
partially offloaded, the Status parameter of the source becomes siActionStatusPartiallyLoaded
(see siAssetStatus).
Note: This applies only to the FCurve action sources.
PartialOffloadAction( [InputObjs], StartFrame, EndFrame, [Remember] ); |
Parameter | Type | Description |
---|---|---|
InputObjs | String |
List of action sources to process. Default Value: Current selection |
StartFrame | Integer | The frame to start offloading the fcurve keys. If smaller than the AnimStart parameter on the action, the AnimStart value is used instead. |
EndFrame | Integer | The frame to end offloading the fcurve keys. If greater than the AnimEnd parameter on the action, the AnimEnd value is used instead. |
Remember | Boolean |
If true, the range of frames is appended to the parameter OffloadedRanges of
the action, so when the scene is reloaded the partial offload will be processed.
Otherwise, it is only temporarily offloaded.
Default Value: False |
/* This example shows how to partially offload an animation source. */ // ---------------------------------------------------------------------------------- // // SETUP // Create an animation source of a sphere. NewScene( null, false ); CreatePrim( "Cone", "MeshSurface", null, null ); Translate( null, -7.85065649868519, 0.715575131336405, -7.15575131336405E-02, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null ); SaveKey( "cone.kine.local.posx,cone.kine.local.posy,cone.kine.local.posz", 1, null, null ); SetValue( "PlayControl.Key", 10, null ); SetValue( "PlayControl.Current", 10, null); Translate(null, 4.19500728937374, 7.06630442194682, -0.706630442194682, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null ); SaveKey( "cone.kine.local.posx,cone.kine.local.posy,cone.kine.local.posz", 10, null, null ); SetValue( "PlayControl.Key", 20, null ); SetValue( "PlayControl.Current", 20, null ); Translate( null, 4.25493596493627, -7.84151081422792, 0.784151081422792, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null ); SaveKey( "cone.kine.local.posx,cone.kine.local.posy,cone.kine.local.posz", 20, null, null ); SetValue( "PlayControl.Key", 30, null ); SetValue( "PlayControl.Current", 30, null ); Translate( null, 4.1350786138113, 7.57317013997673, -0.757317013997673, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null ); SaveKey( "cone.kine.local.posx,cone.kine.local.posy,cone.kine.local.posz", 30, null, null ); SetValue( "PlayControl.Key", 40, null ); SetValue( "PlayControl.Current", 40, null ); Translate( null, 2.21736099581185, -7.48372324855972, 0.748372324855972, siRelative, siView, siObj, siXYZ, null, null, null, null, null, null, null, null, null ); SaveKey( "cone.kine.local.posx,cone.kine.local.posy,cone.kine.local.posz", 40, null, null ); CreateModel( null, null, null ); SelectObj( "Model.Cone", null, null ); StoreAction( "", "Model.Cone.kine.local.sclx,Model.Cone.kine.local.scly," + "Model.Cone.kine.local.sclz,Model.Cone.kine.local.rotx,Model.Cone.kine.local.roty," + "Model.Cone.kine.local.rotz,Model.Cone.kine.local.posx,Model.Cone.kine.local.posy," + "Model.Cone.kine.local.posz,Model.Cone.kine.global.sclx,Model.Cone.kine.global.scly," + "Model.Cone.kine.global.sclz,Model.Cone.kine.global.rotx,Model.Cone.kine.global.roty," + "Model.Cone.kine.global.rotz,Model.Cone.kine.global.posx,Model.Cone.kine.global.posy," + "Model.Cone.kine.global.posz", 2, "simplemove", true, 1, 40, false, false ); // Add a clip of the source in the mixer SelectObj( "Model", null, null ); AddTrack( "Model", "Model", 0, null, null ); AddClip( "Model", "Sources.Animation.Model.simplemove", null, "Model.Mixer.Mixer_Anim_Track", 1, null, null, null, null ); SetValue( "PlayControl.Key", 20, null ); SetValue( "PlayControl.Current", 20, null ); // We need to set the external storage to external if we want to be able to offload the source SetValue( "Sources.Animation.Model.simplemove.storage", 3, null ); var oAction = GetValue( "Sources.Animation.Model.simplemove" ); // ---------------------------------------------------------------------------------- // // OFFLOAD // Note that this partial offload has not been added to the OffloadedRanges parameter // of the source. PartialOffloadAction( "Sources.Animation.Model.simplemove", 10, 20, false ); Application.LogMessage ( FindActionStatus(oAction.status.Value) ); Application.LogMessage ( oAction.OffloadedRanges.Value ); // ---------------------------------------------------------------------------------- // // RELOAD // Reloading the action will dispose the temporary offloaded ranges oAction.Reload(); PartialOffloadAction( "Sources.Animation.Model.simplemove", 12, 22, true ); Application.LogMessage ( FindActionStatus(oAction.status.Value) ); Application.LogMessage ( oAction.OffloadedRanges.Value ); // ---------------------------------------------------------------------------------- // // OUTPUT //INFO : The action source contains section that are offloaded. //INFO : //INFO : The action source contains section that are offloaded. //INFO : 12,22 // ---------------------------------------------------------------------------------- // // HELPER function FindActionStatus( in_Val ) { var results = ""; switch ( in_Val ) { case siActionStatusOffloaded : results = "The action source is offloaded on disk."; break; case siActionStatusPartiallyLoaded : results = "The action source contains section that are offloaded."; break; case siActionStatusLoaded : results = "The action source is loaded."; break; default : results = "Unrecognized action status."; } return results; } |