VTK  9.6.1
vtkChartXY.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
20
21#ifndef vtkChartXY_h
22#define vtkChartXY_h
23
24#include "vtkChart.h"
25#include "vtkChartsCoreModule.h" // For export macro
26#include "vtkContextPolygon.h" // For vtkContextPolygon
27#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_6_0
28#include "vtkSmartPointer.h" // For SP ivars
29#include "vtkVector.h" // For vtkVector2f in struct
30#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
31
32#include <vector> // for std::vector
33
34VTK_ABI_NAMESPACE_BEGIN
35class vtkAxis;
36class vtkChartLegend;
37class vtkIdTypeArray;
39class vtkPlot;
40class vtkPlotGrid;
41class vtkTooltipItem;
42
43class vtkChartXYPrivate; // Private class to keep my STL vector in...
44
45VTK_ABI_NAMESPACE_END
46#include <map> // for std::map
47
48VTK_ABI_NAMESPACE_BEGIN
49class VTKCHARTSCORE_EXPORT VTK_MARSHALAUTO vtkChartXY : public vtkChart
50{
51public:
52 vtkTypeMacro(vtkChartXY, vtkChart);
53 void PrintSelf(ostream& os, vtkIndent indent) override;
54
58 static vtkChartXY* New();
59
65 void Update() override;
66
70 bool Paint(vtkContext2D* painter) override;
71
75 vtkPlot* AddPlot(int type) override;
76
80 virtual vtkPlot* AddPlot(int type, unsigned int blockIndex);
81
85 vtkIdType AddPlot(vtkPlot* plot) override;
86
90 virtual vtkIdType AddPlot(vtkPlot* plot, unsigned int blockIndex);
91
96 bool RemovePlot(vtkIdType index) override;
97
101 void ClearPlots() override;
102
106 vtkPlot* GetPlot(vtkIdType index) override;
107
113
120
127 virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
128
135
142 virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
143
148
153
157 void SetPlotCorner(vtkPlot* plot, int corner);
158
164 vtkAxis* GetAxis(int axisIndex) override;
165
171 void SetAxis(int axisIndex, vtkAxis*) override;
172
176 void SetShowLegend(bool visible) override;
177
182
186 virtual void SetTooltip(vtkTooltipItem* tooltip);
187
192
197
202 void RecalculateBounds() override;
203
211 void SetSelectionMethod(int method) override;
212
217
219
222 vtkSetMacro(DrawAxesAtOrigin, bool);
223 vtkGetMacro(DrawAxesAtOrigin, bool);
224 vtkBooleanMacro(DrawAxesAtOrigin, bool);
226
228
232 vtkSetMacro(AutoAxes, bool);
233 vtkGetMacro(AutoAxes, bool);
234 vtkBooleanMacro(AutoAxes, bool);
236
238
241 vtkSetMacro(HiddenAxisBorder, int);
242 vtkGetMacro(HiddenAxisBorder, int);
244
246
251 vtkSetMacro(ForceAxesToBounds, bool);
252 vtkGetMacro(ForceAxesToBounds, bool);
253 vtkBooleanMacro(ForceAxesToBounds, bool);
255
257
263 vtkSetMacro(IgnoreNanInBounds, bool);
264 vtkGetMacro(IgnoreNanInBounds, bool);
265 vtkBooleanMacro(IgnoreNanInBounds, bool);
267
269
276 vtkSetMacro(BarWidthFraction, float);
277 vtkGetMacro(BarWidthFraction, float);
279
281
287 vtkSetMacro(ZoomWithMouseWheel, bool);
288 vtkGetMacro(ZoomWithMouseWheel, bool);
289 vtkBooleanMacro(ZoomWithMouseWheel, bool);
291
293
298 void SetAxisZoom(int index, bool v);
299 bool GetAxisZoom(int index);
301
303
308 vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
309 vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
310 vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
312
314
319 vtkSetMacro(DragPointAlongX, bool);
320 vtkGetMacro(DragPointAlongX, bool);
321 vtkBooleanMacro(DragPointAlongX, bool);
323
325
330 vtkSetMacro(DragPointAlongY, bool);
331 vtkGetMacro(DragPointAlongY, bool);
332 vtkBooleanMacro(DragPointAlongY, bool);
334
339 vtkIdType segmentIndex = -1);
340
344 bool Hit(const vtkContextMouseEvent& mouse) override;
345
349 bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
350
354 bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
355
359 bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
360
364 bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
365
370
374 bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
375
379 bool KeyPressEvent(const vtkContextKeyEvent& key) override;
380
381 typedef std::map<unsigned int, vtkSmartPointer<vtkIdTypeArray>> MapIndexToIds;
382
387 static void MakeSelection(vtkAnnotationLink* link, const MapIndexToIds& selection);
388
392 const std::vector<vtkContextTransform*>& GetTransforms() const;
393
398 static void MakeSelection(vtkAnnotationLink* link, vtkIdTypeArray* selectionIds, vtkPlot* plot);
399
403 static void MinusSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
404
408 static void AddSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
409
413 static void ToggleSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
414
421 static void BuildSelection(vtkAnnotationLink* link, int selectionMode,
422 vtkIdTypeArray* plotSelection, vtkIdTypeArray* oldSelection, vtkPlot* plot);
423
430 static void BuildSelection(
431 int selectionMode, MapIndexToIds& selection, const MapIndexToIds& oldSelection);
432
437 VTK_DEPRECATED_IN_9_6_0("Use use vtkChart::GetSelectionModeFromMouseModifiers instead")
438 static int GetMouseSelectionMode(const vtkContextMouseEvent& mouse, int selectionMode);
439
440protected:
442 ~vtkChartXY() override;
443
448
454
460 virtual bool UpdateLayout(vtkContext2D* painter);
461
467 virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
468
473 virtual void SetLegendPosition(const vtkRectf& rect);
474
479
484
489
494
499
505
510
515
522
527
532
538
545
553
559
564 bool AxisZoom[4];
565
571
577
578private:
579 vtkChartXY(const vtkChartXY&) = delete;
580 void operator=(const vtkChartXY&) = delete;
581
582 vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
583
588 bool DragPoint;
589
593 void CalculateBarPlots();
594
600 bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
601
602 int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
603 vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
604
608 bool RemovePlotFromCorners(vtkPlot* plot);
609
610 void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* originf, float* max);
611
616 void ReleasePlotSelections();
617
621 void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
622 const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
623 vtkContextPolygon& polygon);
624};
625
627
639
640
641VTK_ABI_NAMESPACE_END
642#endif // vtkChartXY_h
takes care of drawing 2D axes
Definition vtkAxis.h:62
draw the chart legend
vtkAxis * GetAxis(int axisIndex) override
Get the axis specified by axisIndex.
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition vtkChartXY.h:514
virtual vtkIdType StackPlotUnder(vtkPlot *plot, vtkPlot *above)
Lowers the plot under the above plot.
vtkIdType AddPlot(vtkPlot *plot) override
Adds a plot to the chart.
bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse) override
Mouse button release event.
static void MakeSelection(vtkAnnotationLink *link, vtkIdTypeArray *selectionIds, vtkPlot *plot)
Populate the annotation link with the supplied selectionIds array, and set the appropriate node prope...
virtual vtkIdType AddPlot(vtkPlot *plot, unsigned int blockIndex)
Adds a plot to the chart holding data specific to a block in a vtkMultiBlockDataSet.
vtkIdType GetNumberOfPlots() override
Get the number of plots the chart contains.
vtkIdType GetNumberOfAxes() override
Get the number of axes in the current chart.
bool DrawBox
Should the box be drawn (could be selection, zoom etc).
Definition vtkChartXY.h:498
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition vtkChartXY.h:478
bool IgnoreNanInBounds
Property to ignore NaN in RecalculateBounds().
Definition vtkChartXY.h:552
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition vtkChartXY.h:504
virtual void SetTooltipInfo(const vtkContextMouseEvent &, const vtkVector2d &, vtkIdType, vtkPlot *, vtkIdType segmentIndex=-1)
Set the information passed to the tooltip.
void RecalculatePlotTransforms()
Recalculate the necessary transforms.
bool RemovePlot(vtkIdType index) override
Remove the plot at the specified index, returns true if successful, false if the index was invalid.
vtkChartLegend * GetLegend() override
Get the vtkChartLegend object that will be displayed by the chart.
vtkPlot * AddPlot(int type) override
Add a plot to the chart, defaults to using the name of the y column.
void Update() override
Perform any updates to the item that may be necessary before rendering.
virtual int GetLegendBorder(vtkContext2D *painter, int axisPosition)
Layout for the legend if it is visible.
virtual vtkIdType GetPlotIndex(vtkPlot *)
Get the index of the specified plot, returns -1 if the plot does not belong to the chart.
bool DragPointAlongY
Definition vtkChartXY.h:576
bool Hit(const vtkContextMouseEvent &mouse) override
Return true if the supplied x, y coordinate is inside the item.
vtkIdType RaisePlot(vtkPlot *plot)
Raises the plot to the top of the plot's stack.
bool DrawAxesAtOrigin
Keep the axes drawn at the origin?
Definition vtkChartXY.h:521
static void AddSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Add the supplied selection from the oldSelection.
static void BuildSelection(int selectionMode, MapIndexToIds &selection, const MapIndexToIds &oldSelection)
Build a selection based on the supplied selectionMode using the new plotSelection and combining it wi...
static void MakeSelection(vtkAnnotationLink *link, const MapIndexToIds &selection)
Populate the selection node in the annotation link coressponding to the give node with the supplied s...
vtkPlot * GetPlot(vtkIdType index) override
Get the plot at the specified index, returns null if the index is invalid.
const std::vector< vtkContextTransform * > & GetTransforms() const
Get the vector of vtkContextTransform.
static vtkChartXY * New()
Creates a 2D Chart object.
bool MouseEnterEvent(const vtkContextMouseEvent &mouse) override
Mouse enter event.
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Key press event.
void SetSelectionMethod(int method) override
Set the selection method, which controls how selections are handled by the chart.
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...
void RecalculateBounds() override
Request that the chart recalculates the range of its axes.
bool AutoAxes
Should axes be turned on and off automatically - defaults to on.
Definition vtkChartXY.h:526
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition vtkChartXY.h:570
void RemovePlotSelections()
Remove all the selection from Plots.
virtual bool UpdateLayout(vtkContext2D *painter)
Update the layout of the chart, this may require the vtkContext2D in order to get font metrics etc.
bool PlotTransformValid
Does the plot area transform need to be recalculated?
Definition vtkChartXY.h:488
virtual vtkPlot * AddPlot(int type, unsigned int blockIndex)
Adds a plot to the chart holding data specific to a block in a vtkMultiBlockDataSet.
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:537
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
void SetAxisZoom(int index, bool v)
Set the behavior of the mouse wheel for individual axes.
virtual vtkIdType StackPlotAbove(vtkPlot *plot, vtkPlot *under)
Raises the plot above the under plot.
virtual vtkTooltipItem * GetTooltip()
Get the vtkTooltipItem object that will be displayed by the chart.
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition vtkChartXY.h:558
void ClearPlots() override
Remove all plots from the chart.
static void ToggleSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Toggle the supplied selection from the oldSelection.
bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta) override
Mouse wheel event, positive delta indicates forward movement of the wheel.
bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse) override
Mouse button down event.
bool DragPointAlongX
Properties to enable the drag of a point for the ClickAndDrag Action.
Definition vtkChartXY.h:575
int GetPlotCorner(vtkPlot *plot)
Figure out which quadrant the plot is in.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetShowLegend(bool visible) override
Set whether the chart should draw a legend.
bool DrawSelectionPolygon
Should the selection polygon be drawn.
Definition vtkChartXY.h:509
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition vtkChartXY.h:493
void SetPlotCorner(vtkPlot *plot, int corner)
Figure out which quadrant the plot is in.
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...
void SetAxis(int axisIndex, vtkAxis *) override
Set the axis specified by axisIndex.
virtual void SetTooltip(vtkTooltipItem *tooltip)
Set the vtkTooltipItem object that will be displayed by the chart.
bool Paint(vtkContext2D *painter) override
Paint event for the chart, called whenever the chart needs to be drawn.
std::map< unsigned int, vtkSmartPointer< vtkIdTypeArray > > MapIndexToIds
Definition vtkChartXY.h:381
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition vtkChartXY.h:483
vtkIdType LowerPlot(vtkPlot *plot)
Lowers the plot to the bottom of the plot's stack.
int HiddenAxisBorder
Size of the border when an axis is hidden.
Definition vtkChartXY.h:531
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition vtkChartXY.h:544
void RecalculatePlotBounds()
Calculate the optimal zoom level such that all of the points to be plotted will fit into the plot are...
static void MinusSelection(vtkIdTypeArray *selection, vtkIdTypeArray *oldSelection)
Subtract the supplied selection from the oldSelection.
static int GetMouseSelectionMode(const vtkContextMouseEvent &mouse, int selectionMode)
Combine the SelectionMode with any mouse modifiers to get an effective selection mode for this click ...
bool MouseLeaveEvent(const vtkContextMouseEvent &mouse) override
Mouse leave event.
bool GetAxisZoom(int index)
Set the behavior of the mouse wheel for individual axes.
bool AxisZoom[4]
Property to enable zooming of individual axes with the mouse wheel.
Definition vtkChartXY.h:564
Class for drawing 2D primitives to a graphical context.
data structure to represent key events.
data structure to represent mouse events.
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:29
Composite dataset that organizes datasets into blocks.
takes care of drawing the plot grid
Definition vtkPlotGrid.h:28
Abstract class for 2D plots.
Definition vtkPlot.h:44
Hold a reference to a vtkObjectBase instance.
Wrapper around std::string to keep symbols short.
takes care of drawing 2D axes
describes linear transformations via a 3x3 matrix
Some derived classes for the different vectors commonly used.
Definition vtkVector.h:411
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition vtkChartXY.h:633
vtkVector2f Position
Definition vtkChartXY.h:635
vtkVector2i ScreenPosition
Definition vtkChartXY.h:636
vtkStdString SeriesName
Definition vtkChartXY.h:634
#define VTK_DEPRECATED_IN_9_6_0(reason)
int vtkIdType
Definition vtkType.h:368
#define VTK_MARSHALAUTO
#define max(a, b)