You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
8.2 KiB
197 lines
8.2 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkInteractorObserver.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 vtkInteractorObserver - an abstract superclass for classes observing events invoked by vtkRenderWindowInteractor
|
|
// .SECTION Description
|
|
// vtkInteractorObserver is an abstract superclass for subclasses that observe
|
|
// events invoked by vtkRenderWindowInteractor. These subclasses are
|
|
// typically things like 3D widgets; objects that interact with actors
|
|
// in the scene, or interactively probe the scene for information.
|
|
//
|
|
// vtkInteractorObserver defines the method SetInteractor() and enables and
|
|
// disables the processing of events by the vtkInteractorObserver. Use the
|
|
// methods EnabledOn() or SetEnabled(1) to turn on the interactor observer,
|
|
// and the methods EnabledOff() or SetEnabled(0) to turn off the interactor.
|
|
//
|
|
// To support interactive manipulation of objects, this class (and
|
|
// subclasses) invoke the events StartInteractionEvent, InteractionEvent, and
|
|
// EndInteractionEvent. These events are invoked when the
|
|
// vtkInteractorObserver enters a state where rapid response is desired:
|
|
// mouse motion, etc. The events can be used, for example, to set the desired
|
|
// update frame rate (StartInteractionEvent), operate on data or update a
|
|
// pipeline (InteractionEvent), and set the desired frame rate back to normal
|
|
// values (EndInteractionEvent). Two other events, EnableEvent and
|
|
// DisableEvent, are invoked when the interactor observer is enabled or
|
|
// disabled.
|
|
|
|
// .SECTION See Also
|
|
// vtk3DWidget vtkBoxWidget vtkLineWidget
|
|
|
|
#ifndef __vtkInteractorObserver_h
|
|
#define __vtkInteractorObserver_h
|
|
|
|
#include "vtkObject.h"
|
|
|
|
class vtkRenderWindowInteractor;
|
|
class vtkRenderer;
|
|
class vtkCallbackCommand;
|
|
|
|
class VTK_RENDERING_EXPORT vtkInteractorObserver : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkInteractorObserver,vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Methods for turning the interactor observer on and off, and determining
|
|
// its state. All subclasses must provide the SetEnabled() method.
|
|
// Enabling a vtkInteractorObserver has the side effect of adding
|
|
// observers; disabling it removes the observers. Prior to enabling the
|
|
// vtkInteractorObserver you must set the render window interactor (via
|
|
// SetInteractor()).
|
|
virtual void SetEnabled(int) {};
|
|
int GetEnabled() {return this->Enabled;}
|
|
void EnabledOn() {this->SetEnabled(1);}
|
|
void EnabledOff() {this->SetEnabled(0);}
|
|
void On() {this->SetEnabled(1);}
|
|
void Off() {this->SetEnabled(0);}
|
|
|
|
// Description:
|
|
// This method is used to associate the widget with the render window
|
|
// interactor. Observers of the appropriate events invoked in the render
|
|
// window interactor are set up as a result of this method invocation.
|
|
// The SetInteractor() method must be invoked prior to enabling the
|
|
// vtkInteractorObserver.
|
|
virtual void SetInteractor(vtkRenderWindowInteractor* iren);
|
|
vtkGetObjectMacro(Interactor, vtkRenderWindowInteractor);
|
|
|
|
// Description:
|
|
// Set/Get the priority at which events are processed. This is used when
|
|
// multiple interactor observers are used simultaneously. The default value
|
|
// is 0.0 (lowest priority.) Note that when multiple interactor observer
|
|
// have the same priority, then the last observer added will process the
|
|
// event first. (Note: once the SetInteractor() method has been called,
|
|
// changing the priority does not effect event processing. You will have
|
|
// to SetInteractor(NULL), change priority, and then SetInteractor(iren)
|
|
// to have the priority take effect.)
|
|
vtkSetClampMacro(Priority,float,0.0f,1.0f);
|
|
vtkGetMacro(Priority,float);
|
|
|
|
// Description:
|
|
// Enable/Disable of the use of a keypress to turn on and off the
|
|
// interactor observer. (By default, the keypress is 'i' for "interactor
|
|
// observer".) Set the KeyPressActivationValue to change which key
|
|
// activates the widget.)
|
|
vtkSetMacro(KeyPressActivation,int);
|
|
vtkGetMacro(KeyPressActivation,int);
|
|
vtkBooleanMacro(KeyPressActivation,int);
|
|
|
|
// Description:
|
|
// Specify which key press value to use to activate the interactor observer
|
|
// (if key press activation is enabled). By default, the key press
|
|
// activation value is 'i'. Note: once the SetInteractor() method is
|
|
// invoked, changing the key press activation value will not affect the key
|
|
// press until SetInteractor(NULL)/SetInteractor(iren) is called.
|
|
vtkSetMacro(KeyPressActivationValue,char);
|
|
vtkGetMacro(KeyPressActivationValue,char);
|
|
|
|
// Description:
|
|
// Set/Get the default renderer to use when activating the interactor
|
|
// observer. Normally when the widget is activated (SetEnabled(1) or when
|
|
// keypress activation takes place), the renderer over which the mouse
|
|
// pointer is positioned is used. Alternatively, you can specify the
|
|
// renderer to bind the interactor to when the interactor observer is
|
|
// activated.
|
|
vtkGetObjectMacro(DefaultRenderer,vtkRenderer);
|
|
virtual void SetDefaultRenderer(vtkRenderer*);
|
|
|
|
// Description:
|
|
// Set/Get the current renderer. Normally when the widget is activated
|
|
// (SetEnabled(1) or when keypress activation takes place), the renderer
|
|
// over which the mouse pointer is positioned is used and assigned to
|
|
// this Ivar. Alternatively, you might want to set the CurrentRenderer
|
|
// explicitly.
|
|
// WARNING: note that if the DefaultRenderer Ivar is set (see above),
|
|
// it will always override the parameter passed to SetCurrentRenderer,
|
|
// unless it is NULL.
|
|
// (i.e., SetCurrentRenderer(foo) = SetCurrentRenderer(DefaultRenderer).
|
|
vtkGetObjectMacro(CurrentRenderer,vtkRenderer);
|
|
virtual void SetCurrentRenderer(vtkRenderer*);
|
|
|
|
// Sets up the keypress-i event.
|
|
virtual void OnChar();
|
|
|
|
// Convenience methods for outside classes. Make sure that the
|
|
// parameter "ren" is not-null.
|
|
static void ComputeDisplayToWorld(vtkRenderer *ren, double x, double y,
|
|
double z, double worldPt[4]);
|
|
static void ComputeWorldToDisplay(vtkRenderer *ren, double x, double y,
|
|
double z, double displayPt[3]);
|
|
|
|
protected:
|
|
vtkInteractorObserver();
|
|
~vtkInteractorObserver();
|
|
|
|
// Description:
|
|
// Utility routines used to start and end interaction.
|
|
// For example, it switches the display update rate. It does not invoke
|
|
// the corresponding events.
|
|
virtual void StartInteraction();
|
|
virtual void EndInteraction();
|
|
|
|
// Description:
|
|
// Handles the char widget activation event. Also handles the delete event.
|
|
static void ProcessEvents(vtkObject* object,
|
|
unsigned long event,
|
|
void* clientdata,
|
|
void* calldata);
|
|
|
|
// Description:
|
|
// Helper method for subclasses.
|
|
void ComputeDisplayToWorld(double x, double y, double z,
|
|
double worldPt[4]);
|
|
void ComputeWorldToDisplay(double x, double y, double z,
|
|
double displayPt[3]);
|
|
|
|
// The state of the widget, whether on or off (observing events or not)
|
|
int Enabled;
|
|
|
|
// Used to process events
|
|
vtkCallbackCommand* EventCallbackCommand; //subclasses use one
|
|
vtkCallbackCommand* KeyPressCallbackCommand; //listens to key activation
|
|
|
|
// Priority at which events are processed
|
|
float Priority;
|
|
|
|
// Keypress activation controls
|
|
int KeyPressActivation;
|
|
char KeyPressActivationValue;
|
|
|
|
// Used to associate observers with the interactor
|
|
vtkRenderWindowInteractor *Interactor;
|
|
|
|
// Internal ivars for processing events
|
|
vtkRenderer *CurrentRenderer;
|
|
vtkRenderer *DefaultRenderer;
|
|
|
|
unsigned long CharObserverTag;
|
|
unsigned long DeleteObserverTag;
|
|
|
|
private:
|
|
vtkInteractorObserver(const vtkInteractorObserver&); // Not implemented.
|
|
void operator=(const vtkInteractorObserver&); // Not implemented.
|
|
|
|
};
|
|
|
|
#endif
|
|
|