## ActionSource.PartialOffload

### Introduced

v4.0

### Description

Partially offloads the fcurve items one or many action sources for a given range of frames. Note that this applies only to FCurve items in the action.
The action source needs to have an external storage in order to be able to execute this command. Before offloading an action source, if the action is dirty it will be exported. Once offloaded or partially offloaded, an action source will never export the data again. When an action source is partially offloaded, the status parameter of the source is reset to 1 (roughly equivalent to the siAssetStatusPartiallyLoaded enum value.

### C# Syntax

    ActionSource.PartialOffload( Int32 in_dStartFrame, Int32 in_dEndFrame, Boolean in_bRemember );

### Scripting Syntax

    ActionSource.PartialOffload( FrameStart, FrameEnd, [Remember] );

### Parameters

Parameter | Type | Description
--- | --- | ---
FrameStart | Integer | The frame to start offloading the fcurve keys. If smaller than AnimStart parameter on the action, AnimStart will be used instead.
FrameEnd | Integer | The frame to end offloading the fcurve keys. If greater than AnimEnd parameter on the action, AnimStart will be used instead.
Remember | Boolean | If true, the range of frames will be appended to the OffloadedRanges parameter of the action, so when the scene is reloaded the partial offload will be processed. If false, the range of frames is only temporarily offloaded. Default Value: false

### Examples

#### JScript Example

    /*

    This example demonstrates how to partially offload an animation source.

    */

    NewScene( null, false );

    // Create an animation source of a sphere.

    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);

    var oAction = GetValue("Sources.Animation.Model.simplemove");

    // Now offload the fcurve in the section of frames 10 to 20

    oAction.PartialOffload( 10,20, false );

    LogMessage(oAction.status.Value);

    LogMessage(oAction.OffloadedRanges.Value);

    // Note that this partial offload as not been added to the OffloadedRanges parameter of the source.

    // reloading the action will dispose the temporary offloaded ranges

    oAction.Reload();

    oAction.PartialOffload( 12,22, true );

    LogMessage(oAction.status.Value);

    LogMessage(oAction.OffloadedRanges.Value);

    // Expected result:

    //INFO : 1

    //INFO :

    //INFO : 1

    //INFO : 12,22

### See Also

PartialOffloadAction ActionSource.Offload