VTK  9.2.6
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 #ifndef VTK_LEGACY_REMOVE
89 // Replaced with the enum types in the `vtkInteractorStyleUnicam` class.
90 
91 // buttons pressed
92 #define VTK_UNICAM_NONE 0
93 #define VTK_UNICAM_BUTTON_LEFT 1
94 #define VTK_UNICAM_BUTTON_MIDDLE 2
95 #define VTK_UNICAM_BUTTON_RIGHT 3
96 //
97 // camera modes
98 #define VTK_UNICAM_CAM_INT_ROT 0
99 #define VTK_UNICAM_CAM_INT_CHOOSE 1
100 #define VTK_UNICAM_CAM_INT_PAN 2
101 #define VTK_UNICAM_CAM_INT_DOLLY 3
102 #endif
103 
104 class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleUnicam : public vtkInteractorStyle
105 {
106 public:
107  enum
108  {
109  NONE = 0,
110  BUTTON_LEFT = 1,
111  BUTTON_MIDDLE = 2,
112  BUTTON_RIGHT = 3
113  };
114  enum
115  {
116  CAM_INT_ROT = 0,
117  CAM_INT_CHOOSE = 1,
118  CAM_INT_PAN = 2,
119  CAM_INT_DOLLY = 3
120  };
121 
122  static vtkInteractorStyleUnicam* New();
124  void PrintSelf(ostream& os, vtkIndent indent) override;
125 
126  void SetWorldUpVector(double a[3]) { this->SetWorldUpVector(a[0], a[1], a[2]); }
127  void SetWorldUpVector(double x, double y, double z);
128  vtkGetVectorMacro(WorldUpVector, double, 3);
129 
131 
134  void OnMouseMove() override;
135  void OnLeftButtonDown() override;
136  void OnLeftButtonUp() override;
137  virtual void OnLeftButtonMove();
139 
144  void OnTimer() override;
145 
146 protected:
148  ~vtkInteractorStyleUnicam() override;
149 
151 
152  int ButtonDown; // which button is down
153  double DTime; // time mouse button was pressed
154  double Dist; // distance the mouse has moved since button press
155  double StartPix[2]; // pixel mouse movement started at
156  double LastPos[2]; // normalized position of mouse last frame
157  double LastPix[2]; // pixel position of mouse last frame
158  double DownPt[3]; // 3D point under cursor when mouse button pressed
159  double Center[3]; // center of camera rotation
160 
161  double WorldUpVector[3]; // what the world thinks the 'up' vector is
162 
163  vtkActor* FocusSphere; // geometry for indicating center of rotation
164  int IsDot; // flag-- is the FocusSphere being displayed?
165  vtkRenderer* FocusSphereRenderer; // renderer for 'FocusSphere'
166 
167  int state; // which navigation mode was selected?
168 
169  void ChooseXY(int X, int Y); // method for choosing type of navigation
170  void RotateXY(int X, int Y); // method for rotating
171  void DollyXY(int X, int Y); // method for dollying
172  void PanXY(int X, int Y); // method for panning
173 
174  // conveinence methods for translating & rotating the camera
175  void MyTranslateCamera(double v[3]);
176  void MyRotateCamera(
177  double cx, double cy, double cz, double ax, double ay, double az, double angle);
178 
179  // Given a 3D point & a vtkCamera, compute the vectors that extend
180  // from the projection of the center of projection to the center of
181  // the right-edge and the center of the top-edge onto the plane
182  // containing the 3D point & with normal parallel to the camera's
183  // projection plane.
184  void GetRightVandUpV(double* p, vtkCamera* cam, double* rightV, double* upV);
185 
186  // takes in pixels, returns normalized window coordinates
187  void NormalizeMouseXY(int X, int Y, double* NX, double* NY);
188 
189  // return the aspect ratio of the current window
190  double WindowAspect();
191 
192 private:
194  void operator=(const vtkInteractorStyleUnicam&) = delete;
195 };
196 
197 #endif // vtkInteractorStyleUnicam_h
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:72
vtkWorldPointPicker * InteractionPicker
virtual void OnTimer()
OnTimer calls Rotate, Rotate etc which should be overridden by style subclasses.
a simple class to control print indentation
Definition: vtkIndent.h:39
a virtual camera for 3D rendering
Definition: vtkCamera.h:51
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
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.