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 
93 
99 
106 
113  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
114 
121 
128  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
129 
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 
168 
172  virtual void SetTooltip(vtkTooltipItem* tooltip);
173 
178 
183 
188  void RecalculateBounds() override;
189 
197  void SetSelectionMethod(int method) override;
198 
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 
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:
382  ~vtkChartXY() override;
383 
388 
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
vtkChart
Factory class for drawing 2D charts.
Definition: vtkChart.h:45
vtkChartXY::MouseBox
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition: vtkChartXY.h:433
vtkContextPolygon.h
vtkContextMouseEvent
data structure to represent mouse events.
Definition: vtkContextMouseEvent.h:35
vtkChartXY::MouseLeaveEvent
bool MouseLeaveEvent(const vtkContextMouseEvent &mouse) override
Mouse leave event.
vtkChartXY::GetPlotIndex
virtual vtkIdType GetPlotIndex(vtkPlot *)
Get the index of the specified plot, returns -1 if the plot does not belong to the chart.
vtkContextKeyEvent
data structure to represent key events.
Definition: vtkContextKeyEvent.h:35
vtkChartXY::StackPlotAbove
virtual vtkIdType StackPlotAbove(vtkPlot *plot, vtkPlot *under)
Raises the plot above the under plot.
vtkChartXY::Legend
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:418
vtkChartXY::MouseButtonReleaseEvent
bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse) override
Mouse button release event.
vtkChartXY::GetNumberOfAxes
vtkIdType GetNumberOfAxes() override
Get the number of axes in the current chart.
vtkChartXY::AddSelection
static void AddSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Add the supplied selection from the oldSelection.
vtkChartXY::~vtkChartXY
~vtkChartXY() override
vtkChartXY::SetShowLegend
void SetShowLegend(bool visible) override
Set whether the chart should draw a legend.
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkChartPlotData
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition: vtkChartXY.h:559
vtkChartXY::RaisePlot
vtkIdType RaisePlot(vtkPlot *plot)
Raises the plot to the top of the plot's stack.
vtkChartXY::GetMouseSelectionMode
static int GetMouseSelectionMode(const vtkContextMouseEvent &mouse, int selectionMode)
Combine the SelectionMode with any mouse modifiers to get an effective selection mode for this click ...
vtkTransform2D
describes linear transformations via a 3x3 matrix
Definition: vtkTransform2D.h:46
vtkChartXY::MouseWheelEvent
bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta) override
Mouse wheel event, positive delta indicates forward movement of the wheel.
vtkX3D::key
@ key
Definition: vtkX3D.h:263
vtkChartLegend
draw the chart legend
Definition: vtkChartLegend.h:40
vtkChart.h
vtkChartXY::Hit
bool Hit(const vtkContextMouseEvent &mouse) override
Return true if the supplied x, y coordinate is inside the item.
vtkChartPlotData::SeriesName
vtkStdString SeriesName
Definition: vtkChartXY.h:560
vtkChartXY::Tooltip
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition: vtkChartXY.h:423
vtkSmartPointer< vtkChartLegend >
vtkVector.h
vtkChartXY::SetLegendPosition
virtual void SetLegendPosition(const vtkRectf &rect)
Called after the edges of the chart are decided, set the position of the legend, depends upon its ali...
vtkChartXY::LowerPlot
vtkIdType LowerPlot(vtkPlot *plot)
Lowers the plot to the bottom of the plot's stack.
vtkTooltipItem
takes care of drawing 2D axes
Definition: vtkTooltipItem.h:40
vtkContext2D
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:53
vtkChartXY::DragPointAlongX
bool DragPointAlongX
Properties to enable the drag of a point for the ClickAndDrag Action.
Definition: vtkChartXY.h:501
vtkChartXY::MouseEnterEvent
bool MouseEnterEvent(const vtkContextMouseEvent &mouse) override
Mouse enter event.
vtkPlot
Abstract class for 2D plots.
Definition: vtkPlot.h:47
vtkChartXY::AutoAxes
bool AutoAxes
Should axes be turned on and off automatically - defaults to on.
Definition: vtkChartXY.h:466
vtkChartXY::BarWidthFraction
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
vtkChartXY::DrawNearestPoint
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition: vtkChartXY.h:454
vtkChartXY::GetPlot
vtkPlot * GetPlot(vtkIdType index) override
Get the plot at the specified index, returns null if the index is invalid.
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkVector2d
Definition: vtkVector.h:445
vtkChartXY::Update
void Update() override
Perform any updates to the item that may be necessary before rendering.
vtkChartXY::ZoomWithMouseWheel
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:490
vtkX3D::position
@ position
Definition: vtkX3D.h:267
vtkChartXY::KeyPressEvent
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Key press event.
vtkChartXY::DragPointAlongY
bool DragPointAlongY
Definition: vtkChartXY.h:502
vtkChartXY::MinusSelection
static void MinusSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Subtract the supplied selection from the oldSelection.
vtkChartXY::DrawAxesAtOrigin
bool DrawAxesAtOrigin
Keep the axes drawn at the origin? This will attempt to keep the axes drawn at the origin,...
Definition: vtkChartXY.h:461
vtkChartXY::GetNumberOfPlots
vtkIdType GetNumberOfPlots() override
Get the number of plots the chart contains.
vtkChartXY::RecalculatePlotBounds
void RecalculatePlotBounds()
Calculate the optimal zoom level such that all of the points to be plotted will fit into the plot are...
vtkChartXY::MakeSelection
static void MakeSelection(vtkAnnotationLink *link, vtkIdTypeArray *selectionIds, vtkPlot *plot)
Populate the annotation link with the supplied selectionIds array, and set the appropriate node prope...
vtkChartXY::New
static vtkChartXY * New()
Creates a 2D Chart object.
vtkChartXY::SetSelectionMethod
void SetSelectionMethod(int method) override
Set the selection method, which controls how selections are handled by the chart.
vtkChartXY::GetLegend
vtkChartLegend * GetLegend() override
Get the vtkChartLegend object that will be displayed by the chart.
vtkPlotGrid
takes care of drawing the plot grid
Definition: vtkPlotGrid.h:39
vtkChartXY::AdjustLowerBoundForLogPlot
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition: vtkChartXY.h:496
vtkChartXY::ForceAxesToBounds
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition: vtkChartXY.h:484
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:34
vtkChartXY::PlotTransformValid
bool PlotTransformValid
Does the plot area transform need to be recalculated?
Definition: vtkChartXY.h:428
vtkChartXY::GetTooltip
virtual vtkTooltipItem * GetTooltip()
Get the vtkTooltipItem object that will be displayed by the chart.
vtkChartXY::MouseButtonPressEvent
bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse) override
Mouse button down event.
vtkChartXY::AddPlot
vtkIdType AddPlot(vtkPlot *plot) override
Adds a plot to the chart.
vtkChartXY::RecalculatePlotTransforms
void RecalculatePlotTransforms()
Recalculate the necessary transforms.
vtkSmartPointer.h
vtkChartXY::BuildSelection
static void BuildSelection(vtkAnnotationLink *link, int selectionMode, vtkIdTypeArray *plotSelection, vtkIdTypeArray *oldSelection, vtkPlot *plot)
Build a selection based on the supplied selectionMode using the new plotSelection and combining it wi...
vtkChartXY::GetAxis
vtkAxis * GetAxis(int axisIndex) override
Get the axis specified by axisIndex.
vtkChartXY::RemovePlot
bool RemovePlot(vtkIdType index) override
Remove the plot at the specified index, returns true if successful, false if the index was invalid.
vtkChartXY::MouseMoveEvent
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
vtkContextPolygon
Definition: vtkContextPolygon.h:27
vtkChartXY::GetLegendBorder
virtual int GetLegendBorder(vtkContext2D *painter, int axisPosition)
Layout for the legend if it is visible.
vtkChartXY::ClearPlots
void ClearPlots() override
Remove all plots from the chart.
vtkChartPlotData::ScreenPosition
vtkVector2i ScreenPosition
Definition: vtkChartXY.h:562
vtkChartXY::HiddenAxisBorder
int HiddenAxisBorder
Size of the border when an axis is hidden.
Definition: vtkChartXY.h:471
vtkChartXY::RemovePlotSelections
void RemovePlotSelections()
Remove all the selection from Plots.
vtkIdTypeArray
dynamic, self-adjusting array of vtkIdType
Definition: vtkIdTypeArray.h:36
vtkAxis
takes care of drawing 2D axes
Definition: vtkAxis.h:69
vtkChartXY::SetTooltipInfo
virtual void SetTooltipInfo(const vtkContextMouseEvent &, const vtkVector2d &, vtkIdType, vtkPlot *, vtkIdType segmentIndex=-1)
Set the information passed to the tooltip.
vtkChartPlotData::Position
vtkVector2f Position
Definition: vtkChartXY.h:561
vtkChartXY::SelectionPolygon
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition: vtkChartXY.h:444
vtkChartXY::UpdateLayout
virtual bool UpdateLayout(vtkContext2D *painter)
Update the layout of the chart, this may require the vtkContext2D in order to get font metrics etc.
vtkVector2i
Some derived classes for the different vectors commonly used.
Definition: vtkVector.h:420
vtkChartPlotData::Index
int Index
Definition: vtkChartXY.h:563
vtkChartXY::SetAxis
virtual void SetAxis(int axisIndex, vtkAxis *) override
Set the axis specified by axisIndex.
vtkChartXY
Factory class for drawing XY charts.
Definition: vtkChartXY.h:46
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:35
vtkChartXY::GetPlotCorner
int GetPlotCorner(vtkPlot *plot)
Figure out which quadrant the plot is in.
vtkChartXY::DrawSelectionPolygon
bool DrawSelectionPolygon
Should the selection polygon be drawn.
Definition: vtkChartXY.h:449
vtkChartXY::AddPlot
vtkPlot * AddPlot(int type) override
Add a plot to the chart, defaults to using the name of the y column.
vtkChartXY::RecalculateBounds
void RecalculateBounds() override
Request that the chart recalculates the range of its axes.
vtkChartXY::DrawBox
bool DrawBox
Should the box be drawn (could be selection, zoom etc).
Definition: vtkChartXY.h:438
vtkX3D::index
@ index
Definition: vtkX3D.h:252
vtkChartXY::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkRectf
Definition: vtkRect.h:327
vtkVector2f
Definition: vtkVector.h:433
vtkChartXY::StackPlotUnder
virtual vtkIdType StackPlotUnder(vtkPlot *plot, vtkPlot *above)
Lowers the plot under the above plot.
vtkChartXY::SetPlotCorner
void SetPlotCorner(vtkPlot *plot, int corner)
Figure out which quadrant the plot is in.
vtkChartXY::ToggleSelection
static void ToggleSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Toggle the supplied selection from the oldSelection.
vtkChartXY::vtkChartXY
vtkChartXY()
vtkChartXY::Paint
bool Paint(vtkContext2D *painter) override
Paint event for the chart, called whenever the chart needs to be drawn.
vtkChartXY::SetTooltip
virtual void SetTooltip(vtkTooltipItem *tooltip)
Set the vtkTooltipItem object that will be displayed by the chart.