Object Hierarchy | Related C++ Class: TimerEvent
TimerEvent
v5.1
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.
Application | Attributes | Categories | CustomData |
Delay | FileName | FullName | Handler |
Help | Interval | Language | Mute |
Name | NestedObjects | Origin | OriginPath |
Parent | Type | ||
/* 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; } |