VTK  9.3.1
vtkPlotRangeHandlesItem.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 
30 #ifndef vtkPlotRangeHandlesItem_h
31 #define vtkPlotRangeHandlesItem_h
32 
33 #include "vtkChartsCoreModule.h" // For export macro
34 #include "vtkCommand.h" // For vtkCommand enum
35 #include "vtkPlot.h"
36 
37 VTK_ABI_NAMESPACE_BEGIN
38 class vtkBrush;
39 
40 class VTKCHARTSCORE_EXPORT vtkPlotRangeHandlesItem : public vtkPlot
41 {
42 public:
44  void PrintSelf(ostream& os, vtkIndent indent) override;
45  static vtkPlotRangeHandlesItem* New();
46 
47  enum Handle
48  {
49  NO_HANDLE = -1,
50  LEFT_HANDLE = 0,
51  RIGHT_HANDLE = 1
52  };
53 
55  {
56  VERTICAL = 0,
57  HORIZONTAL = 1
58  };
59 
64  bool Paint(vtkContext2D* painter) override;
65 
69  void GetBounds(double bounds[4]) override;
70 
75  virtual void GetHandlesRange(double range[2]);
76 
78 
82  vtkSetMacro(HandleWidth, float);
83  vtkGetMacro(HandleWidth, float);
85 
87 
90  vtkSetClampMacro(HandleOrientation, int, VERTICAL, HORIZONTAL);
91  vtkGetMacro(HandleOrientation, int);
92  void SetHandleOrientationToVertical() { this->SetHandleOrientation(VERTICAL); }
93  void SetHandleOrientationToHorizontal() { this->SetHandleOrientation(HORIZONTAL); }
95 
97 
105  vtkSetVector4Macro(Extent, double);
106  vtkGetVector4Macro(Extent, double);
108 
110 
113  vtkSetMacro(ExtentToAxisRange, vtkTypeBool);
114  vtkGetMacro(ExtentToAxisRange, vtkTypeBool);
115  vtkBooleanMacro(ExtentToAxisRange, vtkTypeBool);
117 
119 
122  vtkSetMacro(SynchronizeRangeHandles, vtkTypeBool);
123  vtkGetMacro(SynchronizeRangeHandles, vtkTypeBool);
124  vtkBooleanMacro(SynchronizeRangeHandles, vtkTypeBool);
126 
128 
132  vtkSetMacro(LockTooltipToMouse, vtkTypeBool);
133  vtkGetMacro(LockTooltipToMouse, vtkTypeBool);
134  vtkBooleanMacro(LockTooltipToMouse, vtkTypeBool);
136 
140  vtkGetObjectMacro(HighlightBrush, vtkBrush);
141 
145  virtual void ComputeHandlesDrawRange();
146 
147 protected:
149  ~vtkPlotRangeHandlesItem() override;
150 
152 
160  void GetAxesRange(double* abcissaRange, double* ordinateRange);
161  void GetAxesUnscaledRange(double* abcissaRange, double* ordinateRange);
163 
167  void ComputeRange(double* range);
168 
172  void ComputeHandleDelta(double screenBounds[4]);
173 
175 
181  void TransformScreenToData(double inX, double inY, double& outX, double& outY) override;
182  void TransformDataToScreen(double inX, double inY, double& outX, double& outY) override;
184 
188  bool Hit(const vtkContextMouseEvent& mouse) override;
189 
191 
194  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
195  bool MouseButtonReleaseEvent(const vtkContextMouseEvent& mouse) override;
196  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
197  bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
198  bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
199  bool MouseDoubleClickEvent(const vtkContextMouseEvent& mouse) override;
201 
206  virtual int FindRangeHandle(const vtkVector2f& point, const vtkVector2f& tolerance);
207 
212  virtual void SetActiveHandlePosition(double position);
213 
218  bool IsActiveHandleMoved(double tolerance);
219 
223  void SetCursor(int cursor);
224 
226  void operator=(const vtkPlotRangeHandlesItem&) = delete;
227 
228  float HandleWidth = 2;
229  float HandleDelta = 0;
230  float LeftHandleDrawRange[2] = { 0, 0 };
231  float RightHandleDrawRange[2] = { 0, 0 };
232  int ActiveHandle = NO_HANDLE;
233  int HoveredHandle = NO_HANDLE;
234  float HoveredPosition[2] = { 0, 0 };
235  vtkTypeBool LockTooltipToMouse = true;
236  double ActiveHandlePosition = 0;
237  double ActiveHandleRangeValue = 0;
240  double Extent[4] = { 0, 1, 0, 1 };
241  vtkTypeBool ExtentToAxisRange = true;
242  vtkTypeBool SynchronizeRangeHandles = false;
243  int HandleOrientation = VERTICAL;
244 };
245 
246 VTK_ABI_NAMESPACE_END
247 #endif // vtkPlotRangeHandlesItem_h
vtkNew< vtkBrush > RangeLabelBrush
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse)
Mouse button down event Return true if the item holds the event, false if the event can be propagated...
virtual bool Paint(vtkContext2D *painter)
Paint event for the item, called whenever the item needs to be drawn.
virtual void GetBounds(double bounds[4])
Get the bounds for this plot as (Xmin, Xmax, Ymin, Ymax).
Definition: vtkPlot.h:367
bool Hit(const vtkContextMouseEvent &mouse) override
Returns true if the supplied x, y coordinate is inside the item.
virtual void TransformScreenToData(const vtkVector2f &in, vtkVector2f &out)
Transform the mouse event in the control-points space.
item to show and control a range on vtkAxis
int vtkTypeBool
Definition: vtkABI.h:64
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:49
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:29
data structure to represent mouse events.
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse)
Mouse button release event.
void SetHandleOrientationToVertical()
Set/Get the handles orientation in the plot.
Abstract class for 2D plots.
Definition: vtkPlot.h:43
virtual bool MouseEnterEvent(const vtkContextMouseEvent &mouse)
Mouse enter event.
void SetHandleOrientationToHorizontal()
Set/Get the handles orientation in the plot.
virtual void TransformDataToScreen(const vtkVector2f &in, vtkVector2f &out)
Transform the mouse event in the control-points space.
virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse)
Mouse move event.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual bool MouseDoubleClickEvent(const vtkContextMouseEvent &mouse)
Mouse button double click event.
virtual bool MouseLeaveEvent(const vtkContextMouseEvent &mouse)
Mouse leave event.