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:
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:
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 
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:52
a virtual camera for 3D rendering
Definition: vtkCamera.h:51
a simple class to control print indentation
Definition: vtkIndent.h:40
provides Unicam navigation style
virtual ~vtkInteractorStyleUnicam()
void ChooseXY(int X, int Y)
void NormalizeMouseXY(int X, int Y, double *NX, double *NY)
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
virtual void OnLeftButtonMove()
vtkWorldPointPicker * InteractionPicker
virtual void OnLeftButtonDown()
virtual void OnTimer()
OnTimer calls RotateCamera, RotateActor etc which should be overridden by style subclasses.
void MyTranslateCamera(double v[3])
void DollyXY(int X, int Y)
void PanXY(int X, int Y)
void RotateXY(int X, int Y)
void MyRotateCamera(double cx, double cy, double cz, double ax, double ay, double az, double angle)
virtual void OnMouseMove()
Concrete implementation of event bindings.
void GetRightVandUpV(double *p, vtkCamera *cam, double *rightV, double *upV)
void SetWorldUpVector(double x, double y, double z)
static vtkInteractorStyleUnicam * New()
virtual void OnLeftButtonUp()
provide event-driven interface to the rendering window (defines trackball mode)
abstract specification for renderers
Definition: vtkRenderer.h:64
find world x,y,z corresponding to display x,y,z