text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    $RCSfile: vtkInteractorStyleImage.h,v $
  
    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
    All rights reserved.
    See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
  
       This software is distributed WITHOUT ANY WARRANTY; without even
       the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the above copyright notice for more information.
  
  =========================================================================*/
  // .NAME vtkInteractorStyleImage - interactive manipulation of the camera specialized for images
  // .SECTION Description
  // vtkInteractorStyleImage allows the user to interactively manipulate
  // (rotate, pan, zoomm etc.) the camera. vtkInteractorStyleImage is specially
  // designed to work with images that are being rendered with
  // vtkImageActor. Several events are overloaded from its superclass
  // vtkInteractorStyle, hence the mouse bindings are different. (The bindings
  // keep the camera's view plane normal perpendicular to the x-y plane.) In
  // summary the mouse events are as follows:
  // + Left Mouse button triggers window level events
  // + CTRL Left Mouse spins the camera around its view plane normal
  // + SHIFT Left Mouse pans the camera
  // + CTRL SHIFT Left Mouse dollys (a positional zoom) the camera
  // + Middle mouse button pans the camera
  // + Right mouse button dollys the camera.
  // + SHIFT Right Mouse triggers pick events
  //
  // Note that the renderer's actors are not moved; instead the camera is moved.
  
  // .SECTION See Also
  // vtkInteractorStyle vtkInteractorStyleTrackballActor 
  // vtkInteractorStyleJoystickCamera vtkInteractorStyleJoystickActor
  
  #ifndef __vtkInteractorStyleImage_h
  #define __vtkInteractorStyleImage_h
  
  #include "vtkInteractorStyleTrackballCamera.h"
  
  // Motion flags
  
  #define VTKIS_WINDOW_LEVEL 1024
  #define VTKIS_PICK         1025
  
  class VTK_RENDERING_EXPORT vtkInteractorStyleImage : public vtkInteractorStyleTrackballCamera
  {
  public:
    static vtkInteractorStyleImage *New();
    vtkTypeRevisionMacro(vtkInteractorStyleImage, vtkInteractorStyleTrackballCamera);
    void PrintSelf(ostream& os, vtkIndent indent);
  
    // Description:
    // Some useful information for handling window level
    vtkGetVector2Macro(WindowLevelStartPosition,int);
    vtkGetVector2Macro(WindowLevelCurrentPosition,int);
    
    // Description:
    // Event bindings controlling the effects of pressing mouse buttons
    // or moving the mouse.
    virtual void OnMouseMove();
    virtual void OnLeftButtonDown();
    virtual void OnLeftButtonUp();
    virtual void OnRightButtonDown();
    virtual void OnRightButtonUp();
  
    // Description:
    // Override the "fly-to" (f keypress) for images.
    virtual void OnChar();
  
    // These methods for the different interactions in different modes
    // are overridden in subclasses to perform the correct motion. Since
    // they might be called from OnTimer, they do not have mouse coord parameters
    // (use interactor's GetEventPosition and GetLastEventPosition)
    virtual void WindowLevel();
    virtual void Pick();
    
    // Interaction mode entry points used internally.  
    virtual void StartWindowLevel();
    virtual void EndWindowLevel();
    virtual void StartPick();
    virtual void EndPick();
  
  protected:
    vtkInteractorStyleImage();
    ~vtkInteractorStyleImage();
  
    int WindowLevelStartPosition[2];
    int WindowLevelCurrentPosition[2];
   
  private:
    vtkInteractorStyleImage(const vtkInteractorStyleImage&);  // Not implemented.
    void operator=(const vtkInteractorStyleImage&);  // Not implemented.
  };
  
  #endif
  