VTK
vtkInteractorStyleUnicam.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkInteractorStyleUnicam.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 /*
17  * This work (vtkInteractorStyleUnicam.h) was produced under a grant from
18  * the Department of Energy to Brown University. Neither Brown University
19  * nor the authors assert any copyright with respect to this work and it may
20  * be used, reproduced, and distributed without permission.
21  */
22 
80 #ifndef vtkInteractorStyleUnicam_h
81 #define vtkInteractorStyleUnicam_h
82 
83 #include "vtkInteractionStyleModule.h" // For export macro
84 #include "vtkInteractorStyle.h"
85 
86 class vtkCamera;
88 
89 //
90 // XXX - would have preferred to make these enumerations within the class,
91 // enum { NONE=0, BUTTON_LEFT, BUTTON_MIDDLE, BUTTON_RIGHT };
92 // enum {CAM_INT_ROT, CAM_INT_CHOOSE, CAM_INT_PAN, CAM_INT_DOLLY};
93 // but vtkWrapTcl signaled a "syntax error" when it parsed the 'enum' line.
94 // So, am making them defines which is what the other classes that want
95 // to have constants appear to do.
96 //
97 // buttons pressed
98 #define VTK_UNICAM_NONE 0
99 #define VTK_UNICAM_BUTTON_LEFT 1
100 #define VTK_UNICAM_BUTTON_MIDDLE 2
101 #define VTK_UNICAM_BUTTON_RIGHT 3
102 //
103 // camera modes
104 #define VTK_UNICAM_CAM_INT_ROT 0
105 #define VTK_UNICAM_CAM_INT_CHOOSE 1
106 #define VTK_UNICAM_CAM_INT_PAN 2
107 #define VTK_UNICAM_CAM_INT_DOLLY 3
108 
109 class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleUnicam : public vtkInteractorStyle
110 {
111 public:
112  static vtkInteractorStyleUnicam *New();
114  void PrintSelf(ostream& os, vtkIndent indent);
115 
116  void SetWorldUpVector(double a[3]) {this->SetWorldUpVector(a[0],a[1],a[2]);}
117  void SetWorldUpVector(double x, double y, double z);
118  vtkGetVectorMacro(WorldUpVector, double, 3);
119 
121 
124  virtual void OnMouseMove();
125  virtual void OnLeftButtonDown();
126  virtual void OnLeftButtonUp();
127  virtual void OnLeftButtonMove();
129 
134  virtual void OnTimer();
135 
136 protected:
138  virtual ~vtkInteractorStyleUnicam();
139 
141 
142  int ButtonDown; // which button is down
143  double DTime; // time mouse button was pressed
144  double Dist; // distance the mouse has moved since button press
145  double StartPix[2]; // pixel mouse movement started at
146  double LastPos[2]; // normalized position of mouse last frame
147  double LastPix[2]; // pixel position of mouse last frame
148  double DownPt[3]; // 3D point under cursor when mouse button pressed
149  double Center [3]; // center of camera rotation
150 
151  double WorldUpVector[3]; // what the world thinks the 'up' vector is
152 
153  vtkActor *FocusSphere; // geometry for indicating center of rotation
154  int IsDot; // flag-- is the FocusSphere being displayed?
155  vtkRenderer *FocusSphereRenderer; // renderer for 'FocusSphere'
156 
157  int state; // which navigation mode was selected?
158 
159  void ChooseXY( int X, int Y ); // method for choosing type of navigation
160  void RotateXY( int X, int Y ); // method for rotating
161  void DollyXY( int X, int Y ); // method for dollying
162  void PanXY( int X, int Y ); // method for panning
163 
164  // conveinence methods for translating & rotating the camera
165  void MyTranslateCamera(double v[3]);
166  void MyRotateCamera(double cx, double cy, double cz,
167  double ax, double ay, double az,
168  double angle);
169 
170  // Given a 3D point & a vtkCamera, compute the vectors that extend
171  // from the projection of the center of projection to the center of
172  // the right-edge and the center of the top-edge onto the plane
173  // containing the 3D point & with normal parallel to the camera's
174  // projection plane.
175  void GetRightVandUpV(double *p, vtkCamera *cam,
176  double *rightV, double *upV);
177 
178  // takes in pixels, returns normalized window coordinates
179  void NormalizeMouseXY(int X, int Y, double *NX, double *NY);
180 
181  // return the aspect ratio of the current window
182  double WindowAspect();
183 private:
184  vtkInteractorStyleUnicam(const vtkInteractorStyleUnicam&) VTK_DELETE_FUNCTION;
185  void operator=(const vtkInteractorStyleUnicam&) VTK_DELETE_FUNCTION;
186 };
187 
188 #endif // vtkInteractorStyleUnicam_h
189 
190 
191 
virtual void OnLeftButtonDown()
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
virtual void OnLeftButtonUp()
static vtkInteractorStyle * New()
This class must be supplied with a vtkRenderWindowInteractor wrapper or parent.
abstract specification for renderers
Definition: vtkRenderer.h:63
vtkWorldPointPicker * InteractionPicker
virtual void OnTimer()
OnTimer calls Rotate, Rotate etc which should be overridden by style subclasses.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
a simple class to control print indentation
Definition: vtkIndent.h:39
a virtual camera for 3D rendering
Definition: vtkCamera.h:50
provides Unicam navigation style
provide event-driven interface to the rendering window (defines trackball mode)
find world x,y,z corresponding to display x,y,z
virtual void OnMouseMove()
Generic event bindings can be overridden in subclasses.