VTK  9.1.0
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 
136 #ifndef vtkChartXY_h
137 #define vtkChartXY_h
138 
139 #include "vtkChart.h"
140 #include "vtkChartsCoreModule.h" // For export macro
141 #include "vtkContextPolygon.h" // For vtkContextPolygon
142 #include "vtkSmartPointer.h" // For SP ivars
143 #include "vtkVector.h" // For vtkVector2f in struct
144 
145 #include <vector> // for std::vector
146 
147 class vtkAxis;
148 class vtkChartLegend;
149 class vtkIdTypeArray;
151 class vtkPlot;
152 class vtkPlotGrid;
153 class vtkTooltipItem;
154 
155 class vtkChartXYPrivate; // Private class to keep my STL vector in...
156 
157 #include <map> // for std::map
158 
159 class VTKCHARTSCORE_EXPORT vtkChartXY : public vtkChart
160 {
161 public:
162  vtkTypeMacro(vtkChartXY, vtkChart);
163  void PrintSelf(ostream& os, vtkIndent indent) override;
164 
168  static vtkChartXY* New();
169 
175  void Update() override;
176 
180  bool Paint(vtkContext2D* painter) override;
181 
185  vtkPlot* AddPlot(int type) override;
186 
190  virtual vtkPlot* AddPlot(int type, unsigned int blockIndex);
191 
195  vtkIdType AddPlot(vtkPlot* plot) override;
196 
200  virtual vtkIdType AddPlot(vtkPlot* plot, unsigned int blockIndex);
201 
206  bool RemovePlot(vtkIdType index) override;
207 
211  void ClearPlots() override;
212 
217 
223 
230 
237  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
238 
245 
252  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
253 
258 
262  int GetPlotCorner(vtkPlot* plot);
263 
267  void SetPlotCorner(vtkPlot* plot, int corner);
268 
274  vtkAxis* GetAxis(int axisIndex) override;
275 
281  void SetAxis(int axisIndex, vtkAxis*) override;
282 
286  void SetShowLegend(bool visible) override;
287 
292 
296  virtual void SetTooltip(vtkTooltipItem* tooltip);
297 
302 
307 
312  void RecalculateBounds() override;
313 
321  void SetSelectionMethod(int method) override;
322 
327 
329 
332  vtkSetMacro(DrawAxesAtOrigin, bool);
333  vtkGetMacro(DrawAxesAtOrigin, bool);
334  vtkBooleanMacro(DrawAxesAtOrigin, bool);
336 
338 
342  vtkSetMacro(AutoAxes, bool);
343  vtkGetMacro(AutoAxes, bool);
344  vtkBooleanMacro(AutoAxes, bool);
346 
348 
351  vtkSetMacro(HiddenAxisBorder, int);
352  vtkGetMacro(HiddenAxisBorder, int);
354 
356 
361  vtkSetMacro(ForceAxesToBounds, bool);
362  vtkGetMacro(ForceAxesToBounds, bool);
363  vtkBooleanMacro(ForceAxesToBounds, bool);
365 
367 
373  vtkSetMacro(IgnoreNanInBounds, bool);
374  vtkGetMacro(IgnoreNanInBounds, bool);
375  vtkBooleanMacro(IgnoreNanInBounds, bool);
377 
379 
386  vtkSetMacro(BarWidthFraction, float);
387  vtkGetMacro(BarWidthFraction, float);
389 
391 
397  vtkSetMacro(ZoomWithMouseWheel, bool);
398  vtkGetMacro(ZoomWithMouseWheel, bool);
399  vtkBooleanMacro(ZoomWithMouseWheel, bool);
401 
403 
408  vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
409  vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
410  vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
412 
414 
419  vtkSetMacro(DragPointAlongX, bool);
420  vtkGetMacro(DragPointAlongX, bool);
421  vtkBooleanMacro(DragPointAlongX, bool);
423 
425 
430  vtkSetMacro(DragPointAlongY, bool);
431  vtkGetMacro(DragPointAlongY, bool);
432  vtkBooleanMacro(DragPointAlongY, bool);
434 
439  vtkIdType segmentIndex = -1);
440 
444  bool Hit(const vtkContextMouseEvent& mouse) override;
445 
449  bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
450 
454  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
455 
459  bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
460 
464  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
465 
469  bool MouseButtonReleaseEvent(const vtkContextMouseEvent& mouse) override;
470 
474  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
475 
479  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
480 
481  typedef std::map<unsigned int, vtkSmartPointer<vtkIdTypeArray>> MapIndexToIds;
482 
487  static void MakeSelection(vtkAnnotationLink* link, const MapIndexToIds& selection);
488 
492  const std::vector<vtkContextTransform*>& GetTransforms() const;
493 
498  static void MakeSelection(vtkAnnotationLink* link, vtkIdTypeArray* selectionIds, vtkPlot* plot);
499 
503  static void MinusSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
504 
508  static void AddSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
509 
513  static void ToggleSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
514 
521  static void BuildSelection(vtkAnnotationLink* link, int selectionMode,
522  vtkIdTypeArray* plotSelection, vtkIdTypeArray* oldSelection, vtkPlot* plot);
523 
530  static void BuildSelection(
531  int selectionMode, MapIndexToIds& selection, const MapIndexToIds& oldSelection);
532 
537  static int GetMouseSelectionMode(const vtkContextMouseEvent& mouse, int selectionMode);
538 
539 protected:
541  ~vtkChartXY() override;
542 
547 
553 
559  virtual bool UpdateLayout(vtkContext2D* painter);
560 
566  virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
567 
572  virtual void SetLegendPosition(const vtkRectf& rect);
573 
578 
583 
588 
593 
597  bool DrawBox;
598 
604 
609 
614 
621 
625  bool AutoAxes;
626 
631 
637 
644 
652 
658 
664 
670 
671 private:
672  vtkChartXY(const vtkChartXY&) = delete;
673  void operator=(const vtkChartXY&) = delete;
674 
675  vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
676 
681  bool DragPoint;
682 
686  void CalculateBarPlots();
687 
693  bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
694 
695  int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
696  vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
697 
701  bool RemovePlotFromCorners(vtkPlot* plot);
702 
703  void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* originf, float* max);
704 
709  void ReleasePlotSelections();
710 
714  void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
715  const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
716  vtkContextPolygon& polygon);
717 };
718 
720 
726 {
730  int Index;
731 };
733 
734 #endif // vtkChartXY_h
takes care of drawing 2D axes
Definition: vtkAxis.h:178
draw the chart legend
Factory class for drawing XY charts.
Definition: vtkChartXY.h:160
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition: vtkChartXY.h:613
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.
vtkPlot * AddPlot(int type) override
Add a plot to the chart, defaults to using the name of the y column.
vtkChartLegend * GetLegend() override
Get the vtkChartLegend object that will be displayed by 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:597
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:577
bool IgnoreNanInBounds
Property to ignore NaN in RecalculateBounds().
Definition: vtkChartXY.h:651
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition: vtkChartXY.h:603
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.
void Update() override
Perform any updates to the item that may be necessary before rendering.
const std::vector< vtkContextTransform * > & GetTransforms() const
Get the vector of vtkContextTransform.
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.
virtual vtkPlot * AddPlot(int type, unsigned int blockIndex)
Adds a plot to the chart holding data specific to a block in a vtkMultiBlockDataSet.
bool DragPointAlongY
Definition: vtkChartXY.h:669
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:620
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...
vtkAxis * GetAxis(int axisIndex) override
Get the axis specified by axisIndex.
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...
static vtkChartXY * New()
Creates a 2D Chart object.
vtkPlot * GetPlot(vtkIdType index) override
Get the plot at the specified index, returns null if the index is invalid.
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:625
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition: vtkChartXY.h:663
~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:587
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:636
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
virtual vtkIdType StackPlotAbove(vtkPlot *plot, vtkPlot *under)
Raises the plot above the under plot.
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:657
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:668
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:608
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition: vtkChartXY.h:592
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:481
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition: vtkChartXY.h:582
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:630
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition: vtkChartXY.h:643
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.
virtual vtkTooltipItem * GetTooltip()
Get the vtkTooltipItem object that will be displayed by the chart.
Factory class for drawing 2D charts.
Definition: vtkChart.h:45
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:73
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:113
Composite dataset that organizes datasets into blocks.
takes care of drawing the plot grid
Definition: vtkPlotGrid.h:39
Abstract class for 2D plots.
Definition: vtkPlot.h:157
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
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:478
@ key
Definition: vtkX3D.h:263
@ type
Definition: vtkX3D.h:522
@ position
Definition: vtkX3D.h:267
@ index
Definition: vtkX3D.h:252
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition: vtkChartXY.h:726
vtkVector2f Position
Definition: vtkChartXY.h:728
vtkVector2i ScreenPosition
Definition: vtkChartXY.h:729
vtkStdString SeriesName
Definition: vtkChartXY.h:727
int vtkIdType
Definition: vtkType.h:332
#define max(a, b)