## TimerEvent

Object Hierarchy | Related C++ Class: TimerEvent

### Inheritance

###

SIObject

EventInfo

TimerEvent

### Introduced

v5.1

### Description

A TimerEvent represents a system timer and allows you to specify the interval and the delay time at which a timer elapses. Timers in Softimage are independent of the timeline clock and can be used to produce recurrent work accurately. For example, you can implement an autosave mechanism with a TimerEvent.
The TimerEvent object derives from EventInfo and can be managed like a regular Softimage event. Use PluginRegistrar.RegisterTimerEvent to register them and XSIApplication.EventInfos to access them. Timer events can be suspended with muting and resumed by un-muting (see EventInfo.Mute). You can reset a timer with TimerEvent.Reset.
Note: Timer events are based on Windows timers and are processed by Softimage with a low priority. Although they can be set with milliseconds accuracy, timer events can sometimes be delayed due to the current activity of Softimage.

### Methods

IsClassOf | IsEqualTo | Reset |

### Properties

Application | Attributes | Categories | CustomData
Delay | FileName | FullName | Handler
Help | Interval | Language | Mute
Name | NestedObjects | Origin | OriginPath
Parent | Type |  |

### Examples

#### JScript Example

    /*

    	This example demonstrates how to register a timer event and to change its

    values.

    	To try out this example save it into the Plugins directory

    	(User, Factory or Workgroup). Once you have restarted Softimage, the current

    	scene will be saved automatically every 15 secs.

    	( You can also load the plug-in without restarting Softimage - see

    	XSIApplication.LoadPlugin )

    */

    function XSILoadPlugin( in_reg )

    {

    	in_reg.Author = "Softimage SDK Team" ;

    	in_reg.Name = "SDK Example - Save scene timer" ;

    	in_reg.Major = 1 ;

    	in_reg.Minor = 0 ;

    	// Register the save scene timer. The timer elapses every 15 secs. (0==no delay)

    	in_reg.RegisterTimerEvent( "AutoSaveSceneTimer", 15000, 0 );

    	in_reg.RegisterProperty( "AutoSaveProp" );

    	in_reg.RegisterMenu( siMenuMainTopLevelID, "Auto Save Demo", true, false );

    	return true ;

    }

    function AutoSaveSceneTimer_OnEvent( ctxt )

    {

    	// Save current scene

    	Application.SaveScene( );

    	// Log time

    	var strFileName = ActiveProject.ActiveScene.Parameters("Filename").Value;

    	var today = new Date();

    	var strTime = today.toDateString();

    	strTime += ", " + today.toTimeString();

    	Application.LogMessage( "<"+strFileName+">" + " saved on " + strTime );

    	// Do not mute the timer

    	return false;

    }

    function GetAutoSaveProp( )

    {

    	var strName = "AutoSaveProp";

    	var root = ActiveSceneRoot;

    	var prop = root.Properties.Item( strName ) ;

    	if ( prop == null )

    	{

    		return root.AddProperty( strName );

    	}

    	else

    	{

    		return prop ;

    	}

    }

    function AutoSaveDemo_Init( in_ctxt )

    {

    	var menu = in_ctxt.source;

    	menu.AddCallbackItem( "Launch Auto Save Demo", "ShowAutoSaveProp" );

    	return true;

    }

    function ShowAutoSaveProp( )

    {

    	InspectObj( GetAutoSaveProp( ), "", "", siLock );

    }

    function AutoSaveProp_Define( ctxt )

    {

    	var pset;

    	pset = ctxt.Source;

    	pset.AddParameter2("Auto_Save_Interval",siInt4,15,0,50,null,null,0,siPersistable);

    	pset.AddParameter2("Auto_Save_Delay",siInt4,0,0,50,null,null,0,siPersistable);

    	pset.AddParameter2("Auto_Save_Scene",siBool,true,null,null,null,null,0,siPersistable);

    	return true;

    }

    function AutoSaveProp_DefineLayout( ctxt )

    {

    	var layout,oItem;

    	layout = ctxt.Source;

    	layout.Clear();

    	layout.AddGroup();

    	layout.AddItem("Auto_Save_Interval", "Interval (secs)" );

    	layout.AddItem("Auto_Save_Delay", "Delay (secs)" );

    	layout.EndGroup();

    	layout.AddGroup();

    	layout.AddRow( );

    	layout.AddButton( "Auto_Save_Reset","Reset Timer" ) ;

    	layout.AddGroup();

    	layout.EndGroup();

    	layout.AddItem( "Auto_Save_Scene", "Enable" );

    	layout.EndRow( );

    	layout.EndGroup();

    	return true;

    }

    function AutoSaveProp_OnInit( ctxt )

    {

    	var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );

    	var p = PPG.Auto_Save_Interval;

    	p.Value = evTimer.Interval / 1000;

    	p = PPG.Auto_Save_Delay;

    	p.Value = evTimer.Delay / 1000;

    }

    //--------------------------------------------------------------------------

    // Reset Timer button callback to restart the Auto Save timer with new values

    //--------------------------------------------------------------------------

    function AutoSaveProp_Auto_Save_Reset_OnClicked()

    {

    	var p = PPG.Auto_Save_Interval;

    	var interval = p.Value * 1000;

    	p = PPG.Auto_Save_Delay;

    	var delay = p.Value * 1000;

    	var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );

    	evTimer.Reset( interval, delay );

    	// update the UI

    	PPG.Auto_Save_Scene.Value = true;

    }

    //--------------------------------------------------------------------------

    // Start/Stop the AutoSaveSceneTimer timer.

    //--------------------------------------------------------------------------

    function AutoSaveProp_Auto_Save_Scene_OnChanged( )

    {

    	var paramVal = PPG.Auto_Save_Scene.Value;

    	var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );

    	evTimer.Mute = paramVal==false;

    }