VTK  9.0.1
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 
79 #ifndef vtkInteractorStyleUnicam_h
80 #define vtkInteractorStyleUnicam_h
81 
82 #include "vtkInteractionStyleModule.h" // For export macro
83 #include "vtkInteractorStyle.h"
84 
85 class vtkCamera;
87 
88 //
89 // XXX - would have preferred to make these enumerations within the class,
90 // enum { NONE=0, BUTTON_LEFT, BUTTON_MIDDLE, BUTTON_RIGHT };
91 // enum {CAM_INT_ROT, CAM_INT_CHOOSE, CAM_INT_PAN, CAM_INT_DOLLY};
92 // but vtkWrapTcl signaled a "syntax error" when it parsed the 'enum' line.
93 // So, am making them defines which is what the other classes that want
94 // to have constants appear to do.
95 //
96 // buttons pressed
97 #define VTK_UNICAM_NONE 0
98 #define VTK_UNICAM_BUTTON_LEFT 1
99 #define VTK_UNICAM_BUTTON_MIDDLE 2
100 #define VTK_UNICAM_BUTTON_RIGHT 3
101 //
102 // camera modes
103 #define VTK_UNICAM_CAM_INT_ROT 0
104 #define VTK_UNICAM_CAM_INT_CHOOSE 1
105 #define VTK_UNICAM_CAM_INT_PAN 2
106 #define VTK_UNICAM_CAM_INT_DOLLY 3
107 
108 class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleUnicam : public vtkInteractorStyle
109 {
110 public:
113  void PrintSelf(ostream& os, vtkIndent indent) override;
114 
115  void SetWorldUpVector(double a[3]) { this->SetWorldUpVector(a[0], a[1], a[2]); }
116  void SetWorldUpVector(double x, double y, double z);
117  vtkGetVectorMacro(WorldUpVector, double, 3);
118 
120 
123  void OnMouseMove() override;
124  void OnLeftButtonDown() override;
125  void OnLeftButtonUp() override;
126  virtual void OnLeftButtonMove();
128 
133  void OnTimer() override;
134 
135 protected:
138 
140 
141  int ButtonDown; // which button is down
142  double DTime; // time mouse button was pressed
143  double Dist; // distance the mouse has moved since button press
144  double StartPix[2]; // pixel mouse movement started at
145  double LastPos[2]; // normalized position of mouse last frame
146  double LastPix[2]; // pixel position of mouse last frame
147  double DownPt[3]; // 3D point under cursor when mouse button pressed
148  double Center[3]; // center of camera rotation
149 
150  double WorldUpVector[3]; // what the world thinks the 'up' vector is
151 
152  vtkActor* FocusSphere; // geometry for indicating center of rotation
153  int IsDot; // flag-- is the FocusSphere being displayed?
154  vtkRenderer* FocusSphereRenderer; // renderer for 'FocusSphere'
155 
156  int state; // which navigation mode was selected?
157 
158  void ChooseXY(int X, int Y); // method for choosing type of navigation
159  void RotateXY(int X, int Y); // method for rotating
160  void DollyXY(int X, int Y); // method for dollying
161  void PanXY(int X, int Y); // method for panning
162 
163  // conveinence methods for translating & rotating the camera
164  void MyTranslateCamera(double v[3]);
166  double cx, double cy, double cz, double ax, double ay, double az, double angle);
167 
168  // Given a 3D point & a vtkCamera, compute the vectors that extend
169  // from the projection of the center of projection to the center of
170  // the right-edge and the center of the top-edge onto the plane
171  // containing the 3D point & with normal parallel to the camera's
172  // projection plane.
173  void GetRightVandUpV(double* p, vtkCamera* cam, double* rightV, double* upV);
174 
175  // takes in pixels, returns normalized window coordinates
176  void NormalizeMouseXY(int X, int Y, double* NX, double* NY);
177 
178  // return the aspect ratio of the current window
179  double WindowAspect();
180 
181 private:
183  void operator=(const vtkInteractorStyleUnicam&) = delete;
184 };
185 
186 #endif // vtkInteractorStyleUnicam_h
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:46
a virtual camera for 3D rendering
Definition: vtkCamera.h:46
a simple class to control print indentation
Definition: vtkIndent.h:34
provides Unicam navigation style
void ChooseXY(int X, int Y)
~vtkInteractorStyleUnicam() override
void OnLeftButtonUp() override
void NormalizeMouseXY(int X, int Y, double *NX, double *NY)
virtual void OnLeftButtonMove()
vtkWorldPointPicker * InteractionPicker
void OnMouseMove() override
Concrete implementation of event bindings.
void MyTranslateCamera(double v[3])
void DollyXY(int X, int Y)
void PanXY(int X, int Y)
void OnLeftButtonDown() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void RotateXY(int X, int Y)
void MyRotateCamera(double cx, double cy, double cz, double ax, double ay, double az, double angle)
void GetRightVandUpV(double *p, vtkCamera *cam, double *rightV, double *upV)
void SetWorldUpVector(double x, double y, double z)
static vtkInteractorStyleUnicam * New()
void OnTimer() override
OnTimer calls RotateCamera, RotateActor etc which should be overridden by style subclasses.
provide event-driven interface to the rendering window (defines trackball mode)
abstract specification for renderers
Definition: vtkRenderer.h:68
find world x,y,z corresponding to display x,y,z