VTK  9.0.1
vtkChartXY.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkChartXY.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 
27 #ifndef vtkChartXY_h
28 #define vtkChartXY_h
29 
30 #include "vtkChart.h"
31 #include "vtkChartsCoreModule.h" // For export macro
32 #include "vtkContextPolygon.h" // For vtkContextPolygon
33 #include "vtkSmartPointer.h" // For SP ivars
34 #include "vtkVector.h" // For vtkVector2f in struct
35 
36 class vtkAxis;
37 class vtkChartLegend;
38 class vtkIdTypeArray;
39 class vtkPlot;
40 class vtkPlotGrid;
41 class vtkTooltipItem;
42 
43 class vtkChartXYPrivate; // Private class to keep my STL vector in...
44 
45 class VTKCHARTSCORE_EXPORT vtkChartXY : public vtkChart
46 {
47 public:
48  vtkTypeMacro(vtkChartXY, vtkChart);
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
54  static vtkChartXY* New();
55 
61  void Update() override;
62 
66  bool Paint(vtkContext2D* painter) override;
67 
71  vtkPlot* AddPlot(int type) override;
72 
76  vtkIdType AddPlot(vtkPlot* plot) override;
77 
82  bool RemovePlot(vtkIdType index) override;
83 
87  void ClearPlots() override;
88 
92  vtkPlot* GetPlot(vtkIdType index) override;
93 
98  virtual vtkIdType GetPlotIndex(vtkPlot*);
99 
105  vtkIdType RaisePlot(vtkPlot* plot);
106 
113  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
114 
120  vtkIdType LowerPlot(vtkPlot* plot);
121 
128  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
129 
133  vtkIdType GetNumberOfPlots() override;
134 
138  int GetPlotCorner(vtkPlot* plot);
139 
143  void SetPlotCorner(vtkPlot* plot, int corner);
144 
150  vtkAxis* GetAxis(int axisIndex) override;
151 
157  virtual void SetAxis(int axisIndex, vtkAxis*) override;
158 
162  void SetShowLegend(bool visible) override;
163 
167  vtkChartLegend* GetLegend() override;
168 
172  virtual void SetTooltip(vtkTooltipItem* tooltip);
173 
177  virtual vtkTooltipItem* GetTooltip();
178 
182  vtkIdType GetNumberOfAxes() override;
183 
188  void RecalculateBounds() override;
189 
197  void SetSelectionMethod(int method) override;
198 
202  void RemovePlotSelections();
203 
205 
208  vtkSetMacro(DrawAxesAtOrigin, bool);
209  vtkGetMacro(DrawAxesAtOrigin, bool);
210  vtkBooleanMacro(DrawAxesAtOrigin, bool);
212 
214 
218  vtkSetMacro(AutoAxes, bool);
219  vtkGetMacro(AutoAxes, bool);
220  vtkBooleanMacro(AutoAxes, bool);
222 
224 
227  vtkSetMacro(HiddenAxisBorder, int);
228  vtkGetMacro(HiddenAxisBorder, int);
230 
232 
237  vtkSetMacro(ForceAxesToBounds, bool);
238  vtkGetMacro(ForceAxesToBounds, bool);
239  vtkBooleanMacro(ForceAxesToBounds, bool);
241 
243 
250  vtkSetMacro(BarWidthFraction, float);
251  vtkGetMacro(BarWidthFraction, float);
253 
255 
261  vtkSetMacro(ZoomWithMouseWheel, bool);
262  vtkGetMacro(ZoomWithMouseWheel, bool);
263  vtkBooleanMacro(ZoomWithMouseWheel, bool);
265 
267 
272  vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
273  vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
274  vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
276 
278 
283  vtkSetMacro(DragPointAlongX, bool);
284  vtkGetMacro(DragPointAlongX, bool);
285  vtkBooleanMacro(DragPointAlongX, bool);
287 
289 
294  vtkSetMacro(DragPointAlongY, bool);
295  vtkGetMacro(DragPointAlongY, bool);
296  vtkBooleanMacro(DragPointAlongY, bool);
298 
302  virtual void SetTooltipInfo(const vtkContextMouseEvent&, const vtkVector2d&, vtkIdType, vtkPlot*,
303  vtkIdType segmentIndex = -1);
304 
308  bool Hit(const vtkContextMouseEvent& mouse) override;
309 
313  bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
314 
318  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
319 
323  bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
324 
328  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
329 
333  bool MouseButtonReleaseEvent(const vtkContextMouseEvent& mouse) override;
334 
338  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
339 
343  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
344 
349  static void MakeSelection(vtkAnnotationLink* link, vtkIdTypeArray* selectionIds, vtkPlot* plot);
350 
354  static void MinusSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
355 
359  static void AddSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
360 
364  static void ToggleSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
365 
371  static void BuildSelection(vtkAnnotationLink* link, int selectionMode,
372  vtkIdTypeArray* plotSelection, vtkIdTypeArray* oldSelection, vtkPlot* plot);
373 
378  static int GetMouseSelectionMode(const vtkContextMouseEvent& mouse, int selectionMode);
379 
380 protected:
381  vtkChartXY();
382  ~vtkChartXY() override;
383 
387  void RecalculatePlotTransforms();
388 
393  void RecalculatePlotBounds();
394 
400  virtual bool UpdateLayout(vtkContext2D* painter);
401 
407  virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
408 
413  virtual void SetLegendPosition(const vtkRectf& rect);
414 
419 
424 
429 
434 
438  bool DrawBox;
439 
445 
450 
455 
462 
466  bool AutoAxes;
467 
472 
478 
485 
491 
497 
503 
504 private:
505  vtkChartXY(const vtkChartXY&) = delete;
506  void operator=(const vtkChartXY&) = delete;
507 
508  vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
509 
514  bool DragPoint;
515 
519  void CalculateBarPlots();
520 
526  bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
527 
528  int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
529  vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
530 
534  bool RemovePlotFromCorners(vtkPlot* plot);
535 
536  void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* orign, float* max);
537 
542  void ReleasePlotSelections();
543 
547  void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
548  const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
549  vtkContextPolygon& polygon);
550 };
551 
553 
559 {
563  int Index;
564 };
566 
567 #endif // vtkChartXY_h
bool DrawAxesAtOrigin
Keep the axes drawn at the origin? This will attempt to keep the axes drawn at the origin...
Definition: vtkChartXY.h:461
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:34
data structure to represent key events.
virtual void SetShowLegend(bool visible)
Set/get whether the chart should draw a legend.
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...
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition: vtkChartXY.h:496
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode...
Definition: vtkChartXY.h:444
virtual vtkIdType GetNumberOfAxes()
Get the number of axes in the current chart.
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries...
Definition: vtkChartXY.h:484
bool Paint(vtkContext2D *painter) override=0
Paint event for the chart, called whenever the chart needs to be drawn.
virtual void RecalculateBounds()
Request that the chart recalculates the range of its axes.
dynamic, self-adjusting array of vtkIdType
int vtkIdType
Definition: vtkType.h:338
int HiddenAxisBorder
Size of the border when an axis is hidden.
Definition: vtkChartXY.h:471
bool DrawSelectionPolygon
Should the selection polygon be drawn.
Definition: vtkChartXY.h:449
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition: vtkChartXY.h:433
vtkStdString SeriesName
Definition: vtkChartXY.h:560
virtual void ClearPlots()
Remove all plots from the chart.
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:52
Factory class for drawing 2D charts.
Definition: vtkChart.h:44
virtual bool RemovePlot(vtkIdType index)
Remove the plot at the specified index, returns true if successful, false if the index was invalid...
virtual bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta)
Mouse wheel event, positive delta indicates forward movement of the wheel.
takes care of drawing 2D axes
Definition: vtkAxis.h:68
data structure to represent mouse events.
vtkVector2i ScreenPosition
Definition: vtkChartXY.h:562
virtual void SetAxis(int axisIndex, vtkAxis *)
Set the axis specified by axisIndex.
virtual vtkChartLegend * GetLegend()
Get the legend for the chart, if available.
a simple class to control print indentation
Definition: vtkIndent.h:33
bool DrawBox
Should the box be drawn (could be selection, zoom etc).
Definition: vtkChartXY.h:438
Some derived classes for the different vectors commonly used.
Definition: vtkVector.h:419
virtual bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse)
Mouse button release event.
virtual vtkIdType GetNumberOfPlots()
Get the number of plots the chart contains.
describes linear transformations via a 3x3 matrix
Abstract class for 2D plots.
Definition: vtkPlot.h:46
vtkVector2f Position
Definition: vtkChartXY.h:561
virtual bool KeyPressEvent(const vtkContextKeyEvent &key)
Key press event.
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:418
virtual bool MouseEnterEvent(const vtkContextMouseEvent &mouse)
Mouse enter event.
bool DragPointAlongX
Properties to enable the drag of a point for the ClickAndDrag Action.
Definition: vtkChartXY.h:501
Factory class for drawing XY charts.
Definition: vtkChartXY.h:45
draw the chart legend
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
Small struct used by InvokeEvent to send some information about the point that was clicked on...
Definition: vtkChartXY.h:558
virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse)
Mouse move event.
bool DragPointAlongY
Definition: vtkChartXY.h:502
takes care of drawing the plot grid
Definition: vtkPlotGrid.h:38
virtual bool Hit(const vtkContextMouseEvent &mouse)
Return true if the supplied x, y coordinate is inside the item.
virtual vtkPlot * GetPlot(vtkIdType index)
Get the plot at the specified index, returns null if the index is invalid.
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:490
takes care of drawing 2D axes
bool AutoAxes
Should axes be turned on and off automatically - defaults to on.
Definition: vtkChartXY.h:466
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition: vtkChartXY.h:423
float BarWidthFraction
The fraction of the interval taken up along the x axis by any bars that are drawn on the chart...
Definition: vtkChartXY.h:477
virtual void SetSelectionMethod(int method)
Set the selection method, which controls how selections are handled by the chart. ...
virtual void Update()
Perform any updates to the item that may be necessary before rendering.
virtual bool MouseLeaveEvent(const vtkContextMouseEvent &mouse)
Mouse leave event.
virtual vtkPlot * AddPlot(int type)
Add a plot to the chart, defaults to using the name of the y column.
#define max(a, b)
virtual vtkAxis * GetAxis(int axisIndex)
Get the axis specified by axisIndex.
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition: vtkChartXY.h:454
bool PlotTransformValid
Does the plot area transform need to be recalculated?
Definition: vtkChartXY.h:428