/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkAnimationCue.h,v $ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME vtkAnimationCue - a seqin an animation. // .SECTION Description // vtkAnimationCue and vtkAnimationScene provide the framework to support // animations in VTK. vtkAnimationCue represents an entity that changes/ // animates with time, while vtkAnimationScene represents scene or setup // for the animation, which consists on individual cues or other scenes. // // A cue has three states: UNINITIALIZED, ACTIVE and INACTIVE. // UNINITIALIZED represents an point in time before the start time of the cue. // The cue is in ACTIVE state at a point in time between start time and end time // for the cue. While, beyond the end time, it is in INACTIVE state. // When the cue enters the ACTIVE state, StartAnimationCueEvent is fired. This // event may be handled to initialize the entity to be animated. // When the cue leaves the ACTIVE state, EndAnimationCueEvent is fired, which // can be handled to cleanup after having run the animation. // For every request to render during the ACTIVE state, AnimationCueTickEvent is // fired, which must be handled to perform the actual animation. // .SECTION See Also // vtkAnimationScene #ifndef __vtkAnimationCue_h #define __vtkAnimationCue_h #include "vtkObject.h" class VTK_COMMON_EXPORT vtkAnimationCue: public vtkObject { public: vtkTypeRevisionMacro(vtkAnimationCue,vtkObject); void PrintSelf(ostream& os, vtkIndent indent); static vtkAnimationCue* New(); //BTX // Structure passed on every event invocation. // Depending upon the cue time mode, these times are either // normalized [0,1] or relative to the scene that contains the cue. class AnimationCueInfo { public: double StartTime; double EndTime; double AnimationTime;// valid only on AnimationCueTickEvent double DeltaTime; // valid only on AnimationCueTickEvent }; //ETX // Description: // Get/Set the time mode. In Normalized mode, the start and end // times of the cue are normalized [0,1] with respect to the start and // end times of the container scene. In Relative mode the start and end // time of the cue are specified in offset seconds relative to the // start time of the container scene. virtual void SetTimeMode(int mode); vtkGetMacro(TimeMode, int); void SetTimeModeToRelative() { this->SetTimeMode(TIMEMODE_RELATIVE); } void SetTimeModeToNormalized() { this->SetTimeMode(TIMEMODE_NORMALIZED); } // Description: // Get/Set the Start time for this cue. // When the current time is >= StartTime, the Cue is in // ACTIVE state. if Current time i < StartTime, the Cue is in // UNINITIALIZED state. Whenever the cue enters the ACTIVE state from // an INACTIVE state, it triggers the StartEvent. // The Start time is in seconds relative to the start of the // container Scene (when in Relative time mode) or is normalized // over the span of the container Scene (when in Normalized time mode). vtkSetMacro(StartTime, double); vtkGetMacro(StartTime, double); // Description: // Get/Set the End time for this cue. // When the current time is > EndTime, the Cue is in // INACTIVE state. Whenever the cue leaves an ACTIVE state to enter // INACTIVE state, the EndEvent is triggered. // The End time is in seconds relative to the start of the // container Scene (when in Relative time mode) or is normalized // over the span of the container Scene (when in Normalized time mode). vtkSetMacro(EndTime, double); vtkGetMacro(EndTime, double); // Description: // Indicates a tick or point in time in the animation. // Triggers a Tick event if currenttime >= StartTime and // currenttime <= EndTime. // Whenever the state of the cue changes, // either StartEvent or EndEvent is triggerred depending upon // whether the cue entered Active state or quit active state respectively. // The current time is relative to the start of the container Scene // (when in Relative time mode) or is normalized // over the span of the container Scene (when in Normalized time mode). // deltatime is the time since last call to Tick. deltatime also can be in seconds // relative to the start of the container Scene or normalized depending upon the // cue's Time mode. // For the first call to Tick // after a call to Initialize(), the deltatime is 0; virtual void Tick(double currenttime, double deltatime); // Description: // Called when the playing of the scene begins. // This will set the Cue to UNINITIALIZED state. virtual void Initialize(); // Description: // Called when the scene reaches the end. // If the cue state is ACTIVE when this method is called, this will // trigger a EndAnimationCueEvent. virtual void Finalize(); //BTX enum TimeCodes { TIMEMODE_NORMALIZED=0, TIMEMODE_RELATIVE=1 }; //ETX protected: vtkAnimationCue(); ~vtkAnimationCue(); //BTX enum { UNINITIALIZED=0, INACTIVE, ACTIVE }; //ETX double StartTime; double EndTime; int TimeMode; // Description: // Current state of the Cue. int CueState; // Description: // These are the internal methods that actually trigger they // corresponding events. Subclasses can override these to // do extra processing at start/end or on tick. virtual void StartCueInternal(); virtual void TickInternal(double currenttime, double deltatime); virtual void EndCueInternal(); private: vtkAnimationCue(const vtkAnimationCue&); // Not implemented. void operator=(const vtkAnimationCue&); // Not implemented. }; #endif