You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.9 KiB
C++
136 lines
3.9 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkInteractorStyleRubberBand2D.h
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
/**
|
|
* @class vtkInteractorStyleRubberBand2D
|
|
* @brief A rubber band interactor for a 2D view
|
|
*
|
|
*
|
|
* vtkInteractorStyleRubberBand2D manages interaction in a 2D view.
|
|
* Camera rotation is not allowed with this interactor style.
|
|
* Zooming affects the camera's parallel scale only, and assumes
|
|
* that the camera is in parallel projection mode.
|
|
* The style also allows draws a rubber band using the left button.
|
|
* All camera changes invoke StartInteractionEvent when the button
|
|
* is pressed, InteractionEvent when the mouse (or wheel) is moved,
|
|
* and EndInteractionEvent when the button is released. The bindings
|
|
* are as follows:
|
|
* Left mouse - Select (invokes a SelectionChangedEvent).
|
|
* Right mouse - Zoom.
|
|
* Middle mouse - Pan.
|
|
* Scroll wheel - Zoom.
|
|
*/
|
|
|
|
#ifndef vtkInteractorStyleRubberBand2D_h
|
|
#define vtkInteractorStyleRubberBand2D_h
|
|
|
|
#include "vtkInteractionStyleModule.h" // For export macro
|
|
#include "vtkInteractorStyle.h"
|
|
|
|
class vtkUnsignedCharArray;
|
|
|
|
class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleRubberBand2D : public vtkInteractorStyle
|
|
{
|
|
public:
|
|
static vtkInteractorStyleRubberBand2D* New();
|
|
vtkTypeMacro(vtkInteractorStyleRubberBand2D, vtkInteractorStyle);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
void OnLeftButtonDown() override;
|
|
void OnLeftButtonUp() override;
|
|
void OnMiddleButtonDown() override;
|
|
void OnMiddleButtonUp() override;
|
|
void OnRightButtonDown() override;
|
|
void OnRightButtonUp() override;
|
|
void OnMouseMove() override;
|
|
void OnMouseWheelForward() override;
|
|
void OnMouseWheelBackward() override;
|
|
|
|
//@{
|
|
/**
|
|
* Whether to invoke a render when the mouse moves.
|
|
*/
|
|
vtkSetMacro(RenderOnMouseMove, bool);
|
|
vtkGetMacro(RenderOnMouseMove, bool);
|
|
vtkBooleanMacro(RenderOnMouseMove, bool);
|
|
//@}
|
|
|
|
/**
|
|
* Selection types
|
|
*/
|
|
enum
|
|
{
|
|
SELECT_NORMAL = 0,
|
|
SELECT_UNION = 1
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Current interaction state
|
|
*/
|
|
vtkGetMacro(Interaction, int);
|
|
//@}
|
|
|
|
enum
|
|
{
|
|
NONE,
|
|
PANNING,
|
|
ZOOMING,
|
|
SELECTING
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Access to the start and end positions (display coordinates) of the rubber
|
|
* band pick area. This is a convenience method for the wrapped languages
|
|
* since the event callData is lost when using those wrappings.
|
|
*/
|
|
vtkGetVector2Macro(StartPosition, int);
|
|
vtkGetVector2Macro(EndPosition, int);
|
|
//@}
|
|
|
|
protected:
|
|
vtkInteractorStyleRubberBand2D();
|
|
~vtkInteractorStyleRubberBand2D() override;
|
|
|
|
// The interaction mode
|
|
int Interaction;
|
|
|
|
// Draws the selection rubber band
|
|
void RedrawRubberBand();
|
|
|
|
// The start position of the selection
|
|
int StartPosition[2];
|
|
|
|
// The end position of the selection
|
|
int EndPosition[2];
|
|
|
|
// The pixel array for the rubber band
|
|
vtkUnsignedCharArray* PixelArray;
|
|
|
|
// Whether to render when the mouse moves
|
|
bool RenderOnMouseMove;
|
|
|
|
private:
|
|
vtkInteractorStyleRubberBand2D(const vtkInteractorStyleRubberBand2D&) = delete;
|
|
void operator=(const vtkInteractorStyleRubberBand2D&) = delete;
|
|
};
|
|
|
|
#endif
|