You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
4.2 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkInteractorEventRecorder.h
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.
=========================================================================*/
/**
* @class vtkInteractorEventRecorder
* @brief record and play VTK events passing through a vtkRenderWindowInteractor
*
*
* vtkInteractorEventRecorder records all VTK events invoked from a
* vtkRenderWindowInteractor. The events are recorded to a
* file. vtkInteractorEventRecorder can also be used to play those events
* back and invoke them on an vtkRenderWindowInteractor. (Note: the events
* can also be played back from a file or string.)
*
* The format of the event file is simple. It is:
* EventName X Y ctrl shift keycode repeatCount keySym
* The format also allows "#" comments.
*
* @sa
* vtkInteractorObserver vtkCallback
*/
#ifndef vtkInteractorEventRecorder_h
#define vtkInteractorEventRecorder_h
#include "vtkInteractorObserver.h"
#include "vtkRenderingCoreModule.h" // For export macro
// The superclass that all commands should be subclasses of
class VTKRENDERINGCORE_EXPORT vtkInteractorEventRecorder : public vtkInteractorObserver
{
public:
static vtkInteractorEventRecorder* New();
vtkTypeMacro(vtkInteractorEventRecorder, vtkInteractorObserver);
void PrintSelf(ostream& os, vtkIndent indent) override;
// Satisfy the superclass API. Enable/disable listening for events.
void SetEnabled(int) override;
void SetInteractor(vtkRenderWindowInteractor* iren) override;
//@{
/**
* Set/Get the name of a file events should be written to/from.
*/
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
//@}
/**
* Invoke this method to begin recording events. The events will be
* recorded to the filename indicated.
*/
void Record();
/**
* Invoke this method to begin playing events from the current position.
* The events will be played back from the filename indicated.
*/
void Play();
/**
* Invoke this method to stop recording/playing events.
*/
void Stop();
/**
* Rewind to the beginning of the file.
*/
void Rewind();
//@{
/**
* Enable reading from an InputString as compared to the default
* behavior, which is to read from a file.
*/
vtkSetMacro(ReadFromInputString, vtkTypeBool);
vtkGetMacro(ReadFromInputString, vtkTypeBool);
vtkBooleanMacro(ReadFromInputString, vtkTypeBool);
//@}
//@{
/**
* Set/Get the string to read from.
*/
vtkSetStringMacro(InputString);
vtkGetStringMacro(InputString);
//@}
protected:
vtkInteractorEventRecorder();
~vtkInteractorEventRecorder() override;
// file to read/write from
char* FileName;
// listens to delete events
vtkCallbackCommand* DeleteEventCallbackCommand;
// control whether to read from string
vtkTypeBool ReadFromInputString;
char* InputString;
// for reading and writing
istream* InputStream;
ostream* OutputStream;
// methods for processing events
static void ProcessCharEvent(
vtkObject* object, unsigned long event, void* clientdata, void* calldata);
static void ProcessDeleteEvent(
vtkObject* object, unsigned long event, void* clientdata, void* calldata);
static void ProcessEvents(
vtkObject* object, unsigned long event, void* clientdata, void* calldata);
virtual void WriteEvent(
const char* event, int pos[2], int modifiers, int keyCode, int repeatCount, char* keySym);
virtual void ReadEvent();
// Manage the state of the recorder
int State;
enum WidgetState
{
Start = 0,
Playing,
Recording
};
// Associate a modifier with a bit
enum ModifierKey
{
ShiftKey = 1,
ControlKey = 2,
AltKey = 4
};
static float StreamVersion;
private:
vtkInteractorEventRecorder(const vtkInteractorEventRecorder&) = delete;
void operator=(const vtkInteractorEventRecorder&) = delete;
};
#endif /* vtkInteractorEventRecorder_h */