/usr/include/vtk-7.1/vtkInteractorObserver.h is in libvtk7-dev 7.1.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkInteractorObserver.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 vtkInteractorObserver
* @brief an abstract superclass for classes observing events invoked by vtkRenderWindowInteractor
*
* 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.
* Initial value is 0.
*
* 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.
*
* @sa
* vtk3DWidget vtkBoxWidget vtkLineWidget
*/
#ifndef vtkInteractorObserver_h
#define vtkInteractorObserver_h
#include "vtkRenderingCoreModule.h" // For export macro
#include "vtkObject.h"
class vtkAbstractPropPicker;
class vtkAssemblyPath;
class vtkRenderWindowInteractor;
class vtkRenderer;
class vtkCallbackCommand;
class vtkObserverMediator;
class vtkPickingManager;
class VTKRENDERINGCORE_EXPORT vtkInteractorObserver : public vtkObject
{
public:
vtkTypeMacro(vtkInteractorObserver,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
/**
* 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()). Initial value is 0.
*/
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);}
//@{
/**
* 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.
* It automatically registers available pickers to the Picking Manager.
*/
virtual void SetInteractor(vtkRenderWindowInteractor* iren);
vtkGetObjectMacro(Interactor, vtkRenderWindowInteractor);
//@}
//@{
/**
* 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);
//@}
//@{
/**
* Enable/Disable the use of a manager to process the picking.
* Enabled by default.
*/
vtkBooleanMacro(PickingManaged, bool);
vtkSetMacro(PickingManaged, bool);
vtkGetMacro(PickingManaged, bool);
//@}
//@{
/**
* 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);
//@}
//@{
/**
* 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);
//@}
//@{
/**
* 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*);
//@}
//@{
/**
* 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. This is especially true with multiple viewports (renderers).
* 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]);
//@}
//@{
/**
* These methods enable an interactor observer to exclusively grab all
* events invoked by its associated vtkRenderWindowInteractor. (This method
* is typically used by widgets to grab events once an event sequence
* begins.) The GrabFocus() signature takes up to two vtkCommands
* corresponding to mouse events and keypress events. (These two commands
* are separated so that the widget can listen for its activation keypress,
* as well as listening for DeleteEvents, without actually having to process
* mouse events.)
*/
void GrabFocus(vtkCommand *mouseEvents, vtkCommand *keypressEvents=NULL);
void ReleaseFocus();
//@}
protected:
vtkInteractorObserver();
~vtkInteractorObserver();
//@{
/**
* 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();
//@}
/**
* Handles the char widget activation event. Also handles the delete event.
*/
static void ProcessEvents(vtkObject* object,
unsigned long event,
void* clientdata,
void* calldata);
//@{
/**
* 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;
// This variable controls whether the picking is managed by the Picking
// Manager process or not. True by default.
bool PickingManaged;
/**
* Register internal Pickers in the Picking Manager.
* Must be reimplemented by concrete widgets to register
* their pickers.
*/
virtual void RegisterPickers();
/**
* Unregister internal pickers from the Picking Manager.
*/
void UnRegisterPickers();
/**
* Update the pickers registered in the Picking Manager when pickers are
* modified.
*/
virtual void PickersModified();
/**
* Return the picking manager associated on the context on which the
* observer currently belong.
*/
vtkPickingManager* GetPickingManager();
/**
* Proceed to a pick, whether through the PickingManager if the picking is
* managed or directly using the picker, and return the assembly path.
*/
vtkAssemblyPath* GetAssemblyPath(double X, double Y, double Z,
vtkAbstractPropPicker* picker);
// 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;
// The mediator used to request resources from the interactor.
vtkObserverMediator *ObserverMediator;
int RequestCursorShape(int requestedShape);
private:
vtkInteractorObserver(const vtkInteractorObserver&) VTK_DELETE_FUNCTION;
void operator=(const vtkInteractorObserver&) VTK_DELETE_FUNCTION;
};
#endif
|