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
86class 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
109class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleUnicam : public vtkInteractorStyle
110{
111public:
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
136protected:
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();
183private:
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
static vtkInteractorStyleUnicam * New()
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)
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