VTK  9.3.20241007
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
130#ifndef vtkChartXY_h
131#define vtkChartXY_h
132
133#include "vtkChart.h"
134#include "vtkChartsCoreModule.h" // For export macro
135#include "vtkContextPolygon.h" // For vtkContextPolygon
136#include "vtkSmartPointer.h" // For SP ivars
137#include "vtkVector.h" // For vtkVector2f in struct
138#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
139
140#include <vector> // for std::vector
141
142VTK_ABI_NAMESPACE_BEGIN
143class vtkAxis;
144class vtkChartLegend;
145class vtkIdTypeArray;
147class vtkPlot;
148class vtkPlotGrid;
149class vtkTooltipItem;
150
151class vtkChartXYPrivate; // Private class to keep my STL vector in...
152
153VTK_ABI_NAMESPACE_END
154#include <map> // for std::map
155
156VTK_ABI_NAMESPACE_BEGIN
157class VTKCHARTSCORE_EXPORT VTK_MARSHALAUTO vtkChartXY : public vtkChart
158{
159public:
160 vtkTypeMacro(vtkChartXY, vtkChart);
161 void PrintSelf(ostream& os, vtkIndent indent) override;
162
166 static vtkChartXY* New();
167
173 void Update() override;
174
178 bool Paint(vtkContext2D* painter) override;
179
183 vtkPlot* AddPlot(int type) override;
184
188 virtual vtkPlot* AddPlot(int type, unsigned int blockIndex);
189
193 vtkIdType AddPlot(vtkPlot* plot) override;
194
198 virtual vtkIdType AddPlot(vtkPlot* plot, unsigned int blockIndex);
199
204 bool RemovePlot(vtkIdType index) override;
205
209 void ClearPlots() override;
210
214 vtkPlot* GetPlot(vtkIdType index) override;
215
221
228
235 virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
236
243
250 virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
251
256
261
265 void SetPlotCorner(vtkPlot* plot, int corner);
266
272 vtkAxis* GetAxis(int axisIndex) override;
273
279 void SetAxis(int axisIndex, vtkAxis*) override;
280
284 void SetShowLegend(bool visible) override;
285
290
294 virtual void SetTooltip(vtkTooltipItem* tooltip);
295
300
305
310 void RecalculateBounds() override;
311
319 void SetSelectionMethod(int method) override;
320
325
327
330 vtkSetMacro(DrawAxesAtOrigin, bool);
331 vtkGetMacro(DrawAxesAtOrigin, bool);
332 vtkBooleanMacro(DrawAxesAtOrigin, bool);
334
336
340 vtkSetMacro(AutoAxes, bool);
341 vtkGetMacro(AutoAxes, bool);
342 vtkBooleanMacro(AutoAxes, bool);
344
346
349 vtkSetMacro(HiddenAxisBorder, int);
350 vtkGetMacro(HiddenAxisBorder, int);
352
354
359 vtkSetMacro(ForceAxesToBounds, bool);
360 vtkGetMacro(ForceAxesToBounds, bool);
361 vtkBooleanMacro(ForceAxesToBounds, bool);
363
365
371 vtkSetMacro(IgnoreNanInBounds, bool);
372 vtkGetMacro(IgnoreNanInBounds, bool);
373 vtkBooleanMacro(IgnoreNanInBounds, bool);
375
377
384 vtkSetMacro(BarWidthFraction, float);
385 vtkGetMacro(BarWidthFraction, float);
387
389
395 vtkSetMacro(ZoomWithMouseWheel, bool);
396 vtkGetMacro(ZoomWithMouseWheel, bool);
397 vtkBooleanMacro(ZoomWithMouseWheel, bool);
399
401
406 void SetAxisZoom(int index, bool v);
407 bool GetAxisZoom(int index);
409
411
416 vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
417 vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
418 vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
420
422
427 vtkSetMacro(DragPointAlongX, bool);
428 vtkGetMacro(DragPointAlongX, bool);
429 vtkBooleanMacro(DragPointAlongX, bool);
431
433
438 vtkSetMacro(DragPointAlongY, bool);
439 vtkGetMacro(DragPointAlongY, bool);
440 vtkBooleanMacro(DragPointAlongY, bool);
442
447 vtkIdType segmentIndex = -1);
448
452 bool Hit(const vtkContextMouseEvent& mouse) override;
453
457 bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
458
462 bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
463
467 bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
468
472 bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
473
478
482 bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
483
487 bool KeyPressEvent(const vtkContextKeyEvent& key) override;
488
489 typedef std::map<unsigned int, vtkSmartPointer<vtkIdTypeArray>> MapIndexToIds;
490
495 static void MakeSelection(vtkAnnotationLink* link, const MapIndexToIds& selection);
496
500 const std::vector<vtkContextTransform*>& GetTransforms() const;
501
506 static void MakeSelection(vtkAnnotationLink* link, vtkIdTypeArray* selectionIds, vtkPlot* plot);
507
511 static void MinusSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
512
516 static void AddSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
517
521 static void ToggleSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
522
529 static void BuildSelection(vtkAnnotationLink* link, int selectionMode,
530 vtkIdTypeArray* plotSelection, vtkIdTypeArray* oldSelection, vtkPlot* plot);
531
538 static void BuildSelection(
539 int selectionMode, MapIndexToIds& selection, const MapIndexToIds& oldSelection);
540
545 static int GetMouseSelectionMode(const vtkContextMouseEvent& mouse, int selectionMode);
546
547protected:
549 ~vtkChartXY() override;
550
555
561
567 virtual bool UpdateLayout(vtkContext2D* painter);
568
574 virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
575
580 virtual void SetLegendPosition(const vtkRectf& rect);
581
586
591
596
601
606
612
617
622
629
634
639
645
652
660
666
671 bool AxisZoom[4];
672
678
684
685private:
686 vtkChartXY(const vtkChartXY&) = delete;
687 void operator=(const vtkChartXY&) = delete;
688
689 vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
690
695 bool DragPoint;
696
700 void CalculateBarPlots();
701
707 bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
708
709 int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
710 vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
711
715 bool RemovePlotFromCorners(vtkPlot* plot);
716
717 void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* originf, float* max);
718
723 void ReleasePlotSelections();
724
728 void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
729 const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
730 vtkContextPolygon& polygon);
731};
732
734
740{
744 int Index;
745};
747
748VTK_ABI_NAMESPACE_END
749#endif // vtkChartXY_h
takes care of drawing 2D axes
Definition vtkAxis.h:171
draw the chart legend
Factory class for drawing XY charts.
Definition vtkChartXY.h:158
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:621
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:605
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition vtkChartXY.h:585
bool IgnoreNanInBounds
Property to ignore NaN in RecalculateBounds().
Definition vtkChartXY.h:659
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition vtkChartXY.h:611
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:683
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? This will attempt to keep the axes drawn at the origin,...
Definition vtkChartXY.h:628
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:633
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition vtkChartXY.h:677
~vtkChartXY() override
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:595
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:644
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:665
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:682
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:616
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition vtkChartXY.h:600
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:489
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition vtkChartXY.h:590
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:638
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition vtkChartXY.h:651
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.
Factory class for drawing 2D charts.
Definition vtkChart.h:151
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:108
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:154
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:440
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition vtkChartXY.h:740
vtkVector2f Position
Definition vtkChartXY.h:742
vtkVector2i ScreenPosition
Definition vtkChartXY.h:743
vtkStdString SeriesName
Definition vtkChartXY.h:741
int vtkIdType
Definition vtkType.h:315
#define VTK_MARSHALAUTO
#define max(a, b)