Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Rendering/vtkInteractorStyleUnicam.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkInteractorStyleUnicam.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00016
    00017 /*
    00018  * This work (vtkInteractorStyleUnicam.h) was produced under a grant from
    00019  * the Department of Energy to Brown University.  Neither Brown University
    00020  * nor the authors assert any copyright with respect to this work and it may
    00021  * be used, reproduced, and distributed without permission.
    00022  */
    00023
    00095 #ifndef __vtkInteractorStyleUnicam_h
    00096 #define __vtkInteractorStyleUnicam_h
    00097
    00098 #include "vtkInteractorStyle.h"
    00099
    00100 class vtkCamera;
    00101 class vtkWorldPointPicker;
    00102
    00103 //
    00104 // XXX - would have preferred to make these enumerations within the class,
    00105 //    enum { NONE=0, BUTTON_LEFT, BUTTON_MIDDLE, BUTTON_RIGHT };
    00106 //    enum {CAM_INT_ROT, CAM_INT_CHOOSE, CAM_INT_PAN, CAM_INT_DOLLY};
    00107 // but vtkWrapTcl signaled a "syntax error" when it parsed the 'enum' line.
    00108 // So, am making them defines which is what the other classes that want
    00109 // to have constants appear to do.
    00110 //
    00111 // buttons pressed
    00112 #define VTK_UNICAM_NONE           0
    00113 #define VTK_UNICAM_BUTTON_LEFT    1
    00114 #define VTK_UNICAM_BUTTON_MIDDLE  2
    00115 #define VTK_UNICAM_BUTTON_RIGHT   3
    00116 //
    00117 // camera modes
    00118 #define VTK_UNICAM_CAM_INT_ROT    0
    00119 #define VTK_UNICAM_CAM_INT_CHOOSE 1
    00120 #define VTK_UNICAM_CAM_INT_PAN    2
    00121 #define VTK_UNICAM_CAM_INT_DOLLY  3
    00122
    00123 class VTK_RENDERING_EXPORT vtkInteractorStyleUnicam : public vtkInteractorStyle
    00124 {
    00125 public:
    00126   static vtkInteractorStyleUnicam *New();
    00127   vtkTypeRevisionMacro(vtkInteractorStyleUnicam,vtkInteractorStyle);
    00128   void PrintSelf(ostream& os, vtkIndent indent);
    00129
    00130   void SetWorldUpVector(double a[3]) {this->SetWorldUpVector(a[0],a[1],a[2]);}
    00131   void SetWorldUpVector(float  a[3]) {this->SetWorldUpVector(a[0],a[1],a[2]);}
    00132   void SetWorldUpVector(float x, float y, float z);
    00133   vtkGetVectorMacro(WorldUpVector, float, 3);
    00134
    00136
    00137   virtual void OnMouseMove();
    00138   virtual void OnLeftButtonDown();
    00139   virtual void OnLeftButtonUp();
    00140   virtual void OnLeftButtonMove();
    00142
    00145   virtual void OnTimer();
    00146
    00147 protected:
    00148   vtkInteractorStyleUnicam();
    00149   virtual ~vtkInteractorStyleUnicam();
    00150
    00151   vtkWorldPointPicker *InteractionPicker;
    00152
    00153   int      ButtonDown;   // which button is down
    00154   double   DTime;        // time mouse button was pressed
    00155   double   Dist;         // distance the mouse has moved since button press
    00156   float    StartPix[2]; // pixel mouse movement started at
    00157   float    LastPos[2];  // normalized position of mouse last frame
    00158   float    LastPix[2];  // pixel position of mouse last frame
    00159   float    DownPt[3];   // 3D point under cursor when mouse button pressed
    00160   float    Center [3];   // center of camera rotation
    00161
    00162   float    WorldUpVector[3]; // what the world thinks the 'up' vector is
    00163
    00164   vtkActor    *FocusSphere; // geometry for indicating center of rotation
    00165   int          IsDot;       // flag-- is the FocusSphere being displayed?
    00166   vtkRenderer *FocusSphereRenderer;  // renderer for 'FocusSphere'
    00167
    00168   int state;                 // which navigation mode was selected?
    00169
    00170   void ChooseXY( int X, int Y );  // method for choosing type of navigation
    00171   void RotateXY( int X, int Y );  // method for rotating
    00172   void DollyXY( int X, int Y );  // method for dollying
    00173   void PanXY( int X, int Y );  // method for panning
    00174
    00175   // conveinence methods for translating & rotating the camera
    00176   void  MyTranslateCamera(float v[3]);
    00177   void  MyRotateCamera(float cx, float cy, float cz,
    00178                        float ax, float ay, float az,
    00179                        float angle);
    00180
    00181   // Given a 3D point & a vtkCamera, compute the vectors that extend
    00182   // from the projection of the center of projection to the center of
    00183   // the right-edge and the center of the top-edge onto the plane
    00184   // containing the 3D point & with normal parallel to the camera's
    00185   // projection plane.
    00186   void  GetRightVandUpV(float *p, vtkCamera *cam,
    00187                         float *rightV, float *upV);
    00188
    00189   // takes in pixels, returns normalized window coordinates
    00190   void  NormalizeMouseXY(int X, int Y, float *NX, float *NY);
    00191
    00192   // return the aspect ratio of the current window
    00193   float WindowAspect();
    00194 private:
    00195   vtkInteractorStyleUnicam(const vtkInteractorStyleUnicam&);  // Not implemented.
    00196   void operator=(const vtkInteractorStyleUnicam&);  // Not implemented.
    00197 };
    00198
    00199 #endif  // __vtkInteractorStyleUnicam_h
    00200
    00201
    00202