VTK  9.2.6
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 
142 #ifndef vtkChartXY_h
143 #define vtkChartXY_h
144 
145 #include "vtkChart.h"
146 #include "vtkChartsCoreModule.h" // For export macro
147 #include "vtkContextPolygon.h" // For vtkContextPolygon
148 #include "vtkSmartPointer.h" // For SP ivars
149 #include "vtkVector.h" // For vtkVector2f in struct
150 
151 #include <vector> // for std::vector
152 
153 class vtkAxis;
154 class vtkChartLegend;
155 class vtkIdTypeArray;
157 class vtkPlot;
158 class vtkPlotGrid;
159 class vtkTooltipItem;
160 
161 class vtkChartXYPrivate; // Private class to keep my STL vector in...
162 
163 #include <map> // for std::map
164 
165 class VTKCHARTSCORE_EXPORT vtkChartXY : public vtkChart
166 {
167 public:
168  vtkTypeMacro(vtkChartXY, vtkChart);
169  void PrintSelf(ostream& os, vtkIndent indent) override;
170 
174  static vtkChartXY* New();
175 
181  void Update() override;
182 
186  bool Paint(vtkContext2D* painter) override;
187 
191  vtkPlot* AddPlot(int type) override;
192 
196  virtual vtkPlot* AddPlot(int type, unsigned int blockIndex);
197 
201  vtkIdType AddPlot(vtkPlot* plot) override;
202 
206  virtual vtkIdType AddPlot(vtkPlot* plot, unsigned int blockIndex);
207 
212  bool RemovePlot(vtkIdType index) override;
213 
217  void ClearPlots() override;
218 
223 
229 
236 
243  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
244 
251 
258  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
259 
264 
268  int GetPlotCorner(vtkPlot* plot);
269 
273  void SetPlotCorner(vtkPlot* plot, int corner);
274 
280  vtkAxis* GetAxis(int axisIndex) override;
281 
287  void SetAxis(int axisIndex, vtkAxis*) override;
288 
292  void SetShowLegend(bool visible) override;
293 
298 
302  virtual void SetTooltip(vtkTooltipItem* tooltip);
303 
308 
313 
318  void RecalculateBounds() override;
319 
327  void SetSelectionMethod(int method) override;
328 
333 
335 
338  vtkSetMacro(DrawAxesAtOrigin, bool);
339  vtkGetMacro(DrawAxesAtOrigin, bool);
340  vtkBooleanMacro(DrawAxesAtOrigin, bool);
342 
344 
348  vtkSetMacro(AutoAxes, bool);
349  vtkGetMacro(AutoAxes, bool);
350  vtkBooleanMacro(AutoAxes, bool);
352 
354 
357  vtkSetMacro(HiddenAxisBorder, int);
358  vtkGetMacro(HiddenAxisBorder, int);
360 
362 
367  vtkSetMacro(ForceAxesToBounds, bool);
368  vtkGetMacro(ForceAxesToBounds, bool);
369  vtkBooleanMacro(ForceAxesToBounds, bool);
371 
373 
379  vtkSetMacro(IgnoreNanInBounds, bool);
380  vtkGetMacro(IgnoreNanInBounds, bool);
381  vtkBooleanMacro(IgnoreNanInBounds, bool);
383 
385 
392  vtkSetMacro(BarWidthFraction, float);
393  vtkGetMacro(BarWidthFraction, float);
395 
397 
403  vtkSetMacro(ZoomWithMouseWheel, bool);
404  vtkGetMacro(ZoomWithMouseWheel, bool);
405  vtkBooleanMacro(ZoomWithMouseWheel, bool);
407 
409 
414  void SetAxisZoom(int index, bool v);
415  bool GetAxisZoom(int index);
417 
419 
424  vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
425  vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
426  vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
428 
430 
435  vtkSetMacro(DragPointAlongX, bool);
436  vtkGetMacro(DragPointAlongX, bool);
437  vtkBooleanMacro(DragPointAlongX, bool);
439 
441 
446  vtkSetMacro(DragPointAlongY, bool);
447  vtkGetMacro(DragPointAlongY, bool);
448  vtkBooleanMacro(DragPointAlongY, bool);
450 
455  vtkIdType segmentIndex = -1);
456 
460  bool Hit(const vtkContextMouseEvent& mouse) override;
461 
465  bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
466 
470  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
471 
475  bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
476 
480  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
481 
485  bool MouseButtonReleaseEvent(const vtkContextMouseEvent& mouse) override;
486 
490  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
491 
495  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
496 
497  typedef std::map<unsigned int, vtkSmartPointer<vtkIdTypeArray>> MapIndexToIds;
498 
503  static void MakeSelection(vtkAnnotationLink* link, const MapIndexToIds& selection);
504 
508  const std::vector<vtkContextTransform*>& GetTransforms() const;
509 
514  static void MakeSelection(vtkAnnotationLink* link, vtkIdTypeArray* selectionIds, vtkPlot* plot);
515 
519  static void MinusSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
520 
524  static void AddSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
525 
529  static void ToggleSelection(vtkIdTypeArray* selection, vtkIdTypeArray* oldSelection);
530 
537  static void BuildSelection(vtkAnnotationLink* link, int selectionMode,
538  vtkIdTypeArray* plotSelection, vtkIdTypeArray* oldSelection, vtkPlot* plot);
539 
546  static void BuildSelection(
547  int selectionMode, MapIndexToIds& selection, const MapIndexToIds& oldSelection);
548 
553  static int GetMouseSelectionMode(const vtkContextMouseEvent& mouse, int selectionMode);
554 
555 protected:
557  ~vtkChartXY() override;
558 
563 
569 
575  virtual bool UpdateLayout(vtkContext2D* painter);
576 
582  virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
583 
588  virtual void SetLegendPosition(const vtkRectf& rect);
589 
594 
599 
604 
609 
613  bool DrawBox;
614 
620 
625 
630 
637 
641  bool AutoAxes;
642 
647 
653 
660 
668 
674 
679  bool AxisZoom[4];
680 
686 
692 
693 private:
694  vtkChartXY(const vtkChartXY&) = delete;
695  void operator=(const vtkChartXY&) = delete;
696 
697  vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
698 
703  bool DragPoint;
704 
708  void CalculateBarPlots();
709 
715  bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
716 
717  int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
718  vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
719 
723  bool RemovePlotFromCorners(vtkPlot* plot);
724 
725  void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* originf, float* max);
726 
731  void ReleasePlotSelections();
732 
736  void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
737  const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
738  vtkContextPolygon& polygon);
739 };
740 
742 
748 {
752  int Index;
753 };
755 
756 #endif // vtkChartXY_h
takes care of drawing 2D axes
Definition: vtkAxis.h:181
draw the chart legend
Factory class for drawing XY charts.
Definition: vtkChartXY.h:166
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition: vtkChartXY.h:629
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:613
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:593
bool IgnoreNanInBounds
Property to ignore NaN in RecalculateBounds().
Definition: vtkChartXY.h:667
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition: vtkChartXY.h:619
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:691
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:636
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:641
bool AdjustLowerBoundForLogPlot
Property to adjust the minimum of a logarithmic axis to be greater than 0, regardless of the minimum ...
Definition: vtkChartXY.h:685
~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:603
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:652
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.
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:673
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:690
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:624
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition: vtkChartXY.h:608
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:497
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition: vtkChartXY.h:598
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:646
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition: vtkChartXY.h:659
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.
bool GetAxisZoom(int index)
Set the behavior of the mouse wheel for individual axes.
Factory class for drawing 2D charts.
Definition: vtkChart.h:52
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:77
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:119
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:163
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:108
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:481
@ 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:748
vtkVector2f Position
Definition: vtkChartXY.h:750
vtkVector2i ScreenPosition
Definition: vtkChartXY.h:751
vtkStdString SeriesName
Definition: vtkChartXY.h:749
int vtkIdType
Definition: vtkType.h:332
#define max(a, b)